В HTML      В PDF
микроэлектроника, микросхема, транзистор, диод, микроконтроллер, память, msp430, Atmel, Maxim, LCD, hd44780, t6963, sed1335, avr, mega128
Предприятия Компоненты Документация Применения Статьи Новости

 
Пересюхтюмя


13-я Международная выставка электронных компонентов и комплектующих для электронной промышленности





Выставка Передовые Технологии Автоматизации





Главная страница > Применение > Микроконтроллеров > AVR
Пересюхтюмя


13-я Международная выставка электронных компонентов и комплектующих для электронной промышленности





Выставка Передовые Технологии Автоматизации


AVR400

Простой аналогово-цифровой преобразователь

Отличительные особенности:

  • Использование прерываний
  • Размер кода: 23 слова
  • Малое число внешних компонентов
  • Разрешающая способность: 6 разрядов
  • Измеряемый диапазон: 0 - 2В
  • Работает совместно с любым AVR-микроконтроллером с использованием 8-разрядного таймера-счетчика и аналогового компаратора

Введение

Данные рекомендации распространяются на приложения, критичные к стоимости и габаритам, в которых есть необходимость в простом аналогово-цифровом преобразовании. Ниже описано, как выполнить простой АЦП с использованием двух внешних компонентов: резистора и конденсатора. Данная разработка позволит получить компактное и недорогое устройство.

Принцип действия:

Практически все AVR-микроконтроллеры содержат аналоговый компаратор, который позволяет реализовать простой интегрирующий АЦП. Измеряемый сигнал подключается к инвертирующему входу, а опорный – к неинвертирующему. Опорный сигнал формируется на конденсаторе, который заряжается через резистор. Во время заряда конденсатора напряжение на нем будет изменяться по экспоненциальной зависимости. Если предположить, что диапазон изменения измеряемого сигнала ограничен пределом 0…2/5*VCC, то экспонента в указанных пределах прекрасно аппроксимируется прямой линией. Напряжение входного сигнала UIN определяется как время, которое требуется на зарядку конденсатора до напряжения, равного приложенному напряжению. За счет использования одного вывода порта В для управления зарядкой/разрядкой конденсатора требуется задействовать всего три вывода микроконтроллера (см. рисунок 1).

Схема включения микроконтроллера для получения АЦП
Рисунок 1 – Схема включения микроконтроллера для получения АЦП

Постоянная времени RC-цепи должно быть выбрана исходя из соотношения:

Параметры элементы для распространенных тактовых частот приведены в таблице 1. Если результирующая постоянная времени будет отличаться от расчетной, то это отобразиться на результате преобразования. Поэтому, требуется применение прецизионных элементов RC-цепи. Кривая изменения напряжения на конденсаторе вместе с аппроксимирующей прямой показаны на рисунке 2. Поскольку, напряжение питания в данном случае выступает как источник опорного напряжения, то оно не должно быть стабильным во время преобразования.

Линейность аналогово-цифрового преобразователя
Рисунок 2 – Линейность аналогово-цифрового преобразователя

Таблица 1 – Значений компонентов RC-цепи

XTAL, МГц 1 2 4 6 8 10 12 14 16
R, кОм 100 33 30 30 27 100 56 47 160
C, нФ 10 15 8.2 5.6 4.7 1 1.5 1.5 0.39

Для надежной работы АЦП необходимо, что конденсатор разряжался не более чем за 200 мкс между преобразованиями. Если конденсатор не разрядить полностью, то не будет возможности измерить малые величины напряжения. Если входное напряжение выше 2/5 VCC, то должен выдать максимальное значение кода. Это достигается за счет записи кода смещения в регистр таймера-счетчика 0 перед началом преобразования. После 512 циклов (64*8) таймер переполнится и сформируется запрос на соответствующее прерывание. Длительность данного процесса есть время заряда конденсатора до напряжения 2/5 VCC. Если напряжение находиться в пределах рабочего диапазона, то прерывание будет инициировать аналоговый компаратор. При этом, код смещения необходимо вычесть от вычисленного значения. Реализация

АЦП использует прерывания таймера-счетчика 0 и аналогового компаратора. Это позволяет разгрузить микроконтроллер в процессе преобразования.

Подпрограмма инициализации АЦП “convert_init”

Данная процедура вызывается для инициализации АЦП перед его использованием. В результате вызова процедуры разрешаются прерывания по таймеру и компаратору, а управляющий вывод настраивается на выход. После выполнения инструкции. Команда “SEI”, которая разрешает работы всей системы прерываний, может использоваться для разрешения работы АЦП. Аналогично команда “CLI” выключает АЦП.

convert_init:
       ldi result,$0B   	;Разрешение работы компаратора
       out ACSR,result 	;и разрешение его прерывания
       ldi result,$02      ;Разрешение прерывания таймера
       out TIMSK,result
       sbi PORTD,PD2       ;Настройка линии заряда/разряда как выход
       ret                 ;Вых из процедуры
	

Таблица 2 – Характеристики процедуры “convert_init”

Параметр Значение
Размер кода 6 слов
Количество циклов для выполнения 10, в т.ч. инструкция RET
Используемые регистры • Младшие регистры: нет
• Старшие регистры:   1
• Указатели:      нет

Таблица 3 – Использование регистров

Регистр Вход В ходе выполнения процедуры Выход
R16   "result" – Временный регистр  

Блок-схема процедуры  “convert_init”
Рисунок 3 – Блок-схема процедуры “convert_init”

Подпрограмма запуска преобразования “AD_convert”

Данная процедура используется для запуска преобразования. Она перезагружает счетчик значением 256 – 64 и разрешает счет с частотой XTAL/8. Далее очищается флаг завершения преобразования (T-флаг регистра статуса) и включается заряд конденсатора.

AD_convert:
	ldi result,preset  ;Очистка счетчика результата
	out TCNT0,result   ;и загрузка кода смещения
	clt		        ;Сброс флага окончания преобразования (t)
	ldi result,$02	   ;Запуск таймера 0 с предделением на 8
	out TCCR0,result    
	sbi PORTB,PB2      ;Включение режима заряда конденсатора
	ret			   ;Выход из процедуры
	

Таблица 4 – Параметры процедуры “AD_convert”

Параметр Значение
Размер кода 7 слов
Количество циклов для выполнения 10 (в т.ч. RET)
Используемые регистры • Младшие регистры
• Старшие регистры
• Указатели
• Флаги статуса
: Нет
:1
: Нет
:1

Таблица 5 – Используемые регистры процедурой “AD_convert”

Регистр Вход В ходе выполнения процедуры Выход
R16   "result" – Временный регистр  
SREG     T-флаг – Флаг индикации о выполнении преобразования

Блок-схема преобразования АЦП
Рисунок 4 – Блок-схема преобразования АЦП

Процедура обработки прерывания аналогового компаратора “ANA_COMP”

Данная процедура вызывается по завершении преобразования. Она выполняет загрузку значения таймера-счетчика 0, останавливает таймер и устанавливает флаг завершения преобразования (T-флаг в регистре статуса SREG). После этого из значения таймера вычитается код смещения. Код смещения при вычитании необходимо увеличить на 1, т.к. обработка прерывания требует минимум 7 циклов.

ANA_COMP:  
     in  result,TCNT0        ;Загрузка значения таймера 0
     clr  temp    	        ;Останов таймера 0
     out TCCR0,temp         
     subi result,preset+1    ;Вычисление результата преобразования
     cbi PORTD,PD2           ;Запуск разрядки конденсатора
     set			        ;Установка флага завершения преобразования
	reti                    ;Выход из прерывания
	

Tаблица 6 – Характеристики процедуры “ANA_COMP”

Параметр Значение
Размер кода 7 слов
Количество циклов для выполнения 11 (в т.ч. RETI)
Используемые регистры • Младшие регистры
• Старшие регистры
• Указатели
• Статусные флаги
:Нет
:2
:Нет
:1
Используемые прерывания Прерывания таймера-счетчика 0 и аналогового компаратора

Таблица 7 – Использование регистров в процедуре “ANA_COMP”

Регистр Вход В ходе выполнения процедуры Выход
R16   "result" – Запоминание состояния таймера "result" – Содержит результат преобразования
R17   "temp" – временный регистр  
SREG     T-флаг – Флаг индикации завершения преобразования

Блок-схема процедуры
Рисунок 5 – Блок-схема процедуры "ANA_COMP"

Пример программы

Предлагаемый пример использует данный принцип построения АЦП, используя описанные выше процедуры. Результат преобразования представляется в двоичном виде на выводах порта B.

.include "1200def.inc"

;***** Константы

.equ	preset=192			;Предустановленный код смещения T/C0 (256-64)	

;***** Глобальные регистры АЦП

.def	result=r16			;Результат преобразования и промежуточные данные
.def	temp=r17			;Временный регистр

;**************************************************************************
;*  	Начало программы
;**************************************************************************
	.cseg


	.org $0000
	rjmp RESET      ;Обработка сброса
	.org OVF0addr
	rjmp ANA_COMP   ; Обработка прерывания таймера 0
	.org ACIaddr
	rjmp ANA_COMP   ;Обработка прерывания аналогового компаратора

RESET:
		rcall	 convert_init	; Инициализация АЦП
		sei			     ; Глобальное разрешение прерываний
		ldi	result,$ff	     ; Настройка порта В на выход
		out	DDRB,result	
Delay:	clr	result		; Очистка временного счетчика 1
		ldi	temp,$f0	     ; Очистка временного счетчика 2
loop1:	inc	result		; Увеличение на 1 временного счетчика 1
   		brne	loop1		     ; и ожидание его переполнения
		inc 	temp		     ; Увеличение на 1 временного счетчика 2
		brne 	loop1		     ; и ожидание его переполнения

		rcall	AD_convert	     ; Запуск преобразования
Wait:		brtc	Wait		     ; Ожидание завершения преобразования
		out	PORTB,result	; Вывод результата на порт В

		rjmp	Delay		     ; Повтор преобразования
	

Таблица 8 – Сводные характеристики программных средств для реализации АЦП

Параметр Значение
Размер кода 23 слова – Только процедуры АЦП
37 слова – Полный объем с тестовой программой
Используемые
регистры
• Младшие регистры
• Старшие регистры
• Указатели
• Флаги статуса
: Нет
: 2
: Нет
: 1
Используемые
прерывания
Прерывание по переполнению таймера-счетчика 0
Прерывание по аналоговому компаратору
Используемые периферийные устройства Таймер-счетчик 0
Аналоговый компаратор (разряды 0 и 1 порта В)
Разряд 2 порта B
Порт D (только для примера программы)

тонировка