Допустим есть начало вектора есть конец. Считаем интерполяцию по трем осям. Получаем сколько шагать по x,y, z и временные интервалы(три разные частоты) и все в буфер. Это все потом надо запустить, как ? Опять начнется математика.AndyBig писал(а):На мой взгляд все расчеты должны вестись не в вызове процедуры генерации очередного степа, а в основном цикле, пока результатами не будет заполнен некий буфер.
Arduino AccelStepper
- grakun
- Мастер
- Сообщения: 273
- Зарегистрирован: 30 сен 2015, 02:47
- Репутация: 53
- Настоящее имя: Гракун
- Откуда: г.Саратов
- Контактная информация:
Re: Arduino AccelStepper
- grakun
- Мастер
- Сообщения: 273
- Зарегистрирован: 30 сен 2015, 02:47
- Репутация: 53
- Настоящее имя: Гракун
- Откуда: г.Саратов
- Контактная информация:
Re: Arduino AccelStepper
В первых версиях у меня все считалось предварительно, может быть не правильно запускал, но выигрыша не получилось.
- AndyBig
- Мастер
- Сообщения: 3971
- Зарегистрирован: 07 мар 2014, 04:01
- Репутация: 1121
- Откуда: юг России
- Контактная информация:
Re: Arduino AccelStepper
Какая? Пару сложений в прерывании? Это же не сравнить с рассчетом вектора с интерполяцией.grakun писал(а):Получаем сколько шагать по x,y, z и временные интервалы(три разные частоты) и все в буфер. Это все потом надо запустить, как ? Опять начнется математика.
По-хорошему настраиваем три таймера с выходами и в прерываниях от них подсчитываем выданные импульсы. Достигли значения - останавливаем таймер
-
- Новичок
- Сообщения: 8
- Зарегистрирован: 27 окт 2015, 15:06
- Репутация: 0
- Настоящее имя: Дмитрий
- Контактная информация:
Re: Arduino AccelStepper
да, похоже на щелчки, рукой тоже ощущается.Morroc писал(а):Что то типа щелчка раз в секунду негромкого ? А шаг с какой частотой идет ?
Скорость 4800 шагов в сек (больше не тянет), на драйвере микрошаг 1/8.
- grakun
- Мастер
- Сообщения: 273
- Зарегистрирован: 30 сен 2015, 02:47
- Репутация: 53
- Настоящее имя: Гракун
- Откуда: г.Саратов
- Контактная информация:
Re: Arduino AccelStepper
Это Вы про что? Про мою программу? Первый человек наверно который ее смотрел.Morroc писал(а):В вашем цикле он тоже постоянно вызывается.
- grakun
- Мастер
- Сообщения: 273
- Зарегистрирован: 30 сен 2015, 02:47
- Репутация: 53
- Настоящее имя: Гракун
- Откуда: г.Саратов
- Контактная информация:
Re: Arduino AccelStepper
Ну не знаю. Это все надо как то продумать и проверять.AndyBig писал(а):Какая? Пару сложений в прерывании? Это же не сравнить с рассчетом вектора с интерполяцией.
По-хорошему настраиваем три таймера с выходами и в прерываниях от них подсчитываем выданные импульсы. Достигли значения - останавливаем таймер
- AndyBig
- Мастер
- Сообщения: 3971
- Зарегистрирован: 07 мар 2014, 04:01
- Репутация: 1121
- Откуда: юг России
- Контактная информация:
Re: Arduino AccelStepper
Естественно Все надо продумывать и проверятьgrakun писал(а):Это все надо как то продумать и проверять.
-
- Мастер
- Сообщения: 826
- Зарегистрирован: 20 фев 2014, 09:13
- Репутация: 81
- Настоящее имя: Сергей
- Откуда: Москва
- Контактная информация:
Re: Arduino AccelStepper
Так точность получается низкая.Чем выше скорость и соответственно меньше делитель таймера тем ниже точность соотношения скоростей.Соответственно надо бить строку на короткие отрезки чтобы сохранить точность.А это в свою очередь потребует пересчитывать коэффициенты деления таймеров .Соответственно опять тормоза и неравномерность шагов.AndyBig писал(а):По-хорошему настраиваем три таймера с выходами и в прерываниях от них подсчитываем выданные импульсы. Достигли значения - останавливаем таймер
- AndyBig
- Мастер
- Сообщения: 3971
- Зарегистрирован: 07 мар 2014, 04:01
- Репутация: 1121
- Откуда: юг России
- Контактная информация:
Re: Arduino AccelStepper
Она в любом варианте будет низкой на этих микроконтроллерах при более-менее высоких скоростях. Зато в основном цикле можно заниматься чем угодно, лишь бы рассчеты успевали пополнять буфер.sidor094 писал(а):Чем выше скорость и соответственно меньше делитель таймера тем ниже точность соотношения скоростей
Хотите высокую и стабильную частоту с возможностью измененять ее на единицы процентов - ставьте внешнюю плиску с генераторами импульсов и будет Вам сколько нужно каналов по 200 кГц с абсолютной стабильностью и возможностью менять частоту с шагом в 10 Гц во всем диапазоне Только успевай обсчитывать и запихивать в нее параметры генерации И даже рутинные рассчеты можно в нее же запихнуть - ускорение, интерполяцию и т.п.
-
- Мастер
- Сообщения: 826
- Зарегистрирован: 20 фев 2014, 09:13
- Репутация: 81
- Настоящее имя: Сергей
- Откуда: Москва
- Контактная информация:
Re: Arduino AccelStepper
Практически абсолютную точность можно получить с помощью программного делителя.AndyBig писал(а): Она в любом варианте будет низкой на этих микроконтроллерах при более-менее высоких скоростях
Правда за счет некоторой неравномерности шагов.
Ну таких параметров можно достигнуть и на старших моделях STM32.AndyBig писал(а):Хотите высокую и стабильную частоту с возможностью измененять ее на единицы процентов - ставьте внешнюю плиску с генераторами импульсов и будет Вам сколько нужно каналов по 200 кГц с абсолютной стабильностью и возможностью менять частоту с шагом в 10 Гц во всем диапазоне Только успевай обсчитывать и запихивать в нее параметры генерации
А к плис всё равно придётся лепить процессор.
- AndyBig
- Мастер
- Сообщения: 3971
- Зарегистрирован: 07 мар 2014, 04:01
- Репутация: 1121
- Откуда: юг России
- Контактная информация:
Re: Arduino AccelStepper
А как это - абсолютная точность, но неравномерность? И как можно получить более высокую точность софтом, команды которого выполняются с тем же периодом, с которым тактируется таймер?sidor094 писал(а):Практически абсолютную точность можно получить с помощью программного делителя.Правда за счет некоторой неравномерности шагов.
Как-то, может быть, и можно, но практической пользы от этого никакой, потому что делать что-то еще контроллер просто не сможет Ну и шаг изменения частоты совсем не 10 Гц будет при 200 кГцsidor094 писал(а):таких параметров можно достигнуть и на старших моделях STM32
-
- Мастер
- Сообщения: 826
- Зарегистрирован: 20 фев 2014, 09:13
- Репутация: 81
- Настоящее имя: Сергей
- Откуда: Москва
- Контактная информация:
Re: Arduino AccelStepper
Деление с остатком.Расстояние между двумя соседними шагами не точно соответствует коэффициенту деления ,но в сумме при учитывании впоследствии при сложении остатка,среднее количество шагов будет точно соответствоватьAndyBig писал(а):И как можно получить более высокую точность софтом, команды которого выполняются с тем же периодом, с которым тактируется таймер?
коэффициенту деления
У меня LPC1788AndyBig писал(а): Как-то, может быть, и можно, но практической пользы от этого никакой, потому что делать что-то еще контроллер просто не сможет Ну и шаг изменения частоты совсем не 10 Гц будет при 200 кГц
с тактовой 120 мгц выдаёт максимальную частоту шагов 85 кгц с интерполяцией одновременно по по пяти координатам.Это с учетом того что алгоритм разгона-торможения сидит под тем же прерыванием.При этом он одновременно выводит на экран вга 640х480 отображение пяти координат.Планирую перейти на STM32F746 216мгц.Надеюсь получить около 200 кгц выдачу шагов.
- selenur
- Почётный участник
- Сообщения: 4605
- Зарегистрирован: 21 авг 2013, 19:44
- Репутация: 1622
- Настоящее имя: Сергей
- Откуда: Новый Уренгой
- Контактная информация:
Re: Arduino AccelStepper
Я в процессе использования stm32f429 заметил наличие встроенного DSP, и в STM32F746 он так-же есть, если я правильно понял, то с помощью него можно на порядок повысить частоту генерации сигналов.sidor094 писал(а):Планирую перейти на STM32F746
Мой сайт: http://selenur.ru
Исходники моих программ: https://github.com/selenur
Instagram https://www.instagram.com/zheigurov/
Исходники моих программ: https://github.com/selenur
Instagram https://www.instagram.com/zheigurov/
-
- Мастер
- Сообщения: 826
- Зарегистрирован: 20 фев 2014, 09:13
- Репутация: 81
- Настоящее имя: Сергей
- Откуда: Москва
- Контактная информация:
Re: Arduino AccelStepper
Ну да.Только им надо научиться пользоваться.А вообще у меня только целочисленная арифметика.selenur писал(а): Я в процессе использования stm32f429 заметил наличие встроенного DSP, и в STM32F746 он так-же есть, если я правильно понял, то с помощью него можно на порядок повысить частоту генерации сигналов.
-
- Новичок
- Сообщения: 8
- Зарегистрирован: 27 окт 2015, 15:06
- Репутация: 0
- Настоящее имя: Дмитрий
- Контактная информация:
Re: Arduino AccelStepper
в тему целочисленной арифметики - какого ляда разработчики AccelStepper используют данные размерностью float, ведь операции с ними на порядок медленнее. Где там могут возникать дробные числа, если оперируем целыми шагами, а на 1/8 или 1/16 делит сам драйвер?
- michael-yurov
- Почётный участник
- Сообщения: 11639
- Зарегистрирован: 26 июл 2012, 00:10
- Репутация: 4644
- Настоящее имя: Михаил Львович
- Откуда: Новоуральск
- Контактная информация:
Re: Arduino AccelStepper
Ну, например, для линейного ускорения (равномерное изменение частоты) может потребоваться вычислять интервал импульсов (зная частоту), а для этого нужна операция деления.Tomasina писал(а):Где там могут возникать дробные числа
Хотя, конечно, можно использовать алгоритм Брезенхэма.
- AndyBig
- Мастер
- Сообщения: 3971
- Зарегистрирован: 07 мар 2014, 04:01
- Репутация: 1121
- Откуда: юг России
- Контактная информация:
Re: Arduino AccelStepper
А, тогда да, не буду спорить Я что-то "старшие модели" воспринял как модели с тактовой до 100 МГцsidor094 писал(а):Планирую перейти на STM32F746 216мгц
-
- Мастер
- Сообщения: 826
- Зарегистрирован: 20 фев 2014, 09:13
- Репутация: 81
- Настоящее имя: Сергей
- Откуда: Москва
- Контактная информация:
Re: Arduino AccelStepper
Можно при любом делении обойтись целыми числами с большой разрядностью .Например просто работать с числами в 1000 раз большими и считать три младших разряда тысячными.michael-yurov писал(а):Ну, например, для линейного ускорения (равномерное изменение частоты) может потребоваться вычислять интервал импульсов (зная частоту), а для этого нужна операция деления.
Хотя, конечно, можно использовать алгоритм Брезенхэма.
По моему это для окружностей и дугmichael-yurov писал(а):Хотя, конечно, можно использовать алгоритм Брезенхэма.
- michael-yurov
- Почётный участник
- Сообщения: 11639
- Зарегистрирован: 26 июл 2012, 00:10
- Репутация: 4644
- Настоящее имя: Михаил Львович
- Откуда: Новоуральск
- Контактная информация:
Re: Arduino AccelStepper
Это и есть дробные числа.sidor094 писал(а):Можно при любом делении обойтись целыми числами с большой разрядностью .Например просто работать с числами в 1000 раз большими и считать три младших разряда тысячными.
Но я ошибся, подумал речь про операцию деления.
Нет. Это то, что вы писали про накопление остатка в #72 сообщении.sidor094 писал(а):По моему это для окружностей и дуг
- Serg
- Мастер
- Сообщения: 21923
- Зарегистрирован: 17 апр 2012, 14:58
- Репутация: 5181
- Заслуга: c781c134843e0c1a3de9
- Настоящее имя: Сергей
- Откуда: Москва
- Контактная информация:
Re: Arduino AccelStepper
Не всегда. Для работы с числами большой разрядности, когда разрядность числа превышает разрядность МК нужны соотв. команды. Иначе придётся выполнять операции с такими числами за несколько обычных команд - "железный" блок FP в этом случае будет наверняка быстрее.sidor094 писал(а):Можно при любом делении обойтись целыми числами с большой разрядностью .Например просто работать с числами в 1000 раз большими и считать три младших разряда тысячными.
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...