Подписаться на получение новых статей на почту:

ШИМ (PWM) управление на AVR. Шаг №14

Обновлено 16.12.15. Всем привет. Разобравшись в прошлой записи с памятью EEPROM, сегодня мы поговорим о том что такое ШИМ (PWM)? Расшифруется как широтно-импульсная модуляция (pulse-width modulation), это среднее значение напряжения, которое изменяется скважностью импульса. В свою очередь скважность это длительность импульса с некоторой частотой повторения. Т.е. более простыми словами все это изменение ширины импульса при неизменной их величине.  Для чего это нам надо?

ШИМ (PWM) используется в транзисторной схеме для регулирования напряжения без механики, в свою очередь управление мощностью. Например управление яркостью светодиодов, управление яркостью подсветки на LCD-мониторе, управление двигателями и т.д. Если отобразить на рисунке, то выход с микроконтроллера примерно будет следующим, как на картинке ниже. Где видно что скважность это заполнение импульса, если вся ширина импульса это 5 В, то при 30% заполнении импульса, в среднем на выходе мы получим примерно 1,5В. В микроконтроллерах AVR ШИМ управление задается в восьмиразрядных таймерах/счетчиках T0/(T2)  и шестнадцатиразрядный T1  (T3 в Скважность импульсанекоторых моделях). А также есть другие модели где битность ШИМа можно задавать, например ATmega 128. Рассмотрим настройку шестнадцатиразрядного таймера/счетчика Т1. Данные берем соответственно таблицам либо из справочника , либо из даташита (литература — статья №1).

В общем для такого счетчика в мк можно выбрать три режима: Fast PWM, Phase Correct PWM, Phase and Frequency Correct PWM (зависит от модели)

Рассмотрим второй режим -  ШИМ с точной фазой. Здесь счетный регистр функционирует как реверсивный счетчик, изменения состояния которого изменяется от $0000 до максимального значения а затем обратно до $0000.  Для управления таймером/счетчиком используем три регистра управления TCCR1A, TCCR1B, TCCR1C. В которых для выбора режима таймера/счетчика необходимо установить разряды WGMn1: WGMn0 и WGMn1: WGMn0. В зависимости от их установки максимальное значение счетчика(Разрешение ШИМ сигнала) является либо фиксированным значением, либо определяется содержимым определенных регистров таймера/счетчика. Разрешающая способность определяется выражением:

g = log (TOP+1)/log2, где ТОР – модуль счета, выбирается из таблицы соответственно разрешающей способности.

После того как определились с режимом работы таймера счетчика, необходимо выбрать режим работы блока сравнения COMnA1:COMnA0, COMnB1:COMnB0, COMnC1:COMnC0, который определяет поведение вывода OCnx при наступлении события “Совпадение”.

Ну и последний штрих определимся с частотой. Нам необходимо выставить разряды CSn2…CSn0 регистра TCCR1B, которые отвечают за определение источника тактового сигнала. Вот таким программным образом выглядит настройка ШИМ-управления на выходе OC1A. Например :

/*Настройки ШИМ */
TCCR1A=(1<<COM1A1)|(0<<COM1A0)|(1<<WGM10); /*На выводе OC1A единица, когда OCR1A==TCNT1, Сбрасывается в 0 при OCR1A==TCNT1 и устанавливается в 1 при достижении максимального значения  восьми битный ШИМ Phase Correct PWM  , номер режима 1 . модуль счета ТОР $00FF*/
TCCR1B=(1<<CS10);         /*Делитель= 1*/ 
OCR1A = 50; /* при модуле счета 255 и при напряжении 5 В на выходе OC1A получим примерно 1 В*/

Из программы видно, что для получения ШИМ используем регистр сравнения OCR1A. При достижении счетчиком максимального значения, в данном случае 255, происходит смена направления счета, но счетчик остается в этом состоянии в течении одного периода сигнала. В этом и заключается более медленная частота работы по сравнению с первым режимом. Но в этом и состоит симметричность изменения счетчика. Что более подходит для управления двигателем. В этом же такте происходит обновления содержимого регистра сравнения. При достижении счетчиком минимального значения также происходит смена направления счета и одновременно устанавливается флаг прерывания  TOV1 регистра TIFR. Пр равенстве содержимого счетного регистра и какого-либо регистра сравнения устанавливается соответствующий флаг OCF1A/OCF1B/OCF1C регистра TIFR. Одновременно изменяется состояние выхода блока сравнения OCnx. Частота генерируемого сигнала fOCn= f/(2*N*TOP), где N – коэффициент деления пред делителя, f — частота кварца. Также можно посмотреть еще примеры настройки и использования ШИМ, например  ШИМ для построения синусоиды.

На этом сегодня все. В следующем посте рассмотрим контроллер любительского  станка ЧПУ. Я постараюсь использовать предыдущие посты из этого блога для набора программы, как конструктор. Так будет более понятно когда один раз написали и его использовали в следующем проекте. Всем пока.

Просмотрено 5443 раз.

Я на Google+

ШИМ (PWM) управление на AVR. Шаг №14: 3 комментария

  1. Здравствуйте. Скажите а как можно с помощью ШИМ получить аналоговый сигнал?

    • Здравствуйте. Просто на выходе ставят низкочастотный фильтр конденсатор -емкость. Посмотрите запись №26. Там как раз такой случай описывается.

  2. Спасибо. Кратко и ясно. Вот бы еще яркий пример управления двигателем либо какой нибудь пид регулятор. Но все равно спасибо.

Добавить комментарий

Ваш e-mail не будет опубликован.

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Subscribe without commenting