Страница 4 из 5

Re: Arduino AccelStepper

Добавлено: 02 фев 2016, 20:29
grakun
AndyBig писал(а):На мой взгляд все расчеты должны вестись не в вызове процедуры генерации очередного степа, а в основном цикле, пока результатами не будет заполнен некий буфер.
Допустим есть начало вектора есть конец. Считаем интерполяцию по трем осям. Получаем сколько шагать по x,y, z и временные интервалы(три разные частоты) и все в буфер. Это все потом надо запустить, как ? Опять начнется математика.

Re: Arduino AccelStepper

Добавлено: 02 фев 2016, 20:44
grakun
В первых версиях у меня все считалось предварительно, может быть не правильно запускал, но выигрыша не получилось.

Re: Arduino AccelStepper

Добавлено: 02 фев 2016, 20:50
AndyBig
grakun писал(а):Получаем сколько шагать по x,y, z и временные интервалы(три разные частоты) и все в буфер. Это все потом надо запустить, как ? Опять начнется математика.
Какая? Пару сложений в прерывании? Это же не сравнить с рассчетом вектора с интерполяцией.
По-хорошему настраиваем три таймера с выходами и в прерываниях от них подсчитываем выданные импульсы. Достигли значения - останавливаем таймер :)

Re: Arduino AccelStepper

Добавлено: 02 фев 2016, 20:52
Tomasina
Morroc писал(а):Что то типа щелчка раз в секунду негромкого ? А шаг с какой частотой идет ?
да, похоже на щелчки, рукой тоже ощущается.
Скорость 4800 шагов в сек (больше не тянет), на драйвере микрошаг 1/8.

Re: Arduino AccelStepper

Добавлено: 02 фев 2016, 20:54
grakun
Morroc писал(а):В вашем цикле он тоже постоянно вызывается.
Это Вы про что? Про мою программу? Первый человек наверно который ее смотрел.

Re: Arduino AccelStepper

Добавлено: 02 фев 2016, 21:00
grakun
AndyBig писал(а):Какая? Пару сложений в прерывании? Это же не сравнить с рассчетом вектора с интерполяцией.
По-хорошему настраиваем три таймера с выходами и в прерываниях от них подсчитываем выданные импульсы. Достигли значения - останавливаем таймер
Ну не знаю. Это все надо как то продумать и проверять.

Re: Arduino AccelStepper

Добавлено: 02 фев 2016, 21:09
AndyBig
grakun писал(а):Это все надо как то продумать и проверять.
Естественно :) Все надо продумывать и проверять :)

Re: Arduino AccelStepper

Добавлено: 02 фев 2016, 21:18
sidor094
AndyBig писал(а):По-хорошему настраиваем три таймера с выходами и в прерываниях от них подсчитываем выданные импульсы. Достигли значения - останавливаем таймер
Так точность получается низкая.Чем выше скорость и соответственно меньше делитель таймера тем ниже точность соотношения скоростей.Соответственно надо бить строку на короткие отрезки чтобы сохранить точность.А это в свою очередь потребует пересчитывать коэффициенты деления таймеров .Соответственно опять тормоза и неравномерность шагов.

Re: Arduino AccelStepper

Добавлено: 02 фев 2016, 22:13
AndyBig
sidor094 писал(а):Чем выше скорость и соответственно меньше делитель таймера тем ниже точность соотношения скоростей
Она в любом варианте будет низкой на этих микроконтроллерах при более-менее высоких скоростях. Зато в основном цикле можно заниматься чем угодно, лишь бы рассчеты успевали пополнять буфер.
Хотите высокую и стабильную частоту с возможностью измененять ее на единицы процентов - ставьте внешнюю плиску с генераторами импульсов и будет Вам сколько нужно каналов по 200 кГц с абсолютной стабильностью и возможностью менять частоту с шагом в 10 Гц во всем диапазоне :) Только успевай обсчитывать и запихивать в нее параметры генерации :) И даже рутинные рассчеты можно в нее же запихнуть - ускорение, интерполяцию и т.п.

Re: Arduino AccelStepper

Добавлено: 02 фев 2016, 22:26
sidor094
AndyBig писал(а): Она в любом варианте будет низкой на этих микроконтроллерах при более-менее высоких скоростях
Практически абсолютную точность можно получить с помощью программного делителя.
Правда за счет некоторой неравномерности шагов.
AndyBig писал(а):Хотите высокую и стабильную частоту с возможностью измененять ее на единицы процентов - ставьте внешнюю плиску с генераторами импульсов и будет Вам сколько нужно каналов по 200 кГц с абсолютной стабильностью и возможностью менять частоту с шагом в 10 Гц во всем диапазоне Только успевай обсчитывать и запихивать в нее параметры генерации
Ну таких параметров можно достигнуть и на старших моделях STM32.
А к плис всё равно придётся лепить процессор.

Re: Arduino AccelStepper

Добавлено: 02 фев 2016, 22:54
AndyBig
sidor094 писал(а):Практически абсолютную точность можно получить с помощью программного делителя.Правда за счет некоторой неравномерности шагов.
А как это - абсолютная точность, но неравномерность? :) И как можно получить более высокую точность софтом, команды которого выполняются с тем же периодом, с которым тактируется таймер?
sidor094 писал(а):таких параметров можно достигнуть и на старших моделях STM32
Как-то, может быть, и можно, но практической пользы от этого никакой, потому что делать что-то еще контроллер просто не сможет :) Ну и шаг изменения частоты совсем не 10 Гц будет при 200 кГц :)

Re: Arduino AccelStepper

Добавлено: 03 фев 2016, 08:10
sidor094
AndyBig писал(а):И как можно получить более высокую точность софтом, команды которого выполняются с тем же периодом, с которым тактируется таймер?
Деление с остатком.Расстояние между двумя соседними шагами не точно соответствует коэффициенту деления ,но в сумме при учитывании впоследствии при сложении остатка,среднее количество шагов будет точно соответствовать
коэффициенту деления
AndyBig писал(а): Как-то, может быть, и можно, но практической пользы от этого никакой, потому что делать что-то еще контроллер просто не сможет Ну и шаг изменения частоты совсем не 10 Гц будет при 200 кГц
У меня LPC1788
с тактовой 120 мгц выдаёт максимальную частоту шагов 85 кгц с интерполяцией одновременно по по пяти координатам.Это с учетом того что алгоритм разгона-торможения сидит под тем же прерыванием.При этом он одновременно выводит на экран вга 640х480 отображение пяти координат.Планирую перейти на STM32F746 216мгц.Надеюсь получить около 200 кгц выдачу шагов.

Re: Arduino AccelStepper

Добавлено: 03 фев 2016, 08:39
selenur
sidor094 писал(а):Планирую перейти на STM32F746
Я в процессе использования stm32f429 заметил наличие встроенного DSP, и в STM32F746 он так-же есть, если я правильно понял, то с помощью него можно на порядок повысить частоту генерации сигналов.

Re: Arduino AccelStepper

Добавлено: 03 фев 2016, 09:35
sidor094
selenur писал(а): Я в процессе использования stm32f429 заметил наличие встроенного DSP, и в STM32F746 он так-же есть, если я правильно понял, то с помощью него можно на порядок повысить частоту генерации сигналов.
Ну да.Только им надо научиться пользоваться.А вообще у меня только целочисленная арифметика.

Re: Arduino AccelStepper

Добавлено: 03 фев 2016, 10:48
Tomasina
в тему целочисленной арифметики - какого ляда разработчики AccelStepper используют данные размерностью float, ведь операции с ними на порядок медленнее. Где там могут возникать дробные числа, если оперируем целыми шагами, а на 1/8 или 1/16 делит сам драйвер?

Re: Arduino AccelStepper

Добавлено: 03 фев 2016, 11:22
michael-yurov
Tomasina писал(а):Где там могут возникать дробные числа
Ну, например, для линейного ускорения (равномерное изменение частоты) может потребоваться вычислять интервал импульсов (зная частоту), а для этого нужна операция деления.
Хотя, конечно, можно использовать алгоритм Брезенхэма.

Re: Arduino AccelStepper

Добавлено: 03 фев 2016, 11:26
AndyBig
sidor094 писал(а):Планирую перейти на STM32F746 216мгц
А, тогда да, не буду спорить :) Я что-то "старшие модели" воспринял как модели с тактовой до 100 МГц :)

Re: Arduino AccelStepper

Добавлено: 03 фев 2016, 12:09
sidor094
michael-yurov писал(а):Ну, например, для линейного ускорения (равномерное изменение частоты) может потребоваться вычислять интервал импульсов (зная частоту), а для этого нужна операция деления.
Хотя, конечно, можно использовать алгоритм Брезенхэма.
Можно при любом делении обойтись целыми числами с большой разрядностью .Например просто работать с числами в 1000 раз большими и считать три младших разряда тысячными.
michael-yurov писал(а):Хотя, конечно, можно использовать алгоритм Брезенхэма.
По моему это для окружностей и дуг

Re: Arduino AccelStepper

Добавлено: 03 фев 2016, 12:56
michael-yurov
sidor094 писал(а):Можно при любом делении обойтись целыми числами с большой разрядностью .Например просто работать с числами в 1000 раз большими и считать три младших разряда тысячными.
Это и есть дробные числа.

Но я ошибся, подумал речь про операцию деления.
sidor094 писал(а):По моему это для окружностей и дуг
Нет. Это то, что вы писали про накопление остатка в #72 сообщении.

Re: Arduino AccelStepper

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