Меню

Ардуино регулятор оборотов с обратной связи

Как регулировать обороты двигателя постоянного тока через Arduino

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

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

Регулировка оборотов

Известно, что при подключении такого двигателя к источнику питания он сразу начинает вращаться, а направление его вращения зависит от полярности подключенного напряжения.

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

Балластные резисторы греются, выделяют энергию в виде тепла в воздух – это не эффективно и бесполезно.

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

где Uнагр – напряжение на нагрузке, Uпит – напряжение источника питания, k – коэффициент заполнения.

Коэффицент заполнения – то отношение ширины импульса (tимп) к периоду (T), то есть:

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

Так выглядит ШИМ-сигнал

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

Для ШИМ-регулирования можно собрать схему на таймере NE555 и других микросхемах либо использовать микроконтроллер.

Схема ШИМ-регулятора на NE555, ёмкость C можно рассчитать по формулам из даташита, либо подобрать, от неё зависит частота ШИМ, можете использовать 1, 0.47, 0.22 мкФ.

Семейство плат с микроконтроллером ардуино также способно выдавать ШИМ сигнал, стандартная частота ШИМ у них 500Гц, а если быть точным, то 488,28 Гц. Если вам не принципиальная частота – то можно использовать как есть без сторонних библиотек. Отмечу, что для большинства применений этого достаточно. Не очень хорошо это подходит для регулирования яркости осветительных приборов из-за повышения коэффициента пульсаций светильника и вреда для зрения в итоге.

Назначение выводов на плате (распиновка)

Обратите внимание на иллюстрацию, приведенную выше. Из неё мы видим микроконтроллер Atmega328, который лежит в основе этих плат выдаёт ШИМ-сигнал только на выходах 3, 5, 6, 9, 10, 11, которые обычно помечены знаком «

» плате, а на картинках с распиновками сокращением «PWM».

Подключение к Arduino

Напрямую к порту ардуино подключать нагрузку для диммирования нельзя, так как он может выдать всего 20 мА. То есть напрямую к порту можно подключать отдельные маломощные 5-мм светодиоды, во всех остальных случаях – используйте транзистор. В последнем случае максимальная нагрузка зависит от типа транзистора.

Что мы сегодня будем использовать

Как мы уже определились ШИМ у нас выдают только пины с номерами 3, 5, 6, 9, 10, 11. Значит, к ним и будем подключать нагрузку. В качестве транзистора предлагаю использовать полевой транзистор (MOSFET) IRF840 – он N-канальный со встроенным обратным диодом для защиты от всплесков противо-ЭДС, его характеристики:

  • Предельно допустимое напряжение сток-исток (Uds): 500 V
  • Предельно допустимое напряжение затвор-исток (Ugs): 20 V
  • Пороговое напряжение включения Ugs(th): 4 V
  • Максимально допустимый постоянный ток стока (Id): 8 A

Можно использовать и другие транзисторы с логическим уровнем включения затвора ( Ugs(th) до 5В), в противном случае придется использовать драйвер или промежуточный транзистор для его открытия.

Кроме транзистора нам нужно 2 резистора — первый между выходом платы и затвором на 240 Ом (если его у вас нет – возьмите соседние номиналы) для ограничения тока заряда затворной ёмкости, так мы снизим вероятность выхода из строя порта и просадок по питанию. Второй резистор на 10-12 кОм подключим между затвором и землёй. Он нужен для того, чтобы затвор не висел в воздухе, а также разряда затворной ёмкости и ускорения закрытия полевика. Схему подключения вы видите ниже.

Схема подключения двигателя к Ардуино через транзистор

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

Подключение потенциометра к Arduino

Соберем эту схему.

Схема в сборе

Для ШИМ в родной библиотеке Arduino IDE есть специальная функция — analogWrite (pin, value), в ней pin – номер порта, на который нужно выдавать сигнал, а value – его величина от 0 до 255. То есть при значении value равном 255 коэффициент заполнения на выходе будет равен 1, т.е. будет непрерывный сигнал на входе, а при 127 — почти 50%.

Для нашего эксперимента достаточно простенького кода, который вы видите далее.

Читайте также:  Регулятор давления bosch чистка

Функция map, которая используется в качестве второго аргумента функции analogWrite позволяет сократить код на несколько строчек. Её назначение преобразовать одни размерности в другие. Чтобы понять, как она работает рассмотрим её синтаксис:

То есть мы получаем любое число от 0 до 1023, а функция возвращает число от 0 до 255. Таким образом, у нас происходит преобразование, в общем-то, с сохранением величины в процентах (комментаторов прошу подсказать, как правильно назвать такое преобразование).

Заключение

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

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

Ну и прилагаем видео, в котором иллюстрируется работа схемы рассмотренной в статье

Источник



ПИД регулятор

ПИД регулятор – один из самых распространенных автоматических регуляторов. Он настолько универсален, что применяется практически везде, где нужно автоматическое управление. Например температурой: специальные печи, холодильники, инкубаторы, паяльники, сопло и стол 3D принтера, ИК паяльные станции и прочее. Поддержание частоты оборотов мотора, например для станков. Всевозможные балансирующие штуки, гироскутеры, сигвеи, левитирующие магнитные платформы, и конечно же квадрокоптеры и самолёты с автопилотом. Это всё ПИД регулятор. Почему именно ПИД? Существуют и другие регуляторы, превосходящие ПИД по адаптивности к управляемой системе и стабильности, например линейно квадратичный. Но, чтобы грамотно синтезировать такой регулятор, нужно быть гораздо больше чем “семи пядей” во лбу, а настройка ПИД регулятора дело хоть и неприятное, но фактически очень простое и под силу любому, а сам ПИД регулятор универсален для почти любого процесса.

Система управления

Прежде чем переходить непосредственно к пиду, очень важно понять и запомнить несколько базовых понятий, из которых состоит автоматическая система. В первую очередь это регулятор, который всем заправляет и находится в центре системы. Регулятор в данном понимании – математический алгоритм или часть программы, которая крутится на микроконтроллере. Регулятор, как алгоритм, работает с обычными числами. Объект управления – это девайс, которым мы управляем, например печка или мотор. Для этого у нас есть управляющее устройство, например диммируемый тен или драйвер мотора. Управляющее устройство получает от регулятора управляющий сигнал, то есть конкретное число. Это может быть заполнение шим сигнала, от 0 до 255, а может быть угол поворота сервомашинки от 0 до 180, потому что регулятору без разницы чем управлять. В объекте управления у нас стоит датчик, с которого регулятор получает управляемую величину, то есть текущий сигнал с датчика. Это – обратная связь, которая и даёт возможность системе ирчно поддержать заданное значение. В случае с печкой это температура, а с мотором – частота оборотов. Ну и наконец регулятор получает установку (уставку), то есть число, к которому он должен привести текущее значение с датчика. Установка может задаваться каким угодно образом: крутилкой, ползунком, энкодером, кнопками, да хоть смской или голосовым вводом. Регулятору это неважно, для него это просто цифра. Задача регулятора состоит в том, чтобы сравнивать текущее значение с установкой и выдавать управляющий сигнал на управляющее устройство. То есть в программе это будет выглядеть условно так: регулятор получил установку, регулятор получил значение с датчика, регулятор выполнил вычисления и выдал нам управляющий сигнал, опять же число. Если это шим – мы его подаём через функцию генерации шим. Есть ещё один момент – регулятор должен делать расчёты и применять управляющий сигнал через равные промежутки времени, то есть с равным периодом или частотой. Эта частота называется частотой дискретизации системы, а период обозначается как dt, прямо как период интегрирования.

Под капотом у ПИД регулятора

ПИД регулятор состоит из трёх составляющих: пропорциональной P, интегрирующей I и дифференциирующей D, формируется просто как сумма трёх значений, умноженных каждая на свой коэффициент. Эта сумма после вычислений становится управляющим сигналом, который подаётся на управляющее устройство, обозначим его как out.

kP, kI и kD это и есть те самые коэффициенты, которые нужно настроить для работы ПИДа. Значения тут могут быть самые разные, от 0.001 то десятков и тысяч, это зависит от конкретной системы. Тут есть ещё один момент: любой коэффициент может быть равен нулю, и в таком случае обнуляется вся его компонента. То есть регулятор можно превратить в П, ПИ, ПД, и прочие сочетания. Разные системы требуют разного подхода, именно поэтому ПИД регулятор такой универсальный.

Читайте также:  Когда цб стал регулятором

В дальнейшем будем пользоваться следующими названиями переменных:

  • out – выход с регулятора (управляющий сигнал)
  • setpoint – установка (заданное значение)
  • input – вход (значение с датчика)
  • err – ошибка регулирования
  • dt – период вычисления и регулирования

P составляющая

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

Данная разность называется ошибкой регулирования, то есть насколько далеко находится система от заданного значения. Получается чем больше ошибка, тем больше будет управляющий сигнал и тем быстрее система будет приводить управляемую величину к заданному значению. Коэффициент kP тут влияет роль усиления ошибки и настраивается вручную. Но в то же время, если система пришла к заданной величине, ошибка станет равной нулю, и управляющий сигнал тоже! Другими словами, п регулятор никогда не сможет привести к заданному значению, всегда будет некая ошибка. П составляющая является основной в ПИД регуляторе и так сказать тянет самую большую лямку, регулятор может неплохо работать только лишь на ней одной.

P составляющая исправляет ошибку в текущий момент времени.

I составляющая

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

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

I составляющая исправляет прошлые, накопившиеся ошибки.

D составляющая

Дифференциальная составляющая представляет собой разность текущей и предыдущей ошибки, поделенную на время между измерениями, то есть на ту же dt, которая общий период регулятора. Иными словами – это производная от ошибки по времени.

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

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

Настройка регулятора

Для настройки регулятора нужно варьировать коэффициенты:

  • При увеличении kP увеличивается скорость выхода на установленное значение, увеличивается управляющий сигнал. Чисто математически система не может прийти ровно к заданному значению, так как при приближении к установке П составляющая пропорционально уменьшается. При дальнейшем увеличении kP реальная система теряет устойчивость и начинаются колебания.
  • При увеличении kI растёт скорость компенсации накопившейся ошибки, что позволяет вывести систему точно к заданному значению с течением времени. Если система медленная, а kI слишком большой – интегральная сумма сильно вырастет и произойдёт перерегулирование, которое может иметь характер незатухающих колебаний с большим периодом. Поэтому интегральную сумму в алгоритме регулятора часто ограничивают, чтобы она не могла увеличиваться и уменьшаться до бесконечности.
  • При увеличении kD растёт стабильность системы, она не даёт системе меняться слишком быстро. В то же время kD может стать причиной неадекватного поведения системы и постоянных скачков управляющего сигнала, если значение с датчика шумит. На каждое резкое изменение сигнала с датчика Д составляющая будет реагировать изменением управляющего сигнала, поэтому сигнал с датчика нужно фильтровать (читай урок по фильтрам).

Вот так выглядит процесс стабилизации при изменении коэффициентов:

Настройка регулятора – дело не очень простое. Начальные коэффициенты для подбора можно получить по следующему алгоритму: сначала выставляем все коэффициенты в . Плавно увеличиваем kP до появления незатухающих колебаний. Значение kP, при котором они появились, запишем и обозначим как kP1. Далее замеряем период колебаний системы в секундах, обозначим как T. Итоговые коэффициенты получим так:

  • kP = 0.6 * kP1
  • kI = kP / T * 2 * dt
  • kD = kP * T / 8 / dt

Например, незатухающие колебания появились при kP 20, период колебаний составил 3 секунды. Период dt в системе будет 50 мс (0.05 с). Считаем:

  • kP: 0.6*20=12
  • kI: 12/3*2*0.05=0.4
  • kD: 12*2/8/0.05=60

На полученных коэффициентах должны более-менее работать большинство систем, но не все.

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

Реализация на C++

Соединяя все рассмотренные выше уравнения, получим:

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

Читайте также:  Регулятор для сливного шланга

Видео

Источник

Регулятор оборотов

Регулятор оборотов на Ардуино

Понадобился регулятор оборотов коллекторного двигателя. Регулятор оборотов на Ардуино с поддержанием оборотов. Двигатель от стиральной машинки-автомата.

Регулятор оборотов на Ардуино

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

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

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

Схема регулятора оборотов будет содержать в себе:

  • Ардуино Нано
  • Блок настроек, и управления оборотами
  • Силовая часть
  • Датчика скорости
  • Защита (реле)
  • Дополнительные входы и выходы

Ардуино Нано будет контролировать и управлять силовой частьюРегулятор оборотов на Ардуино

  • А0 — регулировка оборотов двигателя
  • А1 — настройка минимальных оборотов двигателя
  • А2 — настройка максимальных оборотов двигателя
  • А3 — выход управления симистором
  • А4 — дополнительный аналоговый вход (не задействован)
  • А5 — выход управления реле
  • А6 — дополнительный аналоговый вход (не задействован)
  • А7 — разгон или плавный старт
  • D2 — сигнал перехода через ноль
  • D4 — дополнительный выход
  • D6, D7 — тахогенератор
  • D8 — датчик холла

Регулятор оборотов на Ардуино

Блок настроек, и управления оборотами

Силовая часть будет управлять двигателем. Разъем Р1 — для подключении к сети 220В. Р3 — для установки перемычки в зависимости от блока питания.

При установке блока питания с выходным напряжением 5 вольт, на разъеме Р3 нужно установить перемычку на контакты 2 и 3. При выходном напряжении блока питания 7-12 вольт перемычку устанавливаем на контакты 1 и 2.

Регулятор оборотов на Ардуино

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

На выводы 220V0 И 220V1, подается сетевое напряжение 220 Вольт.

Схема будет питаться импульсным блоком питания с выходным напряжением 5 вольт. Импульсный блок питания, возьмём уже готовый. Так же схему можно питать от 7 до 12 вольт. На плате есть перемычка переключения напряжения 5/12v. Так же можно питать схему и зарядным от телефона, только проверьте выходное напряжение, там не должно быть выше 5 вольт.

При установки перемычки на 5 вольт напряжение поступает напрямую на шину +5 вольт. Реле надо будет установить на 5 вольт.

При установки перемычки на 12 вольт напряжение поступает на вход Ардуино Vin. В этом случае можно питать схему напряжением 7-12 вольт. но и реле должно быть на такое напряжение, какое выходит с блока питания.

Датчик скорости в двух исполнения. На тахогенераторе или на датчике холла.

Регулятор оборотов на Ардуино

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

Регулятор оборотов на Ардуино

А так же при отсутствии или неисправности тахогенератора можно заменить на датчик холла.

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

Регулятор оборотов на Ардуино

Дополнительные входы и выходы

Регулятор оборотов на Ардуино

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

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

Регулятор оборотов на Ардуино

Верхний слой печатной платы

В конце статьи находится архив со всеми файлами для повторения данного проекта

Настройка регулятора

Настройка не сложная, поэтапная, так же можно протестировать все узлы регулятора на правильную работу.

Источник

Adblock
detector