Для LGT8F328 можно воспользоваться встроенной фичей - просто заставить ардуинку измерить напряжение на 22-м выводе! Или в случае с LGT8F328 это называется VCCM.
analogReference(INTERNAL);
int adc = analogRead(VCCM);
float vcc = 5.0 / ((1 << 10)-1) * adc; // не совсем понятно что дает эта формула
Тут главное в качестве опорного установить напряжение 1.1 Вольт, потому как опорное DEFAULT зависит от напряжения питания и будет просто измерять с максимумом в напряжении питания. Я так понял, что при измерениях не надо использовать в качестве опорного напряжение питания!
Для Ардуинок базирующихся на чипах MEGA328 и всех их братьях, по идее это тоже должно работать, пока проверить не на чем, но по крайней мере при компиляции среда говорить что VCCM такого нет. Просто 22 срабатывает, но правильно ли?
Сайт iArduino.ru предлагает библиотеку iarduino_VCC функция которой analogRead_VCC(), возвращающая напряжение питания в вольтах.
float i = analogRead_VCC(); // Читаем напряжение питания Arduino.
Принцип работы:
В микроконтроллерах плат Arduino UNO, Mini, Nano, Mega ..., всего один блок АЦП и он может подключаться к любому аналоговому входу. Обращаясь к функции analogRead( ВЫВОД ), она переключает вход АЦП на указанный вывод, запускает преобразование АЦП и возвращает результат.
вход АЦП может подключаться не только к аналоговым входам, но и к встроенному в микроконтроллер датчику температуры, выводу GND или внутреннему источнику опорного напряжения (ИОН).
Функция analogRead_VCC() переключает вход АЦП на выход внутреннего ИОН 1V1, а в качестве ИОН для АЦП выбирает напряжение питания Uпит. Получается что функция читает напряжение внутреннего ИОН 1V1, которое заведомо известно Uион = 1,1В. Следовательно по показаниям АЦП можно выяснить точное значение напряжения питания Uпит = Uион * 1023 / АЦП.
Библиотека версии 1.0.2 и выше поддерживает работу с платами Arduino UNO R4 напряжение внутреннего ИОН у которых не 1,1В, а 1,45В.
В действительности напряжение внутреннего ИОН микроконтроллеров Arduino может отличаться от заявленных на сотые и даже десятые доли. По этому в библиотеке имеются две дополнительные функции, позволяющие определить и указать точное напряжение внутреннего ИОН.
Отправить комментарий
Отправить комментарий