Objective
Началось все с того, что мне на день Рождения друзья подарили электрический лодочный мотор. Это очень хорошая штука для тех, кто хочет покататься на лодке «без шума и пыли», возни с бензином, маслом и подобными антиэкологическими смесями. По сравнению с бензиновыми, электромотор, конечно, слаб, но для неспешной прогулки по озеру вполне годится. Легкую обтекаемую лодку он толкает вполне уверенно. Источник энергии – обычный автомобильный аккумулятор.
Проблема с лодкой на электротяге только одна: ты никогда не знаешь, когда закончится электричество в аккумуляторе, так как на разных режимах работы (и даже в зависимости от хода по- и против течения или ветра), мотор жрет разный ток, и в уме проинтегрировать мгновенный ток по времени, чтобы получить съеденные из аккумулятора ампер-часы, оказывается совершенно нереально.
Приходится либо брать на всякий случай весла либо второй аккумулятор – увидев, что первый увядает, переключаемся на второй и едем назад.
Idea
В итоге у меня появилась идея сделать к мотору простой датчик потребленных ампер-часов, чтобы хотя бы примерно оценивать, хватит ли их на обратную дорогу. Чисто математически задача элементарная – интеграл мгновенного потребляемого тока по времени. Технически же эта задача обычно решается подсчетом числа импульсов от некоего генератора, частота которого линейно зависит от потребляемого мотором тока. Т. е., количество импульсов нам дает ампер-часы, а частота – мгновенный потребляемый ток.
Implementation
У кого что под рукой, тот из того и строит. У меня под рукой оказался микроконтроллер «крошечного» (всего восемь выводов) семейства фирмы Atmel ATTiny, на котором легко практически без всякого дополнительного аналогового обвеса программно сделать преобразователь напряжение -> частота. Но нам-то нужно ток -> частота. Что же делать? Если под рукой есть средства измерения малых (милливольты) напряжений, то ток измеряется косвенно по падению напряжения на известном сопротивлении. Если не нужна большая точность, можно измерять падение напряжения просто на части питающего мотор провода. Так я и решил сделать.
Теперь нужно определиться с индикацией потребленных ампер-часов (и неплохо бы и мгновенного тока). Нужен индикатор минимум на два разряда, драйвер индикатора, кнопка переключения режимов индикации итд. В итоге, даже загоняя в него код через последовательную шину (например I2C), выводов ATTiny для этого банально не хватает.
И тут я вспомнил про велокомпьютеры!
Входным сигналом для велокомпьютера является частота, пропорциональная скорости движения велосипеда. А путь пройденный велосипедом – это просто подсчет числа импульсов (естественно, через коэффициент пропорциональности).
Если же подключить велокомпьютер к выходу нашего преобразователя ток -> частота, мы получим (в скобках – штатная функция велокомпьютера):
- Индикацию мгновенного тока (скорость велосипеда).
- Съеденные ампер-часы с начала плавания (пройденный путь с начала маршрута).
- Всего съедено ампер-часов (общий пробег велосипеда).
- Максимальный ток мотора (максимальная скорость велосипеда) – чисто из любопытства.
- Время с начала плавания (время с начала маршрута) – ну, может быть полезно.
- Средний потребляемый ток (средняя скорость с начала маршрута) – чисто из любопытства.
Т. е даже больше, чем изначально планировали.
Процесс написания программы преобразователя опускаю, лишь скажу, что сама программа не так проста, как кажется. Сопротивление шунта, на котором измеряется падение напряжения – всего 1 миллиом – а разрешение токового датчика – порядка половины ампера, при верхнем диапазоне – 50 ампер.
Соответственно, падение напряжения начинается с величины 500 микровольт, что заставляет применять воркэраунды для повышения точности измерения – например, проводить программную калибровку встроенного в микроконтроллер АЦП при включении питания, а считанные с АЦП значения усреднять скользящим средним. Для повышения точности формирования выходной частоты используется двухступенчатый делитель частоты (8 бит в каждой ступени), коэффициенты деления выбираются из таблицы согласно усредненной величине текущего измеренного тока. Наилучшие табличные коэффициенты были рассчитаны заранее как Fout = Fin / (N * M). Устройство имеет также светодиодную индикацию текущего потребляемого тока (байт индицируется короткими и длинными вспышками в двоичном коде).
Release
Собрана вся конструкция в корпусе и на плате датчика удара от какой-то автосигнализации. Причем используются уже размещенный на плате стабилизатор питания 5 вольт, переменные резисторы и светодиоды (см. фото).
Field Test
Все это было испытано на озере. Оказалось, что на максимальной скорости лодочный мотор потребляет около 30 ампер – т. е. нового аккумулятора 55 ампер-часов должно хватать на 1.5 часа работы. Если же перевести регулятор скорости мотора вниз на одну ступень — ток сильно уменьшается (до 17 ампер), а скорость лодки меняется незначительно. Так на свежем аккумуляторе можно смело проплавать уже больше двух часов. Поглядывая время от времени на датчик, но стараясь сильно не отвлекаться от созерцания красоты озера и природы окружающих его берегов. Тем более, что лодка практически бесшумно скользит по воде, ничем не нарушая природный покой.
Метки: embedded, без помощи сварки, Луцков, хобби







