Домой Психология Схемы шим регуляторов на микроконтроллерах. Разработка проекта ШИМ-регулятора на микроконтроллерах серии AVR для управления нагрузкой электрических устройств. Логическая схема устройства

Схемы шим регуляторов на микроконтроллерах. Разработка проекта ШИМ-регулятора на микроконтроллерах серии AVR для управления нагрузкой электрических устройств. Логическая схема устройства

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

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

В момент отключения устройства от сети запоминается последний уровень выдаваемой мощности, который будет автоматически задан при очередном включении. Регулировка осуществляется в диапазоне от 0 до 9 и далее от А до F. То есть всего имеется 16 ступеней регулировки.

Радиатор на фото выше достаточно большой, конструкция позволяет поставить вариант и по меньше, но другого у меня не было. При первом включении устройства у меня на дисплее моргал 0, на нажатие кнопок схема не реагировала. Заменив конденсатора по питанию на номинал 1000 мкФ,проблема исчезла.

Печатная плата в формате и прошивка микроконтроллера размещены в одном архиве по ссылке выше.

Схема используется для плавного регулирования мощности в нагрузке. В основу способа управления положен метод фазового управления симистором. Сущность его заключается в пропуске части полупериода переменного сетевого напряжения. Ток поступающий в нагрузку пропорционален интегралу полученного сигнала. Основа конструкции микроконтроллер PIC16F1823.

Устройство поддерживает работу с активной (лампа накаливания, нагреватель) и индуктивной нагрузкой. Тактирование микроконтроллера осуществляется от внутреннего генератора. Сигнал синхронизации с сетью поступает с выпрямительного моста на вход внутреннего компаратора микроконтроллера через фильтр на R10, C5, R9, R8, C3. Опорное напряжение компаратора поступает с внутреннего ЦАП микроконтроллера и равно около 0,6 В, которое задается при конфигурации МК. Для устранения влияния емкости C6 на синхронизацию применяется диод D6. Индикация выполнена на E30561 с общим катодом.

Конструктивно устройство собрано на двух печатных платах. На одной распологаются индикатор и управляющие кнопки, а на другой МК, блок питания и симистор. Соединение плат выполнено проводом МГТФ.

С радиатором для симистора (HS-135-38), как на рисунке максимальная мощность нагрузки около 500 Вт. Соответственно под этот радиатор и сделано посадочное место на печатной плате.

Прошивка для МК выполнена в среде MPLAB на языке С для компилятора HI-TECH PICC 9.83. Скачать печатные платы, прошивку и проект MPLAB вы можете по ссылке выше.

Регулирование конструкции происходит с помощью симистора типа BT138. Управление которым осуществляется посредством МК. Цифровой LED дисплей показывает на сколько процентов в текущий момент времени открыт симистор. Логическая часть схемы получает питание от блок питания, основа которого стабилизатор напряжения DA1 7805.

Эта схема отлично подойдет для раздельной регулировки мощности отдачи для двух разных нагрузок, например, нагреватели, лампы, электродвигатели. Максимальная мощность нагрузки зависит от типа ключей, её коммутирующих. На схеме ниже в роли таковых выступают транзисторы КТ819, но могут быть и другие варианты, в зависмости от необходимой мощности обоих нагрузок. Устройство генерирует импульсные сигналы, которые идут на любой из силовых ключей.

Прибор генерирует импульсные сигналы, широту их импульсов можно настраивать 256 равными степенями. Для управления схемой предназначены переменные сопротивления, подсоединенные к портам РВЗ и РВ4 МК, работающим с АЦП. ATtiny13 измеряет номинал сопротивление переменного резистора и задает широту импульсов выходного импульсного сигнала, следующих на ключ, управляющий питанием конкретной нагрузки. Т.е, поворачивая регулятор переменного сопротивления осуществляется регулировка мощности. Такая регулировка по сравнению с настройкой кнопками «меньше» и «больше» более удобна в использование, благодаря оперативности. Для программирования устройства имеется разъем ISP6. При программировании фьюзы ставим по умолчанию, работа с внутренним тактовым RC-генератором на частоте 9,6 МГц. Архив с исходником пршивки, забираем по ссылке выше.

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

Ключ я взял IRF630 . Почему именно этот MOSFET ? Да просто у меня их откуда то завелось штук десять. Вот и применяю, так то можно поставить что либо менее габаритное и маломощное. Т.к. ток тут вряд ли будет больше ампера, а IRF630 способен протащить через себя под 9А. Зато можно будет сделать целый каскад из вентиляторов, подсоединив их к одной крутилке — мощи хватит:)

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

  1. Тратить такую ценную и дорогую деталь на какой то вентилятор мне западло. Я для микроконтроллера поинтересней задачу найду
  2. Еще софт под это писать, вдвойне западло.
  3. Напряжение питания там 12 вольт, понижать его для питания МК до 5 вольт это вообще уже лениво
  4. IRF630 не откроется от 5 вольт, поэтому тут пришлось бы еще и транзистор ставить, чтобы он подавал высокий потенциал на затвор полевика. Нафиг нафиг.
Остается аналоговая схема. А что, тоже неплохо. Наладки не требует, мы же не высокоточный девайс делаем. Детали тоже минимальные. Надо только прикинуть на чем делать.

Операционные усилители можно отбросить сразу. Дело в том, что у ОУ общего назначения уже после 8-10кГц, как правило, предельное выходное напряжение начинает резко заваливаться, а нам надо полевик дрыгать. Да еще на сверхзвуковой частоте, чтобы не пищало.


ОУ лишенные такого недостатка стоят столько, что на эти деньги можно с десяток крутейших микроконтроллеров купить. В топку!

Остаются компараторы, они не обладают способностью операционника плавно менять выходное напряжение, могут только сравнивать две напруги и замыкать выходной транзистор по итогам сравнения, но зато делают это быстро и без завала характеристики. Пошарил по сусекам и компараторов не нашел. Засада! Точнее был LM339 , но он был в большом корпусе, а впаивать микросхему больше чем на 8 ног на такую простую задачу мне религия не позволяет. В лабаз тащиться тоже было влом. Что делать?

И тут я вспомнил про такую замечательную вещь как аналоговый таймер — NE555 . Представляет собой своеобразный генератор, где можно комбинацией резисторов и конденсатором задавать частоту, а также длительность импульса и паузы. Сколько на этом таймере разной хрени сделали, за его более чем тридцатилетнюю историю… До сих пор эта микросхема, несмотря на почтенный возраст, штампуется миллионными тиражами и есть практически в каждом лабазе по цене в считанные рубли. У нас, например, он стоит около 5 рублей. Порылся по сусекам и нашел пару штук. О! Щас и замутим.


Как это работает
Если не вникать глубоко в структуру таймера 555, то несложно. Грубо говоря, таймер следит за напряжением на конденсаторе С1, которое снимает с вывода THR (THRESHOLD — порог). Как только оно достигнет максимума (кондер заряжен), так открывается внутренний транзистор. Который замыкает вывод DIS (DISCHARGE — разряд) на землю. При этом на выходе OUT появляется логический ноль. Конденсатор начинает разряжаться через DIS и когда напряжение на нем станет равно нулю (полный разряд) система перекинется в противоположное состояние — на выходе 1, транзистор закрыт. Конденсатор начинает снова заряжаться и все повторяется вновь.
Заряд конденсатора С1 идет по пути: «R4->верхнее плечо R1 ->D2 «, а разряд по пути: D1 -> нижнее плечо R1 -> DIS . Когда мы крутим переменный резистор R1 то у нас меняются соотношения сопротивлений верхнего и нижнего плеча. Что, соответственно, меняет отношение длины импульса к паузе.
Частота задается в основном конденсатором С1 и еще немного зависит от величины сопротивления R1.
Резистор R3 обеспечивает подтяжку выхода к высокому уровню — так так там выход с открытым коллектором. Который не способен самостоятельно выставить высокий уровень.

Диоды можно ставить любые совершенно, кондеры примерно такого номинала, отклонения в пределах одного порядка не влияют особо на качество работы. На 4.7нанофарадах, поставленных в С1, например, частота снижается до 18кГц, но ее почти не слышно, видать слух у меня уже не идеальный:(

Покопался в закромах, которая сама расчитывает параметры работы таймера NE555 и собрал схему оттуда, для астабильного режима со коэффициентом заполнения меньше 50%, да вкрутил там вместо R1 и R2 переменный резистор, которым у меня менялась скважность выходного сигнала. Надо только обратить внимание на то, что выход DIS (DISCHARGE) через внутренний ключ таймера подключен на землю, поэтому нельзя было его сажать напрямую к потенциометру , т.к. при закручивании регулятора в крайнее положение этот вывод бы сажался на Vcc. А когда транзистор откроется, то будет натуральное КЗ и таймер с красивым пшиком испустит волшебный дым, на котором, как известно, работает вся электроника. Как только дым покидает микросхему — она перестает работать. Вот так то. Посему берем и добавляем еще один резистор на один килоом. Погоды в регулировании он не сделает, а от перегорания защитит.

Сказано — сделано. Вытравил плату, впаял компоненты:

Снизу все просто.
Вот и печатку прилагаю, в родимом Sprint Layout —

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

Как видно, частота плывет — оно и понятно, у нас ведь частота работы зависит от резисторов и конденсатора, а раз они меняются, то и частота уплывает, но это не беда. Во всем диапазоне регулирования она ни разу не влазит в слышимый диапазон. А вся конструкция обошлась в 35 рублей, не считая корпуса. Так что — Profit!

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

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

Генератор ШИМ

Микроконтроллер генерирует чёткие импульсы нужной формы и скважности, что значительно упрощает схему. Есть две кнопки, для увеличения и уменьшения мощности. Они идут на 3 и 5 выводы микросхемы PIC18LF2550. В зависимости от ширины импульса - светодиод медленнее или быстрее мигает, так визуально можно оценить скважность. Если светодиод светит полностью - мощность 100%, а если он погас, то скважность 0%.

Микроконтроллерный блок питания

Стаблизатор МК на 3,3 вольта, поэтому в зависимости от выходного транзистора можно использовать источник питания от 3.7 до 25 вольт. Частота коммутации составляет 32 кГц, а длительность импульса разделена на 256 шагов, в том числе полное включение и отключение.

Коммутатор нагрузки

Драйвер для MOSFET транзистора является - обычный 2N3904. Сам силовой транзистор может быть любой подходящий N-канальный MOSFET, не обязательно как по схеме 80NF55L.

Данная версия 4-канального 8-битного ШИМ-контроллера сконструирована с использованием микроконтроллера ATmegа16. Устройство сдержит интерфейс RS232 для управления с компьютера, интерфейс для 12-кнопочной клавиатуры и 4 аналоговых 10-битных канала для подключения потенциометров. Для отображения текущих режимов работы и параметров имеется 4-х строчный LCD-дисплей. Дополнительно ШИМ-контроллер имеет: 4 выхода на светодиоды, для индикации режимов управления (могут быть задействованы в роли выходов общего назначения), 3 выхода общего назначения.

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

Основные характеристики устройства:

  • 4-канала ШИМ, разрешение 8 бит, частота ШИМ - 31 кГц;
  • интерфейс RS232 для управления и контроля с PC;
  • простое схемотехническое решение с минимальным количеством внешних элементов;
  • 12-кнопочная клавиатура;
  • возможность аналоговой регулировки;
  • до 7 выходных линий общего назначения;
  • 4-строчный LCD-дисплей;
  • управление LCD-дисплеем через последовательный интерфейс;
  • пользовательское меню;
  • гибкие настройки;
  • программная реализация буферов FIFO для ускорения работы.

Управление выходами общего назначения (в т.ч. светодиодными индикаторами) осуществляется с компьютера (RS232), пользователь так же имеет возможность считывать историю нажатия клавиш на клавиатуре (последние 32 нажатия клавиш, либо сразу же после нажатия какой-либо клавиши).

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

Логическая схема устройства.

Принципиальная схема устройства

Схемотехническое решение очень простое. Для тактирования микроконтроллера выбран кварцевый резонатор 8 МГц, источник питания +5.0 В собран на интегральном стабилизаторе LM7805 , индуктивность 10 мкГн и конденсатор 100 нФ - образуют фильтр, предотвращающий проникновение помех при переключениях в аналоговых цепях. Преобразователь логических уровней MAX232 используется для реализации последовательного интерфейса. LCD-индикатор на чипсете Hitachi (HD44780) с разрешением 20×4 либо 40×2. Узел управления подсветкой индикатора реализован на транзисторе MJE3055T (возможно использование более дешевого аналога). Матрица клавиатуры, стандартная, 4×3.

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

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

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

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

Пример реализации выходных каскадов ШИМ-контроллера

ШИМ (PWM) — широтно-импульсная модуляция. Не нужно пугаться данного термина. Это всего навсего способ регулирования напряжения. Допустим подсветка монитора горит слишком ярко, вы меняете яркость. А что же происходит в этот момент на самом деле?

Представим себе, что подсветка монитора это несколько светодиодов. Питается все это дело от постоянного напряжения. Но вот нам понадобилось уменьшить яркость монитора. Логично ответить, что это можно сделать переменным резистором. На маленьких токах — возможно. Но на больших, резистор будет сильно греться. Сильно возрастут габариты, потери, энергопотребление.

Поэтому люди придумали схему на транзисторах, которая делает из постоянного напряжения пульсирующее. Оказывается, пульсирующее напряжение, в зависимости от заполнения периода будет эквивалентно постоянному напряжению. Т.е. если в течение периода напряжение 50% времени было включено, 50% выключено, то эквивалент постоянного напряжения будет равен 50% от номинального.

В цифрах это просто — было 5В постоянного напряжения прогнали через ШИМ — получили 2,5В. Если заполнение импульса равно 75%, то эквивалентное постоянное напряжение будет 3,75В. Думаю идея понятна.

Теперь приступим к практической реализации. Будем при помощи микроконтроллера изменять заполнение от 0 до 100%, потом от 100% до нуля. Конечный результат должен выглядеть так:

Чтобы было более наглядно, подключим светодиод. В результате у нас будет плавно включаться и отключаться светодиод.

Запускаем наш любимый CodeVision. Создаем проект при помощи мастера. В разделе таймеров (Timers), выбираем Timer 2 и выставляем настройки как на рисунке.

Если попробовать сгенерировать проект, то прога может ругнуться. Соглашаемся, ведь у нас нога 3 порта В должна быть настроена как выход.

Приводим код к следующему виду:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 #include void main(void ) { PORTB= 0x00 ; DDRB= 0x08 ; // Timer/Counter 2 initialization ASSR= 0x00 ; TCCR2= 0x6C ; TCNT2= 0x00 ; OCR2= 0x00 ; TIMSK= 0x00 ; while (1 ) { } ; }

#include void main(void) { PORTB=0x00; DDRB=0x08; // Timer/Counter 2 initialization ASSR=0x00; TCCR2=0x6C; TCNT2=0x00; OCR2=0x00; TIMSK=0x00; while (1) { }; }

Уделим внимание строке OCR2=0x00; Эта переменная как раз и отвечает за величину заполнения импульса. Изменяется данная величина от 0 до 255(0хFF), т.е. 255 соответствует 100% -му заполнению (постоянный ток). Следовательно, если нужно 30% заполнение (255/100)*30=77. Далее 77 переводим в шестнадцатеричную систему OCR2=0x4D;

TCCR2=0x6C; Изменяя данную величину мы можем регулировать частоту ШИМ. Величина частоты работы ШИМ кратна частоте, на которой работает микроконтроллер. В проекте использована частота микроконтроллера 8 МГц, частоту ШИМ использовали 125кГц, следовательно делитель равен 8/125=64
0x6C в двоичной системе счисления 1101100, открываем даташит на Atmega8 и видим описание регистра TCCR2, так вот 1101100 последние цифры 100 и отвечают за выбор частоты работы ШИМ

Приступим непосредственно к программе:

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 #include #include void main(void ) { PORTB= 0x00 ; DDRB= 0x08 ; ASSR= 0x00 ; TCCR2= 0x6C ; TCNT2= 0x00 ; OCR2= 0x00 ; TIMSK= 0x00 ; while (1 ) { while (OCR2< 0xff ) { OCR2= OCR2+ 0x01 ; delay_ms(5 ) ; } while (OCR2> 0x00 ) { OCR2= OCR2- 0x01 ; delay_ms(5 ) ; } } ; }

#include #include void main(void) { PORTB=0x00; DDRB=0x08; ASSR=0x00; TCCR2=0x6C; TCNT2=0x00; OCR2=0x00; TIMSK=0x00; while (1) { while(OCR2<0xff) { OCR2=OCR2+0x01; delay_ms(5); } while(OCR2>0x00) { OCR2=OCR2-0x01; delay_ms(5); } }; }

Код прост до безобразия: сначала в цикле увеличиваем заполнение от 0 до 255(ff), потом уменьшаем от 255 до 0.
И напоследок видосик, как это все должно работать. Успехов в изучении)

Новое на сайте

>

Самое популярное