Пример как можно генерировать шаги для ШД

Контроллеры, драйверы, датчики, управляющие устройства.
Олег А
Новичок
Сообщения: 10
Зарегистрирован: 18 янв 2013, 17:28
Репутация: 0
Контактная информация:

Re: Пример как можно генерировать шаги для ШД

Сообщение Олег А »

Спасибо,
Bender писал(а):Это максимальная частота в герцах которую может выдать программа т.е. самый быстрый ход...
т.е. при установке setFreq(1000) при микрошаге 1/8 максимум мы можем получить на выходе 1000/200/8=0.625*60=37.5rpm,
если требуется 600rpm, то setFreq должен быть установлен в 16000?
все правильно?
Каким образом можно выяснить потолок для конкретной ситуации?
Не повысит ли быстродействие если отказаться работать с секундами, а только с целыми числами (может мили или микро секунды?)
Аватара пользователя
wldev
Мастер
Сообщения: 1650
Зарегистрирован: 24 янв 2012, 16:04
Репутация: 510
Настоящее имя: Сергей Бочаров
Откуда: Новосибирск
Контактная информация:

Re: Пример как можно генерировать шаги для ШД

Сообщение wldev »

Олег А писал(а):т.е. при установке setFreq(1000) при микрошаге 1/8 максимум мы можем получить на выходе 1000/200/8=0.625*60=37.5rpm,
если требуется 600rpm, то setFreq должен быть установлен в 16000?
Дело в том, что суть setFreq заключается в маштабирование времени. Т.е. поставить можно любую частоту, но это этого не измениться максимальная скорость вращения двигателя. Если вы поставите неправильное значение частоты ,то у вас просто будут различаться реальная скорость с заданной
Олег А писал(а):Каким образом можно выяснить потолок для конкретной ситуации?
максимальная скорость будет равна
=freq*dim/2
freq- частота
dim- единица шага
а 2 т.к. это минимальная "пачка" т.е 10,10,10
Олег А писал(а):Не повысит ли быстродействие если отказаться работать с секундами, а только с целыми числами (может мили или микро секунды?)
Надо попробовать... Просто этот код взят из моей программы управления фрезерным станком с помощь ПК (DOS). Там скорость конечно быстрее была.
несущая частота было ок 50 000.
Новости: https://t.me/wldevruch
Обсуждения: https://t.me/wldevgr
Олег А
Новичок
Сообщения: 10
Зарегистрирован: 18 янв 2013, 17:28
Репутация: 0
Контактная информация:

Re: Пример как можно генерировать шаги для ШД

Сообщение Олег А »

Bender писал(а):Надо попробовать... Просто этот код взят из моей программы управления...
Я имел ввиду вообще отказаться от "float", я не программист, но как мне кажется это и является основным тормозом.
Bender писал(а):Если вы поставите неправильное значение частоты ,то у вас просто будут различаться реальная скорость с заданной
Так вот этого я и не понимаю, как узнать правильное? это значение должно как-то соотноситься к тактовому генератору?
Bender писал(а):Т.е. поставить можно любую частоту, но это этого не измениться максимальная скорость
Drive.setFreq(50)
Drive.setParam(0,50,1,1)

Drive.setFreq(100)
Drive.setParam(0,100,1,1)

в этих примерах скорость будет одинаковой? или отличаться в 2 раза?
к сожалению сам проверить не могу, драйвер в дороге.

И чисто теоретически, насколько реально на выходе получить частоту степа 20-30kHz?

p.s. под скоростью я подразумеваю частоту вывода сигнала "STEP", может мы говорим о разных вещах, от того я и не понимаю?
Аватара пользователя
Тима
Почётный участник
Почётный участник
Сообщения: 3162
Зарегистрирован: 01 мар 2012, 20:47
Репутация: 1089
Настоящее имя: Тимур
Откуда: КБР
Контактная информация:

Re: Пример как можно генерировать шаги для ШД

Сообщение Тима »

Эта команда:

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

Drive1.setMovInc(10);  //устанавливаем что нам нужно подвинуться на 100мм / 100градусов
подвинуть на 100мм(к примеру), а как сделать так, чтоб двиг крутился до срабатывания концевика?
Дорогу осилит идущий!
Я все пойму, Вы только дайте денег!!!
Олег А
Новичок
Сообщения: 10
Зарегистрирован: 18 янв 2013, 17:28
Репутация: 0
Контактная информация:

Re: Пример как можно генерировать шаги для ШД

Сообщение Олег А »

Глянул в библиотеку AccelStepper, также сделана на float, в итоге потолок порядка 4000Hz на 16MHz тактовой.
Грустно.
aftaev
Зачётный участник
Зачётный участник
Сообщения: 34042
Зарегистрирован: 04 апр 2010, 19:22
Репутация: 6194
Откуда: Казахстан.
Контактная информация:

Re: Пример как можно генерировать шаги для ШД

Сообщение aftaev »

Дилетанту сложные вещи кажутся очень простыми, и только профессионал понимает насколько сложна самая простая вещь
Кто хочет - ищет возможности, кто не хочет - ищет оправдание.
Найди работу по душе и тебе не придется работать.
Олег А
Новичок
Сообщения: 10
Зарегистрирован: 18 янв 2013, 17:28
Репутация: 0
Контактная информация:

Re: Пример как можно генерировать шаги для ШД

Сообщение Олег А »

Значит надо регистрами шагать,
это с легкостью понимает Ардуиновская оболочка:
PORTx = B00000000;
PORTx = B00000001;
поболее мегагерца потолок будет,
между ними вставить переменную задержки,
я в параллельном форуме тебе в п.м. намекал,
а разгоняться или таблицей (таблицами) с любой кривой или переменную задержки считать по какому легкому алгоритму,
Но мы к времени привязаны не будем, хотя мне это и не надо, как ты знаешь мне надо к шпинделю привязаться.
aftaev
Зачётный участник
Зачётный участник
Сообщения: 34042
Зарегистрирован: 04 апр 2010, 19:22
Репутация: 6194
Откуда: Казахстан.
Контактная информация:

Re: Пример как можно генерировать шаги для ШД

Сообщение aftaev »

Олег А писал(а):между ними вставить переменную задержки,
я в параллельном форуме тебе в п.м. намекал,
А что намекать, я тут пол года на этом форуме намекаю что задержками нужно работать, а мне все про сервоциклы объясняют. Вот ты возьми и напиши без всяких намеков :)
Дилетанту сложные вещи кажутся очень простыми, и только профессионал понимает насколько сложна самая простая вещь
Кто хочет - ищет возможности, кто не хочет - ищет оправдание.
Найди работу по душе и тебе не придется работать.
Олег А
Новичок
Сообщения: 10
Зарегистрирован: 18 янв 2013, 17:28
Репутация: 0
Контактная информация:

Re: Пример как можно генерировать шаги для ШД

Сообщение Олег А »

Я б с удовольствием, но образование абсолютно в другой области,
ты же видишь как я на соседнем форуме побираюсь, и по крохам продвигаюсь,
драйвер приедет и ничего не останется как пробовать.
Но повторюсь я к времени не привязан, я привязан к энкодеру,
т.е. метры в секудну от меня не дождаться.
извиняюсь перед всеми за ОффТоп.
Аватара пользователя
wldev
Мастер
Сообщения: 1650
Зарегистрирован: 24 янв 2012, 16:04
Репутация: 510
Настоящее имя: Сергей Бочаров
Откуда: Новосибирск
Контактная информация:

Re: Пример как можно генерировать шаги для ШД

Сообщение wldev »

Тима писал(а):подвинуть на 100мм(к примеру), а как сделать так, чтоб двиг крутился до срабатывания концевика?
Ставиш движение заведомо чтобы он дошёл до концевика, а потом
если быстро как аварийный останов,то нужно вызвать Drive.emgStop();
если плавно, то Drive.stop()
Олег А писал(а): Drive.setFreq(50)
Drive.setParam(0,50,1,1)

Drive.setFreq(100)
Drive.setParam(0,100,1,1)

в этих примерах скорость будет одинаковой? или отличаться в 2 раза?
А размерность шага где? ладно пусть будет одинаковой и равна 1мм
тогда максимальная скорость =freq*dim/2 или
1)50(1/с)*1(мм)/2=25мм/с
2)100(1/с)*1(мм)/2=50мм/с

Олег А писал(а):Глянул в библиотеку AccelStepper, также сделана на float, в итоге потолок порядка 4000Hz на 16MHz тактовой.
Грустно.
А какую частоту может выдать андруино если поставить цикл
типа
while(1)
{
out(1);
out(0);
}
Я не думаю, что будет даже и 500КГц. Кто нибудь померьте!
Плюс ещё на до учитывать, что нужно обеспечивать какуе-то логику, доп расчёты и пр.
Также нет необходимости опрашивать входы с такой же частотой скажем в 4000Гц. Достаточно будет и 1КГц....

А так вообще самая "тяжёлая" или "затратная" операция это деление... Но без неё никуда...

Короче,надо померить "потолок" частоты по примеру который был выше. А уже потом смотреть...
Я брал плату себе для опытов типа как андруино (FEZ Panda 2), так она выдавала максимум около 2КГц...
Также на производстве используется контроллер(http://icpdas.ru/good/show/17384/1872754/), так у него потолок 500Гц.
я хочу сказать, что максимальная частота определяется не частотой процессора, а портом ввода-вывода...
Новости: https://t.me/wldevruch
Обсуждения: https://t.me/wldevgr
Аватара пользователя
Тима
Почётный участник
Почётный участник
Сообщения: 3162
Зарегистрирован: 01 мар 2012, 20:47
Репутация: 1089
Настоящее имя: Тимур
Откуда: КБР
Контактная информация:

Re: Пример как можно генерировать шаги для ШД

Сообщение Тима »

Bender писал(а):Ставиш движение заведомо чтобы он дошёл до концевика,
В смысле, ставить перемещение(к примеру) 10м и прерывать по срабатыванию концевика?
Дорогу осилит идущий!
Я все пойму, Вы только дайте денег!!!
Аватара пользователя
wldev
Мастер
Сообщения: 1650
Зарегистрирован: 24 янв 2012, 16:04
Репутация: 510
Настоящее имя: Сергей Бочаров
Откуда: Новосибирск
Контактная информация:

Re: Пример как можно генерировать шаги для ШД

Сообщение wldev »

Тима писал(а): смысле, ставить перемещение(к примеру) 10м и прерывать по срабатыванию концевика?
Ну да, так обычно и делают...
Новости: https://t.me/wldevruch
Обсуждения: https://t.me/wldevgr
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: Пример как можно генерировать шаги для ШД

Сообщение Nick »

У меня потолок ардуины получался в районе 40кГц...
Исследование генераторов шагов LinuxCNC, Mach и прочих #74
Аватара пользователя
wldev
Мастер
Сообщения: 1650
Зарегистрирован: 24 янв 2012, 16:04
Репутация: 510
Настоящее имя: Сергей Бочаров
Откуда: Новосибирск
Контактная информация:

Re: Пример как можно генерировать шаги для ШД

Сообщение wldev »

Nick писал(а):У меня потолок ардуины получался в районе 40кГц...
Значит будем думать...
Новости: https://t.me/wldevruch
Обсуждения: https://t.me/wldevgr
Аватара пользователя
Сергей Саныч
Мастер
Сообщения: 9116
Зарегистрирован: 30 май 2012, 14:20
Репутация: 2858
Откуда: Тюмень
Контактная информация:

Re: Пример как можно генерировать шаги для ШД

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

Такие вещи пишутся:
а) по прерываниям на максимальном приоритете
б) с использованием аппаратных таймеров МК
в) на ассемблере
Предварительные расчеты ведутся в фоновом режиме с максимальным использованием целочисленной арифметики.
Всякий ввод и отображение - тоже.
Сейчас скажут: ну так покажи мастер-класс!
Но, к сожалению, Атмел - не моя епархия, и Arduino я никогда не пользовал. А то, на чем смог бы (МК серии SX) - вещь малораспространенная :(
Чудес не бывает. Бывают фокусы.
Аватара пользователя
wldev
Мастер
Сообщения: 1650
Зарегистрирован: 24 янв 2012, 16:04
Репутация: 510
Настоящее имя: Сергей Бочаров
Откуда: Новосибирск
Контактная информация:

Re: Пример как можно генерировать шаги для ШД

Сообщение wldev »

Serg-tmn писал(а):Такие вещи пишутся:
а) по прерываниям на максимальном приоритете
б) с использованием аппаратных таймеров МК
в) на ассемблере
Ой спасибо, а я и не знал....
Serg-tmn писал(а):Сейчас скажут: ну так покажи мастер-класс!
Так в том то и дело что у нас все знают как, но никто ничего не делает, а жаль.
... Меня попросили и я сделал за 30 мин. как альтруист. вот и всё...
Serg-tmn писал(а):Но, к сожалению, Атмел - не моя епархия, и Arduino я никогда не пользовал. А то, на чем смог бы (МК серии SX) - вещь малораспространенная.
-Дайте молоток, дайте гвоздь я забью!
-Гранаты у них не той системы...

ps.
извиняюсь если обидел...
Новости: https://t.me/wldevruch
Обсуждения: https://t.me/wldevgr
2cme
Почётный участник
Почётный участник
Сообщения: 1043
Зарегистрирован: 24 янв 2012, 13:18
Репутация: -209

Re: Пример как можно генерировать шаги для ШД

Сообщение 2cme »

Имхо: я бы начал с формул описывающих динамику шагового двигателя, затем алгоритм и уже потом кодинг.
Вычисления формул "сильно кушают" ресурсы МК, т.к. есть вычисления с плавающей точкой и вычисления квадратного корня, поэтому необходимо применять "лазейку", если применяется МК со скромными ресурсами.
Возможно будет полезна вот эта дока
doc8017.pdf
(152.63 КБ) 1192 скачивания
.
Serg-tmn писал(а):Такие вещи пишутся:
а) по прерываниям на максимальном приоритете
б) с использованием аппаратных таймеров МК
в) на ассемблере
Совершенно верно.
Serg-tmn писал(а):Предварительные расчеты ведутся в фоновом режиме с максимальным использованием целочисленной арифметики.
Целочисленной арифметика и есть "лазейка" упрощенных формул.
Serg-tmn писал(а):Сейчас скажут: ну так покажи мастер-класс!
Но, к сожалению, Атмел - не моя епархия, и Arduino я никогда не пользовал. А то, на чем смог бы (МК серии SX) - вещь малораспространенная :(
Классическая отмазка....
Аватара пользователя
Сергей Саныч
Мастер
Сообщения: 9116
Зарегистрирован: 30 май 2012, 14:20
Репутация: 2858
Откуда: Тюмень
Контактная информация:

Re: Пример как можно генерировать шаги для ШД

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

Bender писал(а):Ой спасибо, а я и не знал....
А хотелось по-быстрому, на Си и с плавающей точкой.
А потом понадобилась индикация, задание параметров, и из простенькой демонстрашки начало расти нечто, что данной платформе не по зубам.
Bender писал(а):... Меня попросили и я сделал за 30 мин. как альтруист. вот и всё...
Крайне знакомая ситуация, сам сколько раз в такие попадал.
Bender писал(а):извиняюсь если обидел...
Да брось ты. Все правильно.
Чудес не бывает. Бывают фокусы.
Аватара пользователя
Сергей Саныч
Мастер
Сообщения: 9116
Зарегистрирован: 30 май 2012, 14:20
Репутация: 2858
Откуда: Тюмень
Контактная информация:

Re: Пример как можно генерировать шаги для ШД

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

Сейчас подумал, ардуин, как понимаю, целый зоопарк и попытка перейти на низкоуровневое программирование (порты, таймеры конкретного МК) резко снизит совместимость.
Чудес не бывает. Бывают фокусы.
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5183
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: Пример как можно генерировать шаги для ШД

Сообщение Serg »

Serg-tmn писал(а):Такие вещи пишутся:
а) по прерываниям на максимальном приоритете
б) с использованием аппаратных таймеров МК
в) на ассемблере
Предварительные расчеты ведутся в фоновом режиме с максимальным использованием целочисленной арифметики.
Всякий ввод и отображение - тоже.
а) у ардуины нет приоритетов прерываний
б) как сгенерить ими конкретное количество ипмульсов с учётом разгонов и торможений?
в) при использовании нормального компилятора с хорошим оптимизатором (ну и умения им пользоваться) разница в скорости будет в пределах погрешности измерений.
Serg-tmn писал(а):Сейчас подумал, ардуин, как понимаю, целый зоопарк и попытка перейти на низкоуровневое программирование (порты, таймеры конкретного МК) резко снизит совместимость.
перелезай на stm8/stm32 - там и перефирия побогаче и полная совместимость по портам и т.п. в пределах линейки.
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Ответить

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