
- •Встраиваемые микроконтроллеры avr-8
- •Санкт-Петербург 2013 Содержание
- •Часть 1. Архитектура мк (л2, л3)
- •Понятия мк для встраиваемых приложений и семейства мк. Семейство avr-8
- •Структура и архитектура мк
- •Тактирование, процессор и арифметико-логическая группа команд
- •Структура и адресация памяти программ. Ветвления, циклы, подпрограммы, и группа команд передачи управления
- •Структура и адресация памяти данных. Группа команд передачи данных
- •Порты ввода/вывода. Типовая схема включения мк. Структура управляющей программы, поллинг.
- •Часть 2. Процесс проектирования устройств на мк (л4, л5)
- •2.1. Этапы процесса проектирования устройств на мк
- •2.2.Техническое задание и разработка алгоритма (блок-схемы)
- •2.3. Языки программирования и синтаксическая проверка проекта
- •2.4. Средства загрузки кодов программ и данных (программаторы)
- •2.5. Средства отладки для выявления логических и схемотехнических ошибок
- •2.6. Подключение индикаторов и клавиатуры
- •Часть 3. Ввод/вывод в мпу
- •3.1. Понятие и характеристики интерфейса
- •3.2. Внутрисистемные интерфейсы в мпу
- •3.3 Параллельный порт avr
- •3.4. Внешняя магистраль памяти данных avr мк
- •3.5. Принцип и средства ввода/вывода по прерываниям.
- •3.6. Принцип прямого доступа к памяти
- •Часть 4. Прерывания (л8)
- •4.1. Механизм прерываний в avr и его программирование
- •4.2. Входы прерываний inTx и pcinTx.
- •Часть 5. Таймеры/счетчики
- •5.1. Задачи формирования и измерения временных интервалов
- •5.2. Принципы программного формирования/измерения временного интервала
- •5.3. Таймер/счетчик с прерыванием по переполнению
- •5.4. Таймер/счетчик с дополнительными узлами захвата и сравнения
- •Часть 6. Задачи и устройства аналогового ввода/вывода (л12, л13)
- •6.1. Задачи аналогового ввода и вывода
- •6.2. Встроенный аналоговый компаратор
- •6.3. Встроенный многоканальный ацп
- •6.4. Встроенный цап
- •Часть 7. Задачи и устройства последовательного интерфейса (л14, л15)
- •7.1. Принципы и преимущества последовательного интерфейса
- •7.2. Функции встроенного контроллера последовательного интерфейса
- •7.3. Протокол и контроллер трехпроводного синхронного пи (spi)
- •7.4. Устройство контроллера i2c и его применение
- •7.5 Цап с последовательным интерфейсом
- •7.6. Устройство контроллера u(s)art и его применение
- •7.7. Сетевые протоколы и их стандартизация
- •7.8. Открытый протокол Modbus
- •История
- •Введение
- •Категории кодов функций
- •Модель данных
- •Стандартные функции протокола Modbus
- •Запись одного значения
- •Запись нескольких значений
- •Контроль ошибок в протоколе Modbus rtu
- •Rtu фрейм
- •Логические ошибки
- •Стандартные коды ошибок
6.4. Встроенный цап
Цифро-аналоговое преобразование - вывод непрерывного во времени сигнала с уровнем, пропорциональным численному значению выходного сигнала u(t) = n* Uref / 2**N, где Uref задает диапазон пропорциональности, N - разрядность.
Для преобразования числа в уровень используются резиствная матрици и набор аналоговых ключей. Непрерывность обеспечивается регистром данных, выходы которого управляют ключами (и небольшим RC-фильтром на выходе). Время преобразования определяется быстродействием цифровой части и временем установления в аналоговой цепи, на практике оно составляет единицы - доли микросекунд.
ЦАП до недавнего времени не были распространены в МК, что связано с повышенными требованями к питанию качественных аналоговых узлов при повышенной разрядности (более 12). Современным лидером в области встроенных в МК ЦАП (да и АЦП) является фирма Analog Devices с семейством MicroConverter с ядрами 8-разрядных (С51/52) и 32-разрядных (ARM7) микроконтроллеров.
В усовершенствованном подсемействе ATxmega (семейства AVR-8) появились встроенные модули ЦАП 12 бит и АЦП со значительно меньшим временем преобразования (0.5 мкс) и повышенной разрядностью 12 бит.
Для преобразований с невысокой разрядностью удобно использовать ШИМ-выход таймера/счетчика, к которому подключают интегрирующую RC-цепь с постоянной времени, много больше периода ШИМ. Напряжение на выходе RC-цепи имеет постоянную составляющую и пульсацию. Во время импульса оно линейно растет, в паузе спадает. Среднее значение напряжения определяется напряжением питания VCC и коэффициентом заполнения ШИМ: Um = VCC * kз = VCC * OCRx / OCRx_max, здесь OCRx - значение в регистре ширины импульса, OCRx_max = 256/512/1024 - число дискрет в периоде ШИМ. Частоту тактирования таймера/счетчика ftc следует брать максимальной равной fclk, это позволяет минимизировать значения постоянной времени RC-цепи.
При необходимости можно использовать богатый выбор внешних ИМС ЦАП. В последнее десятилетие кроме ЦАП с параллельным интерфейсом появилось большое количество ЦАП с разновидностями последовательного синхронного интерфейса (I2C, SPI, SPORT...).
Рис. 6.4.
На рис. 6.4 представлена схема и результаты моделирования ШИМ-ЦАП (папка test_ADC_DAC). На вход АЦП ADC1 подано синусоидальное напряжение Sin частотой 100 Гц (период 10 мс), амплитудой 2 В и смещением 2.5 В. Программа (см. ниже) получает данные с АЦП, сдвигом влево делит на 4 и заносит их в регистр сравнения OCR1B. Импульсы симметричной 8-битной ШИМ на выходе OC1B имеют период 510 / 8 МГц = 63.75 мкс, сглаживаются фильтром с постоянной времени = 10 кОм * 100 нФ = 1 мс (сигнал DAC2). Период основного цикла 88 мкс. Сравнивая графики Sin и DAC2 видим, что последний имеет форму и амплитуду близкую к первому, но задержан на 1 мс. Можно сделать вывод, что основной вклад в искажение формы вносит фильтр на, влияние задержек измерения и преобразования не значительно. Увеличение постоянной времени даст более гладкую форму, но еще больше увеличит сдвиг фазы.
/*****************************************************
Chip type : AT90LS8535
AVR Core Clock frequency: 8.000000 MHz
*****************************************************/
#include <90s8535.h>
#include <delay.h>
unsigned int read_adc(unsigned char adc_input) {
ADMUX=adc_input;
// Delay needed for the stabilization of the ADC input voltage
delay_us(10);
// Start the AD conversion
ADCSR|=(1<<ADSC);//0x40;
// Wait for the AD conversion to complete
while ((ADCSR & (1<<ADIF))==0);
ADCSR|= (1<<ADIF);//0x10;
return ADCW;
} // ******************************************
void main(void) {
PORTB=0x00; DDRB=0xFF;
PORTD=0x00; DDRD=0x31;
TCCR1A=(1<<COM1A1)|(1<<COM1B1)|(1<<PWM10);// 8-bit PWM noninvert A, B
TCCR1B=(1<<CS10);// ftc1=fclk
TCNT1H=0x00; TCNT1L=0x00;
OCR1AH=0x00; OCR1AL=0x00;
ADCSR=(1<<ADEN)|(1<<ADPS2);// Включить АЦП, fadc=fclk/16
while (1) {
static unsigned char val=0;
val = read_adc(0)>>2;
PORTB = val;
OCR1A = val;
PORTD ^= (1<<0);
val = read_adc(1)>>2;
OCR1B = val;
}
} // *******************************************
Постоянная времени фильтра НЧ 10 кОм * 100 нФ = 1 мс, это больше периода пульсации (пример с UART) в 1000 мкс / 32 мкс = 31 раз, пульсация же снизилась до 38 мВ, то есть в 5000 / 38 = 131 раз. Получаем несоответствие 131 / 31 = 4.2, надо подумать.