Не далее как неделю назад была похожая задачка:
(прошу в пианиста не стрелять пока он играет на баяне)

)
Требуется для переносноого прибора с Li-Ion аккумулятором ввести в меню тест аккумулятора, где вывести
- текущее напряжение
- остаточную емкость
- % зарядки
- прогноз в часах времени работы устройства
- результат дополнительного теста под нагрузкой (пока в резерве)
Аппаратная реализация:
- делитель (параллельно нижнему плечу фильтр С 0.1)
- питание схемы 3.3V импульсник 1.3МГц
- в цепи питания аналоговой части МК LC фильтр (100мкГн, 0.1), маловат пожалуй?
- АЦП штатный на борту МК 10 разрядов.
Пилот был собран месяц назад. Теперь собираем тест-партию.
Собираем первый экземпляр... в одном плече нужен 68к - в кассах нет, ну так нам не впервой.
Беру 75к 1% и 1М 1% ставлю параллельно - (ну мастер что тут скажешь) на границах разброса получаем от 69.07к до 70.46к
Точность тут практически не изменилась так как подбора не было! (от 0.7% до 1%, в зависимости от того как попадутся разбросы резисторов с + или -)
Да не номинал... но пока годится.
В подробности не вдаюсь - принимаем решение: требуется режим калибровки через сервис меню.
1. Заводим два параметра (int) Nmin, Nmax - отсчеты АЦП при Umax и Uмin - граничных значений напряжения
2. Их тоже вводим как еще два настроечных параметра (float)
3. До кучи добавляем ввод номинальной емкости аккумулятора (на случай, когда они разные)
- итого 5 параметров
4. Реализуем три варианта калибровки:
1) Для стенда:
ввод непосредственно значений Nmin, Nmax в EEPROM при подаче граничных значений питания (на стенде) 4.0В и 2.9В
- ввод по нажатию Enter на соответствующем параметре
- значения Umax и Uмin не меняются и уже введены
2) Калибровка по Umax
ввод непосредственно значения Nmax, и ручной ввод Umax
при этом выполняем расчет Nmin
- ввод Nmax по нажатию Enter на соответствующем параметре
- ввод Umax с клавиатуры после внешнего замера на клеммах блока аккумулятора
- получив Nmax и Umax при полностью зараяженном аккумуляторе считаем
gK_div = u_max/adc_max*0.4; - расчитываем коэффициент деления
gADCminBat = u_min/gK_div*0.4 - Nmax
3) Калибровка по Umin (пока не понятно кому понадобится, но пусть будет)
ввод непосредственно значения Nmin, и ручной ввод Umin с клавиатуры
при этом расчет Umax и Nmax
- аналогично п.2)
Калибруем по варианту 2).
Проверяем:
Входим в меню теста аккумулятора
- на аккумуляторе 4005мВ
- на ЖКИ показывает от 3994мВ до 4047мВ - шум почти 50мВ!
Смотрю внимательно (главное знать куда

) ) так и есть - монтажник забыл фильтр С на делителе впаять,
а я проверить, мой косяк! Впаиваю.
- на аккумуляторе 3960мВ
- на ЖКИ показывает от 3958мВ до 3964мВ - 6мВ (0.15%) при разрешении 3.9мВ можно считать что норма для нашей задачи.
В прошлую пятницу (15.05) прогнали девайс в климкамере от -40 до +50.
Испытания по другому поводу, но посмотрел и этот вопрос (благо все параметры сразу выводил в интерфейс - USB с протоколом ModBus).
- напряжение питания от внешнего ИП 4000мВ
-40грС от 3938мВ до 3943мВ
+50грС от 3997мВ до 4015мВ
З.Ы. Вот теперь желающие могут стрелять...
Сообщение отредактировал Dimy - May 18 2009, 07:48