Создание АЦП с последовательным выводом информации
Для формирования тактовой частоты модуля АЦП в нем имеется отдельный определитель. Коэффициент деления и соответственно длительность преобразования определяется состоянием разрядов ADPS2… ADPS0. В качестве источника опорного напряжения для АЦП может использоваться как напряжение питания микроконтроллера, так и внутренний либо внешний источник опорного напряжения. Непосредственно то источника… Читать ещё >
Создание АЦП с последовательным выводом информации (реферат, курсовая, диплом, контрольная)
Техническое задание
Амплитуда импульсов запуска, В | — 5 | |
Длительность импульсов запуска, мкс | 2.0 | |
Диапазон изменения входного сигнала, В | — 2 до +2 | |
Длина выходного слова, бит | ||
Частота выходных импульсов синхронизации, МГц | 0.01 | |
Уровни выходных сигналов | КМОП+9В | |
Целью курсовой работы было создание рабочего модуля АЦП с минимальным количеством микросхем. Кроме того в связи с широким распространением современных микропроцессорных систем полезно уметь работать с этой элементной базой.
АЦП было решено построить на основе микроконтроллера ATmega8L производства фирмы Atmel.
1. Описание блок-схемы АЦП Базовая часть этой схемы — микроконтроллер ATmega8L.
Согласно техническому заданию диапазон входного сигнала лежит в пределах от -2 В до +2 В. Диапазон же входного сигнала АЦП от 0 до Vref (в данном случае Vref=4 В).
В связи с этим входной сигал сначала сдвигается входным сумматором на +2 В, а уже после поступает на несимметричный вход АЦП (PC0).
Импульс запуска поступает на вывод PB0 (весь порт настроен на ввод) и запускает преобразование.
По техническому заданию импульс запуска имеет амплитуду -5 В, и длительность 2 мкс. Следовательно, необходимо инвертировать сигнал запуска.
После завершения преобразования, результат измерения выводится в виде последовательных импульсов через вывод PD0 (весь порт настроен на вывод).
Так как выходные сигналы у используемого нами АЦП не превышают уровня +5 В, а по техническому заданию требуется, чтобы уровень логической единицы составлял +9 В, то на выходе АЦП нужно будет поставить компаратор, который и будет служить формирователем нужного уровня сигнала.
преобразователь микроконтроллер программа
2. Микроконтроллер ATmega8L
В состав модели ATmega8L входит модуль 10-разрядного АЦП последовательного приближения со следующими параметрами:
· Абсолютная погрешность: +/- 2 МЗР
· Интегральная нелинейность: +/- 0,5 МЗР
· Быстродействие: до 15 тыс. выборок/с.
На входе модуля АЦП имеется 8-канальный аналоговый мультиплексор. У выбранного мной микроконтроллера, выпускаемого в корпусе DIP-32, есть только 6 каналов преобразования, кроме того два канала (ADC4 и ADC5) являются 8-разрядными.
Для наших целей понадобиться только один 10-разрядный канал преобразования.
В качестве источника опорного напряжения для АЦП может использоваться как напряжение питания микроконтроллера, так и внутренний либо внешний источник опорного напряжения.
В процессе работы АЦП может функционировать в двух режимах:
· Режим одиночного преобразования, когда запуск каждого преобразования инициируется пользователем.
· Режим непрерывного преобразования, когда запуск преобразований выполняется непрерывно через определённые промежутки времени.
Для управления модуля АЦП используются несколько следующих регистров:
§ ADCSRA — регистр управления и состояния.
§ ADMUX — регистр управления мультиплексором и выбор источника опорного напряжения.
§ SFIOR — регистр специальных функций.
(Для решения поставленной задачи данный регистр не использовался.)
Табл. № 1. Разряды регистра ADCSRA.
Разряд | Название | Назначение | |
ADEN | Разрешение АЦП (1-вкл, 0-выкл) | ||
ADSC | Запуск преобразования (1- начать преобр-е) | ||
ADFR | Выбор режима АЦП | ||
ADIF | Флаг прерывания от компаратора | ||
ADIE | Разрешение прерывания от компаратора | ||
2…0 | ADPS2:ADPS0 | Выбор частоты преобразования | |
Регистр ADCSRA = 0b10001101 (0x8D) .
ADEN=1, АЦП — включен.
ADSC=0, Преобразование начинается с установкой этого бита. После завершения преобразования этот бит аппаратно сбрасывается в ноль.
ADFR=0, Режим одиночного преобразования. Каждое преобразования запускается пользователем.
ADIF=0, После завершения преобразования этот разряд устанавливается в 1-ку и генерирует запрос на прерывание.
ADIE=1, Разрешение прерывание от компаратора.
ADPS2:ADPS0 =101, Частота преобразования 125 кГц.
Для формирования тактовой частоты модуля АЦП в нем имеется отдельный определитель. Коэффициент деления и соответственно длительность преобразования определяется состоянием разрядов ADPS2… ADPS0.
ADPS2 | ADPS1 | ADPS0 | Коэффициент деления | |
Наибольшая точность преобразования достигается, если тактовая частота АЦП находится в пределах от 50…200 кГц.
В нашем случае тактовая частота МК выбрана 4 МГц, а тактовая частота АЦП — 125 кГц.
Табл. № 2. Разряды регистра ADMUX.
Разряд | Название | Описание | |
7, 6 | REFS1:REFS2 | Выбор источника опорного напряжения | |
ADLAR | Выравнивание результата преобразования | ||
MUX4 | В данной модели МК отсутствует | ||
3…0 | MUX3…MUX0 | Выбор входного канала | |
Для наших нужд вполне достаточно использовать один канал с несимметричным входом- -ADC0.
В данной модели выводы МК, подключенные к входу АЦП, определяются состоянием разрядов MUX3… MUX0 регистра ADMUX согласно таблице:
MUX3…MUX0 | Несимметричный вход | |
ADC0 | ||
ADC1 | ||
ADC2 | ||
ADC3 | ||
ADC4 | ||
ADC5 | ||
ADC6 | ||
ADC7 | ||
1000…1101 | Зарезервировано | |
1.22 В | ||
0 В (GND) | ||
В данном случае значение регистров MUX3… MUX0 = 0000 .
Согласно требованиям технического задания диапазон изменения входного сигнала составляет от -2 В до +2 В. Диапазон модуля АЦП ATmega 8 составляет от 0 до Vref.
Vref=4 В. В качестве источника Vref, как уже говорилось выше, можно использовать как AVcc так и внешний или внутренний ИОН.
Выбор конкретного источника питания зависит от состояний старших разрядов REFS1: REFS0 регистра ADMUX.
REFS1 | REFS0 | Источник опорного напряжения | |
Внешний ИОН, подключенный к выводу AREF; внутренний ИОН отключен | |||
Напряжение питания AVcc | |||
Зарезервировано | |||
Внутренний ИОН напряжением 2.56 В, подключенный к выводу AREF. | |||
Регистр ADMUX = 0b00000000 (0×00).
Входной сумматор Сумматор на входе обеспечивает нужный диапазон входного сигнала на АЦП от 0 до 4 В.
Схема выполнена на основе операционного усилителя OPA404AG.
R1=R3=R4=(R2+RV1)=R2I = 10 кОм.
§ UI — Ucc =R4*(Uвх — Ucc)/(R4 + R3)= (Uвх — Ucc)/2 ;
§ UI= (Uвх + Ucc)/2 ;
Uвых=R1* UI /R2I+ UI
Коэффициент усиления K= Uвых /UI=2
Напряжение опоры сумматора (Ucc=+2 В) формируется делителем и подается на сумматор через повторитель, реализованный на основе аналогичного операционного усилителя OPA404AG.
3. Компаратор Компаратор на выходе обеспечивает нужный уровень выходного сигнала +9 В.
Компаратор на выходе формирует нужный уровень логического сигнала +9 В.
Для реализации данного требования технического задания был выбран компаратор LM139 фирмы PHILIPS.
Данный компаратор как раз применяется для сопряжения ТТЛ и КМОП схем.
Возможно однополярное питание от 2 до 32 В. В
4. Схема запуска преобразования По техническому заданию импульс запуска преобразования имеет амплитуду -5 В и длительность 2 мкс.
Соответственно стояла задача инвертировать сигнал.
В стационарном режиме транзистор 2N2369 (PHILIPS) закрыт.
В момент поступления отрицательного импульса транзистор открывается.
UR10= -0.7+5=4.3 В; IR10= UR10/R10=4.3/470=9.1 (мА).
Соответственно потенциал коллектора падает, формируя сигнал логического нуля на инверторе К155ЛН1. Логическаяединица с выхода инвертора поступает на PB.0.
Питание Для обеспечения работоспособности представленной схемы требуются следующие номиналы напряжений:
+15 В — Питание операционных усилителей.
+9 В — Питание компаратора.
+5 В — Питание логики, самого микроконтроллера и транзисторной схемы инвертирования импульсов запуска преобразования.
Напряжение питания компаратора обеспечивается источником питания +15 В.
Напряжение +5 В удобнее организовать от отдельного источника.
Для обеспечения требуемых точных напряжений:
+4 В — Опорное напряжение для АЦП.
+2 В — Опорное напряжение для входного сумматора.
Была выбрана микросхема ИОН REF5040 производства фирмы Texas Instruments.
С помощью делителя выставляется точное значение напряжения +4 В. Ток делителя не должен превышать 10 мА, так как это максимальный ток нагрузки REF5040. Ток делителя в схеме выбран порядка 5 мА — это половина выходного диапазона вполне подходит для стабильной работы ИОН и этого тока вполне хватает для потребителей: AVcc и вход ОУ.
Входное напряжение Vin для микросхемы REF5040 лежит в диапазоне 4,296…18 В, так что можно запитывать ИОН от основного источника +15 В.
Уже с этого точного значения формируется опорное напряжение сумматора +2 В.
Делители отгорожены друг от друга повторителем на ОУ OPA404AG.
Требования к источнику питания +15 В:
Непосредственно то источника питания +15 В питаются только операционные усилители, микросхема ИОН, а также делитель напряжения формирующий напряжения питания компаратора.
§ Максимальный ток потребления ОУ OPA404AG — 10 мА *4.
§ Ток потребления ИОН REF5040 — 1 мА
§ Ток делителя на +9 В — 0.7 мА Источник +15 В должен обеспечить ток нагрузки порядка 45 мА.
Требования к источнику питания +5 В:
От источника питания +5 В питаются микроконтроллер, инвертор К155ЛН1 и схема инвертирования импульсов запуска.
§ Ток потребления микроконтроллера в активном режиме — 3.6 мА.
§ Ток потребления К155ЛН1 — 33 мА (при низком уровне выходного сигнала).
§ Максимальный ток потребления схемы инвертирования импульсов запуска — 9.1 мА.
Источник +5 В должен обеспечить ток нагрузки порядка 46 мА.
5. Программа микроконтроллера Программа микроконтроллера написана в среде программирования CodeVision и протестирована в программе эмуляции Proteus 7.
Текст программы:
/*****************************************************
Project: ADC Kyrkin 3
Version: 1.2
Date: 24.04.2009
Author: Гавриленко Д.Е.
Company: Home
Chip type: ATmega8
Program type: Application
Clock frequency: 4,0 MHz
Memory model: Small
External SRAM size: 0
Data Stack size: 256
*****************************************************/
#include
#include
#include
#define ADC_VREF_TYPE 0×00
unsigned char start_flag=0; // Переменная сигнала старта преобразования.
unsigned int adc_data; // Переменная данных.
// ADC interrupt service routine
interrupt [ADC_INT] void adc_isr (void)
{
adc_data=ADCW; //Запись результата преобразования в переменную.
start_flag=2; //Установка начала вывода результатов измерений через ножку PORTD.0 в основном цикле.
//ADCSRA=0x8D; // Установка в 0 флага прерывания от компаратора (бит ADIF).
}
// Declare your global variables here
void main (void)
{
// Declare your local variables here
// Input/Output Ports initialization
// Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTB=0×00;
DDRB=0×00;
// Port C initialization
// Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTC=0×00;
DDRC=0×00;
// Port D initialization
// Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
// State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0
PORTD=0×00;
DDRD=0xFF;
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
TCCR0=0×00;
TCNT0=0×00;
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer 1 Stopped
// Mode: Normal top=FFFFh
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer 1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0×00;
TCCR1B=0×00;
TCNT1H=0×00;
TCNT1L=0×00;
ICR1H=0×00;
ICR1L=0×00;
OCR1AH=0×00;
OCR1AL=0×00;
OCR1BH=0×00;
OCR1BL=0×00;
// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer 2 Stopped
// Mode: Normal top=FFh
// OC2 output: Disconnected
ASSR=0×00;
TCCR2=0×00;
TCNT2=0×00;
OCR2=0×00;
// External Interrupt (s) initialization
// INT0: Off
// INT1: Off
MCUCR=0×00;
// Timer (s)/Counter (s) Interrupt (s) initialization
TIMSK=0×00;
// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0×80;
SFIOR=0×00;
// ADC initialization
// ADC Clock frequency: 125,000 kHz
// ADC Voltage Reference: AVCC pin
ADMUX=ADC_VREF_TYPE;
ADCSRA=0x8D;
PORTD.5=1;
// Global enable interrupts
#asm («sei»)
while (1)
{
int i;
if (PINB==1) //Если на PB.0 приходит импульс начала измерений.
{
ADCSRA=0xCD; //Установка в 1-ку бита ADSC. Запуск преобразования.
}
if (start_flag==2) //Вы полнение условия обработчика прерываний.
{
for (i=1;i<=9;i++)
{
PORTD.0=(adc_data>>i)&1; //Отсекли младший байт. Выводим поочередно результат.
PORTD.5=~PORTD.5;
delay_us (10);
} start_flag=0; //Сбрасываем «start_flag» в ноль.
}
if (start_flag==0) PORTD=0;
}
}
Спецификация
Элемент | Название | Параметры | Номинал | Количество | |
R1,R3,R4,R6 | C2−29В-0.25T | P=0.25, Допуск 0.1% | 10 кОм | ||
R2, R5 | C2−29В-0.25T | P=0.25, Допуск 0.1% | 9.1 кОм | ||
R7 | C2−29В-0.25T | P=0.25, Допуск 0.1% | 750 Ом | ||
R8 | C2−29В-0.25T | P=0.25, Допуск 0.1% | 20 Ом | ||
R9 | C2−29В-0.25T | P=0.25, Допуск 0.1% | 100 Ом | ||
R10 | МЛТ | Р = 0,25 Вт; ТКС 600×10−6, 1/°С; ряд Е24; допуск 10% | 1 кОм | ||
R11 | МЛТ | Р = 0,25 Вт; ТКС 600×10−6, 1/°С; ряд Е24; допуск 10% | 470 Ом | ||
R12 | C2−29В-0.25T | P=0.25, Допуск 0.1% | 6.8 кОм | ||
R13 | C2−29В-0.25T | P=0.25, Допуск 0.1% | 1.2 кОм | ||
R14 | C2−29В-0.25T | P=0.25, Допуск 0.1% | 12 кОм | ||
RV1, RV2 | 3296W-1−202 | Р = 0,5 Вт; ряд Е24; допуск 20% | 2 кОм | ||
RV3 | 3296W-1−201 | Р = 0,5 Вт; ряд Е24; допуск 20% | 200 Ом | ||
U1 | ATmega8L | ||||
U2:(A, B, C, D) | OPA404AG | 4 (1 корпус) | |||
U3:A | LM139 | ||||
U4:1 | К155ЛН1 | ||||
Q1 | 2N2369 | ||||
С1, C2, C5 | 0.2 мкФ x 8 В | ||||
С3, C4 | 50 мкФ x 8 D | ||||
Временные диаграммы:
1. Сигнал с выхода АЦП Uвх=0.664 В.
2. Эталонный сигнал — сигнал инвертировался каждый раз при выполнении цикла.
3.Сигнал запуска преобразования.
4.Выходной сигнал компаратора. Уровень логической единицы +9 В.
1) П. Хоровиц, У. Хил, Искусство схемотехники, Т1, Т2, Москва, 1986.
2) У. Титце, К. Шенк, Полупроводниковая схемотехника, Москва, 1982.
3) А. В. Евстифеев, Микроконтроллеры AVR семейств Tiny и Mega фирмы ATMEL, Москва 2007.
4) Ю. Ревич, Практическое программирование микроконтроллеров ATMEL AVR на языке ассемблера, Санкт-Петербург 2008.
5) Б. В. Тарабрин, C.В. Якубовский, Справочник по интегральным микросхемам, Москва, 1981.