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

Контроллеры, драйверы, датчики, управляющие устройства.
Аватара пользователя
MX_Master
Мастер
Сообщения: 7488
Зарегистрирован: 27 июн 2015, 19:45
Репутация: 3113
Настоящее имя: Михаил
Откуда: Алматы
Контактная информация:

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

Сообщение 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 топоров?..
Самая наваристая каша как раз из топора (:
Аватара пользователя
verser
Мастер
Сообщения: 1903
Зарегистрирован: 21 июл 2013, 22:28
Репутация: 1282
Настоящее имя: Сергей
Откуда: Тбилиси
Контактная информация:

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

Сообщение verser »

MX_Master писал(а): Если у кого есть советы или идеи по входным/выходным фильтрам, пишите.
Совет по входу :) . Перед выравниванием длительности я бы сначала попытался восстанавливать пропущенные шаги и стирать наводки. Опереться можно на тот факт, что длительности соседних шагов в теории должны быть почти (зависимо от ускорения) одинаковы, это позволяет делать предсказание длительности будущего шага, соотв. делать вывод был ли пропуск(шаг вовремя не появился) или наводка(шаг преждевременно появился) или всё хорошо(шаг вовремя появился и "засчитан").
Аватара пользователя
MX_Master
Мастер
Сообщения: 7488
Зарегистрирован: 27 июн 2015, 19:45
Репутация: 3113
Настоящее имя: Михаил
Откуда: Алматы
Контактная информация:

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

Сообщение MX_Master »

От небольших наводок сейчас выставлена подтяжка входных пинов к земле через 40К внутренний резистор.

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

Вот скока смотрел, еще ни разу не видел шаговых драйверов, которые предугадывают недобор или перебор входящих импульсов. Это потому что их задача не гадать, а чётко и в срок выполнять приказы.
Аватара пользователя
verser
Мастер
Сообщения: 1903
Зарегистрирован: 21 июл 2013, 22:28
Репутация: 1282
Настоящее имя: Сергей
Откуда: Тбилиси
Контактная информация:

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

Сообщение verser »

MX_Master писал(а):Или, проще говоря, когда автор подключения сделал что-то не так.
..скажем, просто стал пользоваться Mach3 ? ;)
7W.png (2847 просмотров) <a class='original' href='./download/file.php?id=103797&mode=view' target=_blank>Загрузить оригинал (113.04 КБ)</a>
Аватара пользователя
MX_Master
Мастер
Сообщения: 7488
Зарегистрирован: 27 июн 2015, 19:45
Репутация: 3113
Настоящее имя: Михаил
Откуда: Алматы
Контактная информация:

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

Сообщение MX_Master »

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

Завтра разберусь с новым (для меня) осцилом и чуть позже дам похожие осциллограммы
Аватара пользователя
michael-yurov
Почётный участник
Почётный участник
Сообщения: 11730
Зарегистрирован: 26 июл 2012, 00:10
Репутация: 4703
Настоящее имя: Михаил Львович
Откуда: Новоуральск
Контактная информация:

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

Сообщение michael-yurov »

MX_Master писал(а):А где тут на картине потеря или перебор?
Да, тут, действительно, сколько импульсов на входе - столько и на выходе.
А пробелы - это временные паузы в генерации без потери импульсов.
Аватара пользователя
MX_Master
Мастер
Сообщения: 7488
Зарегистрирован: 27 июн 2015, 19:45
Репутация: 3113
Настоящее имя: Михаил
Откуда: Алматы
Контактная информация:

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

Сообщение MX_Master »

Прибыл логический анализатор. Смотрю, что получается.

Методом научного тыка выяснил, что на текущем коде, больше 200 КГц на выходе не выдавить.
Т.е. задача минимум выполнена. Ну а если больше, надо будет копать глубже в аппаратные таймеры и DMA..
постоянная подача 17 КГц (2750 просмотров) <a class='original' href='./download/file.php?id=104032&mode=view' target=_blank>Загрузить оригинал (25.94 КБ)</a>
постоянная подача 17 КГц
постоянная подача 17 КГц (2750 просмотров) <a class='original' href='./download/file.php?id=104033&mode=view' target=_blank>Загрузить оригинал (25.63 КБ)</a>
постоянная подача 17 КГц
ускорение 15 мм/с2 (2750 просмотров) <a class='original' href='./download/file.php?id=104034&mode=view' target=_blank>Загрузить оригинал (18.72 КБ)</a>
ускорение 15 мм/с2
ускорение 15 мм/с2 (2750 просмотров) <a class='original' href='./download/file.php?id=104035&mode=view' target=_blank>Загрузить оригинал (19.77 КБ)</a>
ускорение 15 мм/с2
ускорение 15 мм/с2 (2750 просмотров) <a class='original' href='./download/file.php?id=104036&mode=view' target=_blank>Загрузить оригинал (18.04 КБ)</a>
ускорение 15 мм/с2
Аватара пользователя
michael-yurov
Почётный участник
Почётный участник
Сообщения: 11730
Зарегистрирован: 26 июл 2012, 00:10
Репутация: 4703
Настоящее имя: Михаил Львович
Откуда: Новоуральск
Контактная информация:

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

Сообщение michael-yurov »

А что за анализатор? И что за программа?
Аватара пользователя
selenur
Почётный участник
Почётный участник
Сообщения: 4605
Зарегистрирован: 21 авг 2013, 19:44
Репутация: 1622
Настоящее имя: Сергей
Откуда: Новый Уренгой
Контактная информация:

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

Сообщение selenur »

michael-yurov писал(а):А что за анализатор? И что за программа?
Китайский клон, вот этого: https://www.saleae.com/
https://www.youtube.com/watch?v=qm2aLMX6lu8
Очень удобная штука :-) можно выбрать протокол SPI, CAN, I2C, USART, и сразу видна расшифровка побайтно
В более дорогих комплектациях есть аналоговые входы.
Мой сайт: http://selenur.ru
Исходники моих программ: https://github.com/selenur
Instagram https://www.instagram.com/zheigurov/
Аватара пользователя
selenur
Почётный участник
Почётный участник
Сообщения: 4605
Зарегистрирован: 21 авг 2013, 19:44
Репутация: 1622
Настоящее имя: Сергей
Откуда: Новый Уренгой
Контактная информация:

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

Сообщение selenur »

вот пример снифинга CAN:
c449c167a170465ba6e00d5c8fd6a7bb.PNG (2729 просмотров) <a class='original' href='./download/file.php?id=104059&mode=view' target=_blank>Загрузить оригинал (63.2 КБ)</a>
Мой сайт: http://selenur.ru
Исходники моих программ: https://github.com/selenur
Instagram https://www.instagram.com/zheigurov/
Аватара пользователя
MX_Master
Мастер
Сообщения: 7488
Зарегистрирован: 27 июн 2015, 19:45
Репутация: 3113
Настоящее имя: Михаил
Откуда: Алматы
Контактная информация:

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

Сообщение MX_Master »

Застрял на глубине аппаратных таймеров. Никак не могу сформулировать новый способ генерации выходного сигнала. Может кто даст пинка в правильном направлении..

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

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

Сообщение Serg »

Там можно загрузить в соотв. регистр количество импульсов и считать до нуля - как досчитает сам остановится.
Подробностей не скажу, ибо с телефона.
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Duhas
Мастер
Сообщения: 1961
Зарегистрирован: 10 окт 2015, 23:25
Репутация: 285
Настоящее имя: Андрей
Откуда: Красноярск
Контактная информация:

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

Сообщение Duhas »

я на хмеге халявил и считал сгенеренные импульсы другим таймером )
Аватара пользователя
MX_Master
Мастер
Сообщения: 7488
Зарегистрирован: 27 июн 2015, 19:45
Репутация: 3113
Настоящее имя: Михаил
Откуда: Алматы
Контактная информация:

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

Сообщение MX_Master »

По совету UAVpilot выкурил доки по таймерам и нашёл там встроенный счетчик повторений у продвинутых таймеров. Благодаря этому счетчику, прерывание по переполнению основного счетчика происходит не сразу, а только через указанное число повторений. Получается, силами 1-го продвинутого таймера, можно аппаратно вывести нужное кол-во шагов с заданной частотой в режиме ШИМ. Например, нужно подать на выход 10 шагов за 5 мс со скважностью 50% чисто аппаратно..
2017-02-26_192850.png (2636 просмотров) <a class='original' href='./download/file.php?id=104490&mode=view' target=_blank>Загрузить оригинал (21.58 КБ)</a>
Правда, есть тут один недостаток - недостаток продвинутых таймеров :think:
Аватара пользователя
cnc3426
Мастер
Сообщения: 300
Зарегистрирован: 11 фев 2017, 23:59
Репутация: 39
Настоящее имя: Denis
Откуда: Тамбов
Контактная информация:

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

Сообщение cnc3426 »

Правильно ли я понимаю: код работает на плате с STM32F4, которая подключается между LPT опторазвязкой и драйверами шаговых двигателей? Если так, то что можно купить из работающего и бюджетного?
ПС: планирую использовать "умножитель" в первую очередь как выравниватель сигналов с компа. Осциллограф уже едет, осталось собрать станок :)
Аватара пользователя
N1X
Мастер
Сообщения: 3653
Зарегистрирован: 16 фев 2015, 21:19
Репутация: 1646
Настоящее имя: Владимир
Откуда: Беларусь, Гомель
Контактная информация:

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

Сообщение N1X »

selenur писал(а):SPI, CAN, I2C, USART
И даже USB умеет :) Давеча сам проверял...
Аватара пользователя
MX_Master
Мастер
Сообщения: 7488
Зарегистрирован: 27 июн 2015, 19:45
Репутация: 3113
Настоящее имя: Михаил
Откуда: Алматы
Контактная информация:

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

Сообщение MX_Master »

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

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

В худшем случае, будет работать на макетке с STM32F407VET6 за 12$ + опторазвязка за 4$. В лучшем случае - на мини макетке с STM32F103C8T6 за 2$ + пара конвертеров уровней 5V-3.3V за 1.5$.
Аватара пользователя
tooshka
Почётный участник
Почётный участник
Сообщения: 1803
Зарегистрирован: 24 окт 2012, 14:26
Репутация: 209
Настоящее имя: Андрей
Откуда: Нижний Новгород
Контактная информация:

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

Сообщение tooshka »

А может не стоит запихивать в один МК несколько осей? Вроде не сильно дорогие эти СТМ-ки.
Милая, ты услышь меня
под окном стою со своим я ЧПУ! (Протяжно; с надрывом; форте)
Внимание!!! Чрезмерное увлечение ЧПУ приводит к проблемам в семейных отношениях!
Аватара пользователя
MX_Master
Мастер
Сообщения: 7488
Зарегистрирован: 27 июн 2015, 19:45
Репутация: 3113
Настоящее имя: Михаил
Откуда: Алматы
Контактная информация:

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

Сообщение MX_Master »

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

Работаю еще над двумя вариантами помимо текущего. В первом почти всё будет на таймерах и DMA, другой вариант основан на атомарном чтении и записи в порт..
crashzoom
Новичок
Сообщения: 32
Зарегистрирован: 18 дек 2012, 19:12
Репутация: 0
Контактная информация:

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

Сообщение crashzoom »

Затихла как то тема. Как продвигаются дела с разными вариантами умножителя?
Ответить

Вернуться в «Электроника»