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

Контроллеры, драйверы, датчики, управляющие устройства.
Аватара пользователя
Hanter
Мастер
Сообщения: 5414
Зарегистрирован: 27 янв 2012, 14:52
Репутация: 4338
Настоящее имя: Алексей
Откуда: Питер
Контактная информация:

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

Сообщение Hanter »

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

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

Сообщение Сергей Саныч »

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

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

Сообщение Hanter »

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

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

Сообщение Сергей Саныч »

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

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

Сообщение Hanter »

Сергей Саныч писал(а):Что такое "стандартные средства"? Свойства "шибко умных" приводов?
:lol: Да, прошу пардону - в этом ключе согласен.. забыл что с моей колокольни оно все несколько по иному выглядит :wik:
для простых приводов не имеющих встроенных функций конечно имеет смысл.
Опыт - это когда на смену вопросам: "Что? Где? Когда? Как? Почему?" Приходит единственный вопрос: "Нахрена?"
==========================================
фрезерная и токарная обработка на станках с чпу.
Резка, гибка, сварка и порошковая окраса.
u37
Новичок
Сообщения: 15
Зарегистрирован: 11 дек 2016, 15:03
Репутация: 1
Настоящее имя: serj
Контактная информация:

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

Сообщение u37 »

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

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

Сообщение Prav »

u37 писал(а):Для ШД начальные и конечные участки S-кривой не нужны (вредны).
Всё наоборот написал...
Аватара пользователя
MX_Master
Мастер
Сообщения: 7467
Зарегистрирован: 27 июн 2015, 19:45
Репутация: 3089
Настоящее имя: Михаил
Откуда: Алматы
Контактная информация:

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

Сообщение MX_Master »

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

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

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

Ну а пока слайды в студию
2017-06-09_085912.png (2495 просмотров) <a class='original' href='./download/file.php?id=113639&sid=94938eb8e34f01bad5234b82c9057250&mode=view' target=_blank>Загрузить оригинал (66.88 КБ)</a>
2017-06-09_090239.png (2495 просмотров) <a class='original' href='./download/file.php?id=113640&sid=94938eb8e34f01bad5234b82c9057250&mode=view' target=_blank>Загрузить оригинал (60.12 КБ)</a>
2017-06-09_090505.png (2495 просмотров) <a class='original' href='./download/file.php?id=113641&sid=94938eb8e34f01bad5234b82c9057250&mode=view' target=_blank>Загрузить оригинал (59.5 КБ)</a>
2017-06-09_090758.png (2495 просмотров) <a class='original' href='./download/file.php?id=113642&sid=94938eb8e34f01bad5234b82c9057250&mode=view' target=_blank>Загрузить оригинал (60.79 КБ)</a>
2017-06-09_091140.png (2495 просмотров) <a class='original' href='./download/file.php?id=113643&sid=94938eb8e34f01bad5234b82c9057250&mode=view' target=_blank>Загрузить оригинал (45.27 КБ)</a>
PHOTO_20170609_103727.jpg (2495 просмотров) <a class='original' href='./download/file.php?id=113645&sid=94938eb8e34f01bad5234b82c9057250&mode=view' target=_blank>Загрузить оригинал (411.15 КБ)</a>
Аватара пользователя
MX_Master
Мастер
Сообщения: 7467
Зарегистрирован: 27 июн 2015, 19:45
Репутация: 3089
Настоящее имя: Михаил
Откуда: Алматы
Контактная информация:

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

Сообщение MX_Master »

И в догонку обновлённая версия, в которой исправлены косяки с DMA для вывода одной из осей.
Протестированы 4 оси. Полёт нормальный.
https://github.com/MX-Master/steps-freq ... tag/v1.0.1
2017-06-10_000512.png (2459 просмотров) <a class='original' href='./download/file.php?id=113693&sid=94938eb8e34f01bad5234b82c9057250&mode=view' target=_blank>Загрузить оригинал (62.04 КБ)</a>
2017-06-10_000704.png (2459 просмотров) <a class='original' href='./download/file.php?id=113698&sid=94938eb8e34f01bad5234b82c9057250&mode=view' target=_blank>Загрузить оригинал (58.49 КБ)</a>
2017-06-10_000737.png (2459 просмотров) <a class='original' href='./download/file.php?id=113699&sid=94938eb8e34f01bad5234b82c9057250&mode=view' target=_blank>Загрузить оригинал (59.15 КБ)</a>
2017-06-10_001742.png (2459 просмотров) <a class='original' href='./download/file.php?id=113700&sid=94938eb8e34f01bad5234b82c9057250&mode=view' target=_blank>Загрузить оригинал (86.66 КБ)</a>
Аватара пользователя
MX_Master
Мастер
Сообщения: 7467
Зарегистрирован: 27 июн 2015, 19:45
Репутация: 3089
Настоящее имя: Михаил
Откуда: Алматы
Контактная информация:

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

Сообщение MX_Master »

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

https://github.com/MX-Master/steps-freq ... tag/v1.0.2
2017-06-13_102929.png (2413 просмотров) <a class='original' href='./download/file.php?id=113822&sid=94938eb8e34f01bad5234b82c9057250&mode=view' target=_blank>Загрузить оригинал (62.97 КБ)</a>
2017-06-13_102313.png (2413 просмотров) <a class='original' href='./download/file.php?id=113823&sid=94938eb8e34f01bad5234b82c9057250&mode=view' target=_blank>Загрузить оригинал (51.28 КБ)</a>
2017-06-13_083959.png (2413 просмотров) <a class='original' href='./download/file.php?id=113826&sid=94938eb8e34f01bad5234b82c9057250&mode=view' target=_blank>Загрузить оригинал (46.03 КБ)</a>
2017-06-13_102243.png (2413 просмотров) <a class='original' href='./download/file.php?id=113824&sid=94938eb8e34f01bad5234b82c9057250&mode=view' target=_blank>Загрузить оригинал (51.18 КБ)</a>
2017-06-13_102217.png (2413 просмотров) <a class='original' href='./download/file.php?id=113825&sid=94938eb8e34f01bad5234b82c9057250&mode=view' target=_blank>Загрузить оригинал (51.45 КБ)</a>
f103c8t6.jpg (2378 просмотров) <a class='original' href='./download/file.php?id=113834&sid=94938eb8e34f01bad5234b82c9057250&mode=view' target=_blank>Загрузить оригинал (254.08 КБ)</a>
Quark
Кандидат
Сообщения: 49
Зарегистрирован: 25 май 2016, 13:55
Репутация: 11
Контактная информация:

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

Сообщение Quark »

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

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

Сообщение MX_Master »

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

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

Сообщение aegis »

MX_Master, вариант 1) аналоговый на резисторах (если есть аналоговая ножка естественно). 2) проверка если высокое то... но так много ножек надо. 2^n комбинаций, своего рода двоичный код. 3) не заниматься ерундой а заливать множитель через конфинуратор которым прошивку льешь и все такое...
нікому нічого не нав'язую.
Аватара пользователя
MX_Master
Мастер
Сообщения: 7467
Зарегистрирован: 27 июн 2015, 19:45
Репутация: 3089
Настоящее имя: Михаил
Откуда: Алматы
Контактная информация:

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

Сообщение MX_Master »

aegis писал(а):MX_Master, вариант 1) аналоговый на резисторах (если есть аналоговая ножка естественно). 2) проверка если высокое то... но так много ножек надо. 2^n комбинаций, своего рода двоичный код. 3) не заниматься ерундой а заливать множитель через конфинуратор которым прошивку льешь и все такое...
Двоичный, стессна, предпочтительней для цифровых устройств. Можно как на драйверах переключатель 8-битный использовать. Но это, всё-таки, не готовое устройство, поэтому последний вариант самый быстрый. Прошивка может дорабатываться. А на все частые множители можно собрать отдельные прошивки.
Quark
Кандидат
Сообщения: 49
Зарегистрирован: 25 май 2016, 13:55
Репутация: 11
Контактная информация:

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

Сообщение Quark »

MX_Master писал(а): Двоичный, стессна, предпочтительней для цифровых устройств. Можно как на драйверах переключатель 8-битный использовать. Но это, всё-таки, не готовое устройство, поэтому последний вариант самый быстрый. Прошивка может дорабатываться. А на все частые множители можно собрать отдельные прошивки.
Да именно такой вариант я имел в виду, хотя бы небольшой ряд множителей, 5,10,15,20 или 4,8,12,16 . Для этого достаточно 2-х пинов.
Аватара пользователя
MX_Master
Мастер
Сообщения: 7467
Зарегистрирован: 27 июн 2015, 19:45
Репутация: 3089
Настоящее имя: Михаил
Откуда: Алматы
Контактная информация:

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

Сообщение MX_Master »

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

Сейчас генератор импульсов использует отдельный таймер для каждой оси, хотя у каждого таймера есть внутри 4 отдельных канала. Дёргать выходные пины каждый канал может независимо. Зависят каналы только от общей частоты работы таймера. Почему бы не использовать для каждой оси по каналу, а не по целому таймеру? В связи с этим и появилась идея использовать общую частоту таймера как несущую. А каждый канал будет "как-то" подстраиваться под несущую частоту для генерации импульсов оси. Вот над этим "как-то" я сейчас и думаю.
Аватара пользователя
Сергей Саныч
Мастер
Сообщения: 9116
Зарегистрирован: 30 май 2012, 14:20
Репутация: 2857
Откуда: Тюмень
Контактная информация:

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

Сообщение Сергей Саныч »

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

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

// Обработчик прерывания
gen1cnt -= fgen1; // Вычитаем значение частоты генерации из счетчика
if(gen1cnt < 0) {
  // здесь как-нибудь запускаем выдачу импульса шага
  gen1cnt += Fbase; // Добавляем к счетчику значение базовой частоты
}

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

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

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

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

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

Сообщение MX_Master »

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

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

Сообщение Сергей Саныч »

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

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