KEEN SIDE успешно заменяет аналогичные продукты таких известных брендов, как Phoenix Contact, Weidmueller, Degson, Winstar, Hsuan Mao, KLS, G-NOR, Mean Well и др.

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

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

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

Программа

Выбираем схему BMS для заряда литий-железофосфатных (LiFePO4) аккумуляторов

Вам потребуется компилятор 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

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