Jump to content
Sign in to follow this  
  • entries
    3
  • comments
    4
  • views
    333

Дискретное ШИМ регулирование нагрузки от аналогового датчика (Arduino)

Mike_Solo

692 views

Позвонил мне как-то старый друг и попросил совета - чем ему запитать старую детскую железную дорогу PIKO.
Посоветовать ему просто купить древний блок питания FZ-1 показалось мне скучным, и я решил набросать что-то функционально похожее с помощью модуля Arduino и подручных деталей.

Задача свелась к  реверсивному ШИМ регулированию маленького электродвигателя от переменного резистора - для этой цели он представляется мне удобнее, чем энкодер.
По резистору легко визуально и тактильно определить центральное положение “выключено”, и его положение очень просто считывать через АЦП.
Я быстро набросал скетч со стандартным переводом аналогового сигнала в ШИМ для моста, собрал макет и начал испытания. Мне сразу не понравилось, как регулируется нагрузка - особенно в самом начале из-за моего аналогового датчика положения. Тогда я подумал - а сделаю я дискретное регулирование, даром что датчик аналоговый. Мне наверняка хватит десяти ступеней регулирования “вперёд” и столько же “назад”, а для чёткого перехода между ступенями я введу небольшой гистерезис. Написать лаконичный скетч получилось только после того, как я “разменял” логику на данные, забив нужные мне границы переходов между состояниями в массивы. Полезные функции вроде выставления резистора в центральное положение для начала работы и защита от короткого замыкания в нагрузке вписались в скетч также органично. Переходы между ступенями регулирования получились отличные, в нужный диапазон легко попасть движком переменного резистора.

Схема очевидная - мост для двигателя, индикация и управляющий переменный резистор с линейной характеристикой. ШИМ подаётся только на нижние ключи моста Т5, Т6. Верхние ключи Т3, Т4 открываются в зависимости от нужного направления вращения. Светодиоды LED1, LED2 можно использовать для индикации направления вращения. Светодиод индикатора - комбинированный (красный + зелёный), он показывает режим работы схемы:

зелёный моргает - инициализация, ожидание среднего положения регулятора.

зелёный горит постоянно - нормальная работа

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

При указанной величине R3 0.33 Ом порог срабатывания защиты около 0.6 А. Его можно уменьшить - транзисторы моста выдержат нагрузку до 2А, но тогда им понадобится теплоотвод.

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

Arduino_PWM.GIF

Рабочий скетч: PIKO_discrete.ino (можно смотреть обычным текстовым редактором)

Видео работающего макета: 

https://disk.yandex.ru/client/disk/Видео?idApp=client&display=normal&groupBy=none&order=1&sort=name&view=list&typeClustering=geo&action=null&idAlbum=undefined&dialog=slider&idDialog=%2Fdisk%2FВидео%2F00138.mp4



4 Comments


Recommended Comments

Не помешает зашунтировать выходные транзисторы, обратно включёнными диодами

Share this comment


Link to comment

Да, такие диоды нужны. Прелесть указанных КТ972/973 в том, что они в них уже есть - внутри.

Share this comment


Link to comment
Только что, Mike_Solo сказал:

Прелесть указанных КТ972/973 в том, что они в них уже есть - внутри

DataSheet о этом умалчивает

Share this comment


Link to comment

Join the conversation

You are posting as a guest. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Add a comment...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...