Реле Tianbo - ресурс 10 млн переключений

Литий-ионные аккумуляторы для робототехники. Часть 4. Программа

Окончание
Начало читайте здесь:

Часть 1. Введение
Часть 2. Теория
Часть 3. Железо

Программа

Вам потребуется компилятор GCC, который можно найти на сайте AVRFreaks.

Здесь представлен набор файлов кода на С. Обязательно посмотрите файл notes.txt. В нем описан переход от IAR к GCC. Модернизация касается ПО от Atmel, использования ресурсов микроконтроллера, управления назначением выводов и общих замечаний относительно ПО.

Основной файл программы называется BC.c. Программа запускается и, установив параметры, переходит непосредственно к алгоритму быстрой зарядки литий ионных аккумуляторов, находящемуся в файле LiIon.c. Здесь проверяется наличие интерфейса Smart в аккумуляторе, и если таковой будет обнаружен, параметры устанавливаются на основе информации полученной из батареи, если же нет, – настройки считываются с DIP переключателей на плате.

Зарядное устройство проверяет температуру и напряжение аккумулятора. Если обнаружены ошибки, устанавливаются соответствующие флаги и компьютеру отсылается короткое сообщение об ошибке. Если ошибок нет, управление передается циклу зарядки постоянным током, в котором увеличивается или уменьшается ширина импульсов ШИМ до тех пор, пока ток не станет равным заданному току быстрого заряда. В этом режиме диод зарядки мигает часто. Когда будет достигнуто максимальное напряжение заряда, устройство переключается в режим постоянного напряжения и запускается новый цикл, использующий вышеописанный метод для поддержания напряжения в точке максимального напряжения заряда. Теперь светодиод мигает редко. Это продолжается в течение 30 минут, пока ток заряда, в режиме постоянного напряжения падающий со временем, достигнет минимального значения (около 50 мА на 1600 мАч емкости). Теперь зарядное устройство отключается, и светодиод горит постоянно.

Программа от Atmel включала алгоритм капельной подзарядки, который я оставил нетронутым, но закомментировал его. Не представляю, как бы я его использовал. Я также удалил большинство ссылок, касающихся аккумуляторов других типов. Изначально программа использовала настройки из файла BC_defs.h, определявшиеся на этапе компиляции. Все эти настройки я преобразовал в переменные, которые определяются различными способами, как описано выше. Я удалил файл BC_defs.h и объединил все пользовательские настройки в файле LiIon.h. Обязательно посмотрите этот файл и откорректируйте важные параметры, такие как максимальный зарядный ток, перед тем, как прошивать микроконтроллер. Предустановленные параметры для 8 различных типов аккумуляторов заданы ближе к концу файла LiIon.c.

Напряжение ток, и сопротивление термистора должны быть откалиброваны. Я использовал свою таблицу Excel, чтобы определить номинальные сопротивления резисторов так, как описано в статье Atmel, а затем произвел их точную настройку, установив константы VOLTAGE_STEP и CURRENT_STEP. Они задают число милливольт или миллиампер на один из 1024 отсчетов АЦП. Обычно показания NTC термистора преобразуют с помощью просмотровой таблицы, но у Atmel это не было реализовано.

Подпрограммы для Smart аккумуляторов находятся в файле sbcomm.c. Они основываются на ПО 68HC11/Imagecraft для интерфейса I2C, использующем обычный порт ввода/вывода. Я переделал это ПО для AVR/GCC и добавил информацию и функции для Smart аккумуляторов. Просмотрите файл SBComm.h, там вы найдете команды, используемые Smart аккумуляторами. Контроллер ATmega8 имеет встроенный порт I2C, но я его не использую. Эти подпрограммы могут использоваться отдельно от зарядного устройства, например для отслеживания состояния аккумулятора вашего робота в процессе использования. Это даст такую полезную информацию как напряжение, ток, время, оставшееся до необходимой зарядки (основаное на интенсивности потребления тока), процент емкости, температура, флаги статуса и т.п.

Также полезно обсудить мои файлы StdDefs. Я включил в файл StdDefs.c подпрограммы, которыя использую почти во всех программах, таки как putchar, putBCD, putstr, run_led, msleep и т.п. Файл StdDefs.h содержит установки, упрощающие смену модели микроконтроллера и частоты резонатора (в первую очередь это касается UART). Так же в него включены некоторые стандартные макросы, которые я часто использую.

Я удалил отладочные процедуры Atmel, а вместо них использую свои подпрограммы putchar / putstr / putBCD. Все ошибки отправляются на ПК в виде строки. Система обработки ошибок не была хорошо протестирована – до сих пор все работает, и мне не потребовалось этого делать.

Запуск

Собранное устройство с уже прошитым микроконтроллером сразу можно использовать. Для наблюдения за ШИМ и наличием данных на SMBus я использовал осциллограф. ПК был подключен к UART и на нем был запущен HyperTerminal. Я настраивал устройство, используя нагрузочные резисторы вместо аккумулятора. Я нашел пару резисторов 7.5 Ом 25 Вт, которые идеально подошли для этой цели. Затем я калибровал схему измерения напряжения и тока, корректируя значения констант VOLTAGE_STEP и CURRENT_STEP до тех пор, пока показания на компьютере не совпали с показаниями моего вольтметра. Вы должны быть уверенны, что ваш измерительный прибор точен, так как максимальное напряжение заряда должно быть измерено очень точно, чтобы полностью зарядить аккумулятор.

Изменяя константы LiIon_CELL_VOLTAGE и CAPACITY, я мог форсировать зарядку в обоих режимах. ШИМ заработала сразу. Как только я убедился что ШИМ и подпрограммы зарядки работают, я подключил акумулятор. Связь с ПК работала хорошо, и я наблюдал, как напряжение медленно растет в режиме постоянного тока. Тогда я подключил термистор и интерфейс Smart и настроил эти две функции.

Работа

Программа устроена так, что выполняется в один проход. Вам придется перезагружать микроконтроллер каждый раз, когда потребуется поменять настройки, будь то от DIP переключателей или Smart аккумулятора.

Если аккумулятор поддерживает Smart, делать ничего не нужно, и просто подключите его, а затем подключите питание, и аккумулятор будет заряжаться. Если нет, вам потребуется установить правильные значения параметров для аккумулятора. В ручном режиме используются DIP переключатели и переменный резистор для установки количества ячеек, напряжения ячейки и емкости (то же самое, что и установка максимального тока заряда). Если переключатель «Вручную» выключен, программа идет к функции GetBatteryData(), в которой установливается предопределенный набор параметров на основе переключателей PreDef 0, 1 и 2. Вы можете определить 8 различных типов аккумуляторов для этой функции.

Вы должны быть очень осторожны при выборе параметров, чтобы не установить параметры аккумулятора с большим током или напряжением, чем у подключаемого аккумулятора. Я рекомендую отслеживать напряжение и ток через компьютер, или с помощью вольтметра и амперметра. Если поданное напряжение выше максимального, мой Smart аккумулятор сообщает, что максимальный ток заряда равен 0.

Заключение

Зарядка литий ионных аккумуляторов связана с различными опасностями. Не пытайтесь собрать зарядное устройство, не имея достаточных навыков для безопасной сборки, программирования и тестирования. Даже если вы обладаете такими навыками, осторожность нужна при смене аккумуляторов. Самый безопасный метод – использование зарядного устройства для определенного типа аккумуляторов.

members.shaw.ca

Перевод: [IMG]/i/Image/wand.gif[/IMG] по заказу РадиоЛоцман

На английском языке: Lithium Ion Batteries for Robotics. Part 4

ТМ Электроникс. Электронные компоненты и приборы. Скидки, кэшбэк и бесплатная доставка
Для комментирования материалов с сайта и получения полного доступа к нашему форуму Вам необходимо зарегистрироваться.
Имя