Приветствую!
Занимаюсь не большим, собственным проектом метеостанции с питанием от солнечной батареи. Для начала, из чего попало собрал тестовый образец: STM32F100, NRF24L01, датчик температуры - диод, CR2032 для RTC. В конечном устройстве планирую поставить BMP280, SHT20, STM32L151, NRF96W / Si4463.
Первое и самое главное - напряжение питания не будет постоянным. Падение напряжения на прямо включенном диоде зависит от температуры и +- линейно, но при неизменной температуре будет меняться в зависимости от питающего напряжения по причине I=U/R. Соответственно имеем проблему, как правильно откорректировать это значение опираясь на питающее напряжение?
Я написал простенький код, где АЦП делает 128 семплов и после вычисляется среднее арифметическое. Приведу ту часть, где вычисляются сами значения:
// VDDA currently
float vdda = (1.20 / adc_vref) * 4096.0;
// LSB value
float lsbv = (vdda / 4096.0);
// Diode voltage
float diode = lsbv * adc_diode;
Подключил плату к БП, измерил значения при разном напряжении питания и получил следующее:
БП 3.3v
vdda 3.26591372
lsb 0.000797342218
diode 0.512691021
БП 2v
vdda 1.98513734
lsb 0.000484652672
diode 0.486106634
Соответственно при изменении питающего напряжения в пределах 1.28077638 V напряжение на диоде меняется на 0.026584387 V.
С матаном у меня не очень, поэтому подвигав не многочисленными извилинами, я пришел к такой последовательности расчетов:
- Возьмём значения из предыдущих измерений. Верхнее значения напряжения при измерении 3.26591372, дельту 1.28077638 и 0.026584387
- В текущий момент у нас следующие показатели:
- vdda 2.57880378
- lsb 0.000629590766
- diode 0.499265492
- Получаем текущую дельту напряжения питания: 3.26591372 - 2.57880378 = 0.68710994
- Делим вымеренную дельту на текущую: 1.28077638 / 0.68710994 = 1.86400502371
- Делим дельту диода на значение из предыдущих расчетов: 0.026584387 / 1.86400502371 = 0.0142619717554
- Прибавляем полученное значение корректировки к текущему напряжению на диоде: 0.499265492 + 0.0142619717554 = 0.513527463756
Собственно мы получаем нечто более-менее похожее на правду, но храмающее по точности.