Несколько раз я сталкивался с такой ситуацией: хочется добавить роботу какую-нибудь программную примочку, пишу программу, заливаю ее в робота - а он не едет. Аккумуляторы разрядились, для перепрограммирования еще тянут, а для движения уже нет. Чтобы исключить такую ситуацию в будущем, и было придумано это устройство.
Известно, что NI-MH аккумулятор в заряженном состоянии выдает напряжение 1,2 - 1,25 В, в разряженном - около 1 В. Емкость аккумулятора от напряжения на нем зависит нелинейно, но нам это и не важно. Самый простой способ контроля емкости - измерение напряжения (я использую 4 аккумулятора), диапазон от 4 до 5 В. Сперва думал сделать это используя встроенный АЦП + семисегментный индикатор двухразрядный, но этот способ имеет кучу недостатков (для этого нужно минимум 10 свободных ножек, контроллер должен отвлекаться, для динамической индикации придется задействовать таймер, или же вешать дополнительные регистры-защелки) и всего одно достоинство - высокая точность измерения (но для двухразрядного индикатора точность мы все равно загрубим до 0,1 В), которая в принципе не нужна. Поэтому был реализован другой способ, о котором я сейчас расскажу.
В качестве устройства индикации я взял линейку светодиодов DC-10EWA. Она состоит из 10 отдельных светодиодов. И на рассыпухе собрал трехбитный АЦП. Для этого использовал две микросхемы LM239 (счетверенный компаратор, выходы "открытый коллектор", нагружены на соответствующие светодиоды линейки), управляемый стабилитрон LM431 для источника опорного напряжения 2,5 В, резистивный делитель из 9 резисторов (8 точек съема напряжения). Схема в точности является схемой самого быстрого АЦП: измеряемое напряжение поступает на делитель, с делителя с точек съема напряжения на 8 компараторов подаются напряжения (на неинвертирующие входы), на инвертирующие входы компараторов подается опорное напряжение 2,5 В от ИОН. Источник опорного напряжения состоит из резистора и LM431 (трехногая микросхема, соединяем две ноги - получаем аналог стабилитрона на 2,5 В, только его напряжение слабо зависит от тока).
Поскольку светодиодов в линейке 10, а выходов от компараторов всего 8, два крайних светодиода подключены напрямую к питанию.
Устройство собрано на маленькой печатной плате, к торцу которой припаян разъем PBD-10 для подстыковки получившегося модуля в разъем программатора (IDC-10M) (из которого используются только выводы питания). Это удобно и экономит место на плате.
Как работает устройство. Вставляем устройство в разъем программатора, включаем питание. Если напряжение аккумуляторной батареи больше 4,875 В - горят только два крайних светодиода. По мере понижения напряжения начинают загораться светодиоды по одному (с какой стороны - зависит от разводки). Когда напряжение станет 4 В - все светодиоды загорятся. Можно сделать обратный эффект: если поменять полярность входов (ИОН подключить к неинвертирующим входам, а точки съема напряжения - к инвертирующим). Тогда при напряжении +5 В будут гореть все светодиоды, а по мере снижения они будут последовательно гаснуть (прямо как индикация заряда в сотике).
Ну и напоследок: смотрим на светодиодную линейку при работе с роботом и понимаем, когда пора поставить аккумуляторы на зарядку.
PS: линейку делителей можно пересчитать на нужный контролируемый диапазон, например от 3 до 4 В. Помните только, что ИОН на 2,5 В. Если интересует напряжения меньше - надо уменьшать напряжение ИОН.