Микроконтроллеры

         

AVR400: Недорогой аналого-цифровой преобразователь


Здесь находятся подпрограммы описанные в документе, а также программа примера, на ассемблере. (можно просматривать блокнотом)

  AVR400: Недорогой аналого-цифровой преобразователь Оригинал: Application Note AVR400 фирмы ATMEL перевел: Sinbad             г.Самара.             20.10.2000 г

Особенности

  • Выполняется по прерыванию
  • Размер кода: 23 слова
  • Маленькое число внешних компонентов
  • Разрешение: 6 бит
  • Диапазон измерения: 0 – 2 В
  • Работает на всех AVR устройствах с 8-битным таймером/счетчиком и аналоговым компаратором
Введение
      Целью этого приложения являются устройства, нуждающиеся в недорогом и малогабаритном АЦП. Ниже описывается изготовление простого АЦП всего лишь с двумя внешними компонентами, резистором и конденсатором.

Теория преобразования
      Особенность почти всех AVR микроконтроллеров это аналоговый компаратор, который позволяет просто реализовать АЦП. Измеряемый сигнал подается на инвертирующий вход, а образцовый сигнал на не инвертирующий. Образцовый сигнал формируется при зарядке конденсатора через резистор. При зарядке конденсатора, напряжение на нем изменяется по экспоненциальному закону. Если измеряемый диапазон напряжений ограничить 2/5 Vcc, экспонента хорошо аппроксимируется прямой. Напряжение измеряемого сигнала UIN находим, измеряя время необходимое для того, чтобы напряжение на конденсатор превысило измеряемое. Используя один вывод порта В для контроля зарядки и разрядки конденсатора, всего используется только три вывода. Принципиальная схема представлена на рисунке 1.

Рисунок 1. Принципиальная схема       Постоянная времени R/C цепи должна быть выбрана так, чтобы удовлетворять следующему равенству:

512/f = - R C ln(1 - 2/5) , то есть R C = 1002/f

      Номиналы элементов для некоторых типичных частот генератора приведены в таблице 1. Если постоянная времени отличается от этого, это приведет к ошибке в результате.



Поэтому в RC цепи необходимо использовать компоненты с высокой точностью. График напряжения на конденсаторе вместе с прямой линией приведен на рисунке 2. Так как напряжение питания используется как опорное, то оно должно быть стабильным в течение преобразования.

Рисунок 2. Линейность АЦП

Таблица 1. Значения элементов R/C цепочки
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 и аналогового компаратора. Это освобождает ресурсы MCU в течение преобразования. Подпрограмма “convert_init” – инициализация АЦП
      Эта подпрограмма вызывается для инициализации АЦП. Она должна быть выполнена перед использованием АЦП. Вызов этой подпрограммы разрешает прерывания компаратора и таймера и устанавливает управляющий вывод как выход. Затем должна быть выполнена инструкция 'SEI', которая разрешает глобальные прерывания, для включения АЦП. Выполнением инструкции 'CLI' , АЦП выключается. Таблица 2. Параметры подпрограммы “convert_init”
ПАРАМЕТР
ЗНАЧЕНИЕ
Размер кода
6 слов
Выполняемые циклы
10 циклов, в том числе инструкция RET
Используемые регистры
  • Младшие регистры :нет
  • Старшие регистры :1
  • Указатели : нет
<


b> Таблица 3. Регистры используемые “convert_init”
РЕГИСТР
НА ВХОДЕ
ВНУТРИ
НА ВЫХОДЕ
R16
  "result" – рабочий регистр
 
Рисунок 3. Блок схема “convert_init”

“AD_convert” – старт А/Ц преобразования
      Эта подпрограмма используется для запуска А/Ц преобразования. Она загружает в счетчик значение 256 – 64 и запускает счет с частотой XTAL/8. Флаг завершения преобразования ( Т – флаг в регистре статуса) очищается и начинается зарядка конденсатора. Таблица 4. Параметры подпрограммы “AD_convert”
ПАРАМЕТР
ЗНАЧЕНИЕ
Размер кода
7 слов
Выполняемые циклы
10 циклов, в том числе инструкция RET
Используемые регистры
  • Младшие регистры :нет
  • Старшие регистры :1
  • Указатели : нет
  • Флаги статуса :1
Таблица 5. Регистры используемые “AD_convert”
РЕГИСТР
НА ВХОДЕ
ВНУТРИ
НА ВЫХОДЕ
R16
  "result" – рабочий регистр
 
SREG
    T – флаг. Этот флаг показывает, что идет преобразование
Рисунок 4. Блок схема А/Ц преобразования

“ANA_COMP” подпрограмма обработки прерывания
      Эта подпрограмма выполняется когда преобразование закончено. Она загружает значение Таймера/счетчика 0, останавливает таймер и устанавливает флаг завершения преобразования (Т – флаг в SREG). Затем смещение вычитается из значения таймера. Необходимо вычесть на единицу больше чем смещение, так как обработка прерывания требует минимум 7 циклов. Таблица 6. Параметры подпрограммы “ANA_COMP”
ПАРАМЕТР
ЗНАЧЕНИЕ
Размер кода
7 слов
Выполняемые циклы
11 циклов, в том числе инструкция RET
Используемые регистры
  • Младшие регистры :нет
  • Старшие регистры :2
  • Указатели : нет
  • Флаги статуса :1
Используемые прерывания
Прерывания таймера/счетчика 0 и аналогового компаратора
Таблица 7. Регистры используемые “ANA_COMP”
РЕГИСТР
НА ВХОДЕ
ВНУТРИ
НА ВЫХОДЕ
R16
  "result" – хранит значение таймера
"result" – содержит результат преобразования
R17
  "temp"– рабочий регистр
 
SREG
    T – флаг. Этот флаг показывает, что идет преобразование



Рисунок 5. Блок схема "ANA_COMP"

Пример программы
      Пример программы включенный в данное приложение, выполняет последовательное преобразование и выдает данные в виде двоичного значения на порт В.

Таблица 8. Общая характеристика программы примера
Содержание раздела






ПАРАМЕТР
ЗНАЧЕНИЕ
Размер кода
23 слова – только процедура А/Ц преобразования

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