Фильтр по тематике

Программная реализация импульсной модуляции сигналов регулирования

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

01.03.2025 1040 0
Программная реализация импульсной модуляции сигналов регулирования

Введение

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

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

Рассмотрим несколько способов программной реализации импульсной модуляции регулирующего сигнала на основе конкретных примеров программ. Одним из самых распространённых видов модуляции является широтно-импульсная модуляция. Для её реализации программным путём потребуется один таймер для формирования регулярных отсчётов времени и несколько регистров. Пример такой программы на языке С с подробными комментариями для восьмиканального регулятора приведён в листинге 1.

Листинг 1. Программа широтно­импульсной модуляции
#include <iostream> // Подключение библиотеки ввода­вывода
#include <string> // Подключение строковой библиотеки
#include <math.h> // Подключение математической библиотеки
unsigned short n, k; // Индексныe регистры программы
unsigned short pwm_c=0; // Регистр счётчика импульсов от 0 до 100%
unsigned short pwm_r[8]; // Регистры регуляторы
unsigned short pwm_do[]={0,0,0,0,0,0,0,0}; // Регистры выходных сигналов
// Функция обработчика прерывания таймера
int irq_tim()
{
unsigned short i; // Индексный регистр прерывания ШИМ
for(i=0;i<=7;i++) // Организация цикла каналов регулирования
{
if(pwm_r[i] > pwm_c) pwm_do[i]=1; else pwm_do[i]=0; // Модуляция выходных сигналов
}
pwm_c++; // Увеличение счетчика импульсов
if(pwm_c > 100) pwm_c=0; // Циклическое ограничение счётчика импульсов
return 0;
}
// Главная функция программы
int main()
{
// Код основной программы
for(k=0;k<=7;k++) pwm_r[k]=k; // Задать значения регуляторов ШИМ для всех каналов от 0 до 7 %
std::cout << "pwm_do: 01234567" << '\n';
for(n=0;n<=9;n++) // Организовать цикл для отображения ШИМ выходов
{
std::cout << "pwm_c=" << pwm_c << ' ';
irq_tim(); // Эмуляция прерывания таймера
for(k=0;k<=7;k++) std::cout << pwm_do[k]; // Вывод каналов регулирования
std::cout << '\n';
}
return 0;
}

Для проверки работы программы и её редактирования можно использовать онлайн-редактор с транслятором языка С, например, C++Shell [1]. Окно этого транслятора показано на рис. 1.


В первое поле редактирования необходимо скопировать приведённую программу и нажать программную кнопку «Run». Программа автоматически транслируется, и результат её работы отобразится в окне вывода. Из результата видно значение всех восьми выходных сигналов для десяти значений внутреннего счётчика импульсов программы. Как и следовало ожидать, произошло заполнение сигналов регулирования единичными значениями в соответствии с их предварительно заданными значениями от 0 до 7 процентов.

Параметры таймера в приведённой программе должны определяться характером регулируемого устройства. Например, для систем нагрева от промышленной сети переменного тока с синусоидальной частотой 50 Гц длительность активной фазы нагрева составляет 10 мс, как показано на рис. 2.


Не рекомендуется задавать период таймера меньше 10 мс, поскольку при этом будет происходить коммутация нагрузки на активном участке напряжения, а не при переходе через ноль. Это приводит к формированию мощных высоковольтных импульсных выбросов напряжения в питающую сеть и электромагнитных импульсов, способных нарушить работу приборов, находящихся рядом. К таким приборам относятся радио- и телевизионные приёмники, процессорные системы и медицинское оборудование, сбой которого опасен для жизни пациентов.

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

Частотно-импульсная модуляция

Для формирования регулирующего ШИМ-сигнала в диапазоне от 0 до 100% минимальный период таймера составит: Т = 10 мс × 100 = 1 с. Получается, что для 50% сигнала ШИМ в течение половины секунды нагреватель будет включён на полную мощность, а вторую половину секунды полностью отключён. Такой режим нагрузки промышленной сети не всегда допустим. Например, для маломощных генераторов питающей сети это приводит либо к выходу этих генераторов из строя, либо к их нестабильной работе.

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

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

Предыдущую программу легко преобразовать в программу частотно-импульсной модуляции путём замены функции обработчика прерывания таймера. Код такой функции приведён в листинге 2.

Листинг 2. Функция обработчика прерывания таймера ЧИМ
int irq_tim()
{
unsigned short i; // Индексный регистр прерывания
unsigned short b[]={0,0,0,0,0,0,0,0}; // Переменные прерывания
float f[8], PI=3.14159265;
for(i=0;i<=7;i++) // Организация цикла каналов регулирования
{
f[i]=sin((2.0*PI*pwm_r[i]*pwm_c)/100.0);
if(f[i]>0 and b[i]==0) {pwm_do[i]=1; b[i]=1;} else {pwm_do[i]=0;} // Модуляция выходных сигналов
if(f[i]<0) b[i]=0;
}
pwm_c++; // Увеличение счетчика импульсов
if(pwm_c > 100) pwm_c=0; // Циклическое ограничение счётчика импульсов
return 0;
}

Для наглядности результата необходимо также заменить в основной программе строку «pwm_r[k]=k;» на строку «pwm_r[k]=k*10;», увеличив тем самым заданные значения регуляторов ШИМ для всех каналов в 10 раз.

Теперь, после трансляции и выполнения новой программы, получится результат, представленный на рис. 3.


Как видно из результата, например, для пятого канала с заданным значением 50% выходной сигнал чередуется значениями 0 и 1. Суммарное количество единиц, соответствующих включению выходного ключа канала, будет равно 50 из 100 частей. Таким образом, регулирующий сигнал обеспечивает равномерную нагрузку на промышленную питающую сеть во время работы.

Заключение

Приведённые выше программы можно скачать с сайта редакции [2] и модернизировать их для реализации конкретной задачи автоматического регулирования.

Импульсные регулирующие сигналы легко преобразуются в аналоговые регулирующие сигналы при необходимости. Для этого они подключаются к RC-фильтру низких частот, на выходе которого будет сформирован аналоговый сигнал с амплитудой от 0 до физического значения напряжения логической единицы, обычно до 5 вольт. Таким образом, можно получить необходимое количество аналоговых сигналов регулирования без использования цифро-аналоговых преобразователей.

Это ещё одно из преимуществ программного способа модуляции, обеспечивающего сокращение аппаратных затрат.

Литература

  1. URL: https://cpp.sh.
  2. URL: https://cta.ru.

© СТА-ПРЕСС, 2025

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

01.03.2025 1040 0
Комментарии
Рекомендуем
Современные системы управления электроприводов: структура и конструкция. Часть 2

Современные системы управления электроприводов: структура и конструкция. Часть 2

Статья посвящена системам управления электроприводов, которые в настоящее время являются основным средством приведения в движение рабочих машин и других технических устройств. Излагаются основные сведения об электроприводах и их системах управления, предназначенных для управления преобразователем электрической энергии и электродвигателем – главными составными частями электропривода. Рассматриваются различные варианты структуры и конструкции систем управления электроприводов. Приводится описание универсального микроконтроллерного блока управления БУПЧ, который является основой систем управления преобразователями частоты для электроприводов большой и сверхбольшой мощности концерна «Русэлпром».
09.06.2026 СЭ №5/2026 103 0
Эффективное количество бит цифровых осциллографов: влияние на результаты измерений и экспериментальное определение для приборов VESNA

Эффективное количество бит цифровых осциллографов: влияние на результаты измерений и экспериментальное определение для приборов VESNA

В статье рассмотрены особенности измерения эффективного числа бит (ENOB) для цифровых осциллографов. Представлен анализ ENOB как характеристики аналого-цифрового преобразования, отмечены ключевые причины искажений сигналов при аналого-цифровом преобразовании. Проанализированы особенности определения эффективного количества бит цифровых осциллографов на основе прямых измерений, обоснован наиболее простой способ определения ENOB на базе сопоставления среднеквадратичного напряжения на выходе генератора синусоидального сигнала и аналогичного значения, измеренного осциллографом. Для осциллографов серий OVA3, OVS3, OVU2 нового для российского рынка бренда VESNA проведены экспериментальные оценки эффективного количества бит.
05.06.2026 СЭ №5/2026 138 0
Параллельное соединение однотипных модулей электропитания для резервирования с активным принудительным распределением тока нагрузки

Параллельное соединение однотипных модулей электропитания для резервирования с активным принудительным распределением тока нагрузки

В статье кратко рассмотрены основные проблемы, возникающие при параллельном соединении модулей электропитания для увеличения мощности и резервирования в современных распределённых системах электропитания для сложных радиотехнических, компьютеризированных и телекоммуникационных комплексов. Рассмотрен метод равномерного распределения тока нагрузки и синхронизации высокой частоты преобразования включённых параллельно однотипных модулей DC/DC-преобразователей напряжения Brick (2-го поколения) компании Wibbow c применением двунаправленного цифрового интерфейса между модулями, обеспечивающий несложное надёжное параллельное соединение для повышения выходной мощности и резервирования.
04.06.2026 СЭ №5/2026 209 0

Реклама. ООО «Формика Ивент»  ИНН 7709889632  erid = 2SDnjdV94YS
Реклама. ООО «Формика Ивент»  ИНН 7709889632  erid = 2SDnjdsNsmc
  Подписывайтесь на наш канал в Telegram и читайте новости раньше всех! Подписаться