Re: Умножитель STEP/DIR на STM32 F1/F4
Добавлено: 19 фев 2017, 17:02
Добавил простенький фильтр на входе. Фильтр подравнивает периоды между входящими шагами, чтобы на выходе получился более плавный ход. Принцип работы довольно простой, покажу на примере. Допустим, есть у нас пяток шагов на отрезке времени, когда идёт движение на постоянной подаче. Периоды между шагами известны, но они постоянно пляшут. Имеем дёрганный ритм работы мотора:
В идеале наш отрезок должен выглядеть вот так
Чтобы так выравнять периоды, нужен очень толковый фильтр, который будет различать постоянную подачу, ускорения и замедления. И, стессна, синхронизировать все это меж осей на входе/выходе. Таким фильтром займёмся чуть позже. А пока надо только слегка подравнять входные периоды для дальнейших подсчетов. Подравнивать будем, усредняя значения попарно
Здесь мы усреднили значения для периодов 1..2 и 2..3 по формуле [ (50+140)/2=95 ]
Далее усредняем 2..3 и 3..4 по такому же принципу [ (95+40)/2=67 ]
и т.д. [ (67+80)/2=74 ]
и т.п. [ (74+130)/2=102 ]
В итоге мы получили более ровный ритм при постоянной подаче.
Периоды разнятся в пределах 30%, а не 150% как в оригинале.
Плюс не сильно загружаем проц лишними подсчетами.
Если у кого есть советы или идеи по входным/выходным фильтрам, пишите.
Код: Выделить всё
STEP: * * * * * *
PERIOD: | 50us | 140us | 40us | 80us | 130us |
------------------------------------------------------------------------------
us = мкс
Код: Выделить всё
STEP: * * * * * *
PERIOD: | 88us | 88us | 88us | 88us | 88us |
+--------------+--------------+---------------+--------------+---------------+
Код: Выделить всё
STEP: (1) (2) (3) * * *
PERIOD: | 95us | 95us | 40us | 80us | 130us |
+---------------+-----------------+
Далее усредняем 2..3 и 3..4 по такому же принципу [ (95+40)/2=67 ]
Код: Выделить всё
STEP: * (2) (3) (4) * *
PERIOD: | 95us | 67us | 67us | 80us | 130us |
+------------+-----------+
Код: Выделить всё
STEP: * * (3) (4) (5) *
PERIOD: | 95us | 67us | 74us | 74us | 130us |
+------------+-----------+
Код: Выделить всё
STEP: * * * (4) (5) (6)
PERIOD: | 95us | 67us | 74us | 102us | 102us |
+----------------+-----------------+
Периоды разнятся в пределах 30%, а не 150% как в оригинале.
Плюс не сильно загружаем проц лишними подсчетами.
Если у кого есть советы или идеи по входным/выходным фильтрам, пишите.
Самая наваристая каша как раз из топора (:UAVpilot писал(а):Это какие 5 топоров?..