Компоненты и технологии, № 2'2005
Определение „ емкости батареи
В статье рассмотрено применение микроконтроллера ^46Р63 в устройстве определения емкости батарей. Идея заключается, во-первых, в преобразовании емкости батареи в аналоговый сигнал, затем — в преобразовании этого сигнала посредством встроенного в ^46Р63 аналого-цифрового преобразователя в цифровой. Этот цифровой сигнал и будет индицировать емкость батареи с помощью восьми светодиодов: если емкость батареи выше самого высокого уровня, все светодиоды будут гореть; если емкость батареи ниже минимально допустимой величины, светодиоды будут отключены.
■у
Чиа-Вей Шеу
Перевод:
Николай Ракович
Р1
\\
02
\\
1ЕО
03
\\
04
\\
05
\\
1ЕО
06
\\
07
\\
08
\\
1ЕО
Микроконтроллер НТ46И63 представляет собой 8-разрядный однократнопрограммируемый (ОТР) прибор фирмы Нокек нового поколения со встроенным АЦП и драйвером ЖКИ. Его структура и параметры были приведены в предыдущем номере нашего журнала («Цифровой вольтметр на базе микроконтроллера НТ46И63», с. 98-100).
Принцип работы
Измерение емкости батареи — это не просто измерение ее напряжения. Параллельно с батареей до начала измерения должен быть установлен соответствующий резистор. Если резистор не используется, то полностью заряженная и практи-
100
ВТ1
2_| І і |_1_
, I ,
1,5 В
Рис. 1. Схема измерителя емкости батарей
х— 2
3
X- 4
10
12
13
14
X- 16
17
18
19
70
?1
77
23
24
25
?6
77
78
79
X- 30
т
N01 ЯРЗЯ
N02 <¿00
N03
N04
РАО
РА1
РА2
РАЗ
РА4
РА5
РА6
РА7
УвЭ
РВ0/А1Ч0
РВ1/АМ1
РВ2/АІМ2
РВЗ/АМЗ
РВ4/А№
РВ5/А1Ч5
PB6/AN6
РВ7/А^
А\ЛЮ
N025
N026
N027
N028
N029
N030
N031
N032 § о
НТ46 Р63/НТ46С63-100 СТР-А
0000ш(/)с/3>^^у555^00 N014
222^оо> 5§бб>22 ¡¡¡25
N012 N011 N010 СОМО СОМ1 СОМ2 СОМЗ/БЕ619 БЕСІв ЭЕС17 ЭЕС16 ЗЕЄІб ЗЕ614 БЕСІЗ ЭЕС12 ЭЕвИ БЕЄЮ ЭЕСЭ вЕСв 8ЕС7 БЕСб БЕС5 БЕ04 БЕЄЗ БЕЄг БЕвІ ЭЕСО
ш со Єн*
■=*5
&868858Б88Я}£8Ьоооо"С9 а_а.о.о.о.о.о.а_а_о.о.о.о.о.о_а_2222
79 -X
78
77
76
75
74
73
72
71
70
69
68
67
66
65
64
63
62
61
60
59
58
57
56
55
54
53
5?
51 -к
У00
□
№
Р9
47К
С1
104
4,00 МГц
Компоненты и технологии, № 2'2GG5
e-
INCLUDE HT46R63.INC SUB A, VARIABLE SET PA4
SNZ C ;compare 13H with VARIABLE MOV A, AD_VALUE
;HT46R63 battery energy capacity detector Register value MOV VARIABLE, A
JMP LOOP2 MOV A, 38H
DATA. SECTION AT 30H 'DATA' ;data start SZ Z judge whether 13H and VARIABLE SUB A, VARIABLE
CLR_MEM_COUNTER DB question ;declare ;are the same SNZ C; compare 38H with VARIABLE
CLR_MEM_COUNTER register JMP LOOP2 ;if they are the same, jump to Register value
AD_VALUE DB question ;declare AD_VALUE register ;LOOP2 JMP LOOP6
VARIABLE DB question ;declare VARIABLE register JMP MAIN SZ Z; iudge whether 38H and VARIABLE
; LOOP2: are the same
CODE. SECTION AT 0 'CODE' ;program start SET PA0 JMP LOOP6 ; if they are the same, jump to
ORG 00H SET PA1 ;LOOP6
JMP START MOV A, AD_VALUE JMP MAIN
START: MOV VARIABLE, A LOOP6:
MOV A, 0FFH-30H MOV A, 1DH SET PA0
MOV CLR_MEM_COUNTER, A SUB A, VARIABLE SET PA1
MOV A, 31H SNZ C ;compare 1DH with VARIABLE SET PA2
MOV MP0, A Register value SET PA3
CLR_MEM: JMP LOOP3 SET PA4
CLR R0 SZ Z judge whether 1DH and VARIABLE SET PA5
INC MP0 ;are the same MOV A, AD_VALUE
SDZ CLR_MEM_COUNTER JMP LOOP3 ;if they are the same, jump to MOV VARIABLE, A
JMP CLR_MEM ;LOOP3 MOV A, 41H
MAIN: JMP MAIN SUB A,VARIABLE
MOV A, 48H LOOP3: SNZ C; compare 41H with VARIABLE
MOV ADCR, A SET PA0 Register value
;set AN0 as analog input, use an SET PA1 JMP LOOP7
;analog channel only SET PA2 SZ Z; judge whether 41H and VARIABLE
SET ADCR.7 MOV A, AD_VALUE are the same
CLR ADCR.7 ;A/D converter in action MOV VARIABLE,A JMP LOOP7 ; if they are the same, jump to
LOOP: MOV A, 26H ;LOOP7
SZ ADCR.6 ;when EOCB=0, A/D conversion is SUB A,VARIABLE JMP MAIN
;completed SNZ C ;compare 26H with VARIABLE LOOP7:
JMP LOOP ;when EOCB=1, jump LOOP to Register value SET PA0
;convert JMP LOOP4 SET PA1
CLR PAC ;set PA OUTPUT SZ Z judge whether 26H and VARIABLE SET PA2
CLR PA ;set PA LOW VOLTAGE ;are the same SET PA3
NOP JMP LOOP4 ;if they are the same, jump to SET PA4
;LOOP4 SET PA5
MOV A, ADR JMP MAIN SET PA6
MOV AD_VALUE, A ;put A/D conversion value into LOOP4: MOV A, AD_VALUE
;AD_VALUE register SET PA0 MOV VARIABLE, A
SET PA1 MOV A, 4DH
MOV VARIABLE, A SET PA2 SUB A, VARIABLE
MOV A, 0AH SET PA3 SNZ C; compare 4DH with VARIABLE
SUB A, VARIABLE MOV A, AD_VALUE Register value
SNZ C MOV VARIABLE, A JMP LOOP8
;compare 0AH with VARIABLE MOV A, 2FH SZ Z; judge whether 4DH and VARIABLE
Register value SUB A, VARIABLE are the same
JMP LOOP1 SNZ C ;compare 2FH with VARIABLE JMP LOOP8 ; if they are the same, jump to
SZ Z judge whether 0AH and VARIABLE Register value ;LOOP8
;are the same JMP LOOP5 JMP MAIN
JMP LOOP1 ;if they are the same, jump to SZ Z judge whether 2FH and VARIABLE LOOP8:
;LOOP1 ;are the same SET PA0
JMP MAIN ;if they are not the same, jump JMP LOOP5 ;if they are the same, jump to SET PA1
;to MAIN ;LOOP5 SET PA2
JMP MAIN SET PA3
LOOP1: LOOP5: SET PA4
SET PA0 SET PA0 SET PA5
MOV A, AD_VALUE SET PA1 SET PA6
MOV VARIABLE, A SET PA2 SET PA7
MOV A, 13H SET PA3 JMP MAIN
Приложение. Исходный код программы END
e-
чески разряженная батарея будут иметь одно и то же напряжение. В качестве примера возьмем батарею с напряжением 1,5 В. Если батарея полностью заряжена и параллельно к ней подключен резистор сопротивлением 100 Ом, ток через резистор составит 15 мА, а измеренное напряжение на выводах батареи — 1,5 В. При разряженной батарее напряжение, измеренное при таких условиях, будет значительно меньше 1,5 В. Это происходит потому, что разряженная батарея может отдать меньшую мощность, нежели заряженная. Таким образом, если разряженная батарея должна обеспечить ток 15 мА, сохранить при этом напряжение 1,5 В она не способна. При таком способе измерения обеспечивается четкое разграничение между заряженной и разряженной батарей. Надо отметить, что нагрузочный резистор должен быть определенного сопротивления.
При слишком большом сопротивлении ток через резистор мал и напряжение практически любой батареи будет около 1,5 В. Если же сопротивление слишком мало (то есть ток велик), напряжение любой батареи будет низким.
Для эксперимента автор использовал сильно разряженную батарею с номинальным напряжением 1,5 В. Без резистора напряжение батареи составляло 1,0 В, которое снижалось до 0,1 В при подключении резистора 100 Ом. Таким образом, сопротивление нагрузочного резистора было выбрано 100 Ом. После подключения резистора измерялось напряжение батареи, которое потом поступало на АЦП микроконтроллера НТ46И63 для преобразования в соответствующее цифровое значение. После программной обработки результат измерения отображался восемью светодиодами, которые подключались к выходам микроконтроллера.
Так как разрядность микроконтроллера НТ46И63 составляет 8 бит, емкость батареи может быть определена 256 уровнями. Однако для удобства будут использоваться только восемь уровней. Когда напряжение батареи равно 1,5 В, то гореть будут все восемь светодиодов, что означает полную емкость. Если же напряжение батареи около нуля, то все светодиоды будут погашены.
Аппаратная реализация
Разработанная схема измерителя емкости батареи представлена на рис. 1 и содержит микроконтроллер и несколько внешних элементов. ИС-фильтр, установленный между плюсом питания и аналоговым входом, предназначен для устранения помех. При разработке схемы использовались средства разработки Т1СЕ468ЕМЮ00Л и НТ-ГОЕ3000.
Компоненты и технологии, № 2'2005
Вполнить АЦ-п реобразование
Нет
1 -й светодиод включен
Нет
2-й светодиод включен
Нет
3-й светодиод включен
Нет
4-й светодиод включен
X г 1Да
Чтение ADR 5-й светодиод включен
Нет
:adr^2fh;
Нет
;adr^38h^
Да
6-Й СветОДИОД включен
Нет
^ADR>41H"
,Да
7-й светодиод включен
Нет
"adr>4dh; Да
i-и светодиод включен
Рис. 2. Блок-схема алгоритма
Аналого-цифровое преобразование
Чтобы использовать аналого-цифровой преобразователь микроконтроллера HT46, необходимо выполнить следующее:
1. Сконфигурировать каналы порта В установкой PCR2, PCR1 и PRC0.
2. Выбрать канал для АЦ-преобразования установкой ACS2, ACS1 и ACS0. Выбранный канал должен быть сконфигурирован (шаг 1).
3. Установить бит ADCR.7 = 0—> 1—>0 для запуска АЦ-преобразования, ЕОС будет находиться в 1, пока будет идти процесс АЦ-пре-образования.
4. Ожидание 76 тактов АЦП для завершения АЦ-преобразования, после чего ЕОС устанавливается в 0 (завершение процесса). Если разрешено прерывание от АЦП, то устанавливается флаг запроса на прерывание от АЦП.
5. Чтение результата АЦ-преобразования в регистре ADR.
Определение частоты АЦ-преобразования
Каждое аналого-цифровое преобразование занимает 76 тактов, которые задаются ADCS1 и ADCS0 (см. таблицу).
Блок-схема алгоритма программы показана на рис. 2, а исходный код программы — на предыдущей странице. ММ
Таблица
ADCS1 ADCS0 Частота АЦП
0 0 fsys/2
0 1 fsys/8
1 0 Fsys/32
1 1 Не определено