Отслеживание уровня заряда у батареи с помощью ардуино/esp 32
- Войдите на сайт для отправки комментариев
Втр, 30/06/2020 - 01:12
Всем доброго! Машинку делаю маленькую и требуется отслеживать уровень заряда батареи. Как бы это провернуть ?:-)
https://vk-book.ru/uroven-zaryada-akkumulyatora-18650-na-arduino/
#define VBG 1100 #define ADC_RESOLUTION 1024 #define VBG_CHANNEL 14 #define set_vbg_channel() ADMUX = 0<<REFS1 | 1<<REFS0 | 0<<ADLAR | VBG_CHANNEL #define run_adc() do { ADCSRA |= 1<<ADSC; while (ADCSRA & 1<<ADSC); } while (0) #define get_vcc() ((uint32_t)VBG * ADC_RESOLUTION / ADC) set_vbg_channel(); delay(1); run_adc(); uint16_t vcc = get_vcc();для Ардуины
uint8_t GetVCCValue(const uint16_t us = 200) { ADMUX = 1 << REFS0; // опорное напряжение - Vcc ADMUX |= 0x0E; // объект измерения - внутренний источник // стабилизированного напряжения 1.1В delayMicroseconds(us); uint16_t value = 0; for (uint8_t i = 0; i < 16; i++) { ADCSRA |= 1 << ADSC; // запуск АЦ-преобразования while (ADCSRA & (1 << ADSC)); // и ожидание его завершения value += ((11L * 1023) / ADC); } value >>= 4; return value; //((val > 50) ? 50 : val); }отдаёт в целых умноженных на 10, т.е 50 - это 5.0В, 45 это 4.5В и т.д.
Дет, чё такое 11L и зачем нужно среднее от 16 ???
11L это чтоб промежуточное значение в long считалось, оно потом обрезается перед присваиванием до 16 бит.
Ну а среднее, я даж не знаю, действительно, а зачем.
Я про то, чтоБЫ накопить 16 отсчётов в 16-битах в целом числе (16*1023<65535) а потом поделить, не?
Я про то, чтоБЫ накопить 16 отсчётов в 16-битах в целом числе (16*1023<65535) а потом поделить, не?
До 10-х вольта оверсемплинг излишний).
можно, наерна, и по 8 измерениям усреднять. Я вот запустил это утром, с опросм раз в секунду, значение 49 стоит как х у пионера.
а вот если уменьшать параметр us, даже до 150, уже начинает прыгать, 46-47.
Update: до сих пор, с 11:40 утра ничего не менялось, счас у мня 16:33
Vcc читается каждую секунду.
Надо пропробовать от лития запитать. :) Вечером, если не лень будет, припаяю 18650
Ок, всем благодарствую-буду пробовать.
Кстати, попутно спрошу вот что: сейчас пока (из за наличия на руках) - у меня питание сделано на аккумах Ni-Mh. Возможно придется перейти на литий-ионные. Но у них есть свои нюансы: нужен контроллер разряда на машинке. Вот и думаю- а прокатит ли такой программный контроль и все?
P.S. предположительно перейду на аккумы 18650