Среда разработки Unimod PRO 2 (версия 2.3.40)
 Руководство по программированию
×

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


Назначение.
Функциональный блок широтно-импульсной модуляции PWM преобразовывает входной аналоговый сигнал в дискретный сигнал и выводит его на одном из двух выходов. Может использоваться для управления исполнительными механизмами (периодического включения и выключения), когда скважность включения должна быть пропорциональна непрерывному управляющему сигналу.
 
Состав структурной переменной.
Переменная со структурным типом PWM будет добавлена в локальный словарь автоматически при добавлении блока в редактор.
Описание алгоритма.
Блок PWM формирует на одном из двух выходов QU или QD дискретный сигнал, а также выводит длительность и период сформированного дискретного сигнала в виде аналоговых значений: для сигнала QU на выходы GUpls и GUprd, для сигнала QD на выходы GDpls и GDprd. Длительность и период импульсов на дискретных выходах Up и Down кратны циклу контроллера.
Выходные сигналы формируются на основании поступающего аналогового сигнала X (в автоматическом режиме) или на основании пользовательских управляющих дискретных сигналов Up и Down (в ручном режиме).
Автоматический режим работы.
В автоматическом режиме (AUTO=TRUE) входной сигнал X преобразуется в последовательность импульсов по правилам:
  • Анализируется заданный период Tprd и определяется реальный период следования импульсов T:
  • если Tprd<0, все выходы блока равны нулю;
  • если Tprd=0, реальный период T равен циклу контроллера.
  • если Tprd>0, реальный период T кратен циклу контроллера T = Tprd + t, где Tc - время цикла контроллера, t - время округления до кратного значения. Например, при Tc=100 мс и Tprd=358 мс, реальный период T= 358+42 = 400 мс.
    2. Определяется скважность Q = X/100%, пропорциональная входному сигналу.
    3. Определяется длительность импульса P = T * |Q|:
  • если P >= Tmin, импульс выводится;
  • если P < Tmin, текущий импульс Pi не выводится в периоде Ti, но его значение в следующем периоде Ti+1 будет добавлено (в соответствии со знаком) к длительности импульса Pi+1 = Pi+1 + Pi. При состоянии входа Zdt=TRUE, импульс Pi < Tmin не выводится и не передается в следующий период.
  • если Ti-Pi (длительность паузы) < Tmps (минимальной длительности паузы) или Ti-Pi < Tmin (минимальной длительности импульса), импульсы слипаются, а длительность импульса Pi = периоду импульса Ti.
4. Определяется дискретный выход и формируются импульсы:
Значение скважности Q
Выход QU
Выход QD
Q >= 1
true
false
0< Q <1,
 формируются импульсы
false
Q = 0,
false
false
-1< Q <0,
 false
формируются импульсы
Q <= -1
false
true
6. Параметры Lup и Ldown задают время дополнительного импульса для компенсации люфта исполнительного механизма. Учитываются при смене направления вывода импульса. Например, требуется закрыть исполнительный механизм после открытия, непосредственно закрытие займет 3000 мс, а люфт механизма 500 мс. При передаче на вход Ldown=500, общее время импульса с выхода QD составит 3500 мс. Если не учитывать время люфта, длительность импульса в 500 мс будет потрачена на люфт, а механизм закроется не полностью.
7. Дискретные входы Zup и Zdown предназначены для блокировки включения исполнительного механизма при достижении им крайнего положения: Zup=TRUE - не формируются импульсы с выхода QU (“больше”), при Zdown=TRUE не формируются импульсы с выхода QD (“меньше”). На эти входы могут передаваться дискретные сигналы с концевых выключателей исполнительных механизмов или сигналы, сформированные программной логикой.
Блок работает корректно при Tmin < Tprd.
Ручной режим работы.
При ручном режиме (AUTO=FALSE), управление исполнительным механизмом осуществляется с использованием входных дискретных сигналов Up и Down:
  • если Up=TRUE, на выходе QU формируется управляющий дискретный импульс QU=TRUE с длительностью GUpls=1000 и периодом GUprd=1000;
  • если Down=TRUE, на выходе QD формируется управляющий дискретный импульс QD=TRUE с длительностью GDpls=1000 и периодом GDprd=1000;
  • если Up=Down, управляющие импульсы не формируются, все выходы блока равны нулю.
При переключении на ручной режим накопленное значение длительности импульса обнуляется не зависимо от состояния входа Zdt.
Использование совместно с функциональным блоком RIM.
Блок PWM обычно используется совместно с импульсным регулятором RIM, когда сигнал с выхода импульсного регулятора передается на вход X блока PWM. При этом на входы Cycle (блок RIM) и Tprd (блок PWM) должны передаваться одинаковые значения, так как длительность импульса определяется один раз за период, а блоки RIM и PWM должны работать синхронно (с одинаковым периодом).
Пример синтаксиса на языке ST.
//вызов функционального блока
Block.PWM(AUTO, X, Tmin, Tmps, Tprd, Lup, Ldown, Up, Down, Zup, Zdown, Zdt);
//чтение дискретного сигнала в направлении "больше"
QU := Block.QU;
//чтение периода сигнала и длительности импульса
GUprd := Block.GUprd;  
GUpls := Block.GUpls;   
//чтение дискретного сигнала в направлении "меньше"
QD := Block.QD;   
//чтение периода сигнала и длительности импульса
GDprd := Block.GDprd;
GDpls := Block.GDpls;