Страница 5 из 7
Re: Пример как можно генерировать шаги для ШД
Добавлено: 19 янв 2013, 15:04
Олег А
Спасибо,
Bender писал(а):Это максимальная частота в герцах которую может выдать программа т.е. самый быстрый ход...
т.е. при установке setFreq(1000) при микрошаге 1/8 максимум мы можем получить на выходе 1000/200/8=0.625*60=37.5rpm,
если требуется 600rpm, то setFreq должен быть установлен в 16000?
все правильно?
Каким образом можно выяснить потолок для конкретной ситуации?
Не повысит ли быстродействие если отказаться работать с секундами, а только с целыми числами (может мили или микро секунды?)
Re: Пример как можно генерировать шаги для ШД
Добавлено: 19 янв 2013, 19:43
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.
Re: Пример как можно генерировать шаги для ШД
Добавлено: 19 янв 2013, 22:23
Олег А
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", может мы говорим о разных вещах, от того я и не понимаю?
Re: Пример как можно генерировать шаги для ШД
Добавлено: 20 янв 2013, 10:58
Тима
Эта команда:
Код: Выделить всё
Drive1.setMovInc(10); //устанавливаем что нам нужно подвинуться на 100мм / 100градусов
подвинуть на 100мм(к примеру), а как сделать так, чтоб двиг крутился до срабатывания концевика?
Re: Пример как можно генерировать шаги для ШД
Добавлено: 20 янв 2013, 19:32
Олег А
Глянул в библиотеку AccelStepper, также сделана на float, в итоге потолок порядка 4000Hz на 16MHz тактовой.
Грустно.
Re: Пример как можно генерировать шаги для ШД
Добавлено: 20 янв 2013, 20:42
aftaev
Re: Пример как можно генерировать шаги для ШД
Добавлено: 20 янв 2013, 22:28
Олег А
Значит надо регистрами шагать,
это с легкостью понимает Ардуиновская оболочка:
PORTx = B00000000;
PORTx = B00000001;
поболее мегагерца потолок будет,
между ними вставить переменную задержки,
я в параллельном форуме тебе в п.м. намекал,
а разгоняться или таблицей (таблицами) с любой кривой или переменную задержки считать по какому легкому алгоритму,
Но мы к времени привязаны не будем, хотя мне это и не надо, как ты знаешь мне надо к шпинделю привязаться.
Re: Пример как можно генерировать шаги для ШД
Добавлено: 20 янв 2013, 22:50
aftaev
Олег А писал(а):между ними вставить переменную задержки,
я в параллельном форуме тебе в п.м. намекал,
А что намекать, я тут пол года на этом форуме намекаю что задержками нужно работать, а мне все про сервоциклы объясняют. Вот ты возьми и напиши без всяких намеков

Re: Пример как можно генерировать шаги для ШД
Добавлено: 20 янв 2013, 23:52
Олег А
Я б с удовольствием, но образование абсолютно в другой области,
ты же видишь как я на соседнем форуме побираюсь, и по крохам продвигаюсь,
драйвер приедет и ничего не останется как пробовать.
Но повторюсь я к времени не привязан, я привязан к энкодеру,
т.е. метры в секудну от меня не дождаться.
извиняюсь перед всеми за ОффТоп.
Re: Пример как можно генерировать шаги для ШД
Добавлено: 21 янв 2013, 04:23
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Гц.
я хочу сказать, что максимальная частота определяется не частотой процессора, а портом ввода-вывода...
Re: Пример как можно генерировать шаги для ШД
Добавлено: 21 янв 2013, 07:22
Тима
Bender писал(а):Ставиш движение заведомо чтобы он дошёл до концевика,
В смысле, ставить перемещение(к примеру) 10м и прерывать по срабатыванию концевика?
Re: Пример как можно генерировать шаги для ШД
Добавлено: 21 янв 2013, 09:27
wldev
Тима писал(а): смысле, ставить перемещение(к примеру) 10м и прерывать по срабатыванию концевика?
Ну да, так обычно и делают...
Re: Пример как можно генерировать шаги для ШД
Добавлено: 21 янв 2013, 10:21
Nick
Re: Пример как можно генерировать шаги для ШД
Добавлено: 22 янв 2013, 04:15
wldev
Nick писал(а):У меня потолок ардуины получался в районе 40кГц...
Значит будем думать...
Re: Пример как можно генерировать шаги для ШД
Добавлено: 22 янв 2013, 06:47
Сергей Саныч
Такие вещи пишутся:
а) по прерываниям на максимальном приоритете
б) с использованием аппаратных таймеров МК
в) на ассемблере
Предварительные расчеты ведутся в фоновом режиме с максимальным использованием целочисленной арифметики.
Всякий ввод и отображение - тоже.
Сейчас скажут: ну так покажи мастер-класс!
Но, к сожалению, Атмел - не моя епархия, и Arduino я никогда не пользовал. А то, на чем смог бы (МК серии SX) - вещь малораспространенная

Re: Пример как можно генерировать шаги для ШД
Добавлено: 22 янв 2013, 09:54
wldev
Serg-tmn писал(а):Такие вещи пишутся:
а) по прерываниям на максимальном приоритете
б) с использованием аппаратных таймеров МК
в) на ассемблере
Ой спасибо, а я и не знал....
Serg-tmn писал(а):Сейчас скажут: ну так покажи мастер-класс!
Так в том то и дело что у нас все знают как, но никто ничего не делает, а жаль.
... Меня попросили и я сделал за 30 мин. как альтруист. вот и всё...
Serg-tmn писал(а):Но, к сожалению, Атмел - не моя епархия, и Arduino я никогда не пользовал. А то, на чем смог бы (МК серии SX) - вещь малораспространенная.
-Дайте молоток, дайте гвоздь я забью!
-Гранаты у них не той системы...
ps.
извиняюсь если обидел...
Re: Пример как можно генерировать шаги для ШД
Добавлено: 22 янв 2013, 09:58
2cme
Имхо: я бы начал с формул описывающих динамику шагового двигателя, затем алгоритм и уже потом кодинг.
Вычисления формул "сильно кушают" ресурсы МК, т.к. есть вычисления с плавающей точкой и вычисления квадратного корня, поэтому необходимо применять "лазейку", если применяется МК со скромными ресурсами.
Возможно будет полезна вот эта дока
.
Serg-tmn писал(а):Такие вещи пишутся:
а) по прерываниям на максимальном приоритете
б) с использованием аппаратных таймеров МК
в) на ассемблере
Совершенно верно.
Serg-tmn писал(а):Предварительные расчеты ведутся в фоновом режиме с максимальным использованием целочисленной арифметики.
Целочисленной арифметика и есть "лазейка" упрощенных формул.
Serg-tmn писал(а):Сейчас скажут: ну так покажи мастер-класс!
Но, к сожалению, Атмел - не моя епархия, и Arduino я никогда не пользовал. А то, на чем смог бы (МК серии SX) - вещь малораспространенная

Классическая отмазка....
Re: Пример как можно генерировать шаги для ШД
Добавлено: 22 янв 2013, 10:18
Сергей Саныч
Bender писал(а):Ой спасибо, а я и не знал....
А хотелось по-быстрому, на Си и с плавающей точкой.
А потом понадобилась индикация, задание параметров, и из простенькой демонстрашки начало расти нечто, что данной платформе не по зубам.
Bender писал(а):... Меня попросили и я сделал за 30 мин. как альтруист. вот и всё...
Крайне знакомая ситуация, сам сколько раз в такие попадал.
Bender писал(а):извиняюсь если обидел...
Да брось ты. Все правильно.
Re: Пример как можно генерировать шаги для ШД
Добавлено: 22 янв 2013, 10:25
Сергей Саныч
Сейчас подумал, ардуин, как понимаю, целый зоопарк и попытка перейти на низкоуровневое программирование (порты, таймеры конкретного МК) резко снизит совместимость.
Re: Пример как можно генерировать шаги для ШД
Добавлено: 22 янв 2013, 11:55
Serg
Serg-tmn писал(а):Такие вещи пишутся:
а) по прерываниям на максимальном приоритете
б) с использованием аппаратных таймеров МК
в) на ассемблере
Предварительные расчеты ведутся в фоновом режиме с максимальным использованием целочисленной арифметики.
Всякий ввод и отображение - тоже.
а) у ардуины нет приоритетов прерываний
б) как сгенерить ими конкретное количество ипмульсов с учётом разгонов и торможений?
в) при использовании нормального компилятора с хорошим оптимизатором (ну и умения им пользоваться) разница в скорости будет в пределах погрешности измерений.
Serg-tmn писал(а):Сейчас подумал, ардуин, как понимаю, целый зоопарк и попытка перейти на низкоуровневое программирование (порты, таймеры конкретного МК) резко снизит совместимость.
перелезай на stm8/stm32 - там и перефирия побогаче и полная совместимость по портам и т.п. в пределах линейки.