Шаговый генератор на STM32 (STEP/DIR/ENBL)
- MX_Master
- Мастер
- Сообщения: 7488
- Зарегистрирован: 27 июн 2015, 19:45
- Репутация: 3113
- Настоящее имя: Михаил
- Откуда: Алматы
- Контактная информация:
Шаговый генератор на STM32 (STEP/DIR/ENBL)
Возможно кому-то будет полезен такой проект. Данный генератор шагов можно юзать как отдельно, так и в составе вашего софта.
Все исходники здесь - закрыты, автор наелся этим open-source до полного отвращения
Все исходники здесь - закрыты, автор наелся этим open-source до полного отвращения
Последний раз редактировалось MX_Master 07 апр 2020, 10:18, всего редактировалось 4 раза.
- MX_Master
- Мастер
- Сообщения: 7488
- Зарегистрирован: 27 июн 2015, 19:45
- Репутация: 3113
- Настоящее имя: Михаил
- Откуда: Алматы
- Контактная информация:
Re: Шаговый генератор на STM32 (STEP/DIR/ENBL)
На данный момент идут тесты и доработка библиотеки аппаратного вывода шагов
http://www.cnc-club.ru/forum/viewtopic. ... 40#p373636
https://github.com/MX-Master/stm32-step ... tree/TEST1
http://www.cnc-club.ru/forum/viewtopic. ... 40#p373636
https://github.com/MX-Master/stm32-step ... tree/TEST1
Последний раз редактировалось MX_Master 02 авг 2017, 13:34, всего редактировалось 1 раз.
-
tims
- Опытный
- Сообщения: 103
- Зарегистрирован: 21 фев 2017, 00:57
- Репутация: 5
- Настоящее имя: Тим
- Откуда: СПб
- Контактная информация:
Re: Шаговый генератор на STM32 (STEP/DIR/ENBL)
Планируется получение задания скорости/положения по ethernet?
- MX_Master
- Мастер
- Сообщения: 7488
- Зарегистрирован: 27 июн 2015, 19:45
- Репутация: 3113
- Настоящее имя: Михаил
- Откуда: Алматы
- Контактная информация:
Re: Шаговый генератор на STM32 (STEP/DIR/ENBL)
Даtims писал(а):Планируется получение задания скорости/положения по ethernet?
-
tims
- Опытный
- Сообщения: 103
- Зарегистрирован: 21 фев 2017, 00:57
- Репутация: 5
- Настоящее имя: Тим
- Откуда: СПб
- Контактная информация:
Re: Шаговый генератор на STM32 (STEP/DIR/ENBL)
А в качестве планировщика, linuxcnc на ядре preempt-rt?
- MX_Master
- Мастер
- Сообщения: 7488
- Зарегистрирован: 27 июн 2015, 19:45
- Репутация: 3113
- Настоящее имя: Михаил
- Откуда: Алматы
- Контактная информация:
Re: Шаговый генератор на STM32 (STEP/DIR/ENBL)
tims писал(а):А в качестве планировщика, linuxcnc на ядре preempt-rt?
-
tims
- Опытный
- Сообщения: 103
- Зарегистрирован: 21 фев 2017, 00:57
- Репутация: 5
- Настоящее имя: Тим
- Откуда: СПб
- Контактная информация:
Re: Шаговый генератор на STM32 (STEP/DIR/ENBL)
А кто будет интерпретировать g код? Если задание скорости/положения будет принимать по ethernet можно и к lcnc прикрутить.
- MX_Master
- Мастер
- Сообщения: 7488
- Зарегистрирован: 27 июн 2015, 19:45
- Репутация: 3113
- Настоящее имя: Михаил
- Откуда: Алматы
- Контактная информация:
Re: Шаговый генератор на STM32 (STEP/DIR/ENBL)
Задуманный генератор - это всего лишь комплексная проверка перед самостоятельным контроллером. Так что полноценного интерпретатора G кода может в генераторе не быть. Впоследствии, когда дело дойдёт до контроллера, на первых парах разбирать G код и что-то планировать будет веб-морда средствами JavaScript. Звучит забавно, но я хочу попробовать. Если веб морда не будет справляться, возьму STM'ку по мощней (F407VET6) и сделаю разбор и планировщик внутри.tims писал(а):А кто будет интерпретировать g код?
Даtims писал(а):Если задание скорости/положения будет принимать по ethernet можно и к lcnc прикрутить.
- selenur
- Почётный участник

- Сообщения: 4605
- Зарегистрирован: 21 авг 2013, 19:44
- Репутация: 1622
- Настоящее имя: Сергей
- Откуда: Новый Уренгой
- Контактная информация:
Re: Шаговый генератор на STM32 (STEP/DIR/ENBL)
Так этого на самом деле и не нужно, делать на данном контроллере, я это к чему, давным давно я писал программу для управления контроллером Planet-CNC (которую так и не доделал), и в последней разработке я работал с контроллером MK2, который мог работать как через USB, так и с SD карты. Содержимое файла на SD карте представляет собой бинарный формат, похожий на тот что посылался в контроллер.MX_Master писал(а):Задуманный генератор - это всего лишь комплексная проверка перед самостоятельным контроллером. Так что полноценного интерпретатора G кода может в генераторе не быть. Впоследствии, когда дело дойдёт до контроллера, на первых парах разбирать G код и что-то планировать будет веб-морда средствами JavaScript. Звучит забавно, но я хочу попробовать. Если веб морда не будет справляться, возьму STM'ку по мощней (F407VET6) и сделаю разбор и планировщик внутри.
Контроллер последовательно считывал блок из 64 байт, в этом блоке содержалась информация, о необходимом количестве импульсов для каждой оси, о том на каких выходах какой уровень сигнала установить, либо с какой частотой генерировать импульсы на определенном выводе.
Причем в этих данных содержалась информация, о необходимости замедления между пакетами, что позволяло проходить траекторию из нескольких прямых отрезков без остановки.
И если-бы ты пошел по похожему пути было-бы круто.
Когда формат посылаемых данных по сети, или считываемых с SD карты был идентичным.
Мой сайт: http://selenur.ru
Исходники моих программ: https://github.com/selenur
Instagram https://www.instagram.com/zheigurov/
Исходники моих программ: https://github.com/selenur
Instagram https://www.instagram.com/zheigurov/
-
tims
- Опытный
- Сообщения: 103
- Зарегистрирован: 21 фев 2017, 00:57
- Репутация: 5
- Настоящее имя: Тим
- Откуда: СПб
- Контактная информация:
Re: Шаговый генератор на STM32 (STEP/DIR/ENBL)
Мало выполнять код по программе, есть же события на которые надо реагировать, типа наезда на датчик длины инструмента.
- MX_Master
- Мастер
- Сообщения: 7488
- Зарегистрирован: 27 июн 2015, 19:45
- Репутация: 3113
- Настоящее имя: Михаил
- Откуда: Алматы
- Контактная информация:
Re: Шаговый генератор на STM32 (STEP/DIR/ENBL)
Как я и писал выше, генератор - это не контроллер. Это проба пера. Смысл в том, чтобы на деле проверить одновременную генерацию шагов, чтение/запись с SD карты и передачу данных по сети. Если всё это будет мешать друг другу, то генератор станет полностью отдельным модулем без плюшек. А все остальные функции контроллера (GUI, планировщик и т.д.) возьмёт на себя ещё одна STM'ка или какой-ньть Orange Pi One.
Как только подойдём к полноценному контроллеру, так и обсудим его функции. А это всего лишь генератор с простым GUI.
Как только подойдём к полноценному контроллеру, так и обсудим его функции. А это всего лишь генератор с простым GUI.
- Serg
- Мастер
- Сообщения: 21923
- Зарегистрирован: 17 апр 2012, 14:58
- Репутация: 5183
- Заслуга: c781c134843e0c1a3de9
- Настоящее имя: Сергей
- Откуда: Москва
- Контактная информация:
Re: Шаговый генератор на STM32 (STEP/DIR/ENBL)
Планировщик LinuxCNC довольно легко портируется на Cortex-M4, я это ещё года 3 назад делал.MX_Master писал(а):Как только подойдём к полноценному контроллеру, так и обсудим его функции.
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
- wldev
- Мастер
- Сообщения: 1650
- Зарегистрирован: 24 янв 2012, 16:04
- Репутация: 510
- Настоящее имя: Сергей Бочаров
- Откуда: Новосибирск
- Контактная информация:
Re: Шаговый генератор на STM32 (STEP/DIR/ENBL)
Пожалуйста пиши комментарии)))MX_Master писал(а):Проект открытый, прошивка открытая.
- MX_Master
- Мастер
- Сообщения: 7488
- Зарегистрирован: 27 июн 2015, 19:45
- Репутация: 3113
- Настоящее имя: Михаил
- Откуда: Алматы
- Контактная информация:
Re: Шаговый генератор на STM32 (STEP/DIR/ENBL)
И как я раньше жил без этой крохотной программки SPEQMATH! В текущем проекте при расчётах S-кривой, да и много где ещё, постоянно надо что-то считать с формулами и переменными. Обычный калькулятор тут уже всё. Я, обычно, открывал браузер и запускал консоль разработчика, в которой можно писать JavaScript код и выполнять его. И вот теперь понадобилось рисовать графики для реального представления формул. Обрыл интернет в поисках быстрого и бесплатного.. и нашёл! Этот чудо калькулятор не только считает и рисует, но и сохраняет листы с расчётами в отдельные файлы. Вощем, рекомендую всем, кто не хочет лезть в программирование.
Лично мне программка очь сильно помогла при возьне с формулами ускорений и скоростей вывода шагов. Причём, я всегда наглядно видел результат в виде графика.
Скриншоты в гугле - https://www.google.com/search?q=SPEQ+MA ... S&tbm=isch
Лично мне программка очь сильно помогла при возьне с формулами ускорений и скоростей вывода шагов. Причём, я всегда наглядно видел результат в виде графика.
Скриншоты в гугле - https://www.google.com/search?q=SPEQ+MA ... S&tbm=isch
- Shkryab
- Опытный
- Сообщения: 143
- Зарегистрирован: 15 июн 2017, 21:25
- Репутация: 18
- Настоящее имя: Леонидыч
- Откуда: Страна, которой нет
- Контактная информация:
Re: Шаговый генератор на STM32 (STEP/DIR/ENBL)
Любопытно... Я как-то до сих пор для этих целей обходился экселем (точнее тем, что в гугльдоках заменяет эксель), но вдруг эта программка мне тоже жуть как нужна? Что она может такого, чего не могут электронные таблицы? Мне действительно интересно.MX_Master писал(а):И как я раньше жил без этой крохотной программки SPEQMATH!
- MX_Master
- Мастер
- Сообщения: 7488
- Зарегистрирован: 27 июн 2015, 19:45
- Репутация: 3113
- Настоящее имя: Михаил
- Откуда: Алматы
- Контактная информация:
Re: Шаговый генератор на STM32 (STEP/DIR/ENBL)
Shkryab писал(а):Любопытно... Я как-то до сих пор для этих целей обходился экселем (точнее тем, что в гугльдоках заменяет эксель), но вдруг эта программка мне тоже жуть как нужна? Что она может такого, чего не могут электронные таблицы? Мне действительно интересно.MX_Master писал(а):И как я раньше жил без этой крохотной программки SPEQMATH!
Автор скрестил блокнот с калькулятором и добавил довольно мощный вывод графиков. Скачайте посмотреть, всего 500 Кб. Зато сколько удовольствия.
Оч понравилось, что можно рисовать не просто графики функций, но и результат логических выражений. Например, чтобы изобразить обычный меандр красной линией толщиной 3 пикселя, достаточно одной строчки:
- Plot( IIf(Floor(x)%2, 1, -1), x, Color=Red, Width=3 )
где
Plot(выражение, имя переменной, параметры вывода) - вывод графика,
IIf(выражение, если правда, если ложь) - простой логически оператор,
Floor(число) - округление в меньшую сторону до целого
- Plot( x^2 + 2, x, Color=Blue, Width=3 )
- Plot( IIf( x > 0, -Sqrt(x) - 2, -Sqrt(-x) - 2), x, Color=Green, Width=3 )
- Shkryab
- Опытный
- Сообщения: 143
- Зарегистрирован: 15 июн 2017, 21:25
- Репутация: 18
- Настоящее имя: Леонидыч
- Откуда: Страна, которой нет
- Контактная информация:
Re: Шаговый генератор на STM32 (STEP/DIR/ENBL)
Очаровательно! Беру на вооружение. Бесплатная и не требует инсталляции! 
- MX_Master
- Мастер
- Сообщения: 7488
- Зарегистрирован: 27 июн 2015, 19:45
- Репутация: 3113
- Настоящее имя: Михаил
- Откуда: Алматы
- Контактная информация:
Re: Шаговый генератор на STM32 (STEP/DIR/ENBL)
Ну и возвращаясь к теме.. Вот пример графика S-разгона от 0 до 5 КГц с максимальным ускорением в 100000 шагов/с. Синим цветом - с использованием квадратной функции. Красным цветом - с кубической функцией. Эти функции хороши тем, что подсчёт частоты идёт быстро и в целых числах. Частотный ряд состоит из двух сегментов. Буду пробовать оба варианта. Чуть позже попробую вариант из трёх сегментов, в середине которого будет постоянное ускорение. Если у кого-то есть советы на этот счёт - пишите.
Исходник для speqmath
Код: Выделить всё
freq = 5000; ' Hz, destination frequency
accel = 100000; ' Hz/s, max acceleration
steps = Floor( freq^2 / accel ) ' steps to accelerate frequency from 0 to freq
steps_half = Floor( steps/2 )
' plot settings
Title = s-curve frequency acceleration;
LegendPos = BottomRight;
xLabel=step;
yLabel=frequency, Hz;
square_freq1(step) = (freq/2) * ((1000*2*step/steps)^2) / 1000^2;
square_freq2(step) = freq - (freq/2) * ((1000*2*(steps - step)/steps)^2) / 1000^2;
square_freq(step) = IIf(step < steps_half, square_freq1(step), square_freq2(step));
cubic_freq1(step) = (freq/2) * ((100*2*step/steps)^3) / 100^3;
cubic_freq2(step) = freq - (freq/2) * ((100*2*(steps - step)/steps)^3) / 100^3;
cubic_freq(step) = IIf(step < steps_half, cubic_freq1(step), cubic_freq2(step));
Plot( square_freq(step), Legend=using "x^2", Color=Blue, Width=3, xMin=0,xMax=steps,xScale=50,yMin=0,yMax=freq,yScale=1000);
Plot( cubic_freq(step), Legend=using "x^3", Color=Red, Width=3 );
- Shkryab
- Опытный
- Сообщения: 143
- Зарегистрирован: 15 июн 2017, 21:25
- Репутация: 18
- Настоящее имя: Леонидыч
- Откуда: Страна, которой нет
- Контактная информация:
Re: Шаговый генератор на STM32 (STEP/DIR/ENBL)
А почему бы не использовать кусочно-линейную интерполяцию? Вся математика сведётся к сложению-вычитанию и, возможно, табличному преобразованию...MX_Master писал(а):Если у кого-то есть советы на этот счёт - пишите.
Извините если не в тему -- это я со своей ассемблерной колокольни рассуждаю...
- wldev
- Мастер
- Сообщения: 1650
- Зарегистрирован: 24 янв 2012, 16:04
- Репутация: 510
- Настоящее имя: Сергей Бочаров
- Откуда: Новосибирск
- Контактная информация:
Re: Шаговый генератор на STM32 (STEP/DIR/ENBL)
Не согласен!MX_Master писал(а):Ну и возвращаясь к теме.. Вот пример графика S-разгона от 0 до 5 КГц с максимальным ускорением в 100000 шагов/с. Синим цветом - с использованием квадратной функции. Красным цветом - с кубической функцией. Эти функции хороши тем, что подсчёт частоты идёт быстро и в целых числах. Частотный ряд состоит из двух сегментов. Буду пробовать оба варианта. Чуть позже попробую вариант из трёх сегментов, в середине которого будет постоянное ускорение. Если у кого-то есть советы на этот счёт - пишите.
График разгона это функция от времени(F(t)) а не от позиции...