3538

Изучение аналого-цифрового преобразователя

Лабораторная работа

Коммуникация, связь, радиоэлектроника и цифровые приборы

Изучение аналого-цифрового преобразователя Изучить функционирование встроенного аналого-цифрового преобразователя (АЦП) микроконтроллера АТmega8535, получить практические навыки программирования микроконтроллера для обработки аналоговых сигналов. По...

Русский

2012-11-03

417.5 KB

41 чел.

Изучение аналого-цифрового преобразователя

Изучить функционирование встроенного аналого-цифрового преобразователя (АЦП) микроконтроллера АТmega8535, получить практические навыки программирования микроконтроллера для обработки аналоговых сигналов.

Пояснения к работе

Микроконтроллер АТmega8535 имеет АЦП (Analog to Digital Converter)             со следующими характеристиками:

разрешение 10 разрядов;

точность ±2 LSB;

интегральная нелинейность 0.5 LSB;

время преобразования 70...280 мкс;

8 мультиплексируемых каналов входа;

режимы циклического и однократного преобразования;

прерывание по завершению ADC преобразования;

устройство подавления шумов Sleep-режима.

AЦП подсоединен к 8-канальному аналоговому мультиплексору, позволяющему использовать любой вывод порта А в качестве входа AЦП.         AЦП содержит усилитель выборки/хранения, удерживающий напряжение входа AЦП во время преобразования на неизменном уровне (см. рис.2.3).

Рис. 2.3. Блок-схема аналого-цифрового преобразователя

Для питания АЦП используются два отдельных вывода: AVCC и AGND. Вывод AGND должен быть подсоединен к GND, а напряжение AVCC не должно отличаться от напряжения VCC более чем на ±0,3 В.

Внешнее напряжение сравнения подается на вывод AREF и должно быть в диапазоне от AGND до AVCC.

Аналого-цифровой преобразователь может работать в двух режимах: режиме однократного преобразования и режиме циклического преобразования. В режиме однократного преобразования каждое преобразование инициируется пользователем. В режиме циклического преобразования AЦП осуществляет выборку и обновление содержимого регистра данных AЦП непрерывно. Выбор режима производится битом ADFR регистра ADCSR.

Работа AЦП разрешается установкой в состояние 1 бита ADEN в регистре ADCSR. Первому преобразованию, начинающемуся после разрешения AЦП, предшествует пустое инициализирующее преобразование. На пользователе это отражается лишь тем, что первое преобразование будет занимать 26 тактовых циклов, вместо обычных 14. Преобразование начинается с установки в состояние 1 бита начала преобразования ADSC. Этот бит находится в состоянии 1 в течение всего цикла преобразования и сбрасывается, по завершении преобразования, аппаратно. Если в процессе выполнения преобразования выполняется смена канала данных, то AЦП вначале закончит текущее преобразование и лишь потом выполнит переход к другому каналу.

АЦП формирует 10-разрядный результат двух регистров – ADSH и ADCL.    Для чтения правильного результата из этих регистров существует следующий механизм. При чтении результата первым должен читаться регистр ADCL. После этого доступ АЦП к регистрам данных блокируется.  Это обозначает, что если следующее преобразование завершено между чтением ADCL и ADSH, его результат будет потерян. После чтения регистра ADSH доступ АЦП к регистрам данных восстанавливается.

Ацп имеет свой флаг и вектор прерывания. Флаг запрос ADIF устанавливается при завершении прерываний.

АЦП включает делитель частоты, который формирует для него тактовый сигнал из синхросигнала процессора. АЦП работает с тактовой частотой                        в диапазоне от 50 до 250 кГц.

Биты ADPSOADPS2 регистра управления ADCSR используются для формирования тактовой частоты АЦП из сигнала XTAL. Делитель частоты работает, когда установлен бит ADEN.

При запуске АЦП установкой бита ADSC преобразование начинается               по заднему фронту импульса синхросигнала АЦП. Один такт синхросигнала требуется на выборку-сохранение аналогового сигнала, после чего 13 циклов затрачивается на собственно преобразование и запись результата в регистры ADCL, ADCH.    

                                                                                                               

Регистр выбора мультиплексора ADC - ADMUX 

(ADC Multiplexer Select Register)

Бит

7

6

5

4

3

2

1

0

$07 ($27)

REFS1

REFS0

ADLAR

MUX4

MUX3

MUX2

MUX1

MUX0

ADMUX

Чтение/Запись

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

Исходное значение

0

0

0

0

0

0

0

0

 Биты 7, 6 – REFS1:REFS0: Reference Selection Bits – Выбор источника опорного напряжения

Модуль  АЦП может использовать различные источники опорного напряжения.

Выбор конкретного источника опорного напряжения осуществляется с помощью разрядов REFS1:REFS0 регистра ADMUX. (Табл.2.17а)

Таблица 2.17а. Выбор источника опорного напряжения

REFS1

REFS0

Источник опорного напряжения

0

0

Внешний ИОН, подключенный к выводу  AREF, внутренний ИОН отключен

0

1

Напряжение питания AVcc

1

0

Зарезервировано

1

1

Внутренний ИОН напряжением 2.56 В, подключенный к выходу AREF

Как указано в таблице, внутренний ИОН подключен к выводу AREF микроконтроллера. Поэтому при его использовании к выводу  AREF можно подключить внешний фильтрующий конденсатор для повышения помехозащищенности. После завершения преобразования (при установке в «1» флага ADIF регистра ADCSR) его результат сохраняется в регистре данных АЦП

  Бит 5 – ADLAR: ADC Left Adjust Result – Выравнивание результата преобразования влево

По умолчанию результат преобразования выравнивается вправо (старшие 6 разрядов регистра ADCH-незначащие). Однако он может выравниваться и влево (младшие 6 разрядов регистра ADCL-незначащие). Для управления выравниванием результата преобразования служит разряд ADLAR регистра ADMUX. Если этот разряд установлен в «1», результат преобразования выравнивается по левой границе 16-разрядного слова, если обращен в «0»- по правой границе.

 Биты 4.. 0 – MUX4.. MUX0: Analog Channel Select Bits 2-0 - Биты выбора аналогового канала

Состояние данных битов определяет какой из восьми аналоговых каналов         (0 - 7) будет подключен к АЦП.

Регистр управления и состояния ADC - ADCSR 

(ADC Control and Status Register)

Бит

7

6

5

4

3

2

1

0

$06 ($26)

ADEN

ADSC

ADATE

ADIF

ADIE

ADPS2

ADPS1

ADPS0

ADCSR

Чтение/Запись

 R/W

 R/W

 R/W

 R/W

 R/W

 R/W

 R/W

 R/W

Исходное значение

0

0

0

0

0

0

0

0

 Бит 7 - ADEN: ADC Enable - Разрешение ADC

Установка данного бита в состояние 1 разрешает работу АЦП. Очистка бита запрещает работу АЦП. Запрещение АЦП в процессе преобразования прекращает преобразование.

 Бит 6 - ADSC: ADC Start Conversion - Запуск преобразования АЦП

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

ADSC будет сохранять состояние 1 в течение всего цикла преобразования и сбрасывается по завершении преобразования. При выполнении пустого преобразования, предшествующего активируемому, бит ADSC остается установленным до завершения активируемого преобразования. Запись 0 в этот бит эффекта не оказывает.

 Бит 5 – ADATE: ADC Auto Trigger Enable –Разрешение преобразования по событию «Захват»

В микроконтроллере Atmega8535 запуск АЦП возможен не только по команде пользователя, но и по прерыванию от некоторых периферийных устройств, имеющихся в составе микроконтроллера. Для выбора режима работы  используется разряд ADATE регистра ADCSR и разряды ADTS2..0  регистра SFIOR.

Если разряд  ADATE сброшен в «0», АЦП работает в режиме одиночного преобразования. Если же разряд ADATE установлен в «1», функционирование АЦП определяется содержимым разрядов ADTS2..0  согласно Табл. 2.17б

Таблица 2.17б. Источник сигнала для запуска преобразования Atmega8535

ADTS2  

ADTS1

ADTS0

Источник стартового сигнала

0

0

0

Режим непрерывного преобразования

0

0

1

Прерывание от аналогового компаратора

0

1

0

Внешнее прерывание INT0

0

1

1

Прерывание по событию «Совпадение» таймера/счетчика Т0

1

0

0

Прерывание по переполнению таймера/счетчика Т0

1

0

1

Прерывание по событию «Совпадение В» таймера/счетчика Т1

1

1

0

Прерывание по переполнению таймера/счетчика Т1

1

1

1

Прерывание по событию «Захват» таймера/счетчика Т1

 Бит 4-ADIF: ADC Interrupt Flag - Флаг прерывания АЦП

Данный бит устанавливается в состояние 1 по завершению преобразования и обновления регистров данных. Прерывание по завершению преобразования АЦП выполняется, если в состояние 1 установлены, бит ADIE и I-бит регистра SREG. Бит ADIF сбрасывается аппаратно при выполнении подпрограммы обработки соответствующего вектора прерывания. Кроме того, бит ADIF может быть очищен записью во флаг логической 1. Этого необходимо остерегаться при чтении-модификации-записи ADCSR, поскольку может быть запрещено отложенное прерывание. Это применимо и в случаях использования команд SBI и CBI.

 Бит 3 – ADIE: ADC Interrupt Enable - Разрешение прерывания от блока АЦП

При установленных в состояние 1 бите ADIE и I-бите регистра SREG активируется прерывание по завершению преобразования АЦП.

 Биты 2.. 0 - ADPS2.. ADPS0: ADC Prescaler Select Bits - Выбор коэффициента предварительного деления

Данные биты определяют коэффициент деления частоты XTAL для получения необходимой тактовой частоты АЦП.

Таблица 2.17. Выбор коэффициента предварительного деления

ADPS2

ADPS1

ADPS0

Коэффициент деления

0

0

0

2

0

0

1

2

0

1

0

4

0

1

1

8

1

0

0

16

1

0

1

32

1

1

0

64

1

1

1

128

 

Регистры данных ADC - ADCL и ADCH - (ADC Data Register)

Бит

15

14

13

12

11

10

9

8

$05 ($25)

ADC9

ADC8

ADCH

$04 ($24)

ADC7

ADC6

ADC5

ADC4

ADC3

ADC2

ADC1

ADC0

ADCL

7

6

5

4

3

2

1

0

Чтение/Запись

R

R

R

R

R

R

R

R

R

R

R

R

R

R

R

R

Исходное значение

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

По завершении цикла преобразования результат преобразования размещается    в этих двух регистрах. Важно, чтобы в циклическом режиме считывались оба регистра и чтобы регистр ADCL считывался перед считыванием ADCH.

В блоке управления лабораторного комплекса канал РАО порта А используется для ввода сигнала для АЦП микроконтроллера. Вводимое напряжение снимается   с потенциометрического резистора R3 (рис. 1.3). Движок  этого резистор выведен на лицевую панель. Максимальное напряжение, снимаемое с потенциометрического резистора, составляет 5В.

Ниже представлена программа, обеспечивающая вывод на семисегментный индикатор HG2 (рис.1.3) цифр от 0 до  5 в зависимости от напряжения на входе АЦП.

Цифра 0 выводится, если напряжение на входе АЦП  находится в пределах 0...0,5В,

1 – в пределах 0,5...1,5В,

2 – в пределах 1,5...2,5В,

3 – в пределах 2,5...3,5В,

4 – в пределах 3,5...4,5В,

5 – в пределах 4,5...5,0В.

                                    

; Пример использования АЦП микроконтроллером АТmega8535

.include «m8535def.inc» ; включить файл описания для АТmega8535

.def code = r20 ; регистр куда помещается преобразованное число

;

.ORG$0 ; обработка прерывания сброса

rjmp  Reset

.ORG$0e ; вектор АЦП

rjmp  inADC

;  

Reset:  

ldi r16,$02 ; Определение стека – вершин по адресу

out SPH, r16 ; $ 025F

ldi     r16,$5f

out    SPL, r16

cbi    DDRA, 0 ; PA0 на ввод

sbi    PORTA, 0 ; Подключить вывод РА0

ldi     r16, $0ff  ; Определить все выводы портов D и С

out    DDRD, r16 ; на выход

out    DDRC, r16                                

sbi    PORTB, 3 ; Активизировать семисегментный индикатор HG2

 ; (открыть транзистор VT2)                       

ldi     r16, $00 ; выбор нулевого канал АЦП (РА0)

out    ADMUX, r16

ldi     r16, $0e8 ; инициализация АЦП: разрешение и запуск циклического

out  ADCSR,r16 ; преобразования без деления тактовой частоты  

sei  ; установка общего флага прерываний

m1:

rjmp  m1 ; рабочий цикл программы, ничего не делаем

;

inADC: ; Подпрограмма обслуживающая прерывания

; по запросу АЦП

in         r16, ADCL ; Считать младший байт регистра данных АЦП

in         code, ADCH ; Считать старший байт регистра данных АЦП   

lsr        r16 ; Исключить два младших разряда

lsr        r16 ; преобразованного сигнала

swap   code ; Поменять местами биты 3...0 с

lsl        code ; битами 7...4 и сдвинуть влево на

lsl        code ; два разряда

andi    code, $0c0 ; Выделить биты 7 и 6 code

or        code, r16 ;Организовать в code восьмиразрядное преобразованное число

rcall   kod ; Вызвать подпрограмму зажигания цифры

reti 

;

 ; Подпрограмма зажигания цифры

kod:

ldi     r22, 53 ; В r22 дискрета напряжения на РА0 для цифр на

  ; семисегментном индикаторе   

ldi     r21, 38 ; В r21 максимальное значение кода АЦП при котором на

  ; индикаторе горит 0 – порог нуля

cp     code, r21 ; Если код АЦП не превышает порог нуля, то зажечь 0

brlo   k0

add   r21, r22 ; Установить порог единицы

cp     code, r21 ; Если код АЦП не превышает порог единицы, то зажечь 1

brlo   k1

add   r21, r22 ; Установить порог двойки

cp     code, r21 ; Если код АЦП не превышает порог двойки, то зажечь 2

brlo   k2

add   r21, r22 ; Установить порог тройки

cp     code, r21 ; Если код АЦП не превышает порог тройки, то зажечь 3

brlo   k3

add   r21, r22 ; Установить порог четверки

cp     code, r21 ; Если код АЦП не превышает порог четверки, то зажечь 4

brlo   k4

ldi     r23, $6d ; Если код АЦП выше порога четверки, то зажечь 5

ret  ; Выход из подпрограммы

 ;

k0:

ldi     r23, $3f ; Зажечь 0

out    PORTC, r23

ret  ; Возврат

k1:

ldi     r23, $06 ; Зажечь 1

out    PORTC, r23

ret  ; Возврат

k2:

ldi     r23, $5b ; Зажечь 2

out    PORTC, r23

ret  ; Возврат

k3:

ldi     r23, $4f ; Зажечь 3

out    PORTC, r23

ret  ; Возврат

k4:

ldi     r23, $66 ; Зажечь 4

out    PORTC, r23

ret  ; Возврат


Варианты индивидуальных заданий

  1.  В одном из регистров общего назначения записано число, определяющее заданный уровень порога преобразуемого напряжения. Если напряжение на входе АЦП меньше (ниже) этого порога, то на семисегментном индикаторе HG2 высвечивается буква Н, при равенстве напряжений -  буква Р, при превышении преобразуемым напряжением уровня порога (больше) буква Б. При выполнении этого задания два младших разряда преобразованного числа АЦП опустить (исключить).

  1.  Полученный 10-разрядный результат преобразования АЦП
    в двоичном формате вывести на семисегментные индикаторы
    HG1 и HG2 (динамическая индикация). При изменении положения движка потенциометрического резистора R3 (рис. 1.3) наблюдать изменение информации на индикаторах HG1 и HG2.

  1.  В двух регистрах общего назначения записаны числа, определяющие заданные уровни порогов преобразуемого напряжения. В первом регистре число меньше, чем во втором регистре. Если напряжение на входе АЦП меньше (ниже) порога первого регистра, то на семисегментном индикаторе HG1 высвечивается буква Н. Если результат преобразования АЦП находится между двумя порогами,     то на порт С выводится это число в двоичном коде и отображается на индикаторе  HG1. Если же результат преобразования превышает порог второго регистра, то на индикатор  HG1 выводится буква Б. при выполнении этого задания два младших разряда преобразованного числа АЦП опустить (исключить).

  1.  Организовать мигание светодиода VD6. В момент загорания светодиода раздается щелчок звукоизлучателя HA1. При увеличении уровня напряжения на входе АЦП, скорость мигания увеличивается, при уменьшении напряжения – скорость уменьшается.  

  1.  В двух регистрах общего назначения записаны числа, определяющие заданные уровни порогов преобразуемого напряжения. В первом регистре число меньше, чем во втором регистре. Если напряжение на входе АЦП меньше порога первого регистра, то на семисегментных индикаторах HG1 и HG2                                в шестнадцатеричном формате выводится число первого регистра. Если напряжение на входе АЦП больше порога второго регистра, то – число второго регистра.       Если же напряжение на входе АЦП располагается между указанными порогами,
    то – результат преобразования АЦП в двоичном формате.              

6. Организовать бегущий огонь на семисегментном индикаторе HG2. При увеличении уровня напряжения на входе АЦП, скорость бега на семисегментном индикаторе увеличивается, при уменьшении –  скорость бега уменьшается.

7. В двух регистрах общего назначения записаны числа, определяющие заданные уровни порогов преобразуемого напряжения. Если напряжение на входе АЦП меньше (ниже) 1В (диапазон 0…1), то горит 1 светодиод,

1…2 – горят 2 светодиода,

2…3(и выше) – горят 3 светодиода.

8. Организовать бегущий огонь на светодиодах. При увеличении уровня напряжения на входе АЦП, скорость бега на светодиодах увеличивается. При уменьшении – скорость бега уменьшается.


 

А также другие работы, которые могут Вас заинтересовать

23025. Формули псевдообернення збурених матриць та їх місце в задачах моделювання динаміки систем з розподіленими параметрами 463.5 KB
  Будемо вважати що збурення матриці С виконується в загальному випадку по всіх елементах що спонукає працювати з матрицями СabT та СabT де для LMвимірної матриці С aRL bRM – вектори якими і визначається збурення матриці С а отже і системи вцілому. Тому дослідження змін матриць СabT та СabT в залежності від значень векторів а та b є актуальним. Якщо при роботі з матрицею СabT проблем немає – залежності від а та b тут явні то для матриці СabT потрібні зручні та ефективні методи та засоби обчислення...
23026. Дослідження моделей лінійних динамічних систем з розподіленими параметрами при скінченновимірних варіаціях параметрів 330 KB
  22 – нескінченні прирости. Пройти ці неприємності на шляху до оптимального розв’язання задач розміщення спостерігачів та керувачів можна надаючи координатам та скінченні прирости та досліджуючи прирости .6 заключаємо що прирости та можуть бути вирахувані якщо будуть відомі прирости для та для .11 заключаємо що прирости та можуть бути вирахувані якщо будуть відомі прирости для та для .
23027. Псевдоінверсні методи моделювання задач керування лінійними динамічними системами 652 KB
  Інтегральні моделі динаміки лінійних систем і можливості по їх використанню в розв’язанні обернених задач.13 були успішно розв’язані в попередніх лекціях. Задачі були розв’язані точно якщо це можливо або з деяким наближенням якщо точний розв’язок задачі не можливий. Цим самим були дані розв’язки або найкраще середньоквадратичне наближення до них для задач моделювання зовнішньодинамічної обстановки в якій функціонує система та прямих задач динаміки таких систем.
23028. Задачі ідентифікації динаміки систем з розподіленими параметрами 276.5 KB
  Псевдоінверсні методи [2227] обернення алгебраїчних інтегральних та функціональних перетворень дозволяють виконати таку заміну побудувати моделюючі функції в неперервному або дискретному вигляді тільки при відомій функції матриці Гріна в необмеженій просторовочасовій області. Викладена ж в лекції 2 методика побудови функції дозволяє виконати це для систем динаміка яких описана вже диференціальним рівнянням вигляду 1.7 зведеться до знаходження перетворюючої функції функції Гріна в нашому розумінні такої що 15.4 побудови...
23029. Задачі ідентифікації лінійних алгебраїчних, інтегральних та функціональних перетворень 487 KB
  Постановка та план розв’язання задачі. Далі розв’язки ідентифікаційних задач 16.3 отримаємо із розв’язку допоміжних задач 16. Розглянемо розв’язок задачі 16.
23030. Проблеми моделювання динаміки систем з розподіленими параметрами 1.64 MB
  4 і модель ця адекватно описує динаміку фізикотехнічного об’єкту процесу то можна ставити і розв’язувати: Прямі задачі динаміки – визначення векторфункції стану ys при заданих зовнішньодинамічних факторах ; Обернені задачі динаміки визначення векторфункцій які б згідно певного критерію дозволяли отримувати задану картину змін векторфункції ys або наближатися до неї.4 побудовані апробовані практикою а відповідні математичні теорії дозволяють розв’язувати як прямі так і обернені задачі динаміки таких систем....
23031. Побудова матричної функції Гріна та інтегральної моделі динаміки систем з розподіленими параметрами в необмеженій просторово-часовій області 249.5 KB
  Функція Гріна динаміки систем з розподіленими параметрами в необмежених просторовочасових областях.10 а також з того що шукана матрична функція Gss' є розв’язком рівняння 1.1 де визначені вище матричні диференціальні оператори та матрична функція одиничного джерела. А це означає що матрична функція відповідає фізичному змісту задачі а розв’язок її дійсно представляється співвідношенням 1.
23032. Дискретний варіант побудови та дослідження загального розв’язку задачі моделювання динаміки систем з розподіленими параметрами 586 KB
  Псевдообернені матриці та проблеми побудови загального розв’язку системи лінійних алгебраїчних рівнянь. З цією метою виділимо в матриці C r лінійно незалежних стовпців. Враховуючи що всякий стовпець матриці C може бути розкладений за системою векторів як за базисом матрицю C подамо у вигляді де вектор коефіцієнтів розкладу стовпця матриці С за базисом .10 ранг основної матриці дорівнює рангу розширеної.
23033. Моделювання дискретизованих початково-крайових 244 KB
  Постановка задачі та проблеми її розв’язання.4 в розв’язку 1.23 вектора векторфункції та матричної функції проблему розв’язання задачі 4.6 в залежності від співвідношень між та може мати точний розв’язок або визначене згідно 4.