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