adc_vref.txt 1.9 KB

1234567891011121314151617181920212223242526
  1. http://we.easyelectronics.ru/GYUR22/stm32-adcdmaitcusrednenie.html#comment94893
  2. ADCout (uint) — уже откалиброваные данные (которые надо получить)
  3. ADCin (uint)- сырые данные
  4. ADCref (uint)- измеренный внутренний референс. Он на 17м канале сидит вроде бы.
  5. А дальше следим за руками:
  6. 1. ADCin = (Vin/Vdd)*4095 (измерение относительно питания, 12 бит)
  7. 2. ADCref = (Vref/Vdd)*4095 (Vref смотрим в даташите, не помню сколько) (1489)
  8. 3. Выведем Vin:
  9. Vin = Vref*ADCin/ADCref
  10. 4. Но это бесполезные в целочисленной арифметике вольты. А нам нужны попугаи:
  11. ADCout = (Vin/Vdd) * 4095 (эмулируем АЦП )))) )
  12. ADCout = (ADCin * (Vref*4095/Vdd) )/ ADCref
  13. 5. Обозначим K = Vref*4095/Vdd (коэффициент типа uint)
  14. 6. Итоговый вариант:
  15. ADCout = ((u32)ADCin * K)/ADCref;
  16. K — какой коэффициентугодно можно. Но для красоты и предсказуемости данных я его высчитываю относительно номинального напряжения питания.
  17. Как уже было подмечено, калибровку делаем после каждого измерения. А потом хоть заусредняйтесь.
  18. Еще момент (было в сообществе кстати), на точность измерения очень сильно влияет сэмплинг тайм. На ваш вкус. Но для рефа мы делаем не менее 28.5 циклов тактирования АЦП.
  19. Как-то так
  20. ---
  21. http://www.robobuild.ru/index.php?itid=4
  22. ---
  23. http://microtechnics.ru/stm32-uchebnyj-kurs-adc-acp/