Самодельный локомотивный декодер.
- tnt23
- Сообщения: 52
- Зарегистрирован: Вс апр 05, 2020 7:24 am
- Имя: Tim
- Откуда: СПб
- Благодарил (а): 12 раз
- Поблагодарили: 14 раз
Re: Самодельный локомотивный декодер.
Привет от новичка! Нагуглил эту тему и побежал регистрироваться
Тоже делаю свой декодер, и вот дошло дело до Back EMF. Есть какие-нибудь практические советы, как это лучше реализовать и аппаратно, и алгоритмически? Интернеты почитал, осилил даже недетский топик по BEMF на Modelldepo Реализовывать классический PID-регулятор пока боюсь, может, можно меньшей кровью обойтись.
Тоже делаю свой декодер, и вот дошло дело до Back EMF. Есть какие-нибудь практические советы, как это лучше реализовать и аппаратно, и алгоритмически? Интернеты почитал, осилил даже недетский топик по BEMF на Modelldepo Реализовывать классический PID-регулятор пока боюсь, может, можно меньшей кровью обойтись.
- Engineer_Keen
- Сообщения: 313
- Зарегистрирован: Ср фев 24, 2010 11:15 am
- Имя: Василий
- Откуда: Москва
- Поблагодарили: 5 раз
Re: Самодельный локомотивный декодер.
Аппаратно. От входа ацп 1) 2 резистора по 10к к выходам н-моста (клеммы двигателя) 2) резистор 2к на землю, и конденсатор 0.1мкф на землю 3) защитный диод шоттки на +питания мк. Опорное напряжение от внутреннего источника (1.1в у меги88).
Программно. ШИМ прерывается на некоторые промежутки времени, далее, нужно смотреть осциллографом, когда на входе ацп заканчивается выброс от коммутации моста и начинается чистая обратная эдс, после этого делается один или несколько семплов, из которых берется среднее. Составляется таблица эдс (для простоты - линейная), из которой берется опорное значения для сравнения и от разницы таблицы и считанного делаем регулировку. Я сделал сначала только P, вполне нормально, потом добавил I, сильной разницы не было, но при некоторых настройках без этого звена все затухало. Потом добавил D, но результат не понравился, а может я не правильно чтото посчитал, на ассемблере не очень удобно было. Так что я остановился на PI регуляторе, хотя I там не совсем такое как в формулах. Точные формулы не скажу, это было пол года назад, и все на рабочем компе. Как результат - старый пиковский двигатель стабильно вращается с частотой в единицы оборотов в секунду, не зависимо от нагрузки, но для этого нужно долго опытным путем подбирать частоту шим, размер окна для снятия эдс, частоту ацп и параметры регулятора.
Программно. ШИМ прерывается на некоторые промежутки времени, далее, нужно смотреть осциллографом, когда на входе ацп заканчивается выброс от коммутации моста и начинается чистая обратная эдс, после этого делается один или несколько семплов, из которых берется среднее. Составляется таблица эдс (для простоты - линейная), из которой берется опорное значения для сравнения и от разницы таблицы и считанного делаем регулировку. Я сделал сначала только P, вполне нормально, потом добавил I, сильной разницы не было, но при некоторых настройках без этого звена все затухало. Потом добавил D, но результат не понравился, а может я не правильно чтото посчитал, на ассемблере не очень удобно было. Так что я остановился на PI регуляторе, хотя I там не совсем такое как в формулах. Точные формулы не скажу, это было пол года назад, и все на рабочем компе. Как результат - старый пиковский двигатель стабильно вращается с частотой в единицы оборотов в секунду, не зависимо от нагрузки, но для этого нужно долго опытным путем подбирать частоту шим, размер окна для снятия эдс, частоту ацп и параметры регулятора.
- tnt23
- Сообщения: 52
- Зарегистрирован: Вс апр 05, 2020 7:24 am
- Имя: Tim
- Откуда: СПб
- Благодарил (а): 12 раз
- Поблагодарили: 14 раз
Re: Самодельный локомотивный декодер.
Василий, спасибо.
Декодер у меня на stm32f030, входная часть почти такая же - взял с декодера MERG, только без защитного диода. От мотора резисторы по 10К, на землю сейчас стоит 56К, подобранный опытным путем.
По программной части буду осмысливать. Сбор первичных данных и усреднение сделаны, но смущало, что измеренное напряжение на минимальных оборотах практически не отличалось от нуля. После вашего ответа пришло в голову откалибровать АЦП при старте (по даташиту это рекомендуют для уменьшения погрешности смещения, которая гуляет от экземпляра к экземпляру), и данные на первом шаге скорости уже стали хоть на что-то похожи.
Чтобы не засорять эту тему, можно сделать отдельную.
Декодер у меня на stm32f030, входная часть почти такая же - взял с декодера MERG, только без защитного диода. От мотора резисторы по 10К, на землю сейчас стоит 56К, подобранный опытным путем.
По программной части буду осмысливать. Сбор первичных данных и усреднение сделаны, но смущало, что измеренное напряжение на минимальных оборотах практически не отличалось от нуля. После вашего ответа пришло в голову откалибровать АЦП при старте (по даташиту это рекомендуют для уменьшения погрешности смещения, которая гуляет от экземпляра к экземпляру), и данные на первом шаге скорости уже стали хоть на что-то похожи.
Чтобы не засорять эту тему, можно сделать отдельную.
- tnt23
- Сообщения: 52
- Зарегистрирован: Вс апр 05, 2020 7:24 am
- Имя: Tim
- Откуда: СПб
- Благодарил (а): 12 раз
- Поблагодарили: 14 раз
Re: Самодельный локомотивный декодер.
Разбираюсь с пропорциональной частью для начала. Выставил в прошивке фиксированную установку, соответствующую 10 шагам скорости, и корректирую ее дробной частью ошибки. Пока что пытаюсь обойтись дробями степеней двойки, получается так себе.
В качестве моста использую чип A4953 от Allegro. Я его ставил в самодельный шилд DCC++, работает отлично, решил поставить в декодер. Как дело дошло до BEMF, выяснилась неприятная особенность моста - время перехода в Z состояние у него около 1мс, поэтому процедура замера не может производиться слишком часто. Сейчас замер выполняется каждые 20мс.
После остановки PWM приходится ждать 1мс и потом еще немного для надежности. Желтый прямоугольник - 16 выборок АЦП, каждая прогоняется через простой цифровой фильтр. После фильтра данные суммируются, и сумма используется как входная величина для регулятора.
В качестве моста использую чип A4953 от Allegro. Я его ставил в самодельный шилд DCC++, работает отлично, решил поставить в декодер. Как дело дошло до BEMF, выяснилась неприятная особенность моста - время перехода в Z состояние у него около 1мс, поэтому процедура замера не может производиться слишком часто. Сейчас замер выполняется каждые 20мс.
После остановки PWM приходится ждать 1мс и потом еще немного для надежности. Желтый прямоугольник - 16 выборок АЦП, каждая прогоняется через простой цифровой фильтр. После фильтра данные суммируются, и сумма используется как входная величина для регулятора.
- tnt23
- Сообщения: 52
- Зарегистрирован: Вс апр 05, 2020 7:24 am
- Имя: Tim
- Откуда: СПб
- Благодарил (а): 12 раз
- Поблагодарили: 14 раз
Re: Самодельный локомотивный декодер.
Интересно, я прикинул - для 14в входного напряжения на моторе после делителя 10K/2K на входе АЦП будет около 2.3в, с запасом. А что будет на самых малых оборотах? или тут помогает интегрирование на внешнем конденсаторе?Engineer_Keen писал(а): ↑Вс апр 05, 2020 1:21 pmАппаратно. От входа ацп 1) 2 резистора по 10к к выходам н-моста (клеммы двигателя) 2) резистор 2к на землю, и конденсатор 0.1мкф на землю 3) защитный диод шоттки на +питания мк. Опорное напряжение от внутреннего источника (1.1в у меги88).
В моем случае с делителем 10K/56K вход сильно перегружается при полном входном сигнале, но АЦП на тихом ходу мотора практически ничего не видит - только если поставить 5К вместо 10К. Вряд ли чувствительность АЦП stm32 сильно хуже меги. Ну или такой мотор подвернулся, BR80 от Mechano.
- старина_U
- Сообщения: 9072
- Зарегистрирован: Чт апр 24, 2008 12:04 am
- Откуда: оттуда... з Масквы...
- Благодарил (а): 11 раз
- Поблагодарили: 99 раз
Re: Самодельный локомотивный декодер.
Во...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: Самодельный локомотивный декодер.
Дельная статья, спасибо. Созерцание либы BackEmfMotor принесло осознание, что замер BEMF и коррекция необязательно должны происходить одновременно.BR95009 писал(а): ↑Пт апр 10, 2020 2:01 pmhttps://github.com/robidouille/robidoui ... EmfMotor.h
http://robot-develop.org/archives/2833
- tnt23
- Сообщения: 52
- Зарегистрирован: Вс апр 05, 2020 7:24 am
- Имя: Tim
- Откуда: СПб
- Благодарил (а): 12 раз
- Поблагодарили: 14 раз
Re: Самодельный локомотивный декодер.
Это как-то вовсе уж радикально. А что делать со старыми коллекторными моторчиками, если переделать не хватает пороху?
Я бы еще понял вариант при возможности добавить шестерней в редуктор, но и это для сильных духом.
А стабилизация скорости вращения коллекторных движков по обратной ЭДС все же возможна, чему примером коммерческие декодеры, да и самодельные декодеры почти двадцатилетней давности от MERG.
- Poezdnik
- Сообщения: 231
- Зарегистрирован: Сб фев 09, 2019 2:29 am
- Благодарил (а): 165 раз
- Поблагодарили: 175 раз
Re: Самодельный локомотивный декодер.
Приветствую!
Интересная тема рассматривается. Сам мечтаю о стабилизации оборотов электромоторчиков в модельках.
Back EMF - весьма тонкий метод. А есть ещё - на основе формулы : Uдв = E + Iя * Rя.
Тогда, скорость якоря n = (U - Iя * Rя)/k . где k - конструкционный коэффициент (подбираем его).
Интересная тема рассматривается. Сам мечтаю о стабилизации оборотов электромоторчиков в модельках.
Back EMF - весьма тонкий метод. А есть ещё - на основе формулы : Uдв = E + Iя * Rя.
Тогда, скорость якоря n = (U - Iя * Rя)/k . где k - конструкционный коэффициент (подбираем его).