Перейти к содержанию
  • записей
    14
  • комментарий
    101
  • просмотров
    9 536

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


Mike_Solo

2 504 просмотра

Позвонил мне как-то старый друг и попросил совета - чем ему запитать старую детскую железную дорогу 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 Комментария


Рекомендуемые комментарии

Присоединяйтесь к обсуждению

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

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Добавить комментарий...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

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

Загрузка...
×
×
  • Создать...