Рубликатор

 



























Все о псориазе



Определение емкости батарей

В статье рассмотрено применение микроконтроллера HT46R63 в устройстве определения емкости батарей. Идея заключается, во-первых, в преобразовании емкости батареи в аналоговый сигнал, затем — в преобразовании этого сигнала посредством встроенного в HT46R63 аналого-цифрового преобразователя в цифровой. Этот цифровой сигнал и будет индицировать емкость батареи с помощью восьми светодиодов: если емкость батареи выше самого высокого уровня, все светодиоды будут гореть; если емкость батареи ниже минимально допустимой величины, светодиоды будут отключены.

Микроконтроллер HT46R63 представляет собой 8-разрядный однократнопрограммируемый (ОТР) прибор фирмы Holtek нового поколения со встроенным АЦП и драйвером ЖКИ. Его структура и параметры были приведены в предыдущем номере нашего журнала («Цифровой вольтметр на базе микроконтроллера HT46R63», с. 98–100).

Принцип работы

Измерение емкости батареи — это не просто измерение ее напряжения. Параллельно с батареей до начала измерения должен быть установлен соответствующий резистор. Если резистор не используется, то полностью заряженная и практически разряженная батарея будут иметь одно и то же напряжение. В качестве примера возьмем батарею с напряжением 1,5 В.

Если батарея полностью заряжена и параллельно к ней подключен резистор сопротивлением 100 Ом, ток через резистор составит 15 мА, а измеренное напряжение на выводах батареи — 1,5 В. При разряженной батарее напряжение, измеренное при таких условиях, будет значительно меньше 1,5 В. Это происходит потому, что разряженная батарея может отдать меньшую мощность, нежели заряженная. Таким образом, если разряженная батарея должна обеспечить ток 15 мА, сохранить при этом напряжение 1,5 В она не способна. При таком способе измерения обеспечивается четкое разграничение между заряженной и разряженной батарей. Надо отметить, что нагрузочный резистор должен быть определенного сопротивления.


Рис. 1. Схема измерителя емкости батарей

При слишком большом сопротивлении ток через резистор мал и напряжение практически любой батареи будет около 1,5 В. Если же сопротивление слишком мало (то есть ток велик), напряжение любой батареи будет низким.

Для эксперимента автор использовал сильно разряженную батарею с номинальным напряжением 1,5 В. Без резистора напряжение батареи составляло 1,0 В, которое снижалось до 0,1 В при подключении резистора 100 Ом. Таким образом, сопротивление нагрузочного резистора было выбрано 100 Ом. После подключения резистора измерялось напряжение батареи, которое потом поступало на АЦП микроконтроллера HT46R63 для преобразования в соответствующее цифровое значение. После программной обработки результат измерения отображался восемью светодиодами, которые подключались к выходам микроконтроллера. Так как разрядность микроконтроллера HT46R63 составляет 8 бит, емкость батареи может быть определена 256 уровнями. Однако для удобства будут использоваться только восемь уровней. Когда напряжение батареи равно 1,5 В, то гореть будут все восемь светодиодов, что означает полную емкость. Если же напряжение батареи около нуля, то все светодиоды будут погашены.

INCLUDE HT46R63.INC
;-----------------------------------------------------------------------------
;HT46R63 battery energy capacity detector
;-----------------------------------------------------------------------------
DATA. SECTION AT 30H 'DATA'             ;data start
CLR_MEM_COUNTER DB question             ;declare
                                        CLR_MEM_COUNTER register
AD_VALUE        DB question             ;declare AD_VALUE register
VARIABLE        DB question             ;declare VARIABLE register
;-----------------------------------------------------------------------------
CODE. SECTION AT 0 'CODE'        ;program start
      ORG     00H
      JMP     START
START:
      MOV     A, 0FFH-30H
      MOV     CLR_MEM_COUNTER, A
      MOV     A, 31H
      MOV     MP0, A
      CLR_MEM:
      CLR     R0
      INC     MP0
      SDZ     CLR_MEM_COUNTER
      JMP     CLR_MEM
MAIN:
      MOV     A, 48H
      MOV     ADCR, A
                                  ;set AN0 as analog input, use an
                                  ;analog channel only
      SET     ADCR.7
      CLR     ADCR.7              ;A/D converter in action
LOOP:
      SZ      ADCR.6              ;when EOCB=0, A/D conversion is
                                  ;completed
      JMP     LOOP                ;when EOCB=1, jump LOOP to
                                  ;convert
      CLR     PAC                 ;set PA OUTPUT
      CLR     PA                  ;set PA LOW VOLTAGE
      NOP
      MOV     A, ADR
      MOV     AD_VALUE, A         ;put A/D conversion value into
                                  ;AD_VALUE register
      MOV     VARIABLE, A
      MOV     A, 0AH
      SUB     A, VARIABLE
      SNZ     C
                                   ;compare 0AH with VARIABLE
                                   ;register value
      JMP     LOOP1
      SZ      Z                    ;judge whether 0AH and VARIABLE
                                   ;are the same
      JMP     LOOP1                ;if they are the same, jump to
                                   ;LOOP1
      JMP     MAIN                 ;if they are not the same, jump
                                   ;to MAIN
LOOP1:
      SET     PA0
      MOV     A, AD_VALUE
      MOV     VARIABLE, A
      MOV     A, 13H
      SUB     A, VARIABLE
      SNZ     C                    ;compare 13H with VARIABLE
                                   ;register value
      JMP     LOOP2
      SZ      Z                    ;judge whether 13H and VARIABLE
                                   ;are the same
      JMP     LOOP2                ;if they are the same, jump to
                                   ;LOOP2
      JMP     MAIN
LOOP2:
      SET     PA0
      SET     PA1
      MOV     A, AD_VALUE
      MOV     VARIABLE, A
      MOV     A, 1DH
      SUB     A, VARIABLE
      SNZ     C                      ;compare 1DH with VARIABLE
                                     ;register value
      JMP     LOOP3
      SZ      Z                      ;judge whether 1DH and VARIABLE
                                     ;are the same
      JMP     LOOP3                  ;if they are the same, jump to
                                     ;LOOP3
      JMP     MAIN
LOOP3:
      SET     PA0
      SET     PA1
      SET     PA2
      MOV     A, AD_VALUE
      MOV     VARIABLE,A
      MOV     A, 26H
      SUB     A,VARIABLE
      SNZ     C                     ;compare 26H with VARIABLE
                                    ;register value
      JMP     LOOP4
      SZ      Z                     ;judge whether 26H and VARIABLE
                                    ;are the same
      JMP     LOOP4                 ;if they are the same, jump to
                                    ;LOOP4
      JMP     MAIN
LOOP4:
      SET     PA0
      SET     PA1
      SET     PA2
      SET     PA3
      MOV     A, AD_VALUE
      MOV     VARIABLE, A
      MOV     A, 2FH
      SUB     A, VARIABLE
      SNZ     C                         ;compare 2FH with VARIABLE
                                        ;register value
      JMP     LOOP5
      SZ      Z                         ;judge whether 2FH and VARIABLE
                                        ;are the same
      JMP     LOOP5                     ;if they are the same, jump to
                                        ;LOOP5
      JMP     MAIN
LOOP5:
      SET     PA0
      SET     PA1
      SET     PA2
      SET     PA3
      SET     PA4
      MOV     A, AD_VALUE
      MOV     VARIABLE, A
      MOV     A, 38H
      SUB     A, VARIABLE
      SNZ     C                          ;compare 38H with VARIABLE
                                         ;register value
      JMP     LOOP6
      SZ      Z                          ;judge whether 38H and VARIABLE
                                         ;are the same
      JMP     LOOP6                      ;if they are the same, jump to
                                         ;LOOP6
      JMP     MAIN
LOOP6:
      SET     PA0
      SET     PA1
      SET     PA2
      SET     PA3
      SET     PA4
      SET     PA5
      MOV     A, AD_VALUE
      MOV     VARIABLE, A
      MOV     A, 41H
      SUB     A,VARIABLE
      SNZ     C                        ;compare 41H with VARIABLE
                                       ;register value
      JMP     LOOP7
      SZ      Z                        ;judge whether 41H and VARIABLE
                                       ;are the same
      JMP     LOOP7                    ;if they are the same, jump to
                                       ;LOOP7
      JMP     MAIN
LOOP7:
      SET     PA0
      SET     PA1
      SET     PA2
      SET     PA3
      SET     PA4
      SET     PA5
      SET     PA6
      MOV     A, AD_VALUE
      MOV     VARIABLE, A
      MOV     A, 4DH
      SUB     A, VARIABLE
      SNZ     C                         ;compare 4DH with VARIABLE
                                        ;register value
      JMP     LOOP8
      SZ      Z                         ;judge whether 4DH and VARIABLE
                                        ;are the same
      JMP     LOOP8                     ;if they are the same, jump to
                                        ;LOOP8
      JMP     MAIN
LOOP8:
      SET     PA0
      SET     PA1
      SET     PA2
      SET     PA3
      SET     PA4
      SET     PA5
      SET     PA6
      SET     PA7
      JMP     MAIN
END 

Приложение. Исходный код программы

Аппаратная реализация

Разработанная схема измерителя емкости батареи представлена на рис. 1 и содержит микроконтроллер и несколько внешних элементов. RC-фильтр, установленный между плюсом питания и аналоговым входом, предназначен для устранения помех. При разработке схемы использовались средства разработки TICE46SER0000A и HT-IDE3000.

Аналого-цифровое преобразование

Чтобы использовать аналого-цифровой преобразователь микроконтроллера 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 (см. таблицу).

Таблица

ADCS1 ADCS0 Частота АЦП
0 0 FSYS/2
0 1 FSYS/8
1 0 FSYS/32
1 1 Не определено

Блок-схема алгоритма программы показана на рис. 2, а исходный код программы — на предыдущей странице.

Блок-схема алгоритма
Рис. 2. Блок-схема алгоритма

Чиа Вей Шеу
Перевод: Николай Ракович


Статьи по: ARM PIC AVR MSP430, DSP, RF компоненты, Преобразование и коммутация речевых сигналов, Аналоговая техника, ADC, DAC, PLD, FPGA, MOSFET, IGBT, Дискретные полупрoводниковые приборы. Sensor, Проектирование и технология, LCD, LCM, LED. Оптоэлектроника и ВОЛС, Дистрибуция электронных компонентов, Оборудование и измерительная техника, Пассивные элементы и коммутационные устройства, Системы идентификации и защиты информации, Корпуса, Печатные платы

Design by GAW.RU