- •Медицинские микропроцессорные системы
- •Анисимов а.А.
- •Isbn © сПбГэту «лэти», 2019 введение
- •1. Общая структура микроконтроллеров avr
- •2. Программирование микроконтроллеров на языке ассемблер
- •3. Работа с отладочной платой attiny104-xnano
- •4. Устройство портов ввода-вывода
- •5. Таймеры-счётчики
- •6. Широтно-импульсная модуляция
- •7. Использование аналого-цифрового преобразователя
- •8. Передача данных по uart
- •9. Последовательный интерфейс spi
- •Приложение 1. Основные команды языка assembler для микроконтроллера attiny104
- •Список литературы
- •Оглавление
- •Медицинские микропроцессорные системы
- •197376, С.-Петербург, ул. Проф. Попова, 5
6. Широтно-импульсная модуляция
Широтно-импульсная модуляция (ШИМ, в английском варианте -Pulse-width modulation, PWM) – приближение желаемого сигнала (многоуровневого или непрерывного) к действительным бинарным сигналам (с двумя фиксированными уровнями – ноль или единица), так чтобы их значения за некоторый промежуток времени в среднем были равны. Формально этот процесс можно записать в следующем виде:
где x(t) - желаемый входной сигнал в пределе от t1 до t2, ∆Ti - продолжительность i -го ШИМ импульса с амплитудой A. ∆Ti подбирается таким образом, чтобы суммарные площади (энергии) обеих величин были приблизительно равны за достаточно продолжительный промежуток времени.
Если говорить о ШИМ применительно к нашим микроконтроллерам, то это простой и эффективный способ задания аналогового сигнала цифровым методом (по сути, это даёт нам возможность сделать простое подобие цифро-аналогового преобразователя, который, к сожалению, не входит в состав периферии восьмибитных AVR микроконтроллеров, за исключением семейства XMega).
В аналоговом варианте преобразование синусоидального сигнала в ШИМ-последовательность и обратно схематически выглядит следующим образом: на один из входов компаратора подается исследуемый аналоговый сигнал Uвх, на другой – сигнал опорной частоты Fоп, имеющий треугольную форму (рис. 6.1). При совпадении уровней двух сигналов на входах компаратора его выход переключается, формируя в результате последовательность, состоящую из прямоугольных импульсов с несущей частотой Fоп, в длительности которых закодирован уровень исходного аналогового сигнала (то есть его амплитуда). Если далее требуется получить исходный аналоговый сигнал, эту последовательность необходимо пропустить через фильтр нижних частот, чтобы отфильтровать опорную частоту и получить исходную синусоиду. В приведённом примере в качестве фильтра нижних частот используется обычная интегрирующая RC-цепочка (для получения более точных результатов преобразования необходимо использовать фильтр более высокого порядка, желательно на операционных усилителях).
Рис. 6.1. Принцип работы ШИМ-преобразователя
При использовании ШИМ мы передаём на выход сигнал, состоящий из высоких и низких логических уровней, то есть нулей и единиц. Затем эта последовательность пропускается через интегрирующую цепочку. В результате интегрирования на выходе будет величина напряжения, равная площади под импульсами.
Меня скважность сигнала (то есть отношение длительности периода к длительности импульса) ШИМ последовательности, можно плавно менять эту площадь, а значит и напряжение на выходе (рис. 6.2).
Рис. 6.2. Принцип ШИМ-преобразования
Изучив теоретическую часть, можно перейти непосредственно к целевой плате. Во всех контроллерах семейства AVR режим широтно-импульсной модуляции достаточно легко реализовать с помощью таймеров.
Режим Fast PWM.
В этом режиме таймер микроконтроллера считает от нуля до 255, после достижения переполнения счетный регистр сбрасывается в ноль, и счет начинается снова. Когда значение в счетчике достигает значения, записанного заранее в регистр сравнения, то соответствующий ему вывод ОСхn сбрасывается в ноль. При обнулении счетчика этот вывод устанавливается в единицу.
Рис. 6.3. Формирование ШИМ-сигнала в режиме быстрой модуляции.
В общем случае частота fшим на выходе ОСхn микроконтроллера в режиме быстрой модуляции составляет:
где Ftcx – тактовая частота таймера, полученная путем деления тактовой частоты нашего МК на коэффициент деления N, задаваемый с помощью соответствующих разрядов регистра управления TCCRnB.
Phase Correct PWM
Другой, более продвинутый режим, носит название Phase Correct PWM (ШИМ с точной фазой). В данном случае шестнадцатиразрядный счетчик (очевидно, что в восьмибитном таймере данный режим недоступен) работает как реверсивный. При этом он непрерывно считает сначала от нуля до максимального значения модуля счета (который определяется либо заданной разрядностью, либо содержимым режима захвата), затем обратно до нуля. При достижении нуля счет опять начинается в сторону увеличения, далее цикл повторяется. Вывод OCxn при первом совпадении сбрасывается в ноль, при втором устанавливается обратно в единицу (рис. 6.4). Частота ШИМ при этом падает вдвое вследствие увеличения периода.
Рис. 6.4. Сравнение режимов работы ШИМ
Рассмотрим поподробнее регистры, ответственные за реализацию различных режимов ШИМ. Регистр TCCR0A – биты COM0A1:COM0A0 и COM0B1:COM0B0 определяют поведение выводов сравнения OC0A и OC0B соответственно.
Таблица 6.1. Режимы работы вывода Ocnx
COMnx1 |
COMnx0 |
Режим работы вывода Ocnx |
0 |
0 |
вывод не подсоединен к регистру сравнения |
0 |
1 |
поведение вывода зависит от режима, заданного в WGM |
1 |
0 |
прямой ШИМ (сброс при совпадении и установка при обнулении счета) |
1 |
1 |
инверсный ШИМ (сброс при обнулении и установка при совпадении) |
Регистр TCCR0A – биты WGM01 и WGM00 (совместно с битами WGM02 и WGM03, которые находятся в регистре TCCR0B) задают режим работы генератора.
Таблица 6.2. Задание режимов работы ШИМ
WGMn3 |
WGMn2 |
WGMn1 |
WGMn0 |
Режим работы |
TOP |
0 |
1 |
0 |
1 |
Fast PWM, 8 бит |
0x00FF |
0 |
1 |
1 |
0 |
Fast PWM, 9 бит |
0x01FF |
0 |
1 |
1 |
1 |
Fast PWM, 10 бит |
0x03FF |
Более подробное описание других режимов работы необходимо смотреть в оригинальной документации к МК, так как в данной главе рассматривается только режим работы Fast PWM.
