Самодельный локомотивный декодер.

Вопросы и ответы связанные с цифровым управлением, аналоговой автоматикой и их элементами
Сообщение
Автор
Аватара пользователя
tnt23
Сообщения: 52
Зарегистрирован: Вс апр 05, 2020 7:24 am
Имя: Tim
Откуда: СПб
Благодарил (а): 12 раз
Поблагодарили: 14 раз

Re: Самодельный локомотивный декодер.

#381 Непрочитанное сообщение tnt23 »

Привет от новичка! Нагуглил эту тему и побежал регистрироваться :)

Тоже делаю свой декодер, и вот дошло дело до Back EMF. Есть какие-нибудь практические советы, как это лучше реализовать и аппаратно, и алгоритмически? Интернеты почитал, осилил даже недетский топик по BEMF на Modelldepo :) Реализовывать классический PID-регулятор пока боюсь, может, можно меньшей кровью обойтись.

Аватара пользователя
Engineer_Keen
Сообщения: 313
Зарегистрирован: Ср фев 24, 2010 11:15 am
Имя: Василий
Откуда: Москва
Поблагодарили: 5 раз

Re: Самодельный локомотивный декодер.

#382 Непрочитанное сообщение Engineer_Keen »

Аппаратно. От входа ацп 1) 2 резистора по 10к к выходам н-моста (клеммы двигателя) 2) резистор 2к на землю, и конденсатор 0.1мкф на землю 3) защитный диод шоттки на +питания мк. Опорное напряжение от внутреннего источника (1.1в у меги88).

Программно. ШИМ прерывается на некоторые промежутки времени, далее, нужно смотреть осциллографом, когда на входе ацп заканчивается выброс от коммутации моста и начинается чистая обратная эдс, после этого делается один или несколько семплов, из которых берется среднее. Составляется таблица эдс (для простоты - линейная), из которой берется опорное значения для сравнения и от разницы таблицы и считанного делаем регулировку. Я сделал сначала только P, вполне нормально, потом добавил I, сильной разницы не было, но при некоторых настройках без этого звена все затухало. Потом добавил D, но результат не понравился, а может я не правильно чтото посчитал, на ассемблере не очень удобно было. Так что я остановился на PI регуляторе, хотя I там не совсем такое как в формулах. Точные формулы не скажу, это было пол года назад, и все на рабочем компе. Как результат - старый пиковский двигатель стабильно вращается с частотой в единицы оборотов в секунду, не зависимо от нагрузки, но для этого нужно долго опытным путем подбирать частоту шим, размер окна для снятия эдс, частоту ацп и параметры регулятора.

Аватара пользователя
tnt23
Сообщения: 52
Зарегистрирован: Вс апр 05, 2020 7:24 am
Имя: Tim
Откуда: СПб
Благодарил (а): 12 раз
Поблагодарили: 14 раз

Re: Самодельный локомотивный декодер.

#383 Непрочитанное сообщение tnt23 »

Василий, спасибо.

Декодер у меня на stm32f030, входная часть почти такая же - взял с декодера MERG, только без защитного диода. От мотора резисторы по 10К, на землю сейчас стоит 56К, подобранный опытным путем.

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

Чтобы не засорять эту тему, можно сделать отдельную.

Аватара пользователя
tnt23
Сообщения: 52
Зарегистрирован: Вс апр 05, 2020 7:24 am
Имя: Tim
Откуда: СПб
Благодарил (а): 12 раз
Поблагодарили: 14 раз

Re: Самодельный локомотивный декодер.

#384 Непрочитанное сообщение tnt23 »

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

В качестве моста использую чип A4953 от Allegro. Я его ставил в самодельный шилд DCC++, работает отлично, решил поставить в декодер. Как дело дошло до BEMF, выяснилась неприятная особенность моста - время перехода в Z состояние у него около 1мс, поэтому процедура замера не может производиться слишком часто. Сейчас замер выполняется каждые 20мс.

bemf speed 10 with commutation.png
bemf speed 10 with commutation.png (7.23 КБ) 1963 просмотра

После остановки PWM приходится ждать 1мс и потом еще немного для надежности. Желтый прямоугольник - 16 выборок АЦП, каждая прогоняется через простой цифровой фильтр. После фильтра данные суммируются, и сумма используется как входная величина для регулятора.

Аватара пользователя
tnt23
Сообщения: 52
Зарегистрирован: Вс апр 05, 2020 7:24 am
Имя: Tim
Откуда: СПб
Благодарил (а): 12 раз
Поблагодарили: 14 раз

Re: Самодельный локомотивный декодер.

#385 Непрочитанное сообщение tnt23 »

Engineer_Keen писал(а):
Вс апр 05, 2020 1:21 pm
Аппаратно. От входа ацп 1) 2 резистора по 10к к выходам н-моста (клеммы двигателя) 2) резистор 2к на землю, и конденсатор 0.1мкф на землю 3) защитный диод шоттки на +питания мк. Опорное напряжение от внутреннего источника (1.1в у меги88).
Интересно, я прикинул - для 14в входного напряжения на моторе после делителя 10K/2K на входе АЦП будет около 2.3в, с запасом. А что будет на самых малых оборотах? или тут помогает интегрирование на внешнем конденсаторе?

В моем случае с делителем 10K/56K вход сильно перегружается при полном входном сигнале, но АЦП на тихом ходу мотора практически ничего не видит - только если поставить 5К вместо 10К. Вряд ли чувствительность АЦП stm32 сильно хуже меги. Ну или такой мотор подвернулся, BR80 от Mechano.


Аватара пользователя
старина_U
Сообщения: 9072
Зарегистрирован: Чт апр 24, 2008 12:04 am
Откуда: оттуда... з Масквы...
Благодарил (а): 11 раз
Поблагодарили: 99 раз

Re: Самодельный локомотивный декодер.

#387 Непрочитанное сообщение старина_U »

tnt23 писал(а):
Пт апр 10, 2020 10:03 am
Интересно, я прикинул - для 14в входного напряжения на моторе после делителя 10K/2K на входе АЦП будет около 2.3в, с запасом. А что будет на самых малых оборотах? или тут помогает интегрирование на внешнем конденсаторе?

В моем случае с делителем 10K/56K вход сильно перегружается при полном входном сигнале, но АЦП на тихом ходу мотора практически ничего не видит ...
Во...
Вот поэтому я в своё время и предложил перешить всё с простого ШИМа и коллекторного движка на бесщёточный с постоянными магнитами (BLDC).
Всё-таки контроль скорости по пульсациям противо-ЭДС требует некого постоянного уровня напряжения на зажимах мотора.
А на малых скоростях... :? ...не фунциклит.
Или применять датчики Холла/оптопары с кодовым диском...
И вжо этот бэк_ЭМФ.
Изображение

Аватара пользователя
tnt23
Сообщения: 52
Зарегистрирован: Вс апр 05, 2020 7:24 am
Имя: Tim
Откуда: СПб
Благодарил (а): 12 раз
Поблагодарили: 14 раз

Re: Самодельный локомотивный декодер.

#388 Непрочитанное сообщение tnt23 »

Дельная статья, спасибо. Созерцание либы BackEmfMotor принесло осознание, что замер BEMF и коррекция необязательно должны происходить одновременно.

Аватара пользователя
tnt23
Сообщения: 52
Зарегистрирован: Вс апр 05, 2020 7:24 am
Имя: Tim
Откуда: СПб
Благодарил (а): 12 раз
Поблагодарили: 14 раз

Re: Самодельный локомотивный декодер.

#389 Непрочитанное сообщение tnt23 »

старина_U писал(а):
Пт апр 10, 2020 2:14 pm
Вот поэтому я в своё время и предложил перешить всё с простого ШИМа и коллекторного движка на бесщёточный с постоянными магнитами (BLDC).
Всё-таки контроль скорости по пульсациям противо-ЭДС требует некого постоянного уровня напряжения на зажимах мотора.
Это как-то вовсе уж радикально. А что делать со старыми коллекторными моторчиками, если переделать не хватает пороху?
Я бы еще понял вариант при возможности добавить шестерней в редуктор, но и это для сильных духом.

А стабилизация скорости вращения коллекторных движков по обратной ЭДС все же возможна, чему примером коммерческие декодеры, да и самодельные декодеры почти двадцатилетней давности от MERG.

Аватара пользователя
Poezdnik
Сообщения: 231
Зарегистрирован: Сб фев 09, 2019 2:29 am
Благодарил (а): 165 раз
Поблагодарили: 175 раз

Re: Самодельный локомотивный декодер.

#390 Непрочитанное сообщение Poezdnik »

Приветствую!

Интересная тема рассматривается. Сам мечтаю о стабилизации оборотов электромоторчиков в модельках.
Back EMF - весьма тонкий метод. А есть ещё - на основе формулы : Uдв = E + Iя * Rя.
Тогда, скорость якоря n = (U - Iя * Rя)/k . где k - конструкционный коэффициент (подбираем его).

Ответить

Вернуться в «Цифровое управление, Аналоговая автоматика и их элементы»