AVR146: Зарядка литий-ионных аккумуляторов через USB с помощью Atmega16/32U4
Свойства:
- полностью функционирующая разработка для зарядки литий-ионных аккумуляторов;
- высокоточное измерение с помощью 10-битного АЦП;
- модульный исходный код на Си;
- легко регулируемые параметры аккумуляторов и зарядки;
- аналоговые входы для считывания идентификатора аккумулятора и температуры;
- USB CDC пользовательский интерфейс.
1. Введение
Эти «рекомендации» предназначены для Atmega16/32U4 и их цель — объяснить как использовать оценочную плату EVK527 для зарядки литий-ионных аккумуляторов используя соединение USB как источник питания.
USB CDC класс предлагает простой интерфейс для отображения параметров зарядки.
Эти «рекомендации» происходят от AVR458: зарядка литий-ионных аккумуляторов с ATAVRBC100.
Программное обеспечение полностью написано на Си (использовалось IAR®Systems Embedded Workbench) и его легко портировать на другие AVR® микроконтроллеры.
2. Описание
Этот документ описывает приложение, работающее на оценочном наборе EVK527. EVK527 разработан для Atmega16/32U4.
USB обеспечивает 5 вольтовое питание на выводе VBUS. Доступный диапазон токов: от 100 мА до 500 мА. Этого достаточно для зарядки элемента литий-ионных аккумуляторов.
Литий-ионные аккумуляторы требуют точного контроля над током и напряжением во время зарядки.
Atmega16/32U4 имеет full speed USB интерфейс, ШИМ-каналы и каналы 10-битного АЦП. Все эти возможности используются для реализации зарядки литий-ионных аккумуляторов через USB.
Рисунок 2-1. Описание аппаратного обеспечения
Для обеспечения дружественного интерфейса пользователя все параметры зарядки (статус зарядки, напряжение на аккумуляторах, ток зарядки, температура аккумуляторов...) отображаются на ПК без использования измерительных приборов.
После USB нумерации, появляется виртуальный com-порт (см. Рис. 1.2). В окне HyperTerminal, подключенного к этому порту, отображаются параметры зарядки. Т.к. Com-порт является виртуальным, настройки порта HyperTerminal (скорость, четность) не учитываются. Пользователь может выбрать конфигурацию по умолчанию.
Рисунок 2-2. Окно диспетчера устройств
2.1 Отображение параметров зарядки на ПК
Приложение обеспечивает постоянное обновление параметров, отображаемых на ПК. Если аккумуляторов не обнаружено или не идентифицировано, зарядка не начинается. Состояние зарядки доступно только на стадии зарядки постоянным напряжением. (см. Раздел 3.2.2).
Когда HyperTerminal запущен, пользователь должен нажать кнопку HWB для начала посылки информации в ПК.
Рисунок 2-3. Пользовательский интерфейс после обнаружения аккумулятора
3. Принцип работы
Зарядка аккумуляторов возможна благодаря обратимой химической реакции, которая восстанавливает энергию в химической системе. В зависимости от используемых химикатов аккумулятор будет иметь различные характеристики. Для того, чтобы не нанести серьезный вред аккумуляторам требуется подробное знание этих характеристик.
3.1 Технология литий-ионных аккумуляторов
У литий-ионных аккумуляторов лучшее соотношение энергия/вес и энергия/размер среди современных перезаряжаемых аккумуляторов. Сейчас это наиболее быстро растущие системы аккумуляторов на рынке, которые используются в таких приложениях, как ноутбуки, сотовые телефоны, портативные медиа плееры, КПК и медицинские устройства.
По сравнению с традиционными перезаряжаемыми аккумуляторами у литий-ионных нет внутреннего сопротивления, долгое время жизни, быстрое время зарядки, маленькая саморазрядка, низкая токсичность и нет требований по поддержке. Например, элементы литий-ионных аккумуляторов с кобальтовыми катодами обеспечивают в два раза большей энергией, чем никелиевые аккумуляторы и в четыре раза больше энергии, чем свинцово-кислотная батарея. Литий-ионные аккумуляторы практически не требуют ухода — преимущество, которым не могут похвастаться другие химические аккумуляторы. У литий-ионных аккумуляторов нет эффекта памяти и они не требуют плановой циклической работы для продления времени жизни. У литий-ионных аккумуляторов низкий саморазряд и они безопасны для окружающей среды. Причиняют минимальный вред после окончания использования.
К недостаткам литий-ионновых аккумуляторов относятся низкий перезаряд и необходимость встроенной защитной цепочки. Электрическое короткое замыкание может привести к протеканию большого тока, при этом увеличится температура и термическое отклонение, при котором опасные газы выходят наружу.
3.1.1 Безопасность
При соблюдении определенных предосторожностей при зарядке и разрядке литий-ионные аккумуляторы безопасны. Производители аккумуляторов дополнительно обеспечивают высокий уровень надежности с помощью трех уровней защиты таких, как:
- количество активного материала ограничено достижением работоспособного соотношения между плотностью энергии и безопасностью;
- в каждом элементе аккумулятора содержатся различные механизмы защиты;
- внутри аккумулятора содержится электрическая защитная цепочка.
Устройства защиты элементов аккумуляторов работают следующим образом:
- устройство с ПТК/ОТК (положительный/отрицательный температурный коэффициент) работает как защита от высоких скачков тока.
- УПЦ (устройство прерывания цепи) разрывает электрическую цепь, если слишком высокое напряжение зарядки повышает давление внутри аккумулятора.
- Специальное отверстие позволяет управлять выпуском газа при резком возрастании давления внутри аккумулятора.
Электрическая защитная цепочка работает следующим образом:
- твердотельный переключатель открывается, если высокое напряжение зарядки в каком-либо элементе аккумулятора превышает заданный уровень.
- Перемычка останавливает протекание тока, если температура элемента приближается к 90°C (194°F).
- токовая цепь разрывается, когда напряжение элемента падает ниже заданного уровня. Это сделано, чтобы предотвратить глубокий разряд аккумулятора.
Сегодня литий-ионные аккумуляторы являются одними из самых успешных и безопасных среди других химических аккумуляторов, они производятся с миллионами элементов каждый год.
3.2 Зарядка литий-ионных аккумуляторов
Существует только один способ зарядки литий-ионных аккумуляторов. У производителей литий-ионных аккумуляторов есть очень строгие нормативы по процессу зарядки и литий-ионные аккумуляторы должны заряжаться при условиях, указанных производителем.
Литий-ионные аккумуляторы заряжаются постоянным напряжением (после достижения напряжением номинального значения) с ограничением по току, чтобы избежать перегрева в начальной стадии зарядки. Зарядка заканчивается, когда ток зарядки падает ниже уровня, заданного производителем. При зарядке осуществляется мониторинг нескольких параметров: времени зарядки и температуры аккумулятора. Аккумулятор повреждается при перезарядке и может взорваться, если его перезарядить.
3.2.1 Безопасность
Статическое электричество или неисправное устройство зарядки могут повредить защитную цепь аккумулятора и перевести твердотельные переключатели в постоянное положение «включено». Это может случиться без ведома пользователя. Аккумулятор с поврежденной защитной цепью может работать нормально, но не обеспечивает защиту от неправильного использования.
Литий-ионные аккумуляторы потребительского класса не могут заряжаться при температуре ниже 0°C (32°F). Если аккумуляторы заряжать при низкой температуре, то зарядка может происходить нормально, но химические реакции внутри элемента могут привести к долговременному дефекту и могут подвергнуть риску безопасность аккумулятора.
Аккумулятор становится более уязвимым к поломке, при ударе, разрушении или высокой скорости зарядки.
Аккумулятор должен оставаться прохладным. Аккумулятор, который нагревается во время зарядки, не должен использоваться.
3.2.2 Первоначальная зарядка и интервалы зарядки
В отличие от многих других типов перезаряжаемых аккумуляторов литий-ионные аккумуляторы не требуют специфической первоначальной зарядки. Первая зарядка литий-ионных аккумуляторов не отличается от 10-ой или 100-ой.
Литий-ионные аккумуляторы могут и должны заряжаться часто. Аккумуляторы дольше сохраняют работоспособность, если они частично разряжены, чем если они постоянно полностью разряжаются. Для предотвращения износа аккумуляторов нужно избегать полной разрядки.
Емкость аккумулятора уменьшается со временем в независимости от того, используется он или нет.
3.2.3 Стадии зарядки
Зарядка литий-ионных аккумуляторов состоит из трех этапов:
- Предварительная оценка тока: зарядка литий-ионных аккумуляторов начинается с проверки напряжения аккумулятора. Если напряжение ниже заданного уровня (PREQUAL_VOLTAGE), зарядка начинается небольшим фиксированным током.
- Постоянный ток. Зарядка продолжается путем приложения к аккумулятору постоянного тока. Величина тока зарядки зависит от аккумулятора и устанавливается производителем.
- Постоянное напряжение. После достижения заданного уровня напряжения устройство зарядки переключится с подачи постоянного тока на подачу постоянного напряжения. Эта стадия завершается, когда ток зарядки становится ниже заданного производителем уровня.
Нижеприведенный рисунок иллюстрирует напряжение и ток литий-ионного аккумулятора во время зарядки.
Рисунок 3-1. Стадии зарядки и ограничения VARTA™ EasyPack 550mAh
На вышеприведенном рисунке «перезарядка» — это уровень, при котором включается защитная цепь элемента и открывает твердотельный переключатель и останавливает протекание тока. После этого напряжение аккумулятора обычно должно упасть на несколько сотен милливольт прежде чем протекание тока возобновится. «Чрезмерная разрядка» —это уровень, при котором начинается протекание тока для предотвращения глубокой разрядки аккумулятора.
3.3 Аккумулятор VARTA™
3.3.1 Типичные характеристики зарядки
Параметры аккумуляторов всегда должны проверятся по документации производителя. Ниже приведена сводка типичных характеристик зарядки литий-ионных аккумуляторов. Реальные параметры могут отличаться.
Таблица 3-1. Типичные характеристики зарядки
Параметр |
Типичное значение |
Время зарядки |
3 часа |
Ток зарядки |
1 C1 |
Эффективность зарядки |
99.9 % |
Порог тока зарядки |
0.03 C1 |
Напряжение зарядки |
4.20 В |
Отклонение напряжения зарядки (на элемент) |
± 0.05 В |
Диапазон температур |
0 ... +45 °C |
Диапазон влажности |
65 ± 20 RH |
1C соответствует типичному значению номинальной емкости (см. Таблицу 3-2) |
|
3.3.2 Типичные характеристики аккумуляторов
Ниже приведена сводная таблица данных производителей по используемым в этом приложении аккумуляторам. Другие типы аккумуляторов также могут использоваться, но, возможно, потребуется адаптация программного и/или аппаратного обеспечения.
Таблица 3-2. Данные производителя по литий-ионным аккумуляторам серии VARTA™ EasyPack
Параметр |
EZPack S-3.7V |
EZPack M-3.7V |
EZPack L-3.7V |
EZPack XL-3.7V |
Единицы |
Номинальная емкость (типичное значение) |
550 |
750 |
1000 |
2000 |
мАч |
Номинальное напряжение |
3.70 |
В |
Диапазон рабочих напряжений |
2.75 ... 4.20 |
В |
Напряжение зарядки |
4.20 |
В |
Отклонение напряжения зарядки |
50 |
мВ |
Ток зарядки |
520 |
720 |
955 |
955 |
мА |
Время остановки зарядки |
3 |
3 |
3 |
4 |
часы |
Ток при прекращении зарядки |
10 |
14 |
19 |
38 |
мА |
RID1 (идентификатор резистора) |
3.9 |
6.8 |
10 |
24 |
kQ |
ОТК |
10 |
kQ |
B-значение2 |
3435 |
K |
Напряжение перезарядки |
4.35 |
В |
Напряжение чрезмерной разрядки |
2.20 |
В |
1 RID: внутреннее сопротивление аккумулятора определяет емкость подключенного аккумулятора.
2 Значение B используется в формуле для расчета температуры.
3.3.3 Электрические выводы
В этом приложении используются литий-ионные аккумуляторы определенного типа и все представленные здесь конфигурации основаны на данных производителя. Другие литий-ионные аккумуляторы тоже могут использоваться, но пользователь должен посмотреть документацию производителя и убедиться, что необходимые изменения внесены в программное и аппаратное обеспечение.
Нижеприведенный рисунок показывает выводы аккумуляторов, используемых в этом приложении.
Рисунок 3-2. Выводы элемента VARTA™ EasyPack
Аккумулятор подключается к устройству зарядки следующим образом.
Таблица 3-3. Подключение аккумулятора к заряжающему устройству
Вывод аккумулятора |
Вывод устройства зарядки |
Примечания |
- (minus) |
BATTERY- |
|
NTC |
NTC/RID |
Измерение температуры |
ID |
SCL |
RID, резистор идентификации аккумулятора |
+ (plus) |
BATTERY+ |
|
3.4 Напряжение питания VBUS
Приложения, получающие питание от USB, делятся на три категории:
- Маломощная шина. Функции, получающие питание от маломощных шин, полностью питаются от VBUS и не должны потреблять более одной единицы тока нагрузки (100мА) согласно стандарту USB. Они также должны работать при напряжении VBUS от 4.40 В до 5.25 В.
- Высокомощная шина. Функции, получающие питание от высокомощных шин, полностью питаются от VBUS и не могут потреблять более 100мА до того, как устройство сконфигурировано. После конфигурирования, оно может потреблять до 5 единиц тока нагрузки (500мА) согласно запросу в дескрипторе. При полной нагрузке оно должно работать при напряжении VBUS от 4.75 В до 5.25 В.
- Собственное питание. Функции с собственным питанием могут потреблять до 100мА от VBUS, а остальное из другого источника.
Источником тока для питания EVK527 и для зарядки аккумуляторов является VBUS. EVK527 должна ограничивать ток зарядки, если это необходимо.
Простое решение — изменение параметра тока зарядки в таблице.
Например, для аккумулятора на 550мАч может использоваться ток зарядки 260мА. Изменение этого параметра на 90мА (например) позволяет подключать устройство зарядки к маломощной шине, т.к. Известно, что потребление EVK527 с кварцем на 8МГц составляет около 10мА. В этом случае ток предварительной оценки также должен быть не более 90мА
3.5 Версия EVK527
EVK527 версии 1.0.0 должна быть изменена следующим образом:
- между PF0 и PF1 должен быть включен шунтирующий резистор для использования дифференциального входа. PF0 должен заменить PD4 и SP6 должен быть «без припоя» (отличается от конфигурации по умолчанию).
- Выводы затвора и истока Q1A должны быть отключены.
- Новые значения R6 и R7 — 13кОм.
- Новое значение R3 — 1 Ом.
На схемах, показанных в разделе 6, эти изменения не показаны.
3.6 Вольтодобавочный преобразователь
Рисунок 3-3. Схема вольтодобавочного преобразователя
Вольтодобавочный преобразователь интегрирован на EVK527 с целью контроля напряжения аккумулятора и тока. Переключатель управляется высокоскоростным ШИМ-выходом.
3.6.1 Частота ШИМ
Скорость ШИМ запрограммирована на максимальное значение (64МГц). Источником тактирования является выход ФАПЧ (96МГц), используемый и ШИМ и USB.
Постделитель реализует деление сигнала ФАПЧ на 1.5: 96МГц/1.5=64МГц (см. PLLTM1 и PLLTM0 в регистре PLLFREQ).
Частота результирующего выходного сигнала ШИМ составляет 250кГц:
64МГц/256=250кГц.
Где 256 — это размер в битах регистра сравнения OCR4A, используемого в таймере 4.
Рисунок 3-4. Выходной ШИМ-сигнал
Программное обеспечение управляет напряжением/током аккумулятора регулируя коэффициент заполнения ШИМ-сигнала.
Если тон увеличивается, напряжение/ток аккумулятора прикладываются к большей нагрузке.
4. Программное обеспечение для устройства зарядки аккумуляторов
4.1 Планировщик
Планировщик реализован для постоянного выполнения определенных задач. Перед началом выполнения бесконечного цикла вызываются функции инициализации. Существует три задачи. Каждая задача вызывается после выполнения предыдущей (нет приоритетного прерывания обслуживания).
Рисунок 4-1. Планировщик
4.2 Список файлов
Программное обеспечение написано на Си с использованием IAR Systems Embedded Workbench®, версии 5.10. Так как программное обеспечение полностью написано на Си, не должно быть сложно портировать его на другие AVR Си-компиляторы. Из-за некоторых специфических особенностей компиляторов, тем не менее часть кода должна быть переписана.
В нижеприведенной таблице содержится список файлов проекта.
Таблица 4-1. Файлы проекта для приложения CDC (см. файл IAR EW workspace).
Файл |
Тип |
Примечания |
cdc_task.c |
Исходный код на Си |
Функции CDC задачи и инициализации CDC |
cdc_task.h |
Заголовочный файл |
main.c |
Исходный код на Си |
Основная программа / точка входа в программу |
main.h |
Заголовочный файл |
power_drv.c |
Исходный код на Си |
Драйвер питания низкого уровня |
power_drv.h |
Заголовочный файл |
scheduler.c |
Исходный код на Си |
Процедуры планировщика |
scheduler.h |
Заголовочный файл |
start_boot.c |
Исходный код на Си |
Функции загрузки |
start_boot.h |
Заголовочный файл |
time.c |
Исходный код на Си |
Функции тактирования |
time.h |
Заголовочный файл |
cdc_task.c |
Исходный код на Си |
Функции CDC задачи и инициализации CDC |
cdc_task.h |
Заголовочный файл |
main.c |
Исходный код на Си |
Основная программа / точка входа в программу |
main.h |
Заголовочный файл |
uart_lib.c |
Исходный код на Си |
Этот файл обеспечивает минимальный доступ к терминалам VT100 |
uart_lib.h |
Заголовочный файл |
uart_usb_lib.c |
Исходный код на Си |
UART USB функции |
uart_usb_lib.h |
Заголовочный файл |
usb_descriptor.c |
Исходный код на Си |
Параметры USB, которые определяют устройство |
usb_descriptor.h |
Заголовочный файл |
usb_device_task.c |
Исходный код на Си |
Управление USB устройством |
usb_device_task.h |
Заголовочный файл |
usb_drv.c |
Исходный код на Си |
Процедуры USB драйвера |
usb_drv.h |
Заголовочный файл |
usb_standard_request.c |
Исходный код на Си |
Запросы нумерации USB устройства |
usb_standard_request.h |
Заголовочный файл |
usb_specific_request.c |
Исходный код на Си |
Функции пользователя |
usb_specific_request.h |
Заголовочный файл |
usb_task.c |
Исходный код на Си |
Функции USB задачи и инициализации USB |
usb_task.h |
Заголовочный файл |
Таблица 4-2. Файлы проекта для модуля аккумуляторов (см. файл IAR EW workspace file)
Файл |
Тип |
Примечания |
ADC.c |
Исходный код на Си |
Функции, относящиеся к АЦП |
ADC.h |
Заголовочный файл |
Batt_task.c |
Исходный код на Си |
Функции Bat задачи и инициализации Bat |
Batt_task.h |
Заголовочный файл |
battery.c |
Исходный код на Си |
Определения для процесса зарядки аккумуляторов и функции управления аккумуляторами и сбора данных |
cbattery.h |
Заголовочный файл |
chargefunc.c |
Исходный код на Си |
Функции зарядки |
chargefunc.h |
Заголовочный файл |
LIIONcharge.c |
Исходный код на Си |
Функции состояния зарядки литий-ионных аккумуляторов |
LIIONcharge.h |
Заголовочный файл |
menu.c |
Исходный код на Си |
Определения для конечного автомата |
menu.h |
Заголовочный файл |
PWM.c |
Исходный код на Си |
Функции для генерации широтно-импульсного сигнала |
PWM.h |
Заголовочный файл |
statefunc.c |
Исходный код на Си |
Функции, относящиеся к состояниям, определенным в файле menu |
statefunc.h |
Заголовочный файл |
4.3 Обзор
Программное обеспечение содержит все необходимые функции для зарядки аккумуляторов.
Таблица 4-3. Требования программного обеспечения к памяти (без оптимизации IAR).
Режим работы |
Память |
Приблизительное значение |
отладка |
CODE (Flash) |
13900 байт |
DATA (SRAM) |
1109 байт |
XDATA (EEPROM) |
2 байта |
4.4 Конечный автомат
Конечный автомат реализован в задаче аккумуляторов. Этот конечный автомат достаточно прост и использует указатели на функции. Он просто находит адрес следующей функции для выполнения и затем переходит к этой функции. Алгоритм работы конечного автомата показан на нижеприведенном рисунке.
Рисунок 4-2. Алгоритм работы основной функции, включая конечный автомат
После возврата конечный автомат ожидает, что функция укажет следующее состояние посредством возвращаемого аргумента. Распознаваемые возвратные коды описаны в нижеприведенной таблице.
Таблица 4-4. Коды конечного автомата (см. исходные коды, menu.h)
Метка |
Соответствующая функция |
Описание |
INIT |
Initialize() |
Состояние входа |
BATCON |
BatteryControl() |
Проверка аппаратного обеспечения и аккумуляторов |
PREQUAL |
Charge() |
Повышение напряжения аккумулятора, проверка безопасности |
PREQUAL_CTRL |
Charge() |
Ожидание окончания PREQUAL |
SLEEP |
Sleep() |
Режим пониженного потребления |
CCURRENT |
Charge() |
Зарядка постоянным током |
CCURRENT_CTRL |
Charge() |
Ожидание окончания CCURRENT |
CVOLTAGE |
Charge() |
Зарядка постоянным напряжением |
CVOLTAGE_CTRL |
Charge() |
Ожидание окончания CVOLTAGE |
ENDCHARGE |
Charge() |
Окончание успешной зарядки |
DISCHARGE |
Discharge() |
Переход к состоянию BATCON для дальнейшей реализации) |
ERROR |
Error() |
Ошибка решения, если возможно |
Функции состояний описаны в разделах ниже.
4.4.1 Initialize()
Функция инициализации является первой функцией состояния, которая будет выполнена после сброса устройства. Алгоритм работы функции показан на нижеприведенном рисунке.
Рисунок 4-3. Алгоритм работы функции инициализации
Функция инициализации всегда возвращает один и тот же код, который указывает на функцию контроля аккумуляторов.
4.4.2 BatteryControl()
Функция контроля аккумуляторов проверяет, что все джамперы установлены правильно, затем проверяет, вставлены ли аккумуляторы разрешенного типа и нужно ли их заряжать. Алгоритм работы показан на нижеприведенном рисунке.
Рисунок 4-4. Алгоритм работы функции контроля аккумуляторов
4.4.3 Charge()
Функция зарядки содержит алгоритм зарядки, разделенный на этапы. Для этого приложения процесс зарядки состоит из 4 этапов:
- Предварительная оценка — в течении этого этапа аккумулятор заряжается постоянным током до тех пор, пока напряжение зарядки не достигнет нужного значения. Если это происходит за заданный промежуток времени, то считается, что аккумулятор исправный и процесс зарядки продолжается. Если за отведенное время напряжение не достигает заданного значения или температура аккумулятора выходит за установленные пределы, аккумулятор считается неисправным и процесс зарядки прерывается.
- Зарядка постоянным током — в течение этого этапа аккумулятор заряжается большим током, подходящим для этого типа аккумуляторов, пока напряжение аккумулятора не достигнет максимума. Если это происходит в течение максимального времени зарядки аккумулятора, то процесс зарядки продолжается. Если за отведенное время напряжение не достигает максимума или температура аккумулятора выходит за установленные пределы, аккумулятор считается неисправным и процесс зарядки прерывается.
- Зарядка постоянным напряжением — в течение этого этапа аккумулятор заряжается при максимальном напряжении пока ток зарядки не уменьшится до определенного для данного типа аккумуляторов значения или пока не истечет время зарядки. На этом этапе также зарядка прерывается, если температура аккумулятора выходит за заданные пределы.
- Окончание зарядки — на этом этапе устройство зарядки «решает» переходить ли ему в sleep режим или попытаться зарядить другой аккумулятор.
Ключевыми переменными этой функции являются ChargeParameters и HaltParameters. Алгоритм работы этой функции показан на нижеприведенном рисунке.
Рисунок 4-5. Алгоритм работы функции поэтапной зарядки аккумуляторов
Рисунок 4-6. Конец алгоритма работы функции поэтапной зарядки аккумуляторов
4.4.4 Discharge()
Эта функция не была реализована.
4.4.5 Sleep()
Приложение переходит в sleep режим, когда все аккумуляторы заряжены. Приложение периодически «просыпается» через заданный промежуток времени для проверки текущего состояния аккумуляторов. Режим sleep прерывается, если какому-либо аккумулятору требуется зарядка.
Алгоритм работы в Sleep режиме показан на рисунке ниже.
Рисунок 4-7. Алгоритм работы функции sleep
4.4.6 Error()
Ход программы изменяется, если возникает ошибка. Программа покинет обработчик ошибок, когда все причины ошибок будут устранены.
Алгоритм программы показан на нижеприведенном рисунке.
Рисунок 4-8. Алгоритм работы обработчика ошибок
4.5 Функции управления зарядкой
Эти функции вызываются Charge() после установки всех параметров.
4.5.1 Constant Current/Voltage
Эти две функции похожи, не считая того, что они используют разные измерения АЦП для сравнения с установленными пределами. Поэтому ниже приведен алгоритм работы только ConstantCurrent(). Обе эти функции используют переменную ChargeParameters.
Рисунок 5-3. Алгоритм работы функции ConstantCurrent()
4.5.2 Определение прерывания процесса зарядки
Прерывание зарядки определяется функцией HaltNow(). Эта функция вызывается для определения, закончилась ли зарядка, функциями ConstantCurrent() и ConstantVoltage() каждый раз, когда они выполняются в цикле.
С помощью переменной HaltParameters пользователь может задать при каких условиях прерывается зарядка, и должен ли выставляться флаг ошибки, если истекает заданный промежуток времени. Установка флага ошибки приводит к следующему состоянию ST_ERRQR, таким образом прекращая зарядку. Если не установлен ни один флаг ошибки, то следующим состоянием будет состояние, установленное ранее в Charge().
В заключение, функция проверяет не выходит ли температура за заданные пределы, исправен ли аккумулятор, и превышает ли питающее напряжение минимум. Если одна из этих проверок не проходит, то следующее состояние будет соответствовать подходящему обработчику ошибок (ST_ERRQR, ST_INIT или ST_SLEEP) и зарядка прекращается.
Рисунок 5-4. Алгоритм работы для HaltNow(), часть 1
Рисунок 5-5. Алгоритм работы для HaltNow(), часть 2
Рисунок 5-6. Алгоритм работы для HaltNow(), часть 3
Рисунок 5-7. Алгоритм работы для HaltNow(), часть 4
4.6 Другие функции
4.6.1 Аналогово-цифровое преобразование
АЦП использует мультиплексор для считывания значений из разных каналов. По окончании преобразования вызывается обработчик прерывания (ADC Interrupt Service Routine (ISR)), как это показано в алгоритме ниже. После завершения обработки прерывания выполнение программы возобновляется в нормальном порядке. Для всех каналов опорное напряжение АЦП является внутренним и составляет 2,56В.
Рисунок 5-8. Алгоритм работы обработчика прерывания АЦП
4.7 Реализация
Этот раздел описывает, как сконфигурировать, создать и загрузить программное обеспечение.
4.7.1 Конфигурирование
Наиболее важные при компилировании константы приведены в таблице ниже. Больше программных констант содержится в файле battery.h.
Таблица 5-1. Константы, относящиеся к аккумуляторам (см. исходный файл battery.h)
Метка |
Описание |
CELL_VОLTAGE_SAFETY |
При необходимости зарядки аккумуляторов, тип которых не согласован, эта постоянная вычитается из CELL VQLTAGE MAX для каждой дополнительного элемента аккумулятора, т. е. BAT_CELL_NUMBER - 1. |
CELL_VОLTAGE_MAX |
Напряжение, при котором должен заряжаться элемент. |
CELL_VОLTAGE_LOW |
Наименьшее напряжение, при котором аккумулятор считается заряженным. Зарядка начнется, когда напряжение упадет ниже этого уровня. |
CELL_VОLTAGE_MIN |
Наименьшее напряжение, при котором может начаться зарядка. Должно быть установлено равным пределу, при достижении которого последующая разрядка аккумуляторов приведет к повреждениям. |
CELL_VОLTAGE_PREQUAL |
Напряжение, до которого должны быть заряжены аккумуляторы в течение этапа оценки тока. |
BAT_TEMPERATURE_MAX |
Самая высокая допустимая температура аккумуляторов. Зарядка прекратится/не начнется при превышении этого предела. |
BAT_TEMPERATURE_MIN |
Самая низкая допустимая температура аккумуляторов. Зарядка прекратится/не начнется, если температура ниже этого уровня. |
BAT_CURRENT_PREQUAL |
Ток зарядки в течение этапа оценки тока. |
BAT_CURRENT_HYST |
Гистерезис тока зарядки. |
BAT_VОLTAGE_HYST |
Гистерезис напряжения зарядки. |
BAT_VОLTAGE_PREQUAL |
Напряжение аккумулятора в течение этапа оценки тока. Если это напряжение не будет достигнуто, то аккумулятор будет считаться негодным. |
BAT_TIME_PREQUAL |
Максимальная длительность этапа оценки тока. |
DEF_BAT_CAPACITY |
Емкость аккумулятора по умолчанию. |
DEF_BAT_CURRENT_MAX |
Максимальный ток зарядки по умолчанию. |
DEF_BAT_TIME_MAX |
Максимальное время зарядки по умолчанию. |
DEF_BAT_CURRENT_MIN |
Ток остановки зарядки по умолчанию. |
ALLOW_NO_RID |
Если определено, то использование аккумуляторов без RID (или не соответствующих заданным типам) приведет к зарядке при параметрах по умолчанию. Иначе зарядка будет остановлена. |
RID[ ].Low and RID[ ].High |
Предполагается распознавание RID сопротивления, если оно находится в этих пределах. |
RID[ ].Capacity |
Емкость аккумулятора для заданного RID. |
|
RID[ ].Icharge |
Ток зарядки для заданного RID. |
RID[ ].tCutOff |
Максимальное время зарядки для заданного RID. |
RID[ ].IcutOff |
Ток прекращения зарядки для заданного RID. |
NTC[ ] |
Таблица температур. |
4.7.2 Компиляция
Доступны проекты под IAR и GCC. Проект GCC может использовать внешний makefile (см. Makefile в \gcc\default) или опции, которые определяются в проекте в AVR Studio.
Таблица 5-2. Конфигурирование компилятора
Раздел |
Закладка |
Поле |
Значение |
General Options |
Target |
Processor configuration |
ATmega16/32U4 |
Memory model |
Small |
System |
Data stack |
0x100 |
Return address stack |
32 |
Enable bit definitionsk |
None |
C/C++ Compiler |
Language |
Require prototypes |
Selected |
Linker |
Output |
Format |
Other: ubrof8 |
Extra Options |
Command Line |
-y(CODE) -Ointel-extended,(DATA)=$EXE_DIR$\$PROJ_FNAME$_data.hex -Ointel-extended,(XDATA)=$EXE_DIR$\$PROJ_FNAME$_eeprom.hex |
4.7.3 Программирование
Скомпилированный код легко загрузить в целевое устройство с помощью AVR Studio® и любого отладочного средства или программатора по выбору, например JTAGICE mkII. Заметьте, что скомпилированный код может содержать данные для EEPROM, если это необходимо. Эта возможность предусмотрена для дальнейшей разработки. Ответьте OK, когда AVR Studio спросит, должны ли быть загружено содержимое EEPROM. Это показано на рисунке ниже.
Рисунок 5-9. Загрузка данных для инициализации в EEPROM
В программе используется внутренний генератор и тактовый сигнал используется без предделителя. Некоторые фьюзы должны быть запрограммированы для обеспечения правильной работы программы. Установки фьюзов, которые отличаются от изначальной заводской конфигурации, приведены в таблице ниже.
Таблица 5-3. Установки фьюзов, отличающиеся от изначальных.
Настройка фьюза |
Описание |
CKDIV8 1 (unprogrammed) |
Не делить тактовый сигнал на 8 |
CKSEL3...0 0010 |
Использовать внутренний генератор |
На EVK527 версии 1.0.0 выводы JTAG совмещены с выводами, идущими к кнопкам джойстика. Поэтому при нажатии кнопок CDC приложение отключается.
Кнопка HWB используется для начала передачи данных в HyperTerminal.
После загрузки программного обеспечения с помощью AVR Studio загрузчик ATmega16/32U4 стирается. Если требуется загружать ПО с помощью FLIP (ATMEL ISP), то предварительно нужно восстановить загрузчик с помощью AVR Studio.
5. Схемы EVK527 версии 1.0.0
Рисунок 6-1. Страница 1/5 (схемы версии 3.0.0, соответствуют платам версии 1.0.0)
Рисунок 6-2. Страница 2/5
Рисунок 6-3. Страница 3/5
Рисунок 6-4. Страница 4/5
Рисунок 6-5. Страница 5/5
6. Связанные документы
- "What's the best battery?". Retrieved April 3, 2007, from Battery University
- "Lithium-ion safety concerns". Retrieved April 3, 2007, from Battery University
- "Charging lithium-ion batteries". Retrieved April 3, 2007, from Battery University
- "ATmega32U4". Available from Atmel web site: http://www.atmel.com/products/avr/
Документация:
|
|
747 Kb Engl Исходный файл |
|