+7 495 120-13-73 | 8 800 500-97-74

(для регионов бесплатно)

Содержание

Что такое ШИМ | Уголок радиолюбителя

Хорошее определение широтно-импульсной модуляции (ШИМ) заключается в самом его названии. Это означает модуляция (изменение) ширины импульса (не частоты). Чтобы лучше понять что такое ШИМ, давайте сначала посмотрим некоторые основные моменты.

Тестер транзисторов / ESR-метр / генератор

Многофункциональный прибор для проверки транзисторов, диодов, тиристоров…

Микроконтроллеры представляют собой интеллектуальные цифровые компоненты которые работают на основе бинарных сигналов. Лучшее представление бинарного сигнала – меандр (сигнал имеющий прямоугольную форму). Следующая схема объясняет основные термины, связанные с прямоугольным сигналом.

Что такое ШИМ

В ШИМ-сигнале время (период), и следовательно частота является всегда постоянной величиной. Изменяется только время включения и время выключения импульса (скважность). Используя данный метод модуляции, мы можем получить необходимое нам напряжение.

Единственное различие между меандром и ШИМ-сигналом заключается в том, что у меандра время включения и отключения равны и постоянны (50% скважность), в то время как ШИМ-сигнал имеет переменную скважность.

Меандр может рассматриваться как частный случай ШИМ сигнала, который имеет 50% рабочий цикл (период включения = период отключения).

Рассмотрим на примере использование ШИМ

Допустим, мы имеим напряжение питания 50 вольт и нам необходимо запитать какую-либо нагрузку, работающую от 40 вольт. В этом случае хороший способ получения 40В из 50В — это использовать так называемый понижающий чоппер (прерыватель).

ШИМ сигнал, генерируемый чеппером, поступает на силовой узел схемы (тиристор, полевой транзистор), который в свою очередь управляет нагрузкой. Этот ШИМ-сигнал может легко генерироваться микроконтроллером, имеющим таймер.

Требования к ШИМ-сигналу для получения с помощью тиристора 40В из 50В: подача питания, на время = 400мс и выключение на время = 100мс (с учетом периода ШИМ сигнала равного 500 мс).

В общих словах это можно легко объяснить следующим образом: в основном, тиристор работает как переключатель. Нагрузка получает напряжение питания от источника через тиристор. Когда тиристор находится в выключенном состоянии, нагрузка не подключена к источнику, а когда тиристор находится в открытом состоянии, нагрузка подключается к источнику.

Этот процесс включения и выключения тиристора осуществляется посредством ШИМ сигнала.

Соотношение периода ШИМ-сигнала к его длительности называется скважность сигнала, а обратная к скважности величина именуется коэффициентом заполнения.

Если коэффициент заполнения равен 100, то в этом случае у нас сигнал постоянный.

Таким образом, скважность импульсов (рабочий цикл) может быть вычислен с использованием следующей формулы:

Используя выше приведенные формулы, мы можем рассчитать время включения тиристора для получения необходимого нам напряжения.

Умножая скважность импульсов на 100, мы можем представить это в процентном соотношении. Таким образом, процент скважность импульсов прямо пропорционален величине напряжения от исходного. В приведенном выше примере, если мы хотим получить 40 вольт от 50 вольт источника питания, то это может быть достигнуто путем генерации сигнала со скважность 80%. Поскольку 80% из 50 вместо 40.

Для закрепления материала, решим следующую задачу:

  • рассчитаем длительность включения и выключения сигнала, имеющего частоту 50 Гц и скважность 60%.

Полученный ШИМ волны будет иметь следующий вид:

Один из лучших примеров применения широтно-импульсной модуляции является использование ШИМ для регулировки скорости двигателя или яркости свечения светодиода.

Этот прием изменения ширины импульса, чтобы получить необходимый рабочий цикл называется “широтно-импульсная модуляция”.

источник: www.circuitstoday.com

Блок питания 0…30 В / 3A

Набор для сборки регулируемого блока питания…

AVR.

Учебный курс. Использование ШИМ

Вот уже несколько раз я ругался странным словом ШИМ. Пора бы внести ясность и разьяснить что же это такое. Вообще, я уже расписывал этот режим работы, но все же повторюсь в рамках своего курса.

 

Вкратце, Широтно Импульсная Модуляция (в буржуйской нотации этот режим зовется PWMPulse Width Modulation) это способ задания аналогового сигнала цифровым методом, то есть из цифрового выхода, дающего только нули и единицы получить какие то плавно меняющиеся величины. Звучит как бред, но тем не менее работает. А суть в чем:
 

Представь себе тяжеленный маховик который ты можешь вращать двигателем. Причем двигатель ты можешь либо включить, либо выключить. Если включить его постоянно, то маховик раскрутится до максимального значения и так и будет крутиться. Если выключить, то остановится за счет сил трения.
 

А вот если двигатель включать на десять секунд каждую минуту, то маховик раскрутится, но далеко не на полную скорость — большая инерция сгладит рывки от включающегося двигателя, а сопротивление от трения не даст ему крутится бесконечно долго.


 

Чем больше продолжительность включения двигателя в минуту, тем быстрей будет крутится маховик.
При ШИМ мы гоним на выход сигнал состоящий из высоких и низких уровней (применимо к нашей аналогии — включаем и выключаем двигатель), то есть нулей и единицы. А затем это все пропускается через интегрирующую цепочку (в аналогии — маховик). В результате интегрирования на выходе будет величина напряжения, равная площади под импульсами.

 

Меня скважность (отношение длительности периода к длительности импульса) можно плавно менять эту площадь, а значит и напряжение на выходе. Таким образом если на выходе сплошные 1, то на выходе будет напряжение высокого уровня, в случае моего робота, на выходе из моста L293 это 12 вольт, если нули, то ноль. А если 50% времени будет высокий уровень, а 50% низкий то 6 вольт. Интегрирующей цепочкой тут будет служить масса якоря двигателя, обладающего довольно большой инерцией.


 

 

А что будет если взять и гнать ШИМ сигнал не от нуля до максимума, а от минуса до плюса. Скажем от +12 до -12. А можно задавать переменный сигнал! Когда на входе ноль, то на выходе -12В, когда один, то +12В. Если скважность 50% то на выходе 0В. Если скважность менять по синусоидальному закону от максимума к минимуму, то получим… правильно! Переменное напряжение. А если взять три таких ШИМ генератора и гнать через них синусоиды сдвинутые на 120 градусов между собой, то получим самое обычное трехфазное напряжение, а значит привет бесколлекторные асинхронные и синхронные двигатели

— фетиш всех авиамоделистов. На этом принципе построены все современные промышленные привода переменного тока. Всякие Unidrive и Omron Jxx

 
В качестве сглаживающей интегрирующей цепи в ШИМ может быть применена обычная RC цепочка:

 

Так, принцип понятен, приступаем к реализации.
ШИМ сигнал можно сварганить и на операционных усилителях и на микроконтроллере. Причем последние умеют это делать просто мастерски, благо все у них для этого уже есть.

 
Аппаратный ШИМ
В случае ATMega16 проще всего сделать на его ШИМ генераторе, который встроен в таймеры. Причем в первом таймере у нас целых два канала. Так что без особого напряга ATmega16 может реализовать одновременно четыре канала ШИМ.

 
Как это реализовано
У таймера есть особый регистр сравнения OCR**. Когда значение в счётном регистре таймера достигнает значения находящегося в регистре сравнения, то могут возникнуть следующие аппаратные события:

  • Прерывание по совпадению
  • Изменение состояния внешнего выхода сравнения OC**.

 
Выходы сравнения выведены наружу, на выводы микроконтроллера

 

 
На демоплате Pinboard к этим выводам как раз подключены светодиоды. А если поставить джамперы вдоль, в сторону надписи RC то к выводу ШИМ будет подключена интегрирующая цепочка.

 

 

Для Pinboard II разница в подключении невелика. Джамперы тут сгруппированы в один блок. А светодиоды и RC цепочки сгруппированы в левом верхнем углу платы.

Предположим, что мы настроили наш ШИМ генератор так, чтобы когда значение в счетном регистре больше чем в регистре сравнения, то на выходе у нас 1, а когда меньше, то 0.

 
Что при этом произойдет? Таймер будет считать как ему и положено, от нуля до 256, с частотой которую мы настроим битами предделителя таймера. После переполнения сбрасывается в 0 и продолжает заново.

 

 
Как видишь, на выходе появляются импульсы. А если мы попробуем увеличить значение в регистре сравнения, то ширина импульсов станет уже.

 

Так что меняя значение в регистре сравнения можно менять скважность ШИМ сигнала. А если пропустить этот ШИМ сигнал через сглаживающую RC цепочку (интегратор) то получим аналоговый сигнал.

 
У таймера может быть сколько угодно регистров сравнения. Зависит от модели МК и типа таймера. Например, у Атмега16

  • Timer0 — один регистр сравнения
  • Timer1 — два регистра сравнения (16ти разрядных!)
  • Timer2 — один регистр сравнения

 
Итого — четыре канала. В новых AVR бывает и по три регистра сравнения на таймер, что позволяет одним МК организовать просто прорву независимых ШИМ каналов.

 
Самих режимов ШИМ существует несколько:

 
Fast PWM
В этом режиме счетчик считает от нуля до 255, после достижения переполнения сбрасывается в нуль и счет начинается снова. Когда значение в счетчике достигает значения регистра сравнения, то соответствующий ему вывод ОСхх сбрасыватся в ноль. При обнулении счетчика этот вывод устанавливается в 1. И все!

 
Частота получившегося ШИМ сигнала определяется просто: Частота процесора 8Мгц, таймер тикает до 256 с тактовой частотой. Значит один период ШИМ будет равен 8000 000/256 = 31250Гц. Вполне недурно. Быстрей не получится — это максимальная скорость на внутреннем 8Мгц тактовом генераторе. Но если переключить FUSE биты на внешний кварц то можно раскачать МК на 16Мгц.

 
Еще есть возможность повысить разрешение, сделав счет 8, 9, 10 разрядным (если разрядность таймера позволяет), но надо учитывать, что повышение разрядности, вместе с повышением дискретности выходного аналогового сигнала, резко снижает частоту ШИМ.

 

Phase Correct PWM
ШИМ с точной фазой. Работает похоже, но тут счетчик считает несколько по другому. Сначала от 0 до 255, потом от 255 до 0. Вывод OCxx при первом совпадении сбрасывается, при втором устанавливается.
Но частота ШИМ при этом падает вдвое, изза большего периода. Основное его предназначение, делать многофазные ШИМ сигналы, например, трехфазную синусоиду. Чтобы при изменении скважности не сбивался угол фазового сдвига между двумя ШИМ сигналами. Т.е. центры импульсов в разных каналах и на разной скважности будут совпадать.

 

 
Еще одна тонкость:
Чтобы не было кривых импульсов, то в регистр сравнения любое значение попадает через буфферный регистр и заносится только тогда, когда значение в счетчике достигнет максимума. Т.е. к началу нового периода ШИМ импульса.

 
Clear Timer On Compare
Сброс при сравнении. Это уже скорей ЧИМ — частотно-импульсно моделированный сигнал. Тут работает несколько иначе, чем при других режимах. Тут счетный таймер тикает не от 0 до предела, а от 0 до регистра сравнения! А после чего сбрасывается.

 

 
В результате, на выходе получаются импульсы всегда одинаковой скважности, но разной частоты. А чаще всего этот режим применяется когда надо таймером отсчитывать периоды (и генерить прерывание) с заданной точностью.

 
Например, надо нам прерывание каждую миллисекунду. И чтобы вот точно. Как это реализовать проще? Через Режим СТС! Пусть у нас частота 8Мгц.

 
Прескалер будет равен 64, таким образом, частота тиков таймера составит 125000 Гц. А нам надо прерывание с частотой 1000Гц. Поэтому настраиваем прерывание по совпадению с числом 125.

 
Дотикал до 125 — дал прерывание, обнулился. Дотикал до 125 — дал прерывание, обнулился. И так бесконечно, пока не выключим.

 
Вот вам и точная тикалка.

 
Нет, конечно, можно и вручную. Через переполнение, т.е. дотикал до переполнения, загрузил в обработчике прерывания заново нужные значение TCNTх=255-125, сделал нужные полезные дела и снова тикать до переполнения. Но ведь через СТС красивей! 🙂

 
Аппаратура
А теперь контрольные регистры, которыми все это безобразие задается и программируется. Опишу на примере Двухканального FastPWM на таймере 1. В других все похоже. Даташит в зубы и вперед.

 
Итак, тут правят бал регистры TCCR1A и TCCR1B. Гы, кто бы сомневался %)

 
Распишу их по битам.
Регистр TCCR1A, биты COM1A1:COM1A0 и COM1B1:COM1B0. Эта братия определяет поведение вывода сравнения OC1A и OC1B соответственно.

 

COMxx1COMxx0Режим работы выхода
00вывод отцеплен от регистра сравнения и не меняется никак.
01Поведение вывода зависит от режима заданного в WGM, различается для разных режимов (FastPWM, FC PWM, Compar out) и разных МК, надо сверяться с даташитом.
10прямой ШИМ (сброс при совпадении и установка при обнулении счета)
11обратный ШИМ (сброс при обнулении и установка при совпадении)

 
Регистр TCCR1A, биты WGM11 и WGM10 вместе с битами WGM12 и WGM13, находящимися в регистре TCCR1B задают режим работы генератора.

WGM13WGM12WGM11WGM10Режим работы
0101Fast PWM 8 бит
0110Fast PWM 9 бит
0111Fast PWM 10 бит

 
Другие комбинации битов WGM задают режимы Phase Correct PWM и CTC (сброс OCxx при совпадении). Если интересно, то читай даташит, я для себя много интересного там не нашел, кроме Phase Correct PWM. И то мне сейчас важней скорость, а не точность фазы 🙂

 
После остается только запустить таймер, установив бит CS10 (подсчет тактовых импульсов с делителем 1:1)

 
Пример кода:

 
Попробуем поиграться яркостью светодиодов с помощью ШИМ сигналов. Подключи джамперы, чтобы запитать светодиоды LED1 и LED2

 

 
Для версии Pinboard II все аналогично, с поправкой на другое расположение джамперов:

 

 
Теперь все готово, можно писать код. Вначале в раздел инициализации устройств добавляю настройку таймера на запуск ШИМ и подготовку выводов.

 

1
2
3
4
5
6
7
8
9
10
11
12
;FastPWM Init
	SETB	DDRD,4,R16	; DDRD.4 = 1 Порты на выход
	SETB	DDRD,5,R16	; DDRD.5 = 1
 
; Выставляем для обоих каналов ШИМ режим вывода ОС** сброс при совпадении. 
; COM1A = 10 и COM1B = 10
; Также ставим режим FAST PWM 8bit (таймер 16ти разрядный и допускает
; большую разрядность ШИМ сигнала. Вплоть до 10 бит.  WGM = 0101
; Осталось только запустить таймер на частоте МК CS = 001
 
	OUTI 	TCCR1A,2<<COM1A0|2<<COM1B0|0<<WGM11|1<<WGM10	 
	OUTI	TCCR1B,0<<WGM13|1<<WGM12|1<<CS10

;FastPWM Init SETB DDRD,4,R16 ; DDRD.4 = 1 Порты на выход SETB DDRD,5,R16 ; DDRD.5 = 1 ; Выставляем для обоих каналов ШИМ режим вывода ОС** сброс при совпадении. ; COM1A = 10 и COM1B = 10 ; Также ставим режим FAST PWM 8bit (таймер 16ти разрядный и допускает ; большую разрядность ШИМ сигнала. Вплоть до 10 бит. WGM = 0101 ; Осталось только запустить таймер на частоте МК CS = 001 OUTI TCCR1A,2<<COM1A0|2<<COM1B0|0<<WGM11|1<<WGM10 OUTI TCCR1B,0<<WGM13|1<<WGM12|1<<CS10

 
Готово! Теперь ШИМ таймера1 генерит сигнал на выходаx OC1А и OC1B

 
Закинем в регистры сравнения первого и второго канала число 255/3=85 и 255/2 = 128
Так как ШИМ у нас 8ми разрядный, то заброс идет только в младший разряд. Старший же остается нулем. Но регистры сравнения тут у нас 16ти разрядные поэтому грузить надо оба байта сразу. Не забыв запретить прерывания (это важно!!! ибо атомарный доступ)

 

1
2
3
4
5
6
7
	CLI
	OUTI	OCR1AH,0
	OUTI	OCR1AL,85
 
	OUTI	OCR1BH,0
	OUTI	OCR1BL,128
	SEI

CLI OUTI OCR1AH,0 OUTI OCR1AL,85 OUTI OCR1BH,0 OUTI OCR1BL,128 SEI

 
Поехали! 🙂

 
Прошиваем, тыкаемся в ноги микроконтроллера осциллографом — видим следующую картину по каналам:

 

 
Как мы и запланировали. С первого канала длительность импульса в 1/3 периода, а со второго в 1/2
Ну и светодиоды горят с разной яркостью. Один ярче, другой тусклей. Меняя значение в регистрах OCR*** мы можем менять скважность.

 
Давай сделаем так, чтобы светодиод плавно менял свою яркость от нуля до максимума. Как помнишь, у нас там была программа, с мигающем по таймеру0 светодиодом. Немного ее подправим, сделаем так, чтобы по таймеру не светодиод мигал, а менялось значение в регистрах сравнения OCR1A и OCR1B. Причем меняться оно будет в разные стороны 🙂

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
; Main =========================================================
Main:	LDS	R16,TCNT	; Грузим числа в регистры
	LDS	R17,TCNT+1
 
	CPI	R16,0x10	; Сравниванем побайтно выдержку
	BRCS	NoMatch
	CPI	R17,0x01	; Выдержку сделали поменьше = 0x0110
	BRCS	NoMatch
 
; Если совпало то делаем экшн
Match:	CLI			; Запрет прерываний, т. к. атомарный доступ
 
; Меняем первый канал
; Особенность 16ти разрядных регистров в том, что их надо правильно читать и записывать.
; Читают вначале младший, потом старший байты. Так надо, чтобы младший не успел измениться
; (он ведь может тикать по таймеру) пока читают первым старший.  Укладывают их в обратном
; порядке. Сначала старший, потом младший. Правда для регистров OCR это не имеет большой 
; разницы -- они статичные, а вот для TCNT очень даже!
 
	IN	R16,OCR1AL	; Достали первый байт сравнения
	IN	R17,OCR1AH	; он 16ти разрядный, но старший байт будет 0
 
	INC	R16		; Увеличили
 
	OUT	OCR1AH,R17	; И сунули их обратно
	OUT	OCR1AL,R16
 
; Меняем второй канал
	IN	R16,OCR1BL	; Достали второй байт сравнения
	IN	R17,OCR1BH	; он 16ти разрядный, но старший байт будет 0
 
	DEC	R16		; Уменьшили
 
	OUT	OCR1BH,R17	; И сунули их обратно
	OUT	OCR1BL,R16	
	SEI			; Конец атомарного доступа
 
; Теперь надо обнулить счетчик, иначе за эту же итерацию главного цикла
; Мы сюда попадем еще не один раз -- таймер то не успеет натикать 255 значений
; чтобы число в первых двух байтах счетчика изменилось.  
 
	CLR	R16		; Нам нужен ноль
	CLI			; Таймер меняется и в прерывании. Нужен
				; атомарный доступ. Запрещаем прерывания
	OUT	TCNT0,R16	; Ноль в счетный регистр таймера
	STS	TCNT,R16	; Ноль в первый байт счетчика в RAM
	STS	TCNT+1,R16	; Ноль в второй байт счетчика в RAM
	STS	TCNT+2,R16	; Ноль в третий байт счетчика в RAM
	STS	TCNT+3,R16	; Ноль в первый байт счетчика в RAM
	SEI			; Разрешаем прерывания. 
; Не совпало - не делаем :) 
NoMatch:	NOP
 
	INCM	CCNT		; Шарманка вращается дальше, вхолостую
	JMP	Main

; Main ========================================================= Main: LDS R16,TCNT ; Грузим числа в регистры LDS R17,TCNT+1 CPI R16,0x10 ; Сравниванем побайтно выдержку BRCS NoMatch CPI R17,0x01 ; Выдержку сделали поменьше = 0x0110 BRCS NoMatch ; Если совпало то делаем экшн Match: CLI ; Запрет прерываний, т.к. атомарный доступ ; Меняем первый канал ; Особенность 16ти разрядных регистров в том, что их надо правильно читать и записывать. ; Читают вначале младший, потом старший байты. Так надо, чтобы младший не успел измениться ; (он ведь может тикать по таймеру) пока читают первым старший. Укладывают их в обратном ; порядке. Сначала старший, потом младший. Правда для регистров OCR это не имеет большой ; разницы — они статичные, а вот для TCNT очень даже! IN R16,OCR1AL ; Достали первый байт сравнения IN R17,OCR1AH ; он 16ти разрядный, но старший байт будет 0 INC R16 ; Увеличили OUT OCR1AH,R17 ; И сунули их обратно OUT OCR1AL,R16 ; Меняем второй канал IN R16,OCR1BL ; Достали второй байт сравнения IN R17,OCR1BH ; он 16ти разрядный, но старший байт будет 0 DEC R16 ; Уменьшили OUT OCR1BH,R17 ; И сунули их обратно OUT OCR1BL,R16 SEI ; Конец атомарного доступа ; Теперь надо обнулить счетчик, иначе за эту же итерацию главного цикла ; Мы сюда попадем еще не один раз — таймер то не успеет натикать 255 значений ; чтобы число в первых двух байтах счетчика изменилось. CLR R16 ; Нам нужен ноль CLI ; Таймер меняется и в прерывании. Нужен ; атомарный доступ. Запрещаем прерывания OUT TCNT0,R16 ; Ноль в счетный регистр таймера STS TCNT,R16 ; Ноль в первый байт счетчика в RAM STS TCNT+1,R16 ; Ноль в второй байт счетчика в RAM STS TCNT+2,R16 ; Ноль в третий байт счетчика в RAM STS TCNT+3,R16 ; Ноль в первый байт счетчика в RAM SEI ; Разрешаем прерывания. ; Не совпало — не делаем 🙂 NoMatch: NOP INCM CCNT ; Шарманка вращается дальше, вхолостую JMP Main

 
А теперь давайте включим режим с точной фазой (WGM = 0001) и посмотрим на то как будет меняться скважность.

 

1
2
	OUTI 	TCCR1A,2<<COM1A0|2<<COM1B0|0<<WGM11|1<<WGM10	 
	OUTI	TCCR1B,0<<WGM13|0<<WGM12|1<<CS10

OUTI TCCR1A,2<<COM1A0|2<<COM1B0|0<<WGM11|1<<WGM10 OUTI TCCR1B,0<<WGM13|0<<WGM12|1<<CS10

 

 
ШИМ на прерываниях.
Но вот засада — плата уже разведена, захотелось ШИМ, а выводы OCxx уже задействованы под другие цели.

 
Ничего страшного, малой кровью можно это исправить. Также запускаем ШИМ, только:

  • Отключаем выводы OCxx от регистра сравнения.
  • Добавляем два обработчика прерывания на сравнение и на переполнение. В прерывании по сравнению сбрасываем нужный бит, в прерывании по переполнению счетчика устанавливаем.

Все просто 🙂

 
Пример:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
;FastPWM Init на прерываниях
 
; ШИМ будет на выводах 3 и 6 порта D
	SETB	DDRD,3,R16	; DDRD.3 = 1 Порты на выход
	SETB	DDRD,6,R16	; DDRD.6 = 1
 
; Выставляем для обоих каналов ШИМ режим вывода ОС** выключеным. 
; COM1A = 00 и COM1B = 00
; Также ставим режим FAST PWM 8bit (таймер 16ти разрядный и допускает
; большую разрядность ШИМ сигнала. Вплоть до 10 бит.  WGM = 0101
; Осталось только запустить таймер на частоте МК CS = 001
 
	OUTI 	TCCR1A,0<<COM1A0|0<<COM1B0|0<<WGM11|1<<WGM10	 
	OUTI	TCCR1B,0<<WGM13|1<<WGM12|1<<CS10	
 
	SETB	TIMSK,OCIE1A,R16	; Включаем прерывание по сравнению А
	SETB	TIMSK,OCIE1B,R16	; Включаем прерывание по сравнению Б
	SETB	TIMSK,TOIE1,R16	; Включаем прерывание по переполнению Т1
					; Причем в режиме WGM=1010 переполнение
					; будет на FF т. е. таймер работает как
					; 8ми разрядный.

;FastPWM Init на прерываниях ; ШИМ будет на выводах 3 и 6 порта D SETB DDRD,3,R16 ; DDRD.3 = 1 Порты на выход SETB DDRD,6,R16 ; DDRD.6 = 1 ; Выставляем для обоих каналов ШИМ режим вывода ОС** выключеным. ; COM1A = 00 и COM1B = 00 ; Также ставим режим FAST PWM 8bit (таймер 16ти разрядный и допускает ; большую разрядность ШИМ сигнала. Вплоть до 10 бит. WGM = 0101 ; Осталось только запустить таймер на частоте МК CS = 001 OUTI TCCR1A,0<<COM1A0|0<<COM1B0|0<<WGM11|1<<WGM10 OUTI TCCR1B,0<<WGM13|1<<WGM12|1<<CS10 SETB TIMSK,OCIE1A,R16 ; Включаем прерывание по сравнению А SETB TIMSK,OCIE1B,R16 ; Включаем прерывание по сравнению Б SETB TIMSK,TOIE1,R16 ; Включаем прерывание по переполнению Т1 ; Причем в режиме WGM=1010 переполнение ; будет на FF т.е. таймер работает как ; 8ми разрядный.

 
Осталось только прописать обработчики и вектора:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
         .CSEG
         .ORG $000		; (RESET) 
         RJMP   Reset
         .ORG $002
         RETI			; (INT0) External Interrupt Request 0
         .ORG $004
         RETI 			; (INT1) External Interrupt Request 1
         .ORG $006
         RETI			; (TIMER2 COMP) Timer/Counter2 Compare Match
         .ORG $008
         RETI 			; (TIMER2 OVF) Timer/Counter2 Overflow
         .ORG $00A
         RETI			; (TIMER1 CAPT) Timer/Counter1 Capture Event
         .ORG $00C 
         RJMP Timer1_OCA		; (TIMER1 COMPA) Timer/Counter1 Compare Match A
         .ORG $00E
         RJMP Timer1_OCB		; (TIMER1 COMPB) Timer/Counter1 Compare Match B
         . ORG $010
         RJMP Timer1_OVF 		; (TIMER1 OVF) Timer/Counter1 Overflow
         .ORG $012
         RJMP	Timer0_OV 	; (TIMER0 OVF) Timer/Counter0 Overflow
         .ORG $014
         RETI 			; (SPI,STC) Serial Transfer Complete
         .ORG $016
         RETI     			; (USART,RXC) USART, Rx Complete
         .ORG $018
         RETI			; (USART,UDRE) USART Data Register Empty
         .ORG $01A
         RETI			; (USART,TXC) USART, Tx Complete
         .ORG $01C
         RETI			; (ADC) ADC Conversion Complete
         .ORG $01E
         RETI			; (EE_RDY) EEPROM Ready
         .ORG $020
         RETI			; (ANA_COMP) Analog Comparator
         .ORG $022
         RETI			; (TWI) 2-wire Serial Interface
         .ORG $024
         RETI			; (INT2) External Interrupt Request 2
         .ORG $026
         RETI			; (TIMER0 COMP) Timer/Counter0 Compare Match
         .ORG $028
         RETI			; (SPM_RDY) Store Program Memory Ready
 
	 . ORG   INT_VECTORS_SIZE      	; Конец таблицы прерываний
 
; Interrupts ==============================================
Timer0_OV:	PUSHF
		PUSH	R17
		PUSH	R18
		PUSH	R19
 
		INCM	TCNT
 
		POP	R19
		POP	R18
		POP	R17
		POPF
 
		RETI
 
; Вот наши обработчики на ШИМ
Timer1_OCA:	SBI	PORTD,3
		RETI
 
Timer1_OCB:	SBI	PORTD,6
		RETI
 
Timer1_OVF: 	CBI	PORTD,3
		CBI	PORTD,6
		RETI
; End Interrupts ==========================================

.CSEG .ORG $000 ; (RESET) RJMP Reset .ORG $002 RETI ; (INT0) External Interrupt Request 0 .ORG $004 RETI ; (INT1) External Interrupt Request 1 .ORG $006 RETI ; (TIMER2 COMP) Timer/Counter2 Compare Match .ORG $008 RETI ; (TIMER2 OVF) Timer/Counter2 Overflow .ORG $00A RETI ; (TIMER1 CAPT) Timer/Counter1 Capture Event . ORG $00C RJMP Timer1_OCA ; (TIMER1 COMPA) Timer/Counter1 Compare Match A .ORG $00E RJMP Timer1_OCB ; (TIMER1 COMPB) Timer/Counter1 Compare Match B .ORG $010 RJMP Timer1_OVF ; (TIMER1 OVF) Timer/Counter1 Overflow .ORG $012 RJMP Timer0_OV ; (TIMER0 OVF) Timer/Counter0 Overflow .ORG $014 RETI ; (SPI,STC) Serial Transfer Complete .ORG $016 RETI ; (USART,RXC) USART, Rx Complete .ORG $018 RETI ; (USART,UDRE) USART Data Register Empty .ORG $01A RETI ; (USART,TXC) USART, Tx Complete .ORG $01C RETI ; (ADC) ADC Conversion Complete .ORG $01E RETI ; (EE_RDY) EEPROM Ready .ORG $020 RETI ; (ANA_COMP) Analog Comparator .ORG $022 RETI ; (TWI) 2-wire Serial Interface . ORG $024 RETI ; (INT2) External Interrupt Request 2 .ORG $026 RETI ; (TIMER0 COMP) Timer/Counter0 Compare Match .ORG $028 RETI ; (SPM_RDY) Store Program Memory Ready .ORG INT_VECTORS_SIZE ; Конец таблицы прерываний ; Interrupts ============================================== Timer0_OV: PUSHF PUSH R17 PUSH R18 PUSH R19 INCM TCNT POP R19 POP R18 POP R17 POPF RETI ; Вот наши обработчики на ШИМ Timer1_OCA: SBI PORTD,3 RETI Timer1_OCB: SBI PORTD,6 RETI Timer1_OVF: CBI PORTD,3 CBI PORTD,6 RETI ; End Interrupts ==========================================

Почему я в этих обработчиках не сохраняю регистры и SREG? А незачем! Команды SBI меняют только конкретные биты (а больше нам и не надо), не влияя на флаги и другие регистры.

 
Запустили…

 

 
И получили полную херню. Т.е. ШИМ как бы есть, но почему то адово мерцает. А на осциллографе в этот момент полный треш. Кто виноват? Видимо конфликт прерываний. Осталось только выяснить где именно. Сейчас я вам дам практический пример реалтаймовой отладки 🙂

 
Итак, что мы имеем:

 
ШИМ, как таковой, работает. Скважность меняется. Значит наш алгоритм верен.
Но длительности скачут. Почему? Видимо потому, что что-то мешает им встать вовремя. Когда у нас возникают фронты? Правильно — по прерываниям. А прерывания по таймерам. Т.е. врать не должны. Однако так получается. Давайте узнаем каком месте у нас конфликт.

 
Первым делом надо добавить в код обработчика отладочную инфу. Будем в обработчике прерываний инвертировать бит. Пусть это будет PD7 — зашли в обработчик, инверснули. Зашли — инверснули. В результате, у нас на выходе этого бита будет прямоугольный сигнал, где каждый фронт — сработка прерываний. Послужит нам как линейка, отмеряющая время.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
; Interrupts ==============================================
Timer0_OV:	PUSHF
		PUSH	R17
		PUSH	R18
		PUSH	R19
 
		INCM	TCNT
 
		POP	R19
		POP	R18
		POP	R17
		POPF
 
		RETI
 
; Установка бита ШИМ канала А
Timer1_OCA:	SBI	PORTD,3
		RETI
 
; Установка бита ШИМ канала Б
Timer1_OCB:	SBI	PORTD,6
		RETI
 
;Сброс бита ШИМ канала А и Б
Timer1_OVF: 	CBI	PORTD,3
		CBI	PORTD,6
 
;DEBUG PIN BEGIN ---------------
		PUSHF
		INVBM	PORTD,7    
		POPF
;DEBUG PIN END -----------------
		RETI

; Interrupts ============================================== Timer0_OV: PUSHF PUSH R17 PUSH R18 PUSH R19 INCM TCNT POP R19 POP R18 POP R17 POPF RETI ; Установка бита ШИМ канала А Timer1_OCA: SBI PORTD,3 RETI ; Установка бита ШИМ канала Б Timer1_OCB: SBI PORTD,6 RETI ;Сброс бита ШИМ канала А и Б Timer1_OVF: CBI PORTD,3 CBI PORTD,6 ;DEBUG PIN BEGIN ————— PUSHF INVBM PORTD,7 POPF ;DEBUG PIN END —————— RETI

Инверсия бита невозможна без логических операций, поэтому надо сохранять флаги.

 

 
Из картинки стало понятно, что у нас накрывается прерывание по сравнению. Давайте попробуем посмотреть с какими прерыванием происходит конфликт. Особых вариантов у нас нет — прерываний у нас тут четрые. А наиболее очевиден конфликт Timer0_OV vs Timer1_OCA vs Timer1_OCB.

 
OCA и OCB конфликтуют только тогда, когда счетные регистры у них сравниваются — вызов происходит почти одновременно, но сами обработчики короткие — всего несколько тактов, поэтому дребезг не столь сильный.

 
А вот Timer0_OV делает довольно мощный прогруз стека и еще вычитает четырехбайтную переменную. Т.е. тактов на 20 может задержать обработчик установки бита Timer1_OC* от того и вылазят такие зверские дребезги.

 
Давайте проверим эту идею. Разрешим прерывания в обработчике Timer0_0V

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
; Interrupts ==============================================
Timer0_OV:	SEI
		PUSHF
		PUSH	R17
		PUSH	R18
		PUSH	R19
 
		INCM	TCNT
 
		POP	R19
		POP	R18
		POP	R17
		POPF
 
		RETI
 
; Установка бита ШИМ канала А
Timer1_OCA:	SBI	PORTD,3
		RETI
 
; Установка бита ШИМ канала Б
Timer1_OCB:	SBI	PORTD,6
		RETI
 
;Сброс бита ШИМ канала А и Б
Timer1_OVF: 	CBI	PORTD,3
		CBI	PORTD,6
		RETI

; Interrupts ============================================== Timer0_OV: SEI PUSHF PUSH R17 PUSH R18 PUSH R19 INCM TCNT POP R19 POP R18 POP R17 POPF RETI ; Установка бита ШИМ канала А Timer1_OCA: SBI PORTD,3 RETI ; Установка бита ШИМ канала Б Timer1_OCB: SBI PORTD,6 RETI ;Сброс бита ШИМ канала А и Б Timer1_OVF: CBI PORTD,3 CBI PORTD,6 RETI

 
youtube.com/v/rRk3dulmKBs&hl=ru_RU&fs=1&rel=0″/>

 
Картина сразу исправилась. Теперь более важное (для нас важное) прерывание задвигает обработчик от Таймера 0. Но тут надо просекать возможные риски:

 

  • Более глубокий прогруз стека
  • Нарушается атомарный доступ к четырехбайтной переменной TCNT, поэтому если бы у нас было еще какое-то прерывание, меняющее TCNT то его надо было бы запрещать локально. Иначе бы мы получили такой трешняк, что проще заново прогу переписать, чем это отладить

.

 
ШИМ на таймерах
Когда совсем все плохо, то можно сделать на любом таймере. В обработчик прерывания по переполнению таймера заносим конечный автомат, который сначала загрузит в таймер длительность низкого уровня, а при следующем заходе — длительность высокого. Ну и, само собой, ноги процессора подергает как надо. Таким образом, на один таймер можно повесить дофига ШИМ каналов, но задолбаешься все с кодовой реализацией всего этого. И процессорное время жрать будет некисло. Не говоря уже про дребезги, о которых только что было сказано. Это для эстетов извращенцев :)))))

 
Исходник к статье

ШИМ — широтно-импульсная модуляция | joyta.ru

ШИМ или PWM (англ. Pulse-Width Modulation) — широтно-импульсная модуляция — это метод предназначен для контроля величины напряжения и тока. Действие ШИМ заключается в изменении ширины импульса постоянной амплитуды и постоянной частотой.

Свойства ШИМ регулирования используются в импульсных преобразователях, в схемах управления двигателями постоянного тока или яркостью свечения светодиодов.

Принцип действия ШИМ

Принцип действия ШИМ, как указывает на это само название, заключается в изменении ширины импульса сигнала. При использовании метода широтно-импульсной модуляции, частота сигнала и амплитуда остаются постоянными. Самым важным параметром сигнала ШИМ является коэффициент заполнения, который можно определить по следующей формуле:

Также можно отметить, что сумма времени высокого и низкого сигнала определяет период сигнала:

где:

  • Ton — время высокого уровня
  • Toff — время низкого уровня
  • T — период сигнала

Время высокого уровня и время низкого уровня сигнала показано на нижнем рисунке. Напряжение U1- это состояния высокого уровня сигнала, то есть его амплитуда.

На следующем рисунке представлен пример сигнала ШИМ с определенным временным интервалом высокого и низкого уровня.

Расчет коэффициента заполнения ШИМ

Расчет коэффициента заполнения ШИМ на примере:

Тестер транзисторов / ESR-метр / генератор

Многофункциональный прибор для проверки транзисторов, диодов, тиристоров…

 

Для расчета процентного коэффициента заполнения необходимо выполнить аналогичные вычисления, а результат умножить на 100%:

Как следует из расчета, на данном примере, сигнал (высокого уровня) характеризуется заполнением, равным 0,357 или иначе 37,5%. Коэффициент заполнения является абстрактным значением.

Важной характеристикой  широтно-импульсной модуляции может быть также частота сигнала, которая рассчитывается по формуле:

Значение T, в нашем примере, следует взять уже в секундах для того, чтобы совпали единицы в формуле. Поскольку, формула частоты имеет вид 1/сек, поэтому 800ms переведем в 0,8 сек.

Благодаря возможности регулировки ширины импульса можно изменять, например, среднее значение напряжения. На рисунке ниже показаны различные коэффициенты заполнения при сохранении той же частоты сигналов и одной и той же амплитуды.

Для вычисления среднего значения напряжения ШИМ необходимо знать коэффициент заполнения, поскольку среднее значение напряжения является произведением коэффициента заполнения и амплитуды напряжения сигнала.
Для примера, коэффициент заполнения был равен 37,5% (0,357) и амплитуда напряжения U1 = 12В даст среднее напряжение Uср:

В этом случае среднее напряжение сигнала ШИМ составляет 4,5 В.

ШИМ дает очень простую возможность понижать напряжение  в диапазоне от напряжения питания U1 и до 0. Это можно использовать, например, для регулировки яркости свечения светодиодов, или скорости вращения двигателя DC (постоянного тока), питающиеся от величины среднего напряжения.

Сигнал ШИМ может быть сформирован микроконтроллером или аналоговой схемой. Сигнал от таких схем характеризуется низким напряжением и очень малым выходным током. В случае необходимости регулирования мощных нагрузок, следует использовать систему управления, например, с помощью транзистора.

Это может быть биполярный или полевой транзистор. На следующих примерах будет использован биполярный транзистор BC547.

Пример управления светодиодом при помощи ШИМ.

Сигнал ШИМ поступает на базу транзистора VT1 через резистор R1, иначе говоря, транзистор VT1 с изменением сигнала то включается, то выключается. Это подобно ситуации, при которой транзистор можно заменить обычным выключателем, как показано ниже:

Упрощенная схема управления светодиодом.

Когда переключатель замкнут, светодиод питается через резистор R2 (ограничивающий ток) напряжением 12В. А когда переключатель разомкнут, цепь прерывается, и светодиод гаснет. Такие переключения с малой частотой в результате дадут мигающий светодиод.

Однако, если необходимо управлять интенсивностью свечения светодиодов необходимо увеличить частоту сигнала ШИМ, так, чтобы обмануть человеческий глаз. Теоретически переключения с частотой 50 Гц уже не незаметны для человеческого глаза, что в результате дает эффект уменьшения яркости свечения светодиода.

Чем меньше коэффициент заполнения, тем слабее будет светиться светодиод, поскольку во время одного периода светодиод  будет гореть меньшее время.

Такой же принцип и подобную схему можно использовать и для управления двигателем постоянного тока. В случае двигателя необходимо, однако, применять более высокую частоту переключений (выше 15-20 кГц) по двум причинам.

Первая из них касается звука, какой может издавать двигатель (неприятный писк). Частота 15-20 кГц является теоретической границей слышимости человеческого уха, поэтому частоты выше этой границы будут неслышны.

Второй вопрос касается стабильности работы двигателя. При управлении двигателем низкочастотным сигналом с малым коэффициентом заполнения, обороты двигателя будут нестабильны или может привести к его полной остановке. Поэтому, чем выше частота сигнала ШИМ, тем выше стабильность среднего выходного напряжения. Также меньше пульсаций напряжения.

Не следует, однако, слишком завышать  частоту сигнала ШИМ, так как при больших частотах транзистор может не успеть полностью открыться или закрыться, и схема управления  будет работать не правильно. Особенно это относится к полевым транзисторам, где время перезарядки может быть относительно большое, в зависимости от конструкции.

Слишком высокая частота сигнала ШИМ также вызывает увеличение потерь на транзисторе, поскольку каждое переключение вызывает потери энергии. Управляя большими токами на высоких частотах необходимо подобрать быстродействующий транзистор с низким сопротивлением проводимости.

Управляя  двигателем постоянного тока с помощью ШИМ, следует помнить о применении диода для защиты транзистор VТ1 от индукционных всплесков, появляющимся в момент выключения транзистора. Благодаря использованию диода, индукционный импульс разряжается через него и внутреннее сопротивление двигателя, защищая тем самым транзистор.

Схема системы управления скоростью вращения двигателя постоянного тока с защитным диодом.

Для сглаживания всплесков питания между клеммами двигателя, можно подключить к ним параллельно конденсатор небольшой емкости (100nF), который будет стабилизировать напряжение между последовательными переключениями транзистора. Это также снизит помехи, создаваемые частыми переключениями транзистора VT1.

Электрогидравлические приводы распределителей PDV с прямым управлением.

Электрогидравлические приводы распределителей PDV с прямым управлением.


В данной статье рассмотрим основные особенности управления электрогидравлических пропорциональных приводов с прямым управлением катушек. Они поставляются в двух вариантах, один из них — приводы с электрическим драйвером.

Рис. 1. Первый вариант привода с прямым управлением катушками.

На рис. 1 показан внешний вид и структурная схема привода золотника на основе двух редукционных клапанов с прямым управлением катушек. Собственно, это все, что установлено в корпусе привода. Это позволяет использовать уже отработанную конструкцию, и при этом, иметь прямое управление. Входной сигнал с помощью двух пропорциональных редукционных клапанов определяет уровень управляющего давления, которое перемещает главный золотник. Здесь нет контроля положения золотника от датчика, нет системы мониторинга неисправностей, а это означает, что любые силы, которые перекрывают силы управляющего золотника давления могут изменить положение золотника без сигнала ошибки, поэтому безопасность всей системы остается на усмотрение оператора (только визуальный контроль). Дифференциальные сигналы управления могут быть аналоговыми токовыми, которые превосходят ШИМ сигналы по надежности и энергетическим показателям. В случае построения системы на ШИМ сигналах предпочтительно устанавливать специализированный контроллер, который оснащен ШИМ выходами, например, фирмы IFM.

            Его основные характеристики приводятся в Таблице 1.

      Таблица 1.


Рис. 2. Два вида разъемов и схема подключения.

На рис. 2 приводится два типа разъемов, которые устанавливаются на приводы для PDV с аналоговым управлением и схемой подключения к катушкам.
Компания OMFB выпускает второй вариант электрогидравлического привода с прямым управлением, который позволяет применить редукционные пропорциональные клапаны с большим потоком и, соответственно, с более мощной катушкой.
Рис. 2. Второй вариант привода с прямым управлением катушками.

.


На рис.2 Показан второй вариант. Внешний вид и структурная схема привода золотника, на основе двух редукционных клапанов с прямым управлением катушек. Как показано на рисунке, корпус привода имеет вид, визуально отличающийся от первого варианта, но структурная схема у них одинаковая. Основные параметры привода второго варианта в Таблице 2.


Таблица 2.

Как видно из Таблицы 2, катушки во втором варианте имеют меньшую величину сопротивления обмотки, а значит, при тех же питающих напряжениях имеют более высокий уровень тока управления.


Рис. 3. Разъем и его схема подключения.

На рис. 3 Показан внешний вид штекерного разъема и схема подключения к катушкам. Для питания катушек и всех вариантов приводов с прямым управлением можно использовать трехпроводную схему подключения. При этом необходимо учитывать величину тока питания для применения провода с достаточным сечением. Все приводы с прямым управлением катушек обеспечивают:
‣ высокую точность управления золотником
‣ характеристики ЭМС соответствуют Директиве 2014/30/UE
‣ быстрое время реакции
‣ внешний ШИМ
‣ низкое энергопотребление
‣ прочную и надежную конструкцию


Эти варианты приводов с прямым управлением катушек рекомендуются к применению, где гистерезис и время реакции не важны, а приоритетом является несложное пропорциональное управление.

Как было сказано ранее, при прямом управлении катушками необходимо формировать 2 канала управление ШИМ. На основе дифференциальных сигналов управления, чтобы по возможности, характеристики управления потоком редукционных клапанов находились на линейной части характеристик. Ниже приводится пример, какая скважность должна быть на ШИМ выходе, когда один сигнал подается на катушку A (порт А), а другой сигнал на катушку B (порт В).


Рис. 14. Диаграммы работы ШИМ

Как показано на рис. 4, если необходимо, чтобы золотник находился в нейтральном положении, скважность ШИМ сигналов должна быть 50%. В остальных случаях, скважность сигнала порта А должна быть зеркальным отображением сигнала порта В. Несмотря на то, что речь идет об управлении без обратной связи по положению золотника и сигналы управления не маломощные, тем не менее, здесь есть положительные стороны. В системе управления фактически меньше компонентов, а значит возможно, создание простых, но надежных систем, где можно программным путем в контроллере вводит несколько иные законы управления распределителями.  Это значит, что можно получить характеристики управления, недостижимые при применении электронных драйверов, которые, в ряде случаев, невозможно перенастраивать в процессе управления.

В заключении хочу добавить, что компания OMFB разработала и выпустила ATEX модули управления с электронным драйвером без обратной связи и с прямым управлением катушек привода. Они уже прошли тестирование в лаборатории TÜV CYPRUS Ltd – отчет оценки ATEX за номером 20 0206305 от 30.10.2020.  И можно надеется, что процесс сертификации будет завершен и они будут доступны для всех заказчиков.

Автор: к.т.н. Воронежцев И.В.
Редактор: к.т.н. Артюшин Ю.В.


Смотрите также:

Широтно-импульсная модуляция (ШИМ) | Класс робототехники

Как нам уже известно из первых уроков, любой микроконтроллер умеет хорошо работать с цифровыми сигналами. Он легко справляется с арифметическими операциями над цифровыми данными, принимает и передаёт цифровые сигналы по линиям связи. А что значит «цифровые» в данном случае?

В самом первом уроке мы зажигали и гасили светодиод с помощью Ардуино. Для того, чтобы зажечь светодиод, мы подавали на его анод высокий уровень сигнала. А чтобы погасить — низкий уровень. Получается, для управления мы использовали только два уровня напряжения: высокий и низкий. Светодиод либо будет гореть, либо не будет. Третьего — не дано. Оперируя только двумя состояниями означает, что мы работаем с цифровым сигналом.

Но что делать, если нам нужно зажечь этот самый светодиод только на половину яркости? Или запустить двигатель, на 30% его мощности? Для решения этой задачи используют подход, называемый широтно-импульсной модуляцией сигнала. О том, что такое ШИМ и как это работает, мы узнаем на сегодняшнем уроке.

Широтно-импульсная модуляция — ШИМ

Разберем понятие ШИМ на примере управления скоростью вращения двигателя постоянного тока. Поставим своей целью запустить мотор на 50% от его максимальной скорости. Пусть наш двигатель идеальный и чтобы достичь заданной скорости, нам нужно в единицу времени передавать на мотор в два раза меньше мощности. Как это сделать, не меняя источник питания?

Проведем мысленный эксперимент (а кто-то может и натуральный — ничего сложного). Возьмём мотор постоянного тока с массивным маховиком, закрепленным на валу (таким маховиком может служить колесо). Подадим питание от аккумулятора и мотор начнет набирать обороты. Через какое-то время, мотор достигнет номинальной мощности, а его ротор максимальной скорости вращения. Отключим питание, и мотор постепенно начнет замедляться вплоть до полной остановки.

Следующий опыт. Снова включим мотор, и когда его скорость достигнет половины от максимальной — выключим. Заметив, что скорость падает — снова включим. И так далее. Включая и выключая питание мотора, мы заставим ротор вращаться со скоростью, близкой к половине от максимальной!

Разумеется, в силу человеческой медлительности, мотор будет удерживать заданную скорость с некоторой погрешностью. Другими словами, скорость будет «плавать» вокруг заданного значения. Чтобы минимизировать эти отклонения, нам потребуется увеличить частоту переключений. Тут уже не обойтись без автоматики.

А как заставить мотор вращаться медленнее или быстрее? Количество переданной мотору энергии будет зависеть от отношения времени когда мотор включен — tвкл к времени когда он выключен — tвыкл.

Так, для передачи мотору 50% мощности, tвкл будет равно tвыкл. Такой случай как раз изображен на графике. Чтобы мотор вращался еще медленнее, скажем с мощностью 25% от номинальной, придется время включения мотора уменьшить до этих самых 25% от общего периода управления T.

Таким образом, имея возможность менять ширину импульсов, мы можем достаточно точно управлять скоростью вращения мотора.

Собственно, рассмотренный способ управления мощностью и называется широтно-импульсной модуляцией сигнала, а сокращённо — ШИМ. Теперь рассмотрим параметры которые характеризуют ШИМ сигнал и которые следует учитывать при написании программ для микроконтроллеров.

Коэффициент заполнения (duty cycle)

Начнем с самого главного параметра — коэффициента заполнения D (он же duty cycle). Этот коэффициент равен отношению периода ШИМ сигнала к ширине импульса:

D = T / tвкл

Пример ШИМ сигнала для разных значений D:

Чем больше D, тем больше мощности мы передаем управляемому устройству, например, двигателю. Так, при D = 1 двигатель работает на 100% мощности, при D = 0,5 — наполовину мощности, при D = 0 — двигатель полностью отключен.

Кстати, кроме коэффициента заполнения для характеризации ШИМ применяют и другой параметр — скважность S. Эти два параметра связаны выражением:

S = 1/T  

Скважность, как и коэффициент заполнения — величина безразмерная. В отличие от D, она может принимать значения от 1 до бесконечности. Но чаще всего, особенно в англоязычных источниках, используют именно D.

Частота ШИМ

Частота ШИМ определяет период импульса — T (см картинку выше). Требования к этой частоте диктуются несколькими факторами, в зависимости от типа управляемого устройства.

В случае управления светодиодами одним из главных факторов становится видимость мерцания. Чем выше частота, тем менее заметно мерцание излучаемого света. Высокая частота также помогает снизить влияние температурных скачков, которые светодиоды не любят. На практике для светодиодов достаточно иметь частоту ШИМ в пределах 100-300 Гц.

С моторами постоянного тока дела обстоят немного иначе. С одной стороны, чем больше частота, тем более плавно и менее шумно работает мотор. С другой — на высоких частотах падает крутящий момент. Нужен баланс. Более подробно о моторах мы поговорим в одной из будущих статей, а пока рекомендуем для большинства DIY задач использовать частоту ШИМ 2кГц.

Плюс, общая проблема для всех случаев управления силовой нагрузкой — потери в цепях силовой коммутации (в транзисторах, и не только), которые увеличиваются с ростом частоты ШИМ. Чем больше частота, тем большее время транзисторы находятся в переходных состояниях, активно выделяя тепло и снижая эффективность системы.

Разрешение ШИМ

Ещё один важный параметр — разрешение ШИМ сигнала. Этот параметр показывает, с какой точностью мы можем менять коэффициент заполнения. Чем больше разрешение, тем плавнее будет меняться мощность на управляемом устройстве.

Например, у платы Ардуино с базовыми настройками, разрешение ШИМ — 256. То есть мы можем изменять сигнал от 0 до 255 — не густо, но для большинства DIY задач хватает.

ШИМ и микроконтроллеры

Простейший генератор ШИМ можно собрать и без всяких микроконтроллеров, только лишь с микросхемой таймера 555. Разумеется, любой микроконтроллер тоже умеет работать с ШИМ сигналом.

Например, у платы Ардуино имеется 6 контактов: 3, 5, 6, 9, 10 и 11, которые можно настроить для генерации аппаратного ШИМ. По-умолчанию, на контактах 5 и 6 частота сигнала будет 1кГц, на остальных — скромные 500Гц. Как ими пользоваться ШИМ на Ардуино подробно рассказывается на уроке «Ардуино: ШИМ» (скоро будет).

STM32F103 — гораздо более серьёзный микроконтроллер. У него целых 20 контактов имеют возможность генерации ШИМ. Частота этого микроконтроллера — 72МГц, что делает возможным плавное и точное управление моторами постоянного тока, не говоря уже о светодиодах. Узнаём подробности в уроке про STM32 и ШИМ.

Кстати, микроконтроллеры умеют не только генерировать ШИМ, но и детектировать подобные сигналы. Про это можно почитать в соответствующей статье на нашем портале (скоро будет).

Вконтакте

Facebook

Twitter

Что такое рабочий цикл? | Fluke

Рабочий цикл — это отношение времени, в течение которого нагрузка или цепь находится во включенном состоянии, и времени, в течение которого нагрузка или цепь выключены.

Рабочий цикл, иногда называемый «коэффициентом заполнения», выражается в процентах от времени включения. Рабочий цикл 60% — это сигнал, который включен 60% времени и выключен в остальных 40%.

Многие нагрузки быстро включаются и выключаются быстродействующим электронным переключателем, который точно регулирует выходную мощность нагрузки. Работа под нагрузкой — например, яркость лампы, мощность нагревательного элемента и магнитная сила катушки — может регулироваться рабочим циклом с помощью периодов времени включения и выключения или циклов в секунду.

Рабочий цикл упрощен.

Если на клапан подается импульсное включение с переменной длительностью (так называемая широтно-импульсная модуляция), рабочий цикл изменяется. Если он включен в течение 0,05 секунды в 0,1-секундном цикле, рабочий цикл топливной форсунки равен 50%. Если он включился в течение 0,09 секунды того же 0,1-секундного цикла, рабочий цикл топливной форсунки равен 90%.

Пример рабочего цикла

В автомобильной электронной системе впрыска топлива импульсы напряжения, подаваемые на соленоид клапана топливной форсунки, управляют клапаном топливной форсунки с фиксированной скоростью 10 циклов в секунду или 10 Гц.

Широтно-импульсная модуляция позволяет точно контролировать подачу топлива в двигатель электроникой. Среднее значение напряжения для каждого рабочего цикла определяется длительностью включения импульса.

Соленоиды с рабочим циклом используют сигнал переменного рабочего цикла для изменения расхода или регулировки давления. Чем дольше соленоид остается открытым, тем больше создается поток и меньше давление. Эти соленоиды управляются либо подачей, либо с земли.

Что такое ширина импульса?

Ширина импульса — это фактическое время включения, измеряемое в миллисекундах.Время выключения не влияет на ширину импульса сигнала. Единственное измеряемое значение — это то, как долго сигнал находится в состоянии ВКЛ (с наземным управлением).

Ссылка: Принципы цифрового мультиметра Глена А. Мазура, American Technical Publishers.

2.9.1.2 — Выход ШИМ (8-бит, режим 1) [U6 Datasheet]

Выводит выходной сигнал прямоугольной формы с широтно-импульсной модуляцией. Передаваемое значение должно быть 0-65535 и определяет, какая часть общего времени тратится на низкий уровень (из 65536 общих приращений).Младший байт фактически игнорируется, поскольку это 8-битный ШИМ. Это означает, что рабочий цикл может изменяться от 100% (0 из 65536 — низкие) до 0,4% (65280 из 65536 — низкие).

Общая частота выхода ШИМ — это тактовая частота, заданная TimerClockBase / TimerClockDivisor, деленная на 2 8 . В следующей таблице показан диапазон доступных частот ШИМ на основе настроек часов таймера.

Таблица 2.9.1.2-1. 8-битные диапазоны частот ШИМ

Диапазоны частот PWM8
ТаймерClockBase Делитель = 1 Делитель = 256
0 4 МГц 15625 НЕТ
1 12 МГц 46875 НЕТ
2 48 МГц (по умолчанию) 187500 НЕТ
3 1 МГц / делитель 3906.25 15,259
4 4 МГц / делитель 15625 61.035
5 12 МГц / делитель 46875 183.105
6 48 МГц / делитель 187500 732,422

Одинаковые часы применяются ко всем таймерам, поэтому все 8-битные каналы ШИМ будут иметь одинаковую частоту и будут иметь свои спадающие фронты одновременно.

Вывод ШИМ начинается с установки на цифровой линии низкого уровня вывода на указанное время. Вывод не обязательно начинается мгновенно, а скорее должен ждать, пока начнутся внутренние часы. Для 8-битного ШИМ-выхода задержка запуска варьируется от 0,0 до TimerClockDivisor * 256 / TimerClockBase. Например, если TimerClockBase = 48 МГц и TimerClockDivisor = 256, частота ШИМ составляет 732 Гц, период ШИМ составляет 1,4 мс, а задержка запуска будет варьироваться от 0 до 1,4 мс.

Если рабочий цикл 0.Требуется 0% (полное отключение), рассмотрите возможность использования простой интегральной схемы инвертора, такой как CD74ACT540E от TI. Или вы можете переключить режим таймера на какой-либо режим ввода и добавить внешнее выпадающее меню, чтобы удерживать линию на низком уровне при установке на ввод.

23. Широтно-импульсный модулятор

23. Широтно-импульсный модулятор.

23.1 Обзор

Широтно-импульсный модулятор (ШИМ) состоит из 10-битного счетчика автономной работы и четырех регистров ширины. Выходной сигнал ШИМ состоит из последовательности периодических импульсов в кадре из 1024 отсчетов с рабочим циклом, который варьируется от 1/1024 до 1024/1024.Каждый выход ШИМ имеет высокий уровень в течение n + 1 отсчетов из 1024-тактового цикла отсчета, где n — это значение, хранящееся в регистре ширины. ШИМ синхронизируется выходом таймера A9, который используется для установки периода.

Максимальное время каждого выходного сигнала ШИМ можно дополнительно распределить по циклу, чтобы уменьшить пульсации на выходе ШИМ с внешней фильтрацией. Выходы ШИМ можно пропускать через фильтр и использовать в качестве 10-битного цифро-аналогового преобразователя. Выходы также можно использовать для непосредственного управления устройствами, такими как двигатели или соленоиды, которые имеют внутреннюю фильтрацию.

Выходы ШИМ могут запускать прерывание ШИМ в каждом цикле ШИМ, каждом втором цикле, каждом четвертом цикле или каждом восьмом цикле. Кроме того, выход ШИМ может подавляться каждый второй цикл, три из каждых четырех циклов или семь из каждых восьми циклов. Эти опции обеспечивают поддержку управления сервоприводами и генерации звуковых сигналов. Настройка этого прерывания выполняется в регистрах PWL0R и PWL1R. Время показано ниже.


Функция расширения реализуется путем деления каждого 1024-тактового цикла на четыре квадранта по 256 тактов в каждом.В каждом квадранте широтно-импульсный модулятор использует восемь старших битов каждого регистра ширины импульса для выбора базовой ширины в каждом из квадрантов. Это эквивалентно делению содержимого регистра ширины импульса на четыре и использованию этого значения в каждом квадранте. Чтобы получить точное время высокого уровня, широтно-импульсный модулятор использует два младших бита регистра ширины импульса для изменения времени высокого уровня в каждом квадранте в соответствии с таблицей ниже. Термин « n /4» представляет собой основной счет, сформированный из восьми старших битов регистра ширины импульса.

п /4 + 1
n /4
n /4
n /4
п /4 + 1
n /4
п /4 + 1
n /4
п /4 + 1
п /4 + 1
п /4 + 1
n /4
п /4 + 1
п /4 + 1
п /4 + 1
п /4 + 1

На приведенной ниже диаграмме показан выход ШИМ для нескольких различных значений ширины для обоих режимов работы.Работа в режиме распространения снижает требования к фильтрации на выходе ШИМ в большинстве случаев.


Каналы DMA на Rabbit 4000 предназначены для работы с фиксированными адресами ввода / вывода. Чтобы позволить DMA управлять ШИМ, доступны отдельный регистр доступа к блоку ШИМ (PWBAR) и регистр указателя блока ШИМ (PWBPR). Регистр указателя содержит адрес регистра ШИМ, к которому осуществляется доступ через регистр доступа. Каждое чтение или запись регистра доступа автоматически увеличивает регистр указателя в последовательности, показанной ниже.Обратите внимание, что фактически изменяются только три младших бита регистра указателя. Это позволяет DMA записывать в фиксированное внутреннее расположение ввода-вывода, но при этом программировать все регистры ШИМ. Регистр указателя может быть записан и прочитан при необходимости. Обычно регистр указателя инициализируется значением 0x88 (первый регистр ШИМ), а затем DMA передает блоки по восемь байтов для полного перепрограммирования ШИМ.

  0x88 -> 0x89 -> 0x8A -> 0x8B -> 0x8C -> 0x8D -> 0x8E -> 0x8F ->  

Когда адресом назначения DMA является PWBAR, запрос DMA от PWM автоматически подключается к DMA.

23.1.1 Блок-схема


23.1.2 Регистры

PWM LSB 0 Регистр
PWM MSB 0 Регистр
PWM LSB 1 Регистр
PWM MSB 1 Регистр
PWM LSB 2 Регистр
PWM MSB 2 Регистр
PWM LSB 3 Регистр
PWM MSB 3 Регистр
Регистр доступа к блоку PWM
Регистр указателя блока ШИМ

23.2 зависимости

23.2.1 Контакты ввода / вывода

Каждый канал ШИМ может выводиться на один из трех контактов, которые можно выбрать через альтернативные выходные регистры параллельного порта.

Канал 0
Канал 1
Канал 2
Канал 3

23.2.2 Часы

Счетчик PWM синхронизируется с выхода таймера A9 и может работать со скоростью от perclk / 2 до perclk / 512, записывая соответствующее значение в TAT9R.

23.2.3 Другие регистры

ТАТ9Р
Постоянная времени для часов ШИМ
PCFR, PCAHR
PDFR, PDAHR
PEFR, PEAHR
Выбор выхода альтернативного порта

23.2.4 Прерывания

ШИМ может генерировать прерывание для каждого опрокидывания счетчика ШИМ, каждого второго опрокидывания, каждого четвертого опрокидывания или каждого восьмого опрокидывания. Эта опция выбрана в PWL1R. Запрос на прерывание очищается записью в любой регистр ШИМ.

Вектор прерывания ШИМ находится в IIR по смещению 0x170. Его можно установить как приоритет 1, 2 или 3, записав в PWL0R.

23.3 Эксплуатация

Следующие шаги объясняют, как настроить канал ШИМ.

  1. Настройте таймер A9 через TAT9R для обеспечения желаемой тактовой частоты ШИМ.
  2. Сконфигурируйте PWLxR, чтобы выбрать, следует ли распределять выходной сигнал ШИМ на весь цикл.
  3. Настройте PWLxR, чтобы выбрать, подавлять ли вывод ШИМ.
  4. Настройте рабочий цикл, записав в PWLxR и PWMxR.

23.3.1 Обработка прерываний

Следующие шаги объясняют, как устанавливается и используется прерывание.

  1. Записать вектор процедуры обработки прерывания во внутреннюю таблицу прерываний.
  2. Настройте PWL0R, чтобы выбрать приоритет прерывания PWM и PWL1R, чтобы выбрать подавление прерывания PWM (если прерывание желательно).

Следующие действия выполняются в рамках процедуры обслуживания прерывания.

  • Любые значения ШИМ могут быть обновлены.
  • Запрос прерывания должен быть очищен записью в любой регистр ШИМ.

23.3.2 Пример ISR

Ниже показан пример обработчика прерывания.

  pwm_isr :: 
push af; сохранить использованные регистры
ld a, 0x55
ioi ld (PWM0R), a; обновить значение ШИМ
 ; обратите внимание, что запрос прерывания также очищается записью регистра выше  
  pop af; восстановить использованные регистры 
ipres
ret

23.4 описания регистров

PWM LSB 0 Регистр (PWL0R) (Адрес = 0x0088)

Два младших бита для счета широтно-импульсного модулятора.
Нормальная работа ШИМ.
Подавить вывод ШИМ на семи из восьми итераций счетчика ШИМ.
Подавить вывод ШИМ на трех из четырех итераций счетчика ШИМ.
Подавить вывод ШИМ на одной из двух итераций счетчика ШИМ.
Этот бит игнорируется и должен быть записан с нулем.
Прерывания от широтно-импульсного модулятора отключены.
Прерывания от широтно-импульсного модулятора используют приоритет прерывания 1.
Прерывания от широтно-импульсного модулятора используют приоритет прерывания 2.
Прерывания от широтно-импульсного модулятора используют приоритет прерывания 3.
Выход ШИМ Высокий для одиночного блока.
Распределите вывод ШИМ на протяжении всего цикла.

Регистр LSB 1 ШИМ (PWL1R) (адрес = 0x008A)

Два младших бита для счета широтно-импульсного модулятора.
Нормальная работа ШИМ.
Подавить вывод ШИМ на семи из восьми итераций счетчика ШИМ.
Подавить вывод ШИМ на трех из четырех итераций счетчика ШИМ.
Подавить вывод ШИМ на одной из двух итераций счетчика ШИМ.
Этот бит игнорируется и должен быть записан с нулем.
Нормальная работа прерывания PWM.
Подавить прерывания ШИМ на семи из восьми итераций счетчика ШИМ.
Подавить прерывания ШИМ на трех из четырех итераций счетчика ШИМ.
Подавление прерываний ШИМ на одной из двух итераций счетчика ШИМ.
Выход ШИМ Высокий для одиночного блока.
Распределите вывод ШИМ на протяжении всего цикла.

ШИМ LSB x Регистр (PWL2R) (Адрес = 0x008C)
(PWL3R) (Адрес = 0x008E

Два младших бита для счета широтно-импульсного модулятора.
Нормальная работа ШИМ.
Подавить вывод ШИМ на семи из восьми итераций счетчика ШИМ.
Подавить вывод ШИМ на трех из четырех итераций счетчика ШИМ.
Подавить вывод ШИМ на одной из двух итераций счетчика ШИМ.
Эти биты игнорируются и должны быть записаны с нулем.
Выход ШИМ Высокий для одиночного блока.
Распределите вывод ШИМ на протяжении всего цикла.

Старший бит ШИМ x Регистр (PWM0R) (Адрес = 0x0089)
(PWM1R) (Адрес = 0x008B)
(PWM2R) (Адрес = 0x008D)
(PWM3R) (Адрес = 0x008F)

Старшие восемь бит для подсчета широтно-импульсного модулятора.При счетчике «n» выход ШИМ будет высоким для «n + 1» тактов из 1024 тактов счетчика ШИМ.

Регистр доступа к блоку ШИМ (PWBAR) (адрес = 0x00E8)

Доступ к регистру PWM, на который указывает PWBPR. PWBPR автоматически обновляется до следующего адреса регистра ШИМ в последовательности.

Регистр указателя блока ШИМ (PWBPR) (адрес = 0x00E9)

Эти биты игнорируются и должны быть записаны с нулем.
Три младших бита адреса регистра ШИМ для косвенного доступа.

Конфигурация выхода ШИМ

:: Конфигурация выхода ШИМ QUARC

:: QUARC

Содержание

Конфигурация выхода ШИМ

QUARC позволяет настраивать выходы ШИМ различными способами. Эта страница описывает доступные параметры и соответствующая терминология. Большинство карт предоставляют только небольшое подмножество доступных опций, но некоторые карты сбора данных, такие как Quanser QPID, поддерживает почти все параметры.

В настоящее время QUARC связывает с выходом PWM пять основных характеристик:

Режим ШИМ

Режим ШИМ определяет, как интерпретируются значения, записанные на выход ШИМ. В большинстве случаев рабочий цикл выходного сигнала ШИМ модулируется таким образом, что период последовательности импульсов ШИМ является фиксированным, но рабочий цикл изменяется. Этот режим операция называется PWM_DUTY_CYCLE_MODE (0) в QUARC.Полный список доступных режимов:

PWM_DUTY_CYCLE_MODE

Рабочий цикл выхода ШИМ модулируется при записи на выходы ШИМ. Частота фиксированная.

PWM_FREQUENCY_MODE

Частота выхода ШИМ модулируется при записи на выходы ШИМ.Рабочий цикл фиксирован.

PWM_PERIOD_MODE

Период выхода ШИМ модулируется при записи на выходы ШИМ. Рабочий цикл фиксирован.

PWM_ONE_SHOT_MODE

Как PWM_DUTY_CYCLE_MODE режим, но только один импульс генерируется каждый раз, когда выводится ШИМ.

PWM_TIME_MODE

Подобен режиму PWM_DUTY_CYCLE_MODE , но ширина активного импульса выражается в секундах, а не в процентах.

PWM_ENCODER_EMULATION_MODE

Выходы ШИМ создают сигналы квадратурного энкодера при записи на выходы ШИМ.Частота и фаза модулируются. Рабочий цикл фиксирован.

PWM_DUTY_CYCLE_MODE

В этом режиме рабочий цикл импульсов ШИМ изменяется при записи на выходы ШИМ. Этот режим подходит для большинства приложений PWM, таких как управление трехфазным двигателем и управление сервоприводами RC. Примерная последовательность импульсов с изменяющимся рабочим циклом показана ниже.

В приведенном выше примере ширина импульса изменяется в соответствии с рабочим циклом, записанным в выход ШИМ. Красные линии разграничивают период ШИМ. Период определяется частотой ШИМ. запрограммирован для вывода ШИМ при инициализации. Например, частота ШИМ 10 кГц даст период ШИМ 100 микросекунд. В этом конкретном примере используется ШИМ с выравниванием по центру, поэтому импульс сосредоточено в пределах периода ШИМ.

Для взаимосвязи между частотой ШИМ и эффективным количеством бит на выходе ШИМ, см. раздел «Частота ШИМ».

PWM_FREQUENCY_MODE

В этом режиме частота импульсов ШИМ изменяется при записи на выходы ШИМ, в то время как рабочий цикл поддерживается постоянным. Этот режим используется редко, но может использоваться для эксперименты с частотной модуляцией (FM) или управление скоростью шаговых двигателей.Пример вывода ШИМ в PWM_FREQUENCY_MODE показан ниже.

Красные линии на рисунке обозначают периоды ШИМ. Период меняется со временем, поскольку Частота ШИМ модулируется записью на выходы ШИМ. Обратите внимание, что рабочий цикл импульса, однако остается прежним. В этом примере рабочий цикл составляет 50%.Следовательно, ширина импульса всегда 50% периода ШИМ, даже если период ШИМ меняется.

PWM_PERIOD_MODE

Этот режим аналогичен PWM_FREQUENCY_MODE . Единственная разница в том, что период ШИМ записывается на выходы ШИМ, а не частота. Чистый эффект то же самое, но сигнал, используемый для управления выходами ШИМ, является обратным по отношению к частоте.

PWM_ONE_SHOT_MODE

Этот режим аналогичен PWM_DUTY_CYCLE_MODE . Единственная разница в том, что только один импульс генерируется каждый раз, когда значение записывается на выходы ШИМ.

PWM_TIME_MODE

Этот режим аналогичен PWM_DUTY_CYCLE_MODE .Единственная разница в том, что ширина активного импульса ШИМ в секундах записывается на выходы ШИМ, а не в рабочий цикл в процентах. Чистый эффект тот же, но сигнал, используемый для управления Выходы ШИМ выражаются в секундах.

PWM_ENCODER_EMULATION_MODE

В этом режиме выходы ШИМ имитируют сигналы A и B энкодера с полной квадратурой.Чтобы получить оба сигнала, каналы должны быть настроены как парные или дополнительные выходы. Дополнительный выходы будут производить выход энкодера, идущий в направлении, противоположном парным выходам. Если выход настроен как униполярный, тогда генерируется только сигнал A.

Значение, записываемое на выходы ШИМ, представляет собой скорость энкодера в отсчетах в секунду. Выходы ШИМ будет производить такие же отсчеты в секунду при подключении к входу энкодера, поддерживающему полную четырехкратную квадратуру.Диапазон скоростей ограничен диапазоном частот ШИМ, поддерживаемых картой. Скорость нуля обычно всегда достижима.

Скорости могут быть положительными или отрицательными. Фаза сигналов A и B настраивается с учетом для знака скорости. Настройка выравнивания ШИМ игнорируется в этом режиме, потому что фазовое соотношение между сигналами A и B должны динамически меняться со знаком скорости.

Частота ШИМ

Частота ШИМ определяет период импульсов на выходе ШИМ. Важно понимать взаимосвязь между частотой ШИМ и временной разверткой ШИМ. База времени ШИМ — это часы, используемые для генерации выходного сигнала ШИМ. Определяет минимальную длительность импульса и, следовательно, эффективное разрешение сигнала ШИМ.

Например, предположим, что тактовая частота ШИМ составляет 20 МГц.Следовательно, минимальная длительность импульса составляет 50 наносекунд ( 1 / 20e6 ). Если частота ШИМ установлена ​​на 10 кГц или 100 микросекунд, то эффективное разрешение Сигнал ШИМ — журнал 2 (100e-6 / 50e-9) = журнал 2 (2000) = 10,97 или приблизительно 11 бит. Чтобы получить разрешение N бит, установите частоту ШИМ на:

Частота ШИМ = базовая частота ШИМ / (2 N )

Например, чтобы получить разрешение 12 бит, когда развертка ШИМ составляет 20 МГц, используйте частоту ШИМ 20e6 / (2 12 ) = 4.882 кГц .

Конфигурация ШИМ

Конфигурация ШИМ определяет взаимосвязь между выходами ШИМ, если таковые имеются. Есть в настоящее время Возможны четыре конфигурации ШИМ:

PWM_UNIPOLAR_CONFIGURATION

ШИМ-выход представляет собой однополюсный однополюсный выход.Некоторые карты позволяют подписывать ввод, и в этом случае униполярный выход переключается между двумя контактами в зависимости от знака.

PWM_BIPOLAR_CONFIGURATION

Выход ШИМ — это однополюсный биполярный выход, управляемый парой каналов ШИМ.

PWM_PAIRED_CONFIGURATION

Два выхода ШИМ с зоной нечувствительности формируются из одного канала ШИМ.

PWM_COMPLEMENTARY_CONFIGURATION

Аналогично конфигурации PWM_PAIRED_CONFIGURATION , за исключением того, что вторичный канал инвертирован.

PWM_UNIPOLAR_CONFIGURATION

В этой конфигурации выход ШИМ появляется на одном выходном контакте и является униполярным.Например, выходное напряжение может варьироваться от 0 В до 3,3 В. Некоторые карты позволяют входным данным быть положительным или отрицательным, в этом случае выход униполярного ШИМ переключается между двумя выходными контактами в зависимости от знака. Этот сценарий обычно используется при вождении H-образного моста.

В приведенном выше примере нижнее значение выхода равно 0 В, а высокое значение — цифровое V cc .В рабочий цикл и период определяются одним каналом ШИМ. В этом конкретном примере используется выравнивание по передней кромке. Для обсуждения всех различных вариантов выравнивания с униполярной конфигурацией см. раздел по настройке ШИМ.

Обратите внимание, что настройки зоны нечувствительности игнорируются в униполярной конфигурации.

PWM_BIPOLAR_CONFIGURATION

В этой конфигурации выход ШИМ появляется на одном выходном контакте и является биполярным.Например, выходное напряжение может варьироваться от -3,3 В до 3,3 В.

В приведенном выше примере нижнее значение вывода — -V, а высокое — V. Промежуточное значение — 0 В. Величина V зависит от карты сбора данных. Карта QPID использует аналоговый выход для биполярного ШИМ, поэтому величина выхода определяется последним записанным значением к соответствующему каналу аналогового вывода.

Значение выхода определяется двумя каналами ШИМ. Первый или первичный канал ШИМ контролирует ширину высоких частот. Pulse, а второй или вторичный канал PWM управляет шириной низкого импульса. Основной канал обычно является каналом с четным номером, а вторичный канал обычно является следующим каналом с нечетным номером. Зоны нечувствительности определяют расстояние между импульсы.В этом конкретном примере используется выравнивание по передней кромке. Для обсуждения всех различных вариантов выравнивания с биполярной конфигурацией см. раздел по настройке ШИМ.

На карте QPID первые четыре аналоговых выхода используются для биполярной ШИМ. Чтобы появился любой вывод, напишите ненулевое значение значение в соответствующий аналоговый выходной канал. Затем биполярный сигнал ШИМ будет модулировать эту амплитуду.В амплитуду можно изменить в любой момент, записав новое значение на аналоговый выход.

В таблице ниже показаны отношения между аналоговыми выходными каналами и соответствующими каналами ШИМ в биполярном режиме для карты QPID.

0

0 и 1

Канал ШИМ 0 является первичным каналом, а канал 1 — вторичным каналом.

1

2 и 3

Канал 2 ШИМ является первичным, а канал 3 — вторичным.

2

4 и 5

Канал 4 ШИМ является первичным, а канал 5 — вторичным.

3

6 и 7

ШИМ-канал 6 является первичным каналом, а канал 7 — вторичным.

Поскольку карта QPID использует аналоговый выход 1 MSPS для биполярного ШИМ, минимальная длительность импульса для биполярного ШИМ составляет 1 микросекунду при использовании QPID.

PWM_PAIRED_CONFIGURATION

В этой конфигурации выход ШИМ появляется на двух выходных контактах: первичный выход и вторичный выход. В вторичный выход является отражением первичного выхода, за исключением того, что зона нечувствительности может быть добавлена ​​между возрастающими и спадающие кромки выходов. Парная конфигурация может использоваться для управления трехфазным двигателем и других приложения, в которых последовательные транзисторы включаются и выключаются с помощью сигналов ШИМ.

В приведенном выше примере красные линии ограничивают период ШИМ. В этом конкретном примере используется выравнивание по передней кромке. Для обсуждения всех различных вариантов выравнивания с парной конфигурацией см. раздел по настройке ШИМ.

Ширина основного выхода, Y 1 , определяется рабочим циклом, установленным для соответствующего канала ШИМ.Эта ширина уменьшается за счет передней кромки зона нечувствительности L, чтобы вторичный выход Y 2 никогда не переключался одновременно. Однако это зона нечувствительности может быть установлена ​​на ноль. Вторичный выход падает через T секунд после спада основного выхода, где T — зона нечувствительности задней кромки. Эта зона нечувствительности также может быть установлена ​​на ноль. Обратите внимание, что ширина основного импульс никогда не может быть больше, чем период ШИМ минус сумма зон нечувствительности, чтобы гарантировать, что зона нечувствительности всегда поддерживается между краями первичного и вторичного выходов — даже если рабочий цикл постоянно меняется я.е. необходимо учитывать время между фронтами и периодов ШИМ, а не только время между фронтами. в пределах периода ШИМ.

На рисунке показано, как два спаренных выхода ведут себя в различных рабочих циклах, от минимального до минимального. самый большой. Обратите внимание, что первичный выход обнуляется, когда ширина импульса падает ниже зоны нечувствительности по переднему фронту.

При использовании парной конфигурации настройки вторичного канала ШИМ игнорируются.Однако они должен быть установлен на униполярную конфигурацию с выравниванием по переднему фронту и полярностью активный высокий. Эта оговорка особенно важен в Simulink, поскольку блок HIL Initialize потребует Вектор конфигурации ШИМ [2] , указывающий парную конфигурацию, и назначение каждого канала ШИМ в списке «Каналы ШИМ» укажите парную конфигурацию. Однако, если вектор конфигурации ШИМ [2 0] указывается, затем он назначает парную конфигурацию первому каналу ШИМ в списке и униполярному конфигурация для всех последующих каналов.

PWM_COMPLEMENTARY_CONFIGURATION

В этой конфигурации выход ШИМ появляется на двух выходных контактах: первичный выход и вторичный выход. В вторичный выход — это , инверсный первичного выхода, за исключением того, что зона нечувствительности может быть добавлена ​​между возрастающими и спадающие кромки выходов. Парная конфигурация может использоваться для управления трехфазным двигателем и других приложения, в которых последовательные транзисторы включаются и выключаются с помощью сигналов ШИМ.

В приведенном выше примере красные линии ограничивают период ШИМ. В этом конкретном примере используется выравнивание по передней кромке. Для обсуждения всех различных вариантов выравнивания с дополнительной конфигурацией см. раздел по настройке ШИМ.

Ширина основного выхода, Y 1 , определяется рабочим циклом, установленным для соответствующего канала ШИМ.Эта ширина уменьшается за счет передней кромки зона нечувствительности L, чтобы вторичный выход Y 2 никогда не переключался одновременно. Однако это зона нечувствительности может быть установлена ​​на ноль. Вторичный выход возрастает через T секунд после спада основного выхода, где T — зона нечувствительности задней кромки. Эта зона нечувствительности также может быть установлена ​​на ноль. Обратите внимание, что ширина основного импульс никогда не может быть больше, чем период ШИМ минус сумма зон нечувствительности, чтобы гарантировать, что зона нечувствительности всегда поддерживается между краями первичного и вторичного выходов — даже если рабочий цикл постоянно меняется я.е. необходимо учитывать время между фронтами и периодов ШИМ, а не только время между фронтами. в пределах периода ШИМ.

На рисунке показано, как два дополнительных выхода ведут себя для различных рабочих циклов, от минимального до минимального. самый большой. Обратите внимание, что первичный выход обнуляется, когда ширина импульса падает ниже зоны нечувствительности по переднему фронту.

При использовании дополнительной конфигурации настройки вторичного канала ШИМ игнорируются.Однако они должен быть установлен на униполярную конфигурацию с выравниванием по переднему фронту и полярностью активный высокий. Эта оговорка особенно важен в Simulink, поскольку блок HIL Initialize потребует Вектор конфигурации ШИМ [3] , указывающий дополнительную конфигурацию, и назначить каждый канал ШИМ в списке «Каналы ШИМ» укажите дополнительную конфигурацию. Однако, если вектор конфигурации ШИМ [3 0] указывается, затем он назначает дополнительную конфигурацию первому каналу ШИМ в списке и униполярному конфигурация для всех последующих каналов.

Регулировка ШИМ

Выравнивание определяет, как импульс выравнивается в пределах периода ШИМ. Как показано на рисунке, существует три типа выравнивания. в следующей таблице.

PWM_LEADING_EDGE_ALIGNED

Импульс выравнивается по переднему фронту (слева) периода ШИМ.

PWM_TRAILING_EDGE_ALIGNED

Импульс выравнивается по заднему фронту (справа) периода ШИМ.

PWM_CENTER_ALIGNED

Импульс выравнивается по центру периода ШИМ.

Эти варианты выравнивания описаны ниже для каждой возможной конфигурации ШИМ. Обсуждается только PWM_DUTY_CYCLE_MODE потому что это единственный режим, который в настоящее время поддерживается для всех различных конфигураций ШИМ.

PWM_LEADING_EDGE_ALIGNED

При выравнивании по переднему фронту импульс выравнивается по переднему фронту периода ШИМ.Независимо от конфигурации ШИМ, такое выравнивание означает, что передний фронт импульса всегда находится в одной и той же точке относительно начала Период ШИМ, в то время как задний фронт импульса изменяется в зависимости от рабочего цикла.

Передовой униполярный ШИМ с выравниванием по фронту

На следующем рисунке показано выравнивание переднего края в униполярной конфигурации.

Красные линии разграничивают период ШИМ. Обратите внимание, что передний или нарастающий фронт импульса ШИМ возникает всегда. в начале периода ШИМ. Ширина импульса w определяется скважностью канала ШИМ. При изменении коэффициента заполнения ширина импульса изменяется, но нарастающий фронт импульса всегда возникает на начало периода ШИМ.Спад зависит от рабочего цикла. При 100% рабочем цикле выход ШИМ всегда высокий. а при рабочем цикле 0% выход всегда низкий.

Передовая выровненная, биполярная ШИМ

На следующем рисунке показано выравнивание передней кромки в биполярной конфигурации.

Красные линии разграничивают период ШИМ.Ширина высокого импульса, w 1 , определяется скважность первичного канала ШИМ и ширина нижнего импульса w 2 , устанавливается пошлиной цикл вторичного канала ШИМ.

Если зона нечувствительности переднего фронта, L , равна нулю, то передний или передний фронт высокого импульса всегда выровнен по началу периода ШИМ, когда используется выравнивание по переднему фронту.В этом конкретном примере зона нечувствительности по переднему фронту не равна нулю. Следовательно, ширина высокого импульса уменьшается за счет зоны нечувствительности переднего фронта. Следовательно, высокий импульс возникает при фиксированном смещении, L , от начала периода ШИМ. Это смещение не изменяется при изменении рабочего цикла, поэтому нарастающий фронт высокого импульса всегда происходит в одном и том же время в пределах периода ШИМ. С другой стороны, задний фронт высокого импульса зависит от продолжительности включения. цикл.Если рабочий цикл первичного канала падает ниже зоны нечувствительности переднего фронта затем высокий импульс падает до нуля.

Низкий импульс всегда начинается через T секунд после спада высокого импульса, где T — это зона нечувствительности заднего фронта. Эта зона нечувствительности может быть равна нулю, и в этом случае задний фронт высокого импульса и начало низкого пульса совпадают.Обратите внимание, что ширина низкого импульса уменьшается на зона нечувствительности заднего фронта, так же как высокий импульс уменьшается за счет зоны нечувствительности переднего фронта. Если долг цикл вторичного канала падает ниже мертвой зоны по заднему фронту, тогда импульс низкого уровня становится равным нулю.

Если сумма двух рабочих циклов превышает 100%, то ширина нижнего импульса уменьшается, чтобы гарантировать сумма рабочих циклов никогда не превышает 100%.Это превосходство первичного канала может быть использовано для преимущество. Например, если рабочий цикл вторичного канала установлен на постоянное значение 100% и зоны нечувствительности установлены на ноль, тогда может быть сгенерирован биполярный выходной сигнал, показанный ниже.

Обратите внимание, что теперь сигнал изменяется от -V до + V и никогда не достигает нуля. В ширина импульса в этом случае определяется исключительно скважностью первичного канала ШИМ, а Импульс выровнен с началом периода ШИМ.Таким образом, выход выглядит как униполярный выход ШИМ. за исключением того, что нижнее значение не ноль, а -V.

Передовая согласованная, парная ШИМ

На следующем рисунке показано выравнивание передней кромки в парной конфигурации.

Красные линии разграничивают период ШИМ.Обратите внимание, что передний или передний фронт вторичного импульса ШИМ, Y 2 , всегда происходит в начале периода ШИМ, когда используется выравнивание по переднему фронту. Ширина первичного импульса, w , определяется скважностью первичного канала ШИМ. Эта ширина уменьшается за счет мертвой зоны переднего края, L , чтобы всегда было не менее L секунд между нарастающим фронтом вторичного импульса и нарастающий фронт первичного импульса.Зона нечувствительности переднего фронта может быть равна нулю, так что два края совпадают. При изменении коэффициента заполнения ширина двух импульсов изменяется, но нарастающий фронт вторичного импульса всегда возникает на начало периода ШИМ, и нарастающий фронт первичного импульса всегда задерживается на переднюю зону нечувствительности.

Задний фронт вторичного импульса всегда возникает через T секунд после заднего фронта первичного импульса, Y 1 , где T — зона нечувствительности заднего фронта.Эта зона нечувствительности может быть равна нулю, так что два края совпадают. Поскольку задний фронт вторичного импульса всегда является фиксированным смещением от заднего фронта первичного импульса, ширина обоих импульсов определяется рабочим циклом первичного канала и рабочим циклом, записанным во вторичный канал ШИМ. игнорируется.

Если рабочий цикл первичного канала ШИМ меньше, чем зона нечувствительности переднего фронта, L , то первичный выход переходит в режим до нуля.Однако вторичный выход не переходит в ноль, если обе зоны нечувствительности не равны нулю. Всегда будет пульс вторичный выход, ширина которого не меньше суммы мертвых зон, чтобы гарантировать, что мертвые зоны поддерживаются, даже через периоды ШИМ. По той же причине первичный выход никогда не будет всегда высоким, если обе зоны нечувствительности не равны нулю. Это всегда будет ограничено минимальным значением, по крайней мере, для суммы мертвых зон.

Передовой согласованный дополнительный ШИМ

На рисунке ниже показано выравнивание передней кромки в дополнительной конфигурации.

Красные линии разграничивают период ШИМ. Обратите внимание, что задний фронт вторичного импульса ШИМ, Y 2 , всегда происходит в начале периода ШИМ, когда используется выравнивание по переднему фронту.Ширина первичного импульса, w , определяется скважностью первичного канала ШИМ. Эта ширина уменьшается за счет мертвой зоны переднего края, L , чтобы всегда было не менее L секунд между задним фронтом вторичного импульса и нарастающий фронт первичного импульса. Зона нечувствительности переднего фронта может быть равна нулю, так что два края совпадают. При изменении коэффициента заполнения ширина двух импульсов изменяется, но задний фронт вторичного импульса всегда возникает на начало периода ШИМ, и нарастающий фронт первичного импульса всегда задерживается на переднюю зону нечувствительности.

Нарастающий фронт вторичного импульса всегда возникает через T секунд после спадающего фронта первичного импульса, Y 1 , где T — зона нечувствительности заднего фронта. Эта зона нечувствительности может быть равна нулю, так что два края совпадают. Поскольку нарастающий фронт вторичного импульса всегда является фиксированным смещением от заднего фронта первичного импульса, ширина обоих импульсов определяется рабочим циклом первичного канала и рабочим циклом, записанным во вторичный канал ШИМ. игнорируется.

Если рабочий цикл первичного канала ШИМ меньше, чем зона нечувствительности переднего фронта, L , то первичный выход переходит в режим до нуля. Однако вторичный выход не становится полностью высоким, если обе зоны нечувствительности не равны нулю. Всегда будет низкий пульс вторичный выход, ширина которого не меньше суммы мертвых зон, чтобы гарантировать, что мертвые зоны поддерживаются, даже через периоды ШИМ.По той же причине первичный выход никогда не будет всегда высоким, если обе зоны нечувствительности не равны нулю. Это всегда будет ограничено минимальным значением, по крайней мере, для суммы мертвых зон.

PWM_TRAILING_EDGE_ALIGNED

При выравнивании заднего фронта импульс выравнивается по заднему фронту периода ШИМ. Независимо от конфигурации ШИМ, такое выравнивание означает, что задний фронт импульса всегда происходит в одной и той же точке относительно конца Период ШИМ, при этом передний фронт импульса изменяется в зависимости от рабочего цикла.

Униполярный ШИМ, выровненный по краю испытания

На следующем рисунке показано выравнивание задней кромки в униполярной конфигурации.

Красные линии разграничивают период ШИМ. Обратите внимание, что задний или задний фронт импульса ШИМ возникает всегда. в конце периода ШИМ.Ширина импульса w определяется скважностью канала ШИМ. При изменении скважности ширина импульса изменяется, но задний фронт импульса всегда возникает на конец периода ШИМ. Нарастающий фронт изменяется в зависимости от рабочего цикла. При 100% рабочем цикле выход ШИМ всегда высокий. а при рабочем цикле 0% выход всегда низкий.

Выровненный по заднему фронту, биполярный ШИМ

На следующем рисунке показано выравнивание задней кромки в биполярной конфигурации.

Красные линии разграничивают период ШИМ. Ширина высокого импульса, w 1 , определяется скважность первичного канала ШИМ и ширина нижнего импульса w 2 , устанавливается пошлиной цикл вторичного канала ШИМ.

Задний фронт низкого импульса всегда совмещен с концом периода ШИМ, когда с использованием выравнивания по задней кромке, независимо от рабочего цикла или зоны нечувствительности. Ведущий край низкого импульса изменяется в зависимости от рабочего цикла вторичного канала ШИМ. Ширина низкого импульса уменьшается за счет мертвой зоны по заднему фронту. Если ширина невысокая импульс меньше, чем зона нечувствительности заднего фронта, то низкий импульс обращается в ноль.

Задний фронт высокого импульса всегда совпадает с передним фронтом низкий импульс, если зона нечувствительности заднего фронта равна нулю. В противном случае остается T секунд. между двумя краями, где T — зона нечувствительности задней кромки.

Ширина высокого импульса уменьшается за счет зоны нечувствительности переднего фронта, L .Если ширина меньше, чем зона нечувствительности переднего фронта, тогда высокий импульс обращается в ноль.

Если сумма двух рабочих циклов превышает 100%, то ширина нижнего импульса уменьшается, чтобы гарантировать сумма рабочих циклов никогда не превышает 100%.

Выровненный по заднему фронту, спаренный ШИМ

На следующем рисунке показано выравнивание задней кромки в парной конфигурации.

Красные линии разграничивают период ШИМ. Обратите внимание, что задний или задний фронт вторичного импульса ШИМ, Y 2 , всегда происходит в конце периода ШИМ, когда используется выравнивание заднего фронта. Ширина первичного импульса, w , определяется скважностью первичного канала ШИМ.Эта ширина уменьшается за счет мертвой зоны переднего края, L , чтобы всегда было не менее L секунд между нарастающим фронтом вторичного импульса и нарастающий фронт первичного импульса. Зона нечувствительности переднего фронта может быть равна нулю, так что два края совпадают. При изменении коэффициента заполнения ширина двух импульсов изменяется, но задний фронт вторичного импульса всегда возникает на конец периода ШИМ, и нарастающий фронт первичного импульса всегда задерживается в зоне нечувствительности переднего фронта.

Задний фронт первичного импульса, Y 1 , всегда возникает за T секунд до заднего фронта вторичного импульса, где T — зона нечувствительности заднего фронта. Эта зона нечувствительности может быть равна нулю, так что два края совпадают. Поскольку задний фронт первичного импульса всегда является фиксированным смещением от заднего фронта вторичного импульса, ширина обоих импульсов определяется рабочим циклом первичного канала и рабочим циклом, записанным во вторичный канал ШИМ. игнорируется.

Если рабочий цикл первичного канала ШИМ меньше, чем зона нечувствительности переднего фронта, L , то первичный выход переходит в режим до нуля. Однако вторичный выход не переходит в ноль, если обе зоны нечувствительности не равны нулю. Всегда будет пульс вторичный выход, ширина которого не меньше суммы мертвых зон, чтобы гарантировать, что мертвые зоны поддерживаются, даже через периоды ШИМ.По той же причине первичный выход никогда не будет всегда высоким, если обе зоны нечувствительности не равны нулю. Это всегда будет ограничено минимальным значением, по крайней мере, для суммы мертвых зон.

Выровненный по заднему фронту, дополнительный ШИМ

На рисунке ниже показано выравнивание задней кромки в дополнительной конфигурации.

Красные линии разграничивают период ШИМ.Вторичный выход, Y 2 , является обратным первичному выходу, Y 1 , из-за дополнительной конфигурации. Обратите внимание, что нарастающий фронт вторичного импульса ШИМ всегда происходит в конце периода ШИМ, когда используется выравнивание заднего фронта. Ширина первичного импульса, w , определяется скважностью первичного канала ШИМ. Эта ширина уменьшается за счет мертвой зоны переднего края, L , чтобы всегда было не менее L секунд между задним фронтом вторичного импульса и нарастающий фронт первичного импульса.Зона нечувствительности переднего фронта может быть равна нулю, так что два края совпадают. При изменении коэффициента заполнения ширина двух импульсов изменяется, но нарастающий фронт вторичного импульса всегда возникает на конец периода ШИМ, и нарастающий фронт первичного импульса всегда задерживается в зоне нечувствительности переднего фронта.

Задний фронт первичного импульса, Y 1 , всегда возникает за T секунд до нарастающего фронта вторичного импульса, где T — зона нечувствительности заднего фронта.Эта зона нечувствительности может быть равна нулю, так что два края совпадают. Поскольку задний фронт первичного импульса всегда является фиксированным смещением от переднего фронта вторичного импульса, ширина обоих импульсов определяется рабочим циклом первичного канала и рабочим циклом, записанным во вторичный канал ШИМ. игнорируется.

Если рабочий цикл первичного канала ШИМ меньше, чем зона нечувствительности переднего фронта, L , то первичный выход переходит в режим до нуля.Однако вторичный выход не становится высоким, если обе зоны нечувствительности не равны нулю. Всегда будет низкий пульс вторичный выход, ширина которого не меньше суммы мертвых зон, чтобы гарантировать, что мертвые зоны поддерживаются, даже через периоды ШИМ. По той же причине первичный выход никогда не будет всегда высоким, если обе зоны нечувствительности не равны нулю. Это всегда будет ограничено минимальным значением, по крайней мере, для суммы мертвых зон.

PWM_CENTER_ALIGNED

При выравнивании по центру импульс выравнивается по середине периода ШИМ. Таким образом, в отличие от передней и задней кромки выравнивания положение переднего и заднего фронтов импульсов изменяется в пределах периода ШИМ как рабочий цикл меняется.

Централизованный, униполярный ШИМ

На следующем рисунке показано выравнивание по центру в униполярной конфигурации.

Красные линии разграничивают период ШИМ. Обратите внимание, что импульс ШИМ возникает всегда в середине периода ШИМ. Ширина импульса w определяется скважностью канала ШИМ. При изменении коэффициента заполнения ширина импульса изменяется, но импульс всегда остается центрированным в пределах период ШИМ.Следовательно, как нарастающие, так и спадающие фронты меняются в зависимости от рабочего цикла. При 100% рабочем цикле выход ШИМ всегда высокий. а при рабочем цикле 0% выход всегда низкий.

Выровненный по центру, биполярный ШИМ

На следующем рисунке показано выравнивание по центру в биполярной конфигурации.

Красные линии разграничивают период ШИМ.Ширина высокого импульса, w 1 , определяется скважность первичного канала ШИМ и ширина нижнего импульса w 2 , устанавливается пошлиной цикл вторичного канала ШИМ.

В этом случае последовательность высоких и низких импульсов центрируется в пределах периода ШИМ на основе комбинированного ширина w 1 + w 2 .Зона нечувствительности передней кромки, L , и задней кромки зона нечувствительности, T , не учитывается при центрировании импульсов. Однако ширина высокий импульс уменьшается за счет мертвой зоны переднего фронта, а ширина низкого импульса уменьшается за счет зона нечувствительности задней кромки, чтобы гарантировать, что между кромками всегда есть фиксированная зона нечувствительности. Либо мертвая зона можно обнулить, чтобы соответствующие ребра совпадали.

Поскольку рабочие циклы меняются, ширина импульсов будет соответственно меняться, и последовательность импульсов будет сдвигаться в течение периода ШИМ, чтобы оставаться в центре. Если скважность первичного канала ШИМ падает ниже зоны нечувствительности переднего фронта, L , тогда высокий импульс переходит в ноль. Если долг цикл вторичного канала падает ниже зоны нечувствительности заднего фронта, T , затем низкий импульс уходит в ноль.

Если сумма двух рабочих циклов превышает 100%, то ширина нижнего импульса уменьшается, чтобы гарантировать сумма рабочих циклов никогда не превышает 100%.

Выровненный по центру, спаренный ШИМ

На следующем рисунке показано выравнивание по центру в парной конфигурации.

Красные линии разграничивают период ШИМ.Если зона нечувствительности переднего фронта, L , равна нулю, то первичный выход, Y 1 , всегда будет центрироваться в пределах периода ШИМ. Если мертвая зона переднего фронта не равна нулю, как показано, то ширина первичный импульс уменьшается на величину зоны нечувствительности.

Вторичный импульс, Y 2 , является отражением первичного импульса, за исключением зоны нечувствительности. Падающий край вторичный импульс возникает через T секунд после спада первичного импульса, где T — это зона нечувствительности по заднему фронту, и нарастающий фронт вторичного импульса возникает за L за секунд до нарастающего фронта первичного импульса, где L — зона нечувствительности переднего фронта.Зоны нечувствительности гарантируют, что два импульса не переключаться одновременно, хотя любая зона нечувствительности может быть установлена ​​на ноль. В этом случае соответствующие ребра будут совпадают.

Ширина обоих импульсов зависит от рабочего цикла первичного канала ШИМ. Рабочий цикл вторичного Канал ШИМ игнорируется. Если рабочий цикл первичного канала ШИМ меньше, чем зона нечувствительности переднего фронта, L , то первичный выход переходит в режим до нуля.Однако вторичный выход не переходит в ноль, если обе зоны нечувствительности не равны нулю. Всегда будет пульс вторичный выход, ширина которого не меньше суммы мертвых зон, чтобы гарантировать, что мертвые зоны поддерживаются, даже через периоды ШИМ. По той же причине первичный выход никогда не будет всегда высоким, если обе зоны нечувствительности не равны нулю. Это всегда будет ограничено низким значением не менее 2 * T + L секунд.

Выровненный по центру, дополнительный ШИМ

На следующем рисунке показано выравнивание по центру в дополнительной конфигурации.

Красные линии разграничивают период ШИМ. Если зона нечувствительности переднего фронта, L , равна нулю, то первичный выход, Y 1 , всегда будет центрироваться в пределах периода ШИМ.Если мертвая зона переднего фронта не равна нулю, как показано, то ширина первичный импульс уменьшается на величину зоны нечувствительности.

Вторичный импульс, Y 2 , является инверсией первичного импульса, за исключением зоны нечувствительности. На переднем крае вторичный импульс возникает через T секунд после спада первичного импульса, где T — это зона нечувствительности по заднему фронту, и задний фронт вторичного импульса возникает за L за секунд до нарастающего фронта первичного импульса, где L — зона нечувствительности переднего фронта.Зоны нечувствительности гарантируют, что два импульса не переключаться одновременно, хотя любая зона нечувствительности может быть установлена ​​на ноль. В этом случае соответствующие ребра будут совпадают.

Ширина обоих импульсов зависит от рабочего цикла первичного канала ШИМ. Рабочий цикл вторичного Канал ШИМ игнорируется. Если рабочий цикл первичного канала ШИМ меньше, чем зона нечувствительности переднего фронта, L , то первичный выход переходит в режим до нуля.Однако вторичный выход не становится высоким, если обе зоны нечувствительности не равны нулю. Всегда будет низкий пульс вторичный выход, ширина которого не меньше суммы мертвых зон, чтобы гарантировать, что мертвые зоны поддерживаются, даже через периоды ШИМ. По той же причине первичный выход никогда не будет всегда высоким, если обе зоны нечувствительности не равны нулю. Это всегда будет ограничено низким значением не менее 2 * T + L секунд.

Полярность ШИМ

Полярность ШИМ — это просто, является ли выход активным-высоким или активным-низким. В парной и комплементарной конфигурациях полярность вторичного выхода ШИМ определяется полярностью первичного канала ШИМ.

Авторские права © Quanser Inc. Эта страница была создана 2021-10-14.Отправьте отзыв об этой странице в Quanser.
Ссылка на эту страницу.

PWM | Tizen Docs

PWM (широтно-импульсная модуляция) — это программируемый интерфейс, который позволяет, например, управлять скоростью двигателя или изменять яркость света.

Периферийные устройства, поддерживающие ШИМ, контролируются силой тока. Чтобы модулировать ток, необходимо модулировать напряжение. Напряжение пропорционально силе тока.

Для модуляции напряжения необходимо установить рабочий цикл и полярность:

  • Период — это постоянный интервал, с которым повторяется импульс.
  • Рабочий цикл — это постоянное время в пределах 1 периода, в течение которого сигнал активен.
  • Сигнал «полярность высокая» начинается с высокого уровня на протяжении рабочего цикла и переходит на низкий уровень до конца периода. И наоборот, сигнал «низкая полярность» начинается с низкого уровня в течение рабочего цикла и становится высоким в течение оставшейся части периода.
  • Импульс повторяется, если повторение разрешено.

Рисунок: Рабочий цикл

Например, если период составляет 10 000 000 наносекунд, а рабочий цикл высокой полярности составляет 7 000 000 наносекунд, среднее напряжение составляет 70%.

Рисунок: Среднее напряжение за рабочий цикл

Открытие и закрытие ручки

Чтобы открыть и закрыть ручку:

  1. Чтобы открыть дескриптор ШИМ, используйте функцию period_pwm_open () :

      int chip = 0;
    int pin = 2;
    периферийное_пwm_h pwm_h;
    периферийное_pwm_open (чип, контакт, & pwm_h);
      

    Примечание

    Для получения дополнительной информации об именах и расположении контактов см. Поддерживаемые протоколы.

  2. Чтобы закрыть дескриптор ШИМ, который больше не используется, используйте функцию epheral_pwm_close () :

      периферийное_pwm_close (pwm_h)
      

Установка периода

Чтобы установить период, используйте функцию периферийного_pwm_set_period ().

В следующем примере устанавливается период 20 миллисекунд. Единица измерения — наносекунды.

  Uint32_t период = 20000000;
периферийный_pwm_set_period (pwm_h, период);
  

Установка рабочего цикла

Чтобы установить рабочий цикл, используйте функцию period_pwm_set_duty_cycle () .

В следующем примере рабочий цикл устанавливается равным 2 миллисекундам. Единица измерения — наносекунды.

  uint32_t duty_cycle = 2000000;
периферийный_pwm_set_duty_cycle (pwm_h, duty_cycle);
  

Установка полярности

Чтобы установить полярность, используйте функцию african_gpio_set_polarity () с 1 из следующих типов полярности:

  • PERIPHERAL_PWM_POLARITY_ACTIVE_HIGH : высокая полярность.
  • PERIPHERAL_PWM_POLARITY_ACTIVE_LOW : низкая полярность.
  периферийный_pwm_set_polarity (pwm_h, PERIPHERAL_PWM_POLARITY_ACTIVE_HIGH)
  

Включение повторения

Чтобы разрешить повторение, используйте функцию epheral_pwm_set_enabled () :

  bool enable = true;
периферийное_пwm_set_enabled (pwm_h, включить);
  

Описание широтно-импульсной модуляции

ШИМ (широтно-импульсная модуляция) относится к концепции быстрой передачи цифрового сигнала по проводам.Наряду со многими другими применениями его можно использовать для моделирования переменного статического напряжения. ШИМ обычно используется для управления двигателями, нагревателями, светодиодами или фарами различной интенсивности или скорости.

ТЕРМИНОЛОГИЯ

  • Period — время между нарастающими фронтами (секунды).
  • Частота — частота нарастающих фронтов (Гц или циклов в секунду): это просто инверсия периода
  • Duty Cycle — время в периоде, когда импульс активен или высокий (в процентах от полного периода)

ПРИМЕР ИЛЛЮСТРАЦИИ


Пример сигнала ШИМ при рабочем цикле 50%

На приведенной выше диаграмме рабочий цикл показан равным 50%.Розовая линия показывает средний выходной сигнал, и вы можете видеть, что при рабочем цикле 50% среднее выходное значение составляет примерно 6 В или 50% от максимального напряжения. Ниже приведена диаграмма того, как выглядит сигнал ШИМ с коэффициентом заполнения 25%:


Пример сигнала ШИМ при рабочем цикле 25%

ЗВУКОСТЬ

Распространенной проблемой или жалобой на систему, использующую сигналы ШИМ, является слышимое гудение или гудение, исходящее от системы. Человеческое ухо может слышать частоты примерно до 20 кГц.Использование сигналов ШИМ на частоте 20 кГц или ниже может вызвать раздражающее жужжание. Использование более высоких частот, если возможно, может уменьшить это явление. Некоторые типы компонентов, например керамические конденсаторы, могут усиливать такие звуковые сигналы.

ЭФФЕКТИВНОСТЬ

При управлении двигателями более высокий КПД может быть достигнут на частотах выше 20-30 кГц. Повышенная эффективность достигается за счет того, что ток (индукция) в обмотках двигателя не падает полностью во время короткого периода выключения ШИМ.Коллапс этого индукционного поля занимает определенное время, которое зависит от характеристик двигателя. При управлении двигателями на высоких частотах ШИМ этот индукционный ток постоянно сохраняется в двигателях, что приводит к гораздо более высокому КПД.

АНАЛОГОВЫЕ СИГНАЛЫ

Сигналы

PWM также могут использоваться для аппроксимации изменяющихся во времени аналоговых сигналов путем «сглаживания» их с помощью фильтра нижних частот. Самый простой фильтр — это просто конденсатор, подключенный между сигналом ШИМ и землей.Пример такого сглаживания показан на графике ниже, где волна ШИМ, изменяющаяся от примерно 25% до 75% цикла, приближается к синусоидальной волне. Фактический выходной сигнал, выделенный синим цветом, не пытается идеально имитировать синусоидальную волну, а скорее формирует набор локальных средних значений, которые действуют как синусоидальная волна.

Простым методом получения характеристик сигнала ШИМ является разделение аналогового сигнала на несколько дискретных сегментов, равных длине периода ШИМ. Затем цикл ШИМ для этого периода может быть установлен равным среднему значению аналогового сигнала за тот же интервал.


ШИМ, используемый для генерации переменного аналогового эквивалента. Взято из Википедии; используется под GPL

PWM (Часть 2) — Звук и частота с пьезо-зуммером

В предыдущем уроке мы повеселились, управляя яркостью светодиода с помощью ШИМ. На этот раз мы получим еще больше удовольствия с пьезозуммером или маленьким динамиком .

Если вы помните, с помощью ШИМ вы можете изменять рабочий цикл или частоту .Управление яркостью светодиода, т.е. производить переменное напряжение в среднем, может быть выполнено с помощью постоянной частоты (достаточно высокой) и изменения рабочего цикла . На этот раз все будет наоборот: у нас будет постоянный рабочий цикл, а частота будет меняться.

Что такое пьезозуммер?

Это «компонент» из материала, имеющего пьезоэлектрическую способность . Пьезоэлектричество — это способность материала производить напряжение при искажении.Верно и обратное: , когда вы создаете напряжение, материал искажается . Когда вы прекращаете генерировать напряжение, оно возвращается к своей первоначальной форме. Если вы будете достаточно быстры с этой настройкой напряжения включения / выключения, то пьезо начнет колебаться, и будет издавать звук . Как мило …

Постоянный рабочий цикл? Почему ?

Итак, теперь мы знаем, почему нам нужно изменять частоту. Это заставит пьезоэлектрические колебания все меньше и меньше производить звуки на разных уровнях.Если вы создадите частоту 440 Гц, вы получите хороший A3.

Но почему имеет постоянный рабочий цикл ? Какую роль в этом случае играет рабочий цикл? Помните: при создании колебания пьезоэлектрического сигнала важно не количество вольт, а то, как вы включаете / выключаете напряжение 1 :
  • при установке рабочего цикла на 10% : в течение определенного периода пьезоэлектрический преобразователь будет искажаются на 10% по времени и остаются неактивными 90% по времени. Низкая степень колебаний .
  • при установке рабочего цикла на 50% : пьезоискаженный наполовину, наполовину неактивный. Доля колебаний высока , потому что пьезоэлектрические колебания имеют максимальную амплитуду, они наполовину искажены и неактивны.
  • при установке рабочего цикла на 90% : пьезоэлектрический преобразователь будет искажаться в течение 90% периода, затем ничего. Доля колебаний снова низкая, , потому что соотношение между искажением и бездействием не равнозначно.

Итак, вкратце, какова цель рабочего цикла в нашем случае? Том ! Вы можете изменить громкость звука, изменив рабочий цикл. 0% не будет издавать звуков, 50% будет максимальной громкостью. Между 50% и 100% это то же самое, что и между 0% и 50%. Поэтому, когда я говорю, когда нужен постоянный рабочий цикл, это не совсем так, просто мы установим его на 50%, так что шансы, что мы что-то услышим, высоки 🙂

Давайте издавать звуки!

Схема будет использоваться точно такая же, как и в предыдущем посте со светодиодом, за исключением того, что светодиод заменен пьезо-зуммером, например:



Кстати, а как наблюдать «влияние рабочего цикла» на объем? Просто запрограммируйте свой PIC с помощью предыдущего эксперимента, который регулирует яркость светодиода и включает питание схемы.Я хотел показать видео со звуками, но частота слишком высокая, моя камера не может его записать …

В общем, скучновато, нам нужны звуки …

Написание программного обеспечения

Программная часть во многом похожа на предыдущий эксперимент. Инициализация такая же, даю посмотреть. Изменился только цикл forever :
 var dword counter = 0
вечная петля

  для 100_000 с использованием цикла счетчика
     pwm_set_frequency (счетчик)
     - Установка @ 50% дает максимальный объем
     - необходимо пересчитывать каждый раз, когда частота
     - меняется, так как зависит от значения PR2
     pwm1_set_percent_dutycycle (50)
  конец цикла

конец петли 
Довольно просто:
  • мы «исследуем» частоты от 0 до 100 000 Гц, используя счетчик
  • мы используем pwm_set_frequency (counter) , чтобы установить частоту в герцах.В качестве параметра требуется двойное слово (т.е. вы можете исследовать множество частот …)
  • , наконец, поскольку мы хотим, чтобы рабочий цикл составлял 50%, и поскольку его значение различается для каждой настройки частоты, нам необходимо повторно вычислить его для каждого цикла.

Примечание: библиотеки PWM jallib являются результатом «тяжелого рефакторинга» библиотеки PWM Гуру Стефа Ментки. Интегрируя его в jallib, мы модифицировали библиотеку, чтобы частоты можно было устанавливать и изменять во время выполнения программы. Раньше этого не было, потому что частота была установлена ​​постоянной.

Итак, как это выглядит? Надеюсь, сладкая мелодия вам понравится 🙂

«Где я могу скачать файлы?»

Как обычно, вам понадобится последний пакет jallib (как минимум версии 0.2). Вы также найдете здесь точный код, который мы использовали.

Разное

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *