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

Контроллеры, драйверы, датчики, управляющие устройства.

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

Сообщение Hanter » 19 май 2017, 13:25

Сергей Саныч писал(а):Именно так. Про нюансы в пределах шага речи не было.

Сергей Саныч, дык а смысл ? и потом насколько я понимаю вот эта вот "глобальная имитация" может преследовать единственную цель - плавные сопряжения кадров при переходе от одного к другому. что реализуется другими функциями - Лукахедом, адаптивными переходами и тд и тп. в то время как S-кривые - это совершенно конкретная вещь. зачем подменять понятия ?
про время и линукс - прекрасно понятно. ничего не имею против. у меня кстати базовая настройка участка плавного перехода S-кривой - 50мсек... по этому масштабы вполне соизмеримы.
Опыт - это когда на смену вопросам: "Что? Где? Когда? Как? Почему?" Приходит единственный вопрос: "Нахрена?"
==========================================
фрезерная и токарная обработка на станках с чпу.
Резка, гибка, сварка и порошковая окраса.
Аватара пользователя
Hanter
Мастер
 
Сообщения: 5418
Зарегистрирован: 27 янв 2012, 14:52
Откуда: Питер
Репутация: 4314
Настоящее имя: Алексей

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

Сообщение Сергей Саныч » 19 май 2017, 14:00

Hanter писал(а):а смысл ?
"Ну, во-первых, это красиво" (с) :)
А если серьезно, то хотя бы снижение вибраций. Мгновенное возрастание ускорения приводит к ударным нагрузкам в механизмах, что устраняется при разгоне-торможении по S-кривой.
Hanter писал(а):плавные сопряжения кадров при переходе от одного к другому
Не, не для того.
Чудес не бывает. Бывают фокусы.
Аватара пользователя
Сергей Саныч
Мастер
 
Сообщения: 8674
Зарегистрирован: 30 май 2012, 14:20
Откуда: Тюмень
Репутация: 2726
Медальки:

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

Сообщение Hanter » 19 май 2017, 14:21

Сергей Саныч писал(а):А если серьезно, то хотя бы снижение вибраций. Мгновенное возрастание ускорения приводит к ударным нагрузкам в механизмах, что устраняется при разгоне-торможении по S-кривой.

Сергей Саныч я прекрасно понимаю цели и задачи S-кривых. но хочу спросить - а разве как раз таки стандартные средства "S-кривых" не именно для этого используются ? они же работают не конкретно при старте-останове привода. при любых изменениях скорости они точно так же действуют. плавный переход от стабильной скорости к участку ускорения и такой же плавный переход к новой стабильной скорости. Зачем еще что-то эмулировать ? тем более что плавными участками можно рулить достаточно свободно. ?? в чем тогда смысл вот этих телодвижений с эмуляцией ??
Опыт - это когда на смену вопросам: "Что? Где? Когда? Как? Почему?" Приходит единственный вопрос: "Нахрена?"
==========================================
фрезерная и токарная обработка на станках с чпу.
Резка, гибка, сварка и порошковая окраса.
Аватара пользователя
Hanter
Мастер
 
Сообщения: 5418
Зарегистрирован: 27 янв 2012, 14:52
Откуда: Питер
Репутация: 4314
Настоящее имя: Алексей

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

Сообщение Сергей Саныч » 19 май 2017, 14:35

Hanter писал(а):разве как раз таки стандартные средства "S-кривых" не именно для этого используются ?
Что такое "стандартные средства"? Свойства "шибко умных" приводов?
Hanter писал(а): Зачем еще что-то эмулировать ?
Не эмулировать, а управлять. Допустим, у нас обычный ШД с обычным драйвером. Когда он будет двигаться по S-закону? Только тогда, когда ему это распишут буквально по шагам. И даже по микрошагам.
Чудес не бывает. Бывают фокусы.
Аватара пользователя
Сергей Саныч
Мастер
 
Сообщения: 8674
Зарегистрирован: 30 май 2012, 14:20
Откуда: Тюмень
Репутация: 2726
Медальки:

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

Сообщение Hanter » 19 май 2017, 15:09

Сергей Саныч писал(а):Что такое "стандартные средства"? Свойства "шибко умных" приводов?

:lol: Да, прошу пардону - в этом ключе согласен.. забыл что с моей колокольни оно все несколько по иному выглядит :wik:
для простых приводов не имеющих встроенных функций конечно имеет смысл.
Опыт - это когда на смену вопросам: "Что? Где? Когда? Как? Почему?" Приходит единственный вопрос: "Нахрена?"
==========================================
фрезерная и токарная обработка на станках с чпу.
Резка, гибка, сварка и порошковая окраса.
Аватара пользователя
Hanter
Мастер
 
Сообщения: 5418
Зарегистрирован: 27 янв 2012, 14:52
Откуда: Питер
Репутация: 4314
Настоящее имя: Алексей

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

Сообщение u37 » 21 май 2017, 18:44

Интересный пост, прокомментирую его.
michael-yurov писал(а):Но реальность такова, что этот "некий максимум ускорения" - можно задать разным для работы с учетом S-кривой и без.
При работе с учетом S-кривой, обычно, механика и приводы станка способны обеспечить более высокие ускорения и в итоге сократить конечное время обработки.
S-кривая - это пустая трата времени. Хотя нет, неверно выразился. Наличие S-кривой создает дополнительное время на инерционную установку механики. (Плохо это или хорошо - зависит от множества условий и выходит за рамки контроллера). Для ШД начальные и конечные участки S-кривой не нужны (вредны).
Мое мнение по этому вопросу таково, что S-кривая не является функцией описывающей "идеальное" движение. Да, круто. Да, сложно. Но не дает идеального результата.
Т.е. можно сделать еще лучше (еще сократить время обработки, еще больше снизить нагрузки на механику и приводы и при этом увеличить максимальные ускорения), но, такая функция слишком сложно описывается и никогда не сможет достичь идеала из за особенностей работы оборудования и невозможности идеальной настройки каждого конкретного станка.
Вовсе нет. Возьмите модель модель ШД, и пляшите от него. Для движка приводится график мощности от скорости вращения. После чего из этого графика вычтите потери в механике. Всё оставшееся и есть то, что можно отправить на ускорение (разгон и торможение). Думаю, пересчет мощность-ускорение затруднений не вызовет. ))
В результате учета вышесказанного можно весьма неплохо разогнать ШД. Но, увы, бесполезно.
Почему бесполезно (для просмотра содержимого нажмите на ссылку)
Потому, что модель ШД говорит, что высокие скорости вращения можно получить при приложении только очень малой мощности (от ускорения). Это означает, что высокую скорость вы будете ДОЛГО разгонять (не проблема), а так-же долго СБРАСЫВАТЬ. А вот это уже серьезная проблема. Ее можно частично решить связанной обработкой всех каналов, но компенсация, все равно, не будет полной.

Чем более продвинутая модель используется, тем менеезначимое ускорение удается получить для реальной работы. Так что, продвинутые методы особого смысла не несут, не стоит заморачиваться. Кончилось тем, что я поставил жесткие лимиты в ограничитель с низкой фильтрацией и забил на это хозяйство.
u37
Новичок
 
Сообщения: 15
Зарегистрирован: 11 дек 2016, 15:03
Репутация: 1
Настоящее имя: serj

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

Сообщение Prav » 21 май 2017, 19:03

u37 писал(а):Для ШД начальные и конечные участки S-кривой не нужны (вредны).

Всё наоборот написал...
Аватара пользователя
Prav
Мастер
 
Сообщения: 376
Зарегистрирован: 14 июл 2015, 05:10
Откуда: Москва
Репутация: 73
Настоящее имя: Петр Раввинский

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

Сообщение MX_Master » 09 июн 2017, 07:46

Никак не мог найти в чём косяк генератора (timer OC mode + DMA). Иногда он мог дёрнуть выходной пин не 20 раз как положено, а 21. К примеру, при множителе = 10, за 100 тыщ входных шагов набирался 1 мильён положенных + 40-50 тыщ лишних. Это ППЦ. Бороздил код до тех пор, пока не сделал так, чтоб на 100 тыщ входных получился 1 млн. выходных + всего 50-100 лишних. Уменьшил частоту работы GPIO выходных пинов до минимальной и теперь всё стало ровно. Гонял одновременно две оси туда-сюда пару минут, кол-во выходных шагов всегда правильное.

Вощем, назовём эту версию умножителя 1.0
https://github.com/MX-Master/steps-frequency-multiplier/releases/tag/v1.0

Сейчас он умножает правильно и вывод стал более плавный. Чуть позже протестирую 4 оси, если всё будет ровно, пойду проверять на станке. Мож и видео удастся заснять. Правда, тестовый стенд с F407 разбирать не охота (на фото). Запилю версию на 4 оси для 2$ платки с STM32F103C8T6.

Ну а пока слайды в студию
Умножитель частоты шагов на STM32 2017-06-09_085912.png
Умножитель частоты шагов на STM32 2017-06-09_090239.png
Умножитель частоты шагов на STM32 2017-06-09_090505.png
Умножитель частоты шагов на STM32 2017-06-09_090758.png
Умножитель частоты шагов на STM32 2017-06-09_091140.png
Умножитель частоты шагов на STM32 PHOTO_20170609_103727.jpg
Аватара пользователя
MX_Master
Мастер
 
Сообщения: 5020
Зарегистрирован: 27 июн 2015, 19:45
Репутация: 2285
Медальки:

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

Сообщение MX_Master » 09 июн 2017, 22:31

И в догонку обновлённая версия, в которой исправлены косяки с DMA для вывода одной из осей.
Протестированы 4 оси. Полёт нормальный.
https://github.com/MX-Master/steps-frequency-multiplier/releases/tag/v1.0.1

Умножитель частоты шагов на STM32 2017-06-10_000512.png
Умножитель частоты шагов на STM32 2017-06-10_000704.png
Умножитель частоты шагов на STM32 2017-06-10_000737.png
Умножитель частоты шагов на STM32 2017-06-10_001742.png
Аватара пользователя
MX_Master
Мастер
 
Сообщения: 5020
Зарегистрирован: 27 июн 2015, 19:45
Репутация: 2285
Медальки:

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

Сообщение MX_Master » 13 июн 2017, 08:25

Ну вот и готова прошивка для мелкой макетки с STM32F103C8T6 (2$). Максимум 4 оси. Тесты проводил на тех же УП, что и для STM32F407VET6. Обновил первый пост темы. До станка всё никак не доберусь, думаю, к концу недели удастся, наконец, провести живые тесты :headphones:

https://github.com/MX-Master/steps-frequency-multiplier/releases/tag/v1.0.2

Умножитель частоты шагов на STM32 2017-06-13_102929.png
Умножитель частоты шагов на STM32 2017-06-13_102313.png
Умножитель частоты шагов на STM32 2017-06-13_083959.png
Умножитель частоты шагов на STM32 2017-06-13_102243.png
Умножитель частоты шагов на STM32 2017-06-13_102217.png
Умножитель частоты шагов на STM32 f103c8t6.jpg
Аватара пользователя
MX_Master
Мастер
 
Сообщения: 5020
Зарегистрирован: 27 июн 2015, 19:45
Репутация: 2285
Медальки:

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

Сообщение Quark » 17 июн 2017, 13:13

MX_Master, отличная работа.
А можешь сделать для STM32F103C8T6 конфигурацию множителя с помощью перемычек на свободных пинах?
Quark
Кандидат
 
Сообщения: 46
Зарегистрирован: 25 май 2016, 13:55
Репутация: 10

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

Сообщение MX_Master » 17 июн 2017, 13:23

Quark писал(а):MX_Master, отличная работа.
А можешь сделать для STM32F103C8T6 конфигурацию множителя с помощью перемычек на свободных пинах?

Идеи как это сделать - в студию (:
Аватара пользователя
MX_Master
Мастер
 
Сообщения: 5020
Зарегистрирован: 27 июн 2015, 19:45
Репутация: 2285
Медальки:

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

Сообщение aegis » 17 июн 2017, 14:29

MX_Master, вариант 1) аналоговый на резисторах (если есть аналоговая ножка естественно). 2) проверка если высокое то... но так много ножек надо. 2^n комбинаций, своего рода двоичный код. 3) не заниматься ерундой а заливать множитель через конфинуратор которым прошивку льешь и все такое...
нікому нічого не нав'язую.
Аватара пользователя
aegis
Мастер
 
Сообщения: 3171
Зарегистрирован: 22 мар 2012, 06:59
Откуда: Україна, Конотоп=>Запоріжжя=>Харьків
Репутация: 1806
Медальки:
Настоящее имя: Михайло

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

Сообщение MX_Master » 17 июн 2017, 15:40

aegis писал(а):MX_Master, вариант 1) аналоговый на резисторах (если есть аналоговая ножка естественно). 2) проверка если высокое то... но так много ножек надо. 2^n комбинаций, своего рода двоичный код. 3) не заниматься ерундой а заливать множитель через конфинуратор которым прошивку льешь и все такое...

Двоичный, стессна, предпочтительней для цифровых устройств. Можно как на драйверах переключатель 8-битный использовать. Но это, всё-таки, не готовое устройство, поэтому последний вариант самый быстрый. Прошивка может дорабатываться. А на все частые множители можно собрать отдельные прошивки.
Аватара пользователя
MX_Master
Мастер
 
Сообщения: 5020
Зарегистрирован: 27 июн 2015, 19:45
Репутация: 2285
Медальки:

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

Сообщение Quark » 18 июн 2017, 11:49

MX_Master писал(а):Двоичный, стессна, предпочтительней для цифровых устройств. Можно как на драйверах переключатель 8-битный использовать. Но это, всё-таки, не готовое устройство, поэтому последний вариант самый быстрый. Прошивка может дорабатываться. А на все частые множители можно собрать отдельные прошивки.


Да именно такой вариант я имел в виду, хотя бы небольшой ряд множителей, 5,10,15,20 или 4,8,12,16 . Для этого достаточно 2-х пинов.
Quark
Кандидат
 
Сообщения: 46
Зарегистрирован: 25 май 2016, 13:55
Репутация: 10

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

Сообщение MX_Master » 19 июн 2017, 06:28

Появился вопрос. Очень часто вижу способ генерации импульсов, в котором есть несущая частота, а генерация импульсов каким-то способом под неё подстраивается. Собсна, вопрос - как это делается? Может кто наглядный пример покажет?

Сейчас генератор импульсов использует отдельный таймер для каждой оси, хотя у каждого таймера есть внутри 4 отдельных канала. Дёргать выходные пины каждый канал может независимо. Зависят каналы только от общей частоты работы таймера. Почему бы не использовать для каждой оси по каналу, а не по целому таймеру? В связи с этим и появилась идея использовать общую частоту таймера как несущую. А каждый канал будет "как-то" подстраиваться под несущую частоту для генерации импульсов оси. Вот над этим "как-то" я сейчас и думаю.
Аватара пользователя
MX_Master
Мастер
 
Сообщения: 5020
Зарегистрирован: 27 июн 2015, 19:45
Репутация: 2285
Медальки:

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

Сообщение Сергей Саныч » 19 июн 2017, 09:08

MX_Master писал(а):Очень часто вижу способ генерации импульсов, в котором есть несущая частота, а генерация импульсов каким-то способом под неё подстраивается.
Программно это делается без особых проблем - таймер дергает прерывание на несущей частоте, а программа обработки выдает импульсы, тем или иным способом "прореживая" несущую.
Вот простейший пример для одного генератора. Fbase - частота прерываний (константа), fgen1 - задаваемая частота генерации, gen1cnt - рабочая переменная (статическая).
Код: Выделить всёРазвернуть
// Обработчик прерывания
gen1cnt -= fgen1; // Вычитаем значение частоты генерации из счетчика
if(gen1cnt < 0) {
  // здесь как-нибудь запускаем выдачу импульса шага
  gen1cnt += Fbase; // Добавляем к счетчику значение базовой частоты
}

Чудес не бывает. Бывают фокусы.
Аватара пользователя
Сергей Саныч
Мастер
 
Сообщения: 8674
Зарегистрирован: 30 май 2012, 14:20
Откуда: Тюмень
Репутация: 2726
Медальки:

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

Сообщение michael-yurov » 19 июн 2017, 09:20

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

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

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

Сообщение MX_Master » 19 июн 2017, 09:47

Спасибо за наглядный пример. Очень логично. Осталось дело за малым - сделать это аппаратно :hehehe:
Аватара пользователя
MX_Master
Мастер
 
Сообщения: 5020
Зарегистрирован: 27 июн 2015, 19:45
Репутация: 2285
Медальки:

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

Сообщение Сергей Саныч » 19 июн 2017, 10:00

michael-yurov писал(а):данный способ позволяет избавиться от операции деления, необходимой для расчета периода импульсов на основе частоты. Что важно для микроконтроллеров без аппаратной поддержки деления.
А также от операций с плавающей запятой в обработчике прерываний. Для повышения точности достаточно представить Fbase и fgen1 в формате с фиксированной точкой, например 22.10, и можно генерить дробные значения частот, в данном случае с точностью до 0,001 Гц.
Ну, и поскольку чудес не бывает :) , данный алгоритм (как и любые с прореживанием базовой частоты) будет иметь "джиттер", равный периоду Fbase. Но на работе реальных ШД при базовой частоте в сотни кГц это практически не сказывается.
Чудес не бывает. Бывают фокусы.
Аватара пользователя
Сергей Саныч
Мастер
 
Сообщения: 8674
Зарегистрирован: 30 май 2012, 14:20
Откуда: Тюмень
Репутация: 2726
Медальки:

Пред.След.

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

Кто сейчас на конференции

Зарегистрированные пользователи: AlekseySP, alex1816, Alka, arthuroman, Bing [Bot], BlackBeard, ex71, Евжений, Google [Bot], Leo_1943, Григорий92, shur, Umnik, Yandex [bot]

Reputation System ©'