Приветствую изучающего !
Речь о ПИД-регуляторе на Arduino, а именно о универсальном регуляторе оборотов коллекторного двигателя (мотора от стиралки). Имеется аналогичное решение у Александра Шенрока. Мною решено было самому повторить проект, применяя библиотеки Алекса Гайвера.
Благодаря ПИД-регулированию на устройстве есть поддержка выставленных оборотов независимо от нагрузки. Управление оборотами: ручное -- поворот ручки потенциометра и программное -- согласно заданному в коде алгоритму. Код программы открытый -- можно изменить по своему усмотрению. Есть видеоролик по данной теме -- краткое руководство по эксплуатации.
Ссылка на исходники (код, список компонентов, схемы): https://github.com/IEA4/PID. Ссылка на ролик: https://dzen.ru/video/watch/63d60d7c3391305389abae2e
Питание от сети ~230В, 50Гц.
Необходимые компоненты:
Минимум:
1) Двигатель от стиральной машины ............................ 1шт
2) Arduino Nano ................................................................... 1шт
3) Диммер ........................................................................... 1шт
4) Датчик Холла ................................................................. 1шт
5) Потенциометр, 10кОм ...................................................1 шт
6) Резистор, 10кОм 0.25Вт.................................................1 шт
7) Резистор, 100 Ом 0.25Вт................................................1 шт
8) Конденсатор металлоплёночный, 100нФ, 400В .......1шт
9) Конденсатор керамический, 10нФ, 50В......................1шт
10) Соединительные провода ......................................... n-метров
По желанию:
11) Светодиод красный, 3мм .......................................... 1 шт
12) Светодиод зелёный, 3мм ...........................................1 шт
13) Светодиод синий, 3мм.................................................1 шт
14) Резистор, 220 Ом, 0.25Вт............................................ 3 шт
15) Тумблер 2-контактный ............................................... 1 шт
16) Тактовая кнопка ...........................................................1 шт
17) LCD1602 c I2C переходником .....................................1шт
Схема соединений:
Диммер можно изготовить самому, а можно приобрести готовый. Параллельно управляющим выводам симистора необходим снаббер, без него отклик двигателя на управляющий сигнал хаотичный. Также для гашения помех датчика Холла с его сигнального вывода обязательно нужен конденсатор на землю, ставить ближе к Arduino. Во избежание поломок ЖК-экран размещать на расстоянии не менее полуметра от двигателя.
Первым делом необходимо узнать количество полюсов на магнитном кольце якоря. Для этого разместить датчик Холла вблизи конца вала с магнитным кольцом. Затем загрузить скетч Polus на ардуино и после завершения загрузки открыть монитор порта. После сделать один полный оборот вала рукой. На экране последняя цифра -- количество полюсов на кольцевом магните. Обычно это 8. То есть за один оборот вала датчик Холла среагирует 8 раз.
Далее в скетче PID_motor в строке в скобках Timer1.setPeriod() прописать результат деления 1 000 000 на ту цифру, которое было на экране. В итоге получаем число -- это время в микросекундах, на которое взведено прерывание по таймеру для отсчёта количества оборотов электродвигателя. Кроме этого можете также увеличить максимальное число оборотов, которое можно выставить потенциометром, прописав вместо 100 в строке pid.setpoint() желаемое значение. Загружаем скетч PID_motor.
Важное замечание: перед подключением питания обязательно проверить все соединения. Первым подключить сетевое напряжение и только потом питание на ардуино. Это техническая особенность схемы.
Подаём питание и наблюдаем как электродвигатель откликается на поворот ручки потенциометра. Проверяем поддержание оборотов при наличии нагрузки на валу.
При неконтролируемом поведении двигателя можете изменить коэффициенты ПИД-регулирования. Первый коэффициент лежит в диапазоне от 20 до 50, второй от 10 до 120, третий от 0 до 0,2. Об их назначении прекрасно написано на сайте у Алекса Гайвера. Нужно найти такую комбинацию ПИД-коэффициентов, чтоб электродвигатель стабильно откликался на поворот ручки потенциометра и держал выставленные обороты. Также есть возможность посмотреть на это в встроенном плоттере ардуино.
Применение Arduino как ПИД-регулятора оборотов хорошо тем, что регулирование зависящих от времени оборотов можно сделать программным, то есть не придётся крутить ручку регулятора рукой, чтобы постепенно увеличить или уменьшить обороты, выставляя их на необходимое значение. Это всё сделает программа, нужно просто сообщить машине какие обороты должны быть на валу и в течении какого времени. И этих программ к тому же можно сделать несколько, спокойно их изменять по своему усмотрению и загружать.
Речь о ПИД-регуляторе на Arduino, а именно о универсальном регуляторе оборотов коллекторного двигателя (мотора от стиралки). Имеется аналогичное решение у Александра Шенрока. Мною решено было самому повторить проект, применяя библиотеки Алекса Гайвера.
Благодаря ПИД-регулированию на устройстве есть поддержка выставленных оборотов независимо от нагрузки. Управление оборотами: ручное -- поворот ручки потенциометра и программное -- согласно заданному в коде алгоритму. Код программы открытый -- можно изменить по своему усмотрению. Есть видеоролик по данной теме -- краткое руководство по эксплуатации.
Ссылка на исходники (код, список компонентов, схемы): https://github.com/IEA4/PID. Ссылка на ролик: https://dzen.ru/video/watch/63d60d7c3391305389abae2e
Питание от сети ~230В, 50Гц.
Необходимые компоненты:
Минимум:
1) Двигатель от стиральной машины ............................ 1шт
2) Arduino Nano ................................................................... 1шт
3) Диммер ........................................................................... 1шт
4) Датчик Холла ................................................................. 1шт
5) Потенциометр, 10кОм ...................................................1 шт
6) Резистор, 10кОм 0.25Вт.................................................1 шт
7) Резистор, 100 Ом 0.25Вт................................................1 шт
8) Конденсатор металлоплёночный, 100нФ, 400В .......1шт
9) Конденсатор керамический, 10нФ, 50В......................1шт
10) Соединительные провода ......................................... n-метров
По желанию:
11) Светодиод красный, 3мм .......................................... 1 шт
12) Светодиод зелёный, 3мм ...........................................1 шт
13) Светодиод синий, 3мм.................................................1 шт
14) Резистор, 220 Ом, 0.25Вт............................................ 3 шт
15) Тумблер 2-контактный ............................................... 1 шт
16) Тактовая кнопка ...........................................................1 шт
17) LCD1602 c I2C переходником .....................................1шт
Схема соединений:
Диммер можно изготовить самому, а можно приобрести готовый. Параллельно управляющим выводам симистора необходим снаббер, без него отклик двигателя на управляющий сигнал хаотичный. Также для гашения помех датчика Холла с его сигнального вывода обязательно нужен конденсатор на землю, ставить ближе к Arduino. Во избежание поломок ЖК-экран размещать на расстоянии не менее полуметра от двигателя.
Первым делом необходимо узнать количество полюсов на магнитном кольце якоря. Для этого разместить датчик Холла вблизи конца вала с магнитным кольцом. Затем загрузить скетч Polus на ардуино и после завершения загрузки открыть монитор порта. После сделать один полный оборот вала рукой. На экране последняя цифра -- количество полюсов на кольцевом магните. Обычно это 8. То есть за один оборот вала датчик Холла среагирует 8 раз.
Далее в скетче PID_motor в строке в скобках Timer1.setPeriod() прописать результат деления 1 000 000 на ту цифру, которое было на экране. В итоге получаем число -- это время в микросекундах, на которое взведено прерывание по таймеру для отсчёта количества оборотов электродвигателя. Кроме этого можете также увеличить максимальное число оборотов, которое можно выставить потенциометром, прописав вместо 100 в строке pid.setpoint() желаемое значение. Загружаем скетч PID_motor.
Важное замечание: перед подключением питания обязательно проверить все соединения. Первым подключить сетевое напряжение и только потом питание на ардуино. Это техническая особенность схемы.
Подаём питание и наблюдаем как электродвигатель откликается на поворот ручки потенциометра. Проверяем поддержание оборотов при наличии нагрузки на валу.
При неконтролируемом поведении двигателя можете изменить коэффициенты ПИД-регулирования. Первый коэффициент лежит в диапазоне от 20 до 50, второй от 10 до 120, третий от 0 до 0,2. Об их назначении прекрасно написано на сайте у Алекса Гайвера. Нужно найти такую комбинацию ПИД-коэффициентов, чтоб электродвигатель стабильно откликался на поворот ручки потенциометра и держал выставленные обороты. Также есть возможность посмотреть на это в встроенном плоттере ардуино.
Применение Arduino как ПИД-регулятора оборотов хорошо тем, что регулирование зависящих от времени оборотов можно сделать программным, то есть не придётся крутить ручку регулятора рукой, чтобы постепенно увеличить или уменьшить обороты, выставляя их на необходимое значение. Это всё сделает программа, нужно просто сообщить машине какие обороты должны быть на валу и в течении какого времени. И этих программ к тому же можно сделать несколько, спокойно их изменять по своему усмотрению и загружать.