Страница 11 из 20

Re: Умножитель STEP/DIR на STM32 F1/F4

Добавлено: 19 фев 2017, 17:02
MX_Master
Добавил простенький фильтр на входе. Фильтр подравнивает периоды между входящими шагами, чтобы на выходе получился более плавный ход. Принцип работы довольно простой, покажу на примере. Допустим, есть у нас пяток шагов на отрезке времени, когда идёт движение на постоянной подаче. Периоды между шагами известны, но они постоянно пляшут. Имеем дёрганный ритм работы мотора:

Код: Выделить всё

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         |
            +---------------+-----------------+
Здесь мы усреднили значения для периодов 1..2 и 2..3 по формуле [ (50+140)/2=95 ]
Далее усредняем 2..3 и 3..4 по такому же принципу [ (95+40)/2=67 ]

Код: Выделить всё

STEP:       *              (2)          (3)         (4)           *                      *
PERIOD:     |     95us      |    67us    |   67us    |    80us    |        130us         |
                            +------------+-----------+
и т.д. [ (67+80)/2=74 ]

Код: Выделить всё

STEP:       *               *           (3)          (4)         (5)                     *
PERIOD:     |     95us      |    67us    |    74us    |   74us    |        130us         |
                                         +------------+-----------+
и т.п. [ (74+130)/2=102 ]

Код: Выделить всё

STEP:       *               *            *           (4)              (5)               (6)
PERIOD:     |     95us      |    67us    |    74us    |     102us      |      102us      |
                                                      +----------------+-----------------+
В итоге мы получили более ровный ритм при постоянной подаче.
Периоды разнятся в пределах 30%, а не 150% как в оригинале.
Плюс не сильно загружаем проц лишними подсчетами.

Если у кого есть советы или идеи по входным/выходным фильтрам, пишите.
UAVpilot писал(а):Это какие 5 топоров?..
Самая наваристая каша как раз из топора (:

Re: Умножитель STEP/DIR на STM32 F1/F4

Добавлено: 19 фев 2017, 19:48
verser
MX_Master писал(а): Если у кого есть советы или идеи по входным/выходным фильтрам, пишите.
Совет по входу :) . Перед выравниванием длительности я бы сначала попытался восстанавливать пропущенные шаги и стирать наводки. Опереться можно на тот факт, что длительности соседних шагов в теории должны быть почти (зависимо от ускорения) одинаковы, это позволяет делать предсказание длительности будущего шага, соотв. делать вывод был ли пропуск(шаг вовремя не появился) или наводка(шаг преждевременно появился) или всё хорошо(шаг вовремя появился и "засчитан").

Re: Умножитель STEP/DIR на STM32 F1/F4

Добавлено: 19 фев 2017, 20:56
MX_Master
От небольших наводок сейчас выставлена подтяжка входных пинов к земле через 40К внутренний резистор.

А ваще потеря и перебор шагов происходят, когда наводки становятся реально большими. Т.е. когда сделаны явные косяки в подключении, в питании, в расположении устройств, в заземлении и сетевых фильтрах. Или, проще говоря, когда автор подключения сделал что-то не так. Я, считаю, бесполезным занятием лечение симптомов ошибок подключения. Уж лучше устранять причины потерь, чем создавать устройства, которые предугадывают, где какие шаги потерялись :hehehe:

Вот скока смотрел, еще ни разу не видел шаговых драйверов, которые предугадывают недобор или перебор входящих импульсов. Это потому что их задача не гадать, а чётко и в срок выполнять приказы.

Re: Умножитель STEP/DIR на STM32 F1/F4

Добавлено: 19 фев 2017, 21:18
verser
MX_Master писал(а):Или, проще говоря, когда автор подключения сделал что-то не так.
..скажем, просто стал пользоваться Mach3 ? ;)
7W.png (2861 просмотр) <a class='original' href='./download/file.php?id=103797&mode=view' target=_blank>Загрузить оригинал (113.04 КБ)</a>

Re: Умножитель STEP/DIR на STM32 F1/F4

Добавлено: 19 фев 2017, 21:49
MX_Master
А где тут на картине потеря или перебор? Скважность и периоды отлично скачут и на ПК с LinuxCNC, которым я пользуюсь, и на бюджетных контроллерах. Поэтому скважность с периодами желательно выравнивать. Но вот, чтобы реально что-то потерять, нужно заведомо отключить заземление от всех моторов, заюзать USB кабель безо всяких экранов или хотя бы неправильно подобрать и настроить хард/софт под Mach3/LCNC.

Завтра разберусь с новым (для меня) осцилом и чуть позже дам похожие осциллограммы

Re: Умножитель STEP/DIR на STM32 F1/F4

Добавлено: 19 фев 2017, 22:14
michael-yurov
MX_Master писал(а):А где тут на картине потеря или перебор?
Да, тут, действительно, сколько импульсов на входе - столько и на выходе.
А пробелы - это временные паузы в генерации без потери импульсов.

Re: Умножитель STEP/DIR на STM32

Добавлено: 21 фев 2017, 18:34
MX_Master
Прибыл логический анализатор. Смотрю, что получается.

Методом научного тыка выяснил, что на текущем коде, больше 200 КГц на выходе не выдавить.
Т.е. задача минимум выполнена. Ну а если больше, надо будет копать глубже в аппаратные таймеры и DMA..
постоянная подача 17 КГц (2764 просмотра) <a class='original' href='./download/file.php?id=104032&mode=view' target=_blank>Загрузить оригинал (25.94 КБ)</a>
постоянная подача 17 КГц
постоянная подача 17 КГц (2764 просмотра) <a class='original' href='./download/file.php?id=104033&mode=view' target=_blank>Загрузить оригинал (25.63 КБ)</a>
постоянная подача 17 КГц
ускорение 15 мм/с2 (2764 просмотра) <a class='original' href='./download/file.php?id=104034&mode=view' target=_blank>Загрузить оригинал (18.72 КБ)</a>
ускорение 15 мм/с2
ускорение 15 мм/с2 (2764 просмотра) <a class='original' href='./download/file.php?id=104035&mode=view' target=_blank>Загрузить оригинал (19.77 КБ)</a>
ускорение 15 мм/с2
ускорение 15 мм/с2 (2764 просмотра) <a class='original' href='./download/file.php?id=104036&mode=view' target=_blank>Загрузить оригинал (18.04 КБ)</a>
ускорение 15 мм/с2

Re: Умножитель STEP/DIR на STM32

Добавлено: 21 фев 2017, 21:27
michael-yurov
А что за анализатор? И что за программа?

Re: Умножитель STEP/DIR на STM32

Добавлено: 21 фев 2017, 21:37
selenur
michael-yurov писал(а):А что за анализатор? И что за программа?
Китайский клон, вот этого: https://www.saleae.com/
https://www.youtube.com/watch?v=qm2aLMX6lu8
Очень удобная штука :-) можно выбрать протокол SPI, CAN, I2C, USART, и сразу видна расшифровка побайтно
В более дорогих комплектациях есть аналоговые входы.

Re: Умножитель STEP/DIR на STM32

Добавлено: 21 фев 2017, 21:39
selenur
вот пример снифинга CAN:
c449c167a170465ba6e00d5c8fd6a7bb.PNG (2743 просмотра) <a class='original' href='./download/file.php?id=104059&mode=view' target=_blank>Загрузить оригинал (63.2 КБ)</a>

Re: Умножитель STEP/DIR на STM32

Добавлено: 25 фев 2017, 22:14
MX_Master
Застрял на глубине аппаратных таймеров. Никак не могу сформулировать новый способ генерации выходного сигнала. Может кто даст пинка в правильном направлении..

Хочу использовать аппаратный ШИМ в таймерах для генерации пачек выходных шагов. Логика, думается, должна быть такая:
  1. Допустим, множитель = 10
  2. На вход пришёл 1 шаг, и нам стал известен период между ним и предыдущим шагом.
    Например, получилось 500 мкс.
  3. Согласно этому периоду мы настраиваем в таймере предделитель,
    период и скважность, чтобы выходной ШИМ был с периодом 500/10 = 50мкс.
  4. Даём старт генерации ШИМ на этом таймере.
  5. И спустя 20 итераций этого таймера нам нужно его остановить!
Вот как раз тут и остановился. Не могу определится каким способом останавливать генерацию ШИМ спустя ровно 20 итераций. Может, одновременно с текущим таймером запускать еще один, который отсчитает от 20 до 0 и создаст прерывание по переполнению, в котором можно отрубить оба таймера?

Re: Умножитель STEP/DIR на STM32

Добавлено: 25 фев 2017, 23:21
Serg
Там можно загрузить в соотв. регистр количество импульсов и считать до нуля - как досчитает сам остановится.
Подробностей не скажу, ибо с телефона.

Re: Умножитель STEP/DIR на STM32

Добавлено: 26 фев 2017, 13:57
Duhas
я на хмеге халявил и считал сгенеренные импульсы другим таймером )

Re: Умножитель частоты шагов на STM32

Добавлено: 26 фев 2017, 17:06
MX_Master
По совету UAVpilot выкурил доки по таймерам и нашёл там встроенный счетчик повторений у продвинутых таймеров. Благодаря этому счетчику, прерывание по переполнению основного счетчика происходит не сразу, а только через указанное число повторений. Получается, силами 1-го продвинутого таймера, можно аппаратно вывести нужное кол-во шагов с заданной частотой в режиме ШИМ. Например, нужно подать на выход 10 шагов за 5 мс со скважностью 50% чисто аппаратно..
2017-02-26_192850.png (2650 просмотров) <a class='original' href='./download/file.php?id=104490&mode=view' target=_blank>Загрузить оригинал (21.58 КБ)</a>
Правда, есть тут один недостаток - недостаток продвинутых таймеров :think:

Re: Умножитель частоты шагов на STM32

Добавлено: 26 фев 2017, 22:55
cnc3426
Правильно ли я понимаю: код работает на плате с STM32F4, которая подключается между LPT опторазвязкой и драйверами шаговых двигателей? Если так, то что можно купить из работающего и бюджетного?
ПС: планирую использовать "умножитель" в первую очередь как выравниватель сигналов с компа. Осциллограф уже едет, осталось собрать станок :)

Re: Умножитель частоты шагов на STM32

Добавлено: 26 фев 2017, 23:00
N1X
selenur писал(а):SPI, CAN, I2C, USART
И даже USB умеет :) Давеча сам проверял...

Re: Умножитель частоты шагов на STM32

Добавлено: 27 фев 2017, 03:08
MX_Master
cnc3426 писал(а):Правильно ли я понимаю: код работает на плате с STM32F4, которая подключается между LPT опторазвязкой и драйверами шаговых двигателей? Если так, то что можно купить из работающего и бюджетного?
Да, между платой развязки и драйверами.

Текущий код для STM32F407 проверен только для одной оси и только с контроллером CNC USB Controller, полного тестирования еще не было. Поэтому я не рекомендую что-либо покупать заранее. Возможно, финальный вариант будет работать даже на STM32F103. А может и не будет.

В худшем случае, будет работать на макетке с STM32F407VET6 за 12$ + опторазвязка за 4$. В лучшем случае - на мини макетке с STM32F103C8T6 за 2$ + пара конвертеров уровней 5V-3.3V за 1.5$.

Re: Умножитель частоты шагов на STM32

Добавлено: 27 фев 2017, 08:39
tooshka
А может не стоит запихивать в один МК несколько осей? Вроде не сильно дорогие эти СТМ-ки.

Re: Умножитель частоты шагов на STM32

Добавлено: 27 фев 2017, 14:05
MX_Master
tooshka писал(а):А может не стоит запихивать в один МК несколько осей? Вроде не сильно дорогие эти СТМ-ки.
Впихнуть невпихуемое - это наше всё :hehehe:

Работаю еще над двумя вариантами помимо текущего. В первом почти всё будет на таймерах и DMA, другой вариант основан на атомарном чтении и записи в порт..

Re: Умножитель частоты шагов на STM32

Добавлено: 07 мар 2017, 13:33
crashzoom
Затихла как то тема. Как продвигаются дела с разными вариантами умножителя?