Реклама ⓘ
Главная » Микроконтроллеры
Призовой фонд
на апрель 2024 г.
1. 100 руб.
От пользователей

Реклама ⓘ

Аналоговый вывод

Несмотря на большую универсальность, возможности аналогового вывода у микроконтроллеров семейства tiny/mega ограничены. В их составе отсутствует цифро-аналоговый преобразователь (ЦАП), который, однако, имеется в ряде моделей специализированного для этих целей семейства 90PWM. Преобразовать цифровой код в аналоговую величину в общем случае можно с помощью простой схемы приведенной на рис.1.

Простой 8-разрядный ЦАП
Рис.1 Простой 8-разрядный ЦАП

Делитель напряжения, состоящий из набора резисторов R1…R8, подключен к порту D микроконтроллера. Номиналов каждого последующего сопротивления должен быть в 2 раза больше предыдущего
RN = 2N-1*R,
где N – индекс, R – опорный номинал.

Если, например, в качестве R выбрать значение 200Ом, то потребуется последовательность сопротивлений R1=200Ом, R2=400Ом, R3=400Ом,…, R6=6.4кОм, R6=12.8кОм, R6=25.6кОм. Выходное напряжение
UO = NPORTD*VCC/256,
где NPORTD – логическое значение регистра PORTD.

Теоретически получим 28 шагов регулировки, что будет соответствовать 8-разрядному ЦАП. Но на практике перекрыть весь диапазон 0…V­СС никогда не удастся, и всегда будут иметься зоны “замирания” напряжения из-за сложности подбора номиналов R1…R8. Шаг установки VCC/256 по этой же причине также не будет постоянной величиной. Для большей точности работы ЦАП на рис.1 требуется высокоимпедансная нагрузка.

Формирование ШИМ-сигнала на линии ОС2 при работе таймера-счетчика 2 в режиме Fast PWM
Рис.2 Формирование ШИМ-сигнала на линии ОС2 при работе таймера-счетчика 2 в режиме Fast PWM

Другим более естественным для AVR способом формирования аналоговых сигналов является использование широтно-импульсной модуляции (ШИМ). Способность аппаратно генерировать импульсы переменной длительности и частоты имеется у большинства моделей tiny и у всех без исключения моделей старшего семейства. Преобразование ШИМ–сигнала в постоянное напряжение может быть легко произведено с помощью ФНЧ. На рис.2, например, показано, как в этих целях можно использовать вывод OC2 микроконтроллера ATmega8. В подобных случаях 8-разрядный таймер-счетчик 2, как правило, работает в режиме Fast PWM(Fast Pulse Wide Modulation). Счетный регистр TCNT2 при этом инкрементируется с каждым приходящим импульсом до тех пор, пока не достигнет значения 0xFF, после чего счет продолжается с нуля. Если функции вывода OC2 настроены должным образом, то каждый раз, когда содержимое TCNT2 сравнивается со значением, записанным в регистре OCR2, на выводе OC2 устанавливается высокий уровень напряжения, а при переполнении TCNT2 линия OC2 сбрасывается на нуль. Таким образом, на выводе получаем ШИМ-сигнал с частотой   
FOC2 = Fclk/(256*N),
где Fclk – частота тактового генератора, N-коэффициент деления предделителя частоты таймера-счетчика 2.

Коэффициент заполнения импульсов
αOC2 = τ/T = OCR2/256,
где τ – длительность импульса , T – период импульса.

Постоянная составляющая напряжения после ФНЧ будет пропорциональна коэффициенту заполнения αOC2
UO = αOC2*VCC = OCR2*VCC/256,
где VCC – напряжение питания микроконтроллера.

Изменяя значение OCR2, можно программным способом регулировать UO с 8-разрядной точностью. Еще больше возможностей можно получить, если в подобных целях использовать ШИМ–выводы OC1A, OC1B. Разрешающая способность в этом случае может быть доведена до 16 битов за счет использования 2-байтовых регистров совпадения OCR1AH:OCR1AL и OCR1BH:OCR1BL.

Частота среза ФНЧ должна быть во много раз ниже FOC2. Поэтому саму частоту FOC2, если это возможно, желательно выбирать повыше для того, чтобы можно было уменьшить постоянную времени фильтра (увеличить скорость установления напряжения после фильтра).

Управление с помощью ШИМ
Рис.3 Управление с помощью ШИМ
а - при регулировке напряжения
б - при регулировке тока

На рис.3 приведено два примера, в которых управляющий ШИМ–сигнал используется для регулировки напряжения (рис.3а) и тока (рис.3б) с помощью мощных полевых транзисторов с изолированным затвором.
В первом случае напряжение на сопротивлении нагрузки UL будет:
UL = [R2/(R1+R2)] * [(R3+R4)/R4] * VCC.

Если выбрать R1/R2 = R3/R4, то UL будет в точности следовать за средним значением напряжения сформированного на выводе OC2. Для надежного запирания p-канального транзистора VT1 усилитель DA1 должен обеспечивать размах напряжения на выходе такой же, как и у источника питания (rail-to-rail). 

При управлении током напряжение ошибки снимается с шунта R3 и подается на инвертирующий вход –IN усилителя. Влияние ООС приводит к равенству напряжений
U+IN = U–IN = IL*R3,
где U+IN, U-IN – напряжение на не инвертирующем и инвертирующем входе DA1 соответственно, IL - ток в нагрузке.

Для схемы на рис.3б ток в нагрузке будет равен:
IL = U–IN/R3 = [R2/((R1+R2)*R3)] * VCC.

C обозначенными на рис.3б номиналами R1…R3 и VCC=5 В, получим 2-амперный регулятор тока.

Пример настройки ШИМ-вывода OC2:

   .def temp  = R16 ;регистр для промежуточных операций
         
   ldi   temp,high(RAMEND) ;инициализация стека 
   out   SPH,temp
   ldi   temp,low(RAMEND)
   out   SPL,temp
  .

;   Для использования альтернативной функции линии PB3, как 
; источника формирующего ШИМ-сигнал OC2, прежде всего ее 
; необходимо настроить на вывод.
   
   cbi   PORTB,PB3 
   sbi   DDRB,DDB3

;  Частота следования импульсов в режиме Fast PWM : FOC2= 
; Fclk/(256*N). Режим работы таймера-счетчика задается битами 
; WGM22:WGM20(при WGM13:WGM10 = 011 – режем Fast PWM), значение ; N - битами CS22:CS20 в регистре TCCR2. При Fclk=1 МГц и N=8 
; (CS22:CS20 = 010–коэффициент деления предделителя частоты 
; N=8): FOC2= 125 кГц. В момент совпадения TCNT2 и OCR2 
; происходит установка флага OC2F, а при переполнении TCNT2 
; установка флага TOV2 в регистре флагов TIFR. Биты COM21:COM20 ; в регистре TCCR2 определяют поведение вывода OC2 в моменты 
; установки флагов OCF2 и TOV2. При COM21:COM20 = 01 – состояние ; OC2 меняется на противоположное.
 
   ldi   temp,0xF0
   out   TCNT2,temp
   ldi   temp,0x20
   out   OCR2,temp
   ldi   temp,(1 << CS21)|(1 << WGM21)|(1 << WGM20)|(1 << COM20)
   out   TCCR2,temp
  . 
   ldi   temp,128   ;установить UO = VCC/2
   out   TCCR2,temp

Перейти к следующей части:

Теги:

Котов Игорь Юрьевич Опубликована: 2012 г. 0 1
Я собрал 0 0
x

Оценить статью

  • Техническая грамотность
  • Актуальность материала
  • Изложение материала
  • Полезность устройства
  • Повторяемость устройства
  • Орфография
0

Средний балл статьи: 0 Проголосовало: 0 чел.

Комментарии (0) | Я собрал (0) | Подписаться

Статью еще никто не комментировал. Вы можете стать первым.
Добавить комментарий
Имя:
E-mail:
не публикуется
Текст:
Защита от спама:
В чем измеряется сила тока?
Файлы:
 
Для выбора нескольких файлов использйте CTRL

Программатор Pickit3
Программатор Pickit3
Конструктор - темброблок на LM1036 Лазерный модуль 650нм 5мВт
вверх