Arduino AccelStepper

Обсуждение установки, настройки и использования LinuxCNC. Вопросы по Gкоду.
Аватара пользователя
grakun
Мастер
Сообщения: 273
Зарегистрирован: 30 сен 2015, 02:47
Репутация: 53
Настоящее имя: Гракун
Откуда: г.Саратов
Контактная информация:

Re: Arduino AccelStepper

Сообщение grakun »

AndyBig писал(а):На мой взгляд все расчеты должны вестись не в вызове процедуры генерации очередного степа, а в основном цикле, пока результатами не будет заполнен некий буфер.
Допустим есть начало вектора есть конец. Считаем интерполяцию по трем осям. Получаем сколько шагать по x,y, z и временные интервалы(три разные частоты) и все в буфер. Это все потом надо запустить, как ? Опять начнется математика.
Аватара пользователя
grakun
Мастер
Сообщения: 273
Зарегистрирован: 30 сен 2015, 02:47
Репутация: 53
Настоящее имя: Гракун
Откуда: г.Саратов
Контактная информация:

Re: Arduino AccelStepper

Сообщение grakun »

В первых версиях у меня все считалось предварительно, может быть не правильно запускал, но выигрыша не получилось.
Аватара пользователя
AndyBig
Мастер
Сообщения: 3971
Зарегистрирован: 07 мар 2014, 04:01
Репутация: 1121
Откуда: юг России
Контактная информация:

Re: Arduino AccelStepper

Сообщение AndyBig »

grakun писал(а):Получаем сколько шагать по x,y, z и временные интервалы(три разные частоты) и все в буфер. Это все потом надо запустить, как ? Опять начнется математика.
Какая? Пару сложений в прерывании? Это же не сравнить с рассчетом вектора с интерполяцией.
По-хорошему настраиваем три таймера с выходами и в прерываниях от них подсчитываем выданные импульсы. Достигли значения - останавливаем таймер :)
Tomasina
Новичок
Сообщения: 8
Зарегистрирован: 27 окт 2015, 15:06
Репутация: 0
Настоящее имя: Дмитрий
Контактная информация:

Re: Arduino AccelStepper

Сообщение Tomasina »

Morroc писал(а):Что то типа щелчка раз в секунду негромкого ? А шаг с какой частотой идет ?
да, похоже на щелчки, рукой тоже ощущается.
Скорость 4800 шагов в сек (больше не тянет), на драйвере микрошаг 1/8.
Аватара пользователя
grakun
Мастер
Сообщения: 273
Зарегистрирован: 30 сен 2015, 02:47
Репутация: 53
Настоящее имя: Гракун
Откуда: г.Саратов
Контактная информация:

Re: Arduino AccelStepper

Сообщение grakun »

Morroc писал(а):В вашем цикле он тоже постоянно вызывается.
Это Вы про что? Про мою программу? Первый человек наверно который ее смотрел.
Аватара пользователя
grakun
Мастер
Сообщения: 273
Зарегистрирован: 30 сен 2015, 02:47
Репутация: 53
Настоящее имя: Гракун
Откуда: г.Саратов
Контактная информация:

Re: Arduino AccelStepper

Сообщение grakun »

AndyBig писал(а):Какая? Пару сложений в прерывании? Это же не сравнить с рассчетом вектора с интерполяцией.
По-хорошему настраиваем три таймера с выходами и в прерываниях от них подсчитываем выданные импульсы. Достигли значения - останавливаем таймер
Ну не знаю. Это все надо как то продумать и проверять.
Аватара пользователя
AndyBig
Мастер
Сообщения: 3971
Зарегистрирован: 07 мар 2014, 04:01
Репутация: 1121
Откуда: юг России
Контактная информация:

Re: Arduino AccelStepper

Сообщение AndyBig »

grakun писал(а):Это все надо как то продумать и проверять.
Естественно :) Все надо продумывать и проверять :)
sidor094
Мастер
Сообщения: 826
Зарегистрирован: 20 фев 2014, 09:13
Репутация: 81
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: Arduino AccelStepper

Сообщение sidor094 »

AndyBig писал(а):По-хорошему настраиваем три таймера с выходами и в прерываниях от них подсчитываем выданные импульсы. Достигли значения - останавливаем таймер
Так точность получается низкая.Чем выше скорость и соответственно меньше делитель таймера тем ниже точность соотношения скоростей.Соответственно надо бить строку на короткие отрезки чтобы сохранить точность.А это в свою очередь потребует пересчитывать коэффициенты деления таймеров .Соответственно опять тормоза и неравномерность шагов.
Аватара пользователя
AndyBig
Мастер
Сообщения: 3971
Зарегистрирован: 07 мар 2014, 04:01
Репутация: 1121
Откуда: юг России
Контактная информация:

Re: Arduino AccelStepper

Сообщение AndyBig »

sidor094 писал(а):Чем выше скорость и соответственно меньше делитель таймера тем ниже точность соотношения скоростей
Она в любом варианте будет низкой на этих микроконтроллерах при более-менее высоких скоростях. Зато в основном цикле можно заниматься чем угодно, лишь бы рассчеты успевали пополнять буфер.
Хотите высокую и стабильную частоту с возможностью измененять ее на единицы процентов - ставьте внешнюю плиску с генераторами импульсов и будет Вам сколько нужно каналов по 200 кГц с абсолютной стабильностью и возможностью менять частоту с шагом в 10 Гц во всем диапазоне :) Только успевай обсчитывать и запихивать в нее параметры генерации :) И даже рутинные рассчеты можно в нее же запихнуть - ускорение, интерполяцию и т.п.
sidor094
Мастер
Сообщения: 826
Зарегистрирован: 20 фев 2014, 09:13
Репутация: 81
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: Arduino AccelStepper

Сообщение sidor094 »

AndyBig писал(а): Она в любом варианте будет низкой на этих микроконтроллерах при более-менее высоких скоростях
Практически абсолютную точность можно получить с помощью программного делителя.
Правда за счет некоторой неравномерности шагов.
AndyBig писал(а):Хотите высокую и стабильную частоту с возможностью измененять ее на единицы процентов - ставьте внешнюю плиску с генераторами импульсов и будет Вам сколько нужно каналов по 200 кГц с абсолютной стабильностью и возможностью менять частоту с шагом в 10 Гц во всем диапазоне Только успевай обсчитывать и запихивать в нее параметры генерации
Ну таких параметров можно достигнуть и на старших моделях STM32.
А к плис всё равно придётся лепить процессор.
Аватара пользователя
AndyBig
Мастер
Сообщения: 3971
Зарегистрирован: 07 мар 2014, 04:01
Репутация: 1121
Откуда: юг России
Контактная информация:

Re: Arduino AccelStepper

Сообщение AndyBig »

sidor094 писал(а):Практически абсолютную точность можно получить с помощью программного делителя.Правда за счет некоторой неравномерности шагов.
А как это - абсолютная точность, но неравномерность? :) И как можно получить более высокую точность софтом, команды которого выполняются с тем же периодом, с которым тактируется таймер?
sidor094 писал(а):таких параметров можно достигнуть и на старших моделях STM32
Как-то, может быть, и можно, но практической пользы от этого никакой, потому что делать что-то еще контроллер просто не сможет :) Ну и шаг изменения частоты совсем не 10 Гц будет при 200 кГц :)
sidor094
Мастер
Сообщения: 826
Зарегистрирован: 20 фев 2014, 09:13
Репутация: 81
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: Arduino AccelStepper

Сообщение sidor094 »

AndyBig писал(а):И как можно получить более высокую точность софтом, команды которого выполняются с тем же периодом, с которым тактируется таймер?
Деление с остатком.Расстояние между двумя соседними шагами не точно соответствует коэффициенту деления ,но в сумме при учитывании впоследствии при сложении остатка,среднее количество шагов будет точно соответствовать
коэффициенту деления
AndyBig писал(а): Как-то, может быть, и можно, но практической пользы от этого никакой, потому что делать что-то еще контроллер просто не сможет Ну и шаг изменения частоты совсем не 10 Гц будет при 200 кГц
У меня LPC1788
с тактовой 120 мгц выдаёт максимальную частоту шагов 85 кгц с интерполяцией одновременно по по пяти координатам.Это с учетом того что алгоритм разгона-торможения сидит под тем же прерыванием.При этом он одновременно выводит на экран вга 640х480 отображение пяти координат.Планирую перейти на STM32F746 216мгц.Надеюсь получить около 200 кгц выдачу шагов.
Аватара пользователя
selenur
Почётный участник
Почётный участник
Сообщения: 4605
Зарегистрирован: 21 авг 2013, 19:44
Репутация: 1622
Настоящее имя: Сергей
Откуда: Новый Уренгой
Контактная информация:

Re: Arduino AccelStepper

Сообщение selenur »

sidor094 писал(а):Планирую перейти на STM32F746
Я в процессе использования stm32f429 заметил наличие встроенного DSP, и в STM32F746 он так-же есть, если я правильно понял, то с помощью него можно на порядок повысить частоту генерации сигналов.
Мой сайт: http://selenur.ru
Исходники моих программ: https://github.com/selenur
Instagram https://www.instagram.com/zheigurov/
sidor094
Мастер
Сообщения: 826
Зарегистрирован: 20 фев 2014, 09:13
Репутация: 81
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: Arduino AccelStepper

Сообщение sidor094 »

selenur писал(а): Я в процессе использования stm32f429 заметил наличие встроенного DSP, и в STM32F746 он так-же есть, если я правильно понял, то с помощью него можно на порядок повысить частоту генерации сигналов.
Ну да.Только им надо научиться пользоваться.А вообще у меня только целочисленная арифметика.
Tomasina
Новичок
Сообщения: 8
Зарегистрирован: 27 окт 2015, 15:06
Репутация: 0
Настоящее имя: Дмитрий
Контактная информация:

Re: Arduino AccelStepper

Сообщение Tomasina »

в тему целочисленной арифметики - какого ляда разработчики AccelStepper используют данные размерностью float, ведь операции с ними на порядок медленнее. Где там могут возникать дробные числа, если оперируем целыми шагами, а на 1/8 или 1/16 делит сам драйвер?
Аватара пользователя
michael-yurov
Почётный участник
Почётный участник
Сообщения: 11639
Зарегистрирован: 26 июл 2012, 00:10
Репутация: 4644
Настоящее имя: Михаил Львович
Откуда: Новоуральск
Контактная информация:

Re: Arduino AccelStepper

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

Tomasina писал(а):Где там могут возникать дробные числа
Ну, например, для линейного ускорения (равномерное изменение частоты) может потребоваться вычислять интервал импульсов (зная частоту), а для этого нужна операция деления.
Хотя, конечно, можно использовать алгоритм Брезенхэма.
Аватара пользователя
AndyBig
Мастер
Сообщения: 3971
Зарегистрирован: 07 мар 2014, 04:01
Репутация: 1121
Откуда: юг России
Контактная информация:

Re: Arduino AccelStepper

Сообщение AndyBig »

sidor094 писал(а):Планирую перейти на STM32F746 216мгц
А, тогда да, не буду спорить :) Я что-то "старшие модели" воспринял как модели с тактовой до 100 МГц :)
sidor094
Мастер
Сообщения: 826
Зарегистрирован: 20 фев 2014, 09:13
Репутация: 81
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: Arduino AccelStepper

Сообщение sidor094 »

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

Re: Arduino AccelStepper

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

sidor094 писал(а):Можно при любом делении обойтись целыми числами с большой разрядностью .Например просто работать с числами в 1000 раз большими и считать три младших разряда тысячными.
Это и есть дробные числа.

Но я ошибся, подумал речь про операцию деления.
sidor094 писал(а):По моему это для окружностей и дуг
Нет. Это то, что вы писали про накопление остатка в #72 сообщении.
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5181
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: Arduino AccelStepper

Сообщение Serg »

sidor094 писал(а):Можно при любом делении обойтись целыми числами с большой разрядностью .Например просто работать с числами в 1000 раз большими и считать три младших разряда тысячными.
Не всегда. Для работы с числами большой разрядности, когда разрядность числа превышает разрядность МК нужны соотв. команды. Иначе придётся выполнять операции с такими числами за несколько обычных команд - "железный" блок FP в этом случае будет наверняка быстрее.
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Ответить

Вернуться в «LinuxCNC»