Если тебе плюют в спину, значит ты впереди!
Конфуций

Меню навигации для мобильных

Показометр на STM32 для блока питания

Автор zenon, 22 Март, 2024, 18:44

« предыдущая - следующая »

zenon

Код для прерывания сообразил.
void adc_init_42(void)
{
  RCC->APB2ENR |= RCC_APB2RSTR_ADCRST; // Enable ADC clock 
  ADC1->CR &= ~ADC_CR_ADEN;            // turn off ADC: 0
  
  ADC1->CR |= ADC_CR_ADCAL;             // start ADC calibration
  while (ADC1->CR & ADC_CR_ADCAL)   {}; // ждем когда откалибруется
  ADC1->CR |= ADC_CR_ADEN;              // power up ADC
  while (ADC1->ISR & ADC_ISR_ADRDY) {}; // wait until ADC ready
  
  ADC1->CFGR1 |= ADC_CFGR1_CONT; // Continuous conversion ADC_CFGR1_SCANDIR;

  ADC1->SMPR |= ADC_SMPR_SMP_0 | ADC_SMPR_SMP_1 | ADC_SMPR_SMP_2; // Время выборки (Select a sampling mode of 111 i.e. 239.5 ADC clk to be greater than 17.1us)  

  ADC1->CHSELR = ADC_CHSELR_CHSEL5 | ADC_CHSELR_CHSEL6;
 
  ADC1->IER |= ADC_IER_EOCIE;     // Enable ADC interrupts
  NVIC_EnableIRQ(ADC1_COMP_IRQn); // Enable IRQ on NVIC
  ADC1->CR |= ADC_CR_ADSTART;
}
И само прерывание (если отселектили два канала, то поочереди в прерывании появляются значения);
uint8_t curr_adc_channel = 0;
// ADC1_IRQHandler
extern void ADC1_COMP_IRQHandler(void)
{
 if(((ADC1->ISR) & ADC_ISR_EOC) != 0)
 {
 ADC1->ISR |= ADC_ISR_EOC;
 if (curr_adc_channel == 0) current = (uint16_t) ADC1->DR;
 if (curr_adc_channel == 1) voltage = (uint16_t) ADC1->DR;
 curr_adc_channel++;
 if (curr_adc_channel > 1) curr_adc_channel = 0; 
 }
}
https://github.com/minamonra/

Slabovik

Цитата: Slabovik от 28 Март, 2024, 10:31INA226 - хорошее решение. Но...
'но' - оно очень толстое. Не может INA226 стоить столько, сколько по той ссылке на Aliexpress: https://www.findchips.com/search/ina226
Вывод: на Ali продаётся подделка. Какого она качества - вопрос открытый...
Общением на форуме подпитываю свою эгоистичную, склонную к самолюбованию сущность.

zenon

Тут я согласен...
//офф: недавно разглядывал IGBT "толстые" и дорогие, пришли в закупке, взгляд упал на ноги, каково же было удивление, что ноги приварены контактное сваркой, а сами транзисторы были с распая... Приварены были кстати плохо - у некоторых отваливались при первом сгибе.
https://github.com/minamonra/