Симисторный регулятор мощности с микроконтроллерным управлением

в 8:09, , рубрики: DIY, diy или сделай сам, stm32, stm32f103, микроконтроллеры, Программинг микроконтроллеров, электроника, Электроника для начинающих, метки: , , , , ,

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

Итак, начнём с теории. Все знакомы с так называемой широтно-импульсной модуляцией, позволяющей управлять током в (или, что реже, напряжением на) нагрузке с максимальным КПД. Лишняя мощность в таком случае просто не будет потребляться, вместо того, чтобы рассеиваться в виде тепла, как при линейном регулировании, представляющем собой не более чем усложнённый вариант реостата. Однако, по ряду причин такое управление, будучи выполненным «в лоб», не всегда подходит для переменного тока. Одна из них — бо́льшая схемотехническая сложность, поскольку требуется диодный мост для питания силовой части на MOSFET или IGBT транзисторах. Этих недостатков лишено симисторное управление, представляющее собой модификацию ШИМ.

Симистор (TRIAC в англоязычной литературе) — это полупроводниковый прибор, модификация тиристора, предназначенный для работы в качестве ключа, то есть он может быть либо открыт, либо закрыт и не имеет линейного режима работы. Основное отличие от тиристора — двусторонняя проводимость в открытом состоянии и (с некоторыми оговорками) независимость от полярности тока (тиристоры и симисторы управляются током, как и биполярные транзисторы) через управляющий электрод. Это позволяет легко использовать симистор в цепях переменного тока. Вторая особенность, общая с тиристорами, — это свойство сохранять проводимость при исчезновении управляющего тока. Закрывается симистор при отключении тока между основными электродами, то есть, когда переменный ток переходит через ноль. Побочным эффектом этого является уменьшение помех при отключении. Таким образом, для открывания симистора нам достаточно подать на управляющий электрод открывающий импульс небольшой, порядка десятков микросекунд, длительности, а закроется он сам в конце полупериода переменного тока.

Симисторное управление учитывает вышеперечисленные свойства этого прибора и заключается в отпирании симистора на каждом полупериоде переменного тока с постоянной задержкой относительно точки перехода через ноль. Таким образом, от каждого полупериода отрезается «ломтик». Заштрихованная на рисунке часть — результат этой процедуры. Таким образом, на выходе вместо синусоиды мы будем иметь что-то, в известной степени напоминающее пилу:

AC

Теперь наша задача — вовремя отпирать симистор. Эту задачу мы возложим на микроконтроллер. Приведённая ниже схема является результатом анализа имеющихся решений а также документации к оптронам. В частности, силовая часть взята из документации на симисторный оптрон производства Texas Instruments. Схема не лишена недостатков, один из которых — мощный проволочный резистор-печка, через который включён оптрон, детектирующий переход через ноль.

schematics

Как это работает? Рассмотрим рисунок.

waves

На положительном полупериоде, когда ток через оптрон превышает некоторое пороговое значение, оптрон открывается и напряжение на входе микроконтроллера опускается практически до нуля (кривая «ZC» на рисунке). Когда же ток снова опускается ниже этого значения, на микроконтроллер снова поступает единица. Происходит это в моменты времени, отстоящие на dz от нуля тока. Это dz ощутимо, в моём случае составляет около 0.8 мс, и его необходимо учитывать. Это несложно: мы знаем период T и длительность импульса высокого уровня h, откуда dz = (h — T / 2) / 2. Таким образом, нам необходимо открывать симистор через dz + dP от переднего фронта сигнала с оптрона.

О фазовом сдвиге dP стоит поговорить отдельно. В случае c ШИМ постоянного тока среднее значение тока на выходе будет линейно зависеть от скважности управляющего сигнала. Но это лишь потому, что интеграл от константы даёт линейную зависимость. В нашем случае необходимо отталкиваться от значения интеграла синуса. Решение простого уравнения даёт нам искомую зависимость: для линейного изменения среднего значения тока необходимо менять фазовый сдвиг по закону арккосинуса, для чего достаточно ввести в управляющую программу LUT таблицу.

Всё, о чём я расскажу в дальнейшем, имеет прямое отношение к архитектуре микроконтроллеров серии STM32, в частности, к архитектуре их таймеров. Микроконтроллеры этой серии имеют разное число таймеров, в STM32F103RBT6 их семь, из которых четыре пригодны для захвата и генерации ШИМ. Таймеры можно каскадировать: для каждого таймера одно из внутренних событий (переполнение, сброс, изменение уровня на одном из входных или выходных каналов и т.д.; за подробностями отсылаю вас к документации) можно объявить выходным и направить его на другой таймер, назначив на него определённое действие: старт, стоп, сброс и т.д. Нам потребуются три таймера: один из них, работая в т.н. PWM input режиме, замеряет период входного сигнала и длительность импульса высокого уровня. По окончании измерения, после каждого периода генерируется прерывание. Одновременно с этим запускается связанный с этим событием таймер фазового сдвига, работающий в ждущем режиме. По событию переполнения этого таймера происходит принудительный сброс таймера, генерирующего выходной управляющий сигнал на симистор, таким образом, через каждый полный период переменного тока подстраивается фаза управляющего сигнала. Только первый таймер генерирует прерывание, и задача обработчика сводится к подстройке фазового сдвига (регистр ARR ждущего таймера) и периода ШИМ таймера (также регистр ARR) так, чтобы он всегда был равен половине периода переменного тока. Таким образом, всё управление происходит на аппаратном уровне и влияние программных задержек полностью исключается. Да, это можно было сделать и программно, но грех было не воспользоваться такой возможностью, как каскадируемые таймеры.

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

И напоследок, видеоролик, показывающий устройство в действии:

Автор: e_asphyx

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js