реклама на сайте
подробности

 
 
> Алгоритм линейного ускорения-торможения ШД, Есть элегантное решение?
dinam
сообщение May 4 2009, 04:53
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 1 415
Регистрация: 10-06-05
Из: Наукоград Кольцово(Новосибирск)
Пользователь №: 5 898



Сваял плату управления четырьмя ШД. В известной статье , авторства Л.Pидико есть формула: T = T0/(1+T0At), где T – длительность шага, T0 – начальная длительность шага, A – ускорение, t – текущее время. У меня управление ШД сделано на самом хилом Cyclone II. При попытке в лоб реализовать эту формулу съедаются все ресурсы FPGA даже при управлении одного ШД. Может быть есть более элегантное решение позволяющее вычислить период следующего шага при линейном ускорении-торможении?
Go to the top of the page
 
+Quote Post
2 страниц V   1 2 >  
Start new topic
Ответов (1 - 26)
LessNik
сообщение May 4 2009, 05:18
Сообщение #2


Частый гость
**

Группа: Свой
Сообщений: 107
Регистрация: 6-09-06
Из: Москва
Пользователь №: 20 118



С Cyclone II не работал. Но думаю, можешь сгенерить таблицу с нужными длительностями шага.
Go to the top of the page
 
+Quote Post
Methane
сообщение May 4 2009, 05:35
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 3 615
Регистрация: 12-01-09
Из: США, Главное разведовательное управление
Пользователь №: 43 230



Цитата(dinam @ May 4 2009, 07:53) *
Сваял плату управления четырьмя ШД. В известной статье , авторства Л.Pидико есть формула: T = T0/(1+T0At), где T – длительность шага, T0 – начальная длительность шага, A – ускорение, t – текущее время. У меня управление ШД сделано на самом хилом Cyclone II. При попытке в лоб реализовать эту формулу съедаются все ресурсы FPGA даже при управлении одного ШД. Может быть есть более элегантное решение позволяющее вычислить период следующего шага при линейном ускорении-торможении?

Там же есть макрофункция ROM. В нее и запишите значения. А потом просто инкрементируйте адресс, с данных получайте время шага. Хотя что-то сомнительно что одно умножение на константу у вас циклон второй съело.
Go to the top of the page
 
+Quote Post
dinam
сообщение May 4 2009, 06:04
Сообщение #4


Профессионал
*****

Группа: Свой
Сообщений: 1 415
Регистрация: 10-06-05
Из: Наукоград Кольцово(Новосибирск)
Пользователь №: 5 898



Не совсем понял про какую вы таблицу говорите. Ведь у меня в этой формуле есть три переменные. T0 и А задаются с компьютера и t берется со счетчика в FPGA. Умножение практические не съедает ресурсов, используются аппаратные умножители. Основная проблема в делениии.
Go to the top of the page
 
+Quote Post
Methane
сообщение May 4 2009, 06:29
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 3 615
Регистрация: 12-01-09
Из: США, Главное разведовательное управление
Пользователь №: 43 230



Цитата(dinam @ May 4 2009, 09:04) *
Не совсем понял про какую вы таблицу говорите. Ведь у меня в этой формуле есть три переменные. T0 и А задаются с компьютера и t берется со счетчика в FPGA. Умножение практические не съедает ресурсов, используются аппаратные умножители. Основная проблема в делениии.

Ну так замените деление умножением. Если не можете формулу упростить.
Go to the top of the page
 
+Quote Post
evgeny_ch
сообщение May 4 2009, 07:14
Сообщение #6


чукчхэшаражогрмонтажник
*****

Группа: Участник
Сообщений: 1 852
Регистрация: 13-07-07
Из: Minsk
Пользователь №: 29 094



Цитата(dinam @ May 4 2009, 07:53) *
Сваял плату управления четырьмя ШД. В известной статье , авторства Л.Pидико есть формула: T = T0/(1+T0At), где T – длительность шага, T0 – начальная длительность шага, A – ускорение, t – текущее время. У меня управление ШД сделано на самом хилом Cyclone II. При попытке в лоб реализовать эту формулу съедаются все ресурсы FPGA даже при управлении одного ШД. Может быть есть более элегантное решение позволяющее вычислить период следующего шага при линейном ускорении-торможении?
Не совсем верный заголовок в части формулировки линейное ускорение/торможение.
Ускорение ШД (точнее механизма с ШД) принимается равным константе, а изменяется лишь скорость (частота вращения).
Правильно говорить разгон/торможение как закон изменения скорости, который может быть и нелинейным.

Сообщение отредактировал evgeny_ch - May 4 2009, 07:16


--------------------
Quo vadis?
Go to the top of the page
 
+Quote Post
dinam
сообщение May 4 2009, 07:38
Сообщение #7


Профессионал
*****

Группа: Свой
Сообщений: 1 415
Регистрация: 10-06-05
Из: Наукоград Кольцово(Новосибирск)
Пользователь №: 5 898



Цитата(Methane @ May 4 2009, 13:29) *
Ну так замените деление умножением. Если не можете формулу упростить.
А поконкретнее можно?
Цитата(evgeny_ch @ May 4 2009, 14:14) *
Не совсем верный заголовок в части формулировки линейное ускорение/торможение.
Ускорение ШД (точнее механизма с ШД) принимается равным константе, а изменяется лишь скорость (частота вращения).
Правильно говорить разгон/торможение как закон изменения скорости, который может быть и нелинейным.
Возможно вы и правы cheers.gif . Сейчас у меня реализован нелинейный закон изменения скорости при разгоне и торможении. К тому же ещё и можно задавать разные значения при разгоне/торможении. И всё это хозяйство немного ресурсов требует. А вот линейное изменение скорости у меня пока не получается.
Go to the top of the page
 
+Quote Post
Methane
сообщение May 4 2009, 07:51
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 3 615
Регистрация: 12-01-09
Из: США, Главное разведовательное управление
Пользователь №: 43 230



Цитата(dinam @ May 4 2009, 10:38) *
А поконкретнее можно?

Ну вынесите в таблицу значения

Y[i]=T0/(1+T0*A*t[i])

Или вообще сделайте обратную связь по перемещению шагового двигателя.
Go to the top of the page
 
+Quote Post
dinam
сообщение May 4 2009, 08:03
Сообщение #9


Профессионал
*****

Группа: Свой
Сообщений: 1 415
Регистрация: 10-06-05
Из: Наукоград Кольцово(Новосибирск)
Пользователь №: 5 898



Цитата(Methane @ May 4 2009, 14:51) *
Ну вынесите в таблицу значения

Y[i]=T0/(1+T0*A*t[i])

Или вообще сделайте обратную связь по перемещению шагового двигателя.
Если б T0 и A были бы известной константой, то проблем бы не было. Сам этот способ уже не раз применял.
Go to the top of the page
 
+Quote Post
VladimirYU
сообщение May 4 2009, 08:06
Сообщение #10


Местный
***

Группа: Свой
Сообщений: 426
Регистрация: 5-04-07
Из: Санкт-Петербург
Пользователь №: 26 782



Цитата(Methane @ May 4 2009, 11:51) *
Ну вынесите в таблицу значения

Y[i]=T0/(1+T0*A*t[i])

Или вообще сделайте обратную связь по перемещению шагового двигателя.

А без обратной связи по скорости ИМХО задача для произвольной нагрузки вообще не решается.
Go to the top of the page
 
+Quote Post
Methane
сообщение May 4 2009, 08:09
Сообщение #11


Гуру
******

Группа: Свой
Сообщений: 3 615
Регистрация: 12-01-09
Из: США, Главное разведовательное управление
Пользователь №: 43 230



Цитата(dinam @ May 4 2009, 11:03) *
Если б T0 и A были бы известной константой, то проблем бы не было. Сам этот способ уже не раз применял.

Ну так найдите пределы изменения T0 и А, и забейте в таблицу только деление. Потом можно линейно аппроксимировать. И вообще, можно туда запхать NIOS, который и будет делить.

Вы что-то делаете не так, причем сильно не так.
Go to the top of the page
 
+Quote Post
evgeny_ch
сообщение May 4 2009, 08:11
Сообщение #12


чукчхэшаражогрмонтажник
*****

Группа: Участник
Сообщений: 1 852
Регистрация: 13-07-07
Из: Minsk
Пользователь №: 29 094



Цитата(dinam @ May 4 2009, 10:38) *
А поконкретнее можно?
Возможно вы и правы cheers.gif . Сейчас у меня реализован нелинейный закон изменения скорости при разгоне и торможении. К тому же ещё и можно задавать разные значения при разгоне/торможении. И всё это хозяйство немного ресурсов требует. А вот линейное изменение скорости у меня пока не получается.
AVR446: Linear speed control of stepper motor.
Driving Stepper Motors with Quadratic Equations.
Generate stepper-motor speed proiles in real time.

Сообщение отредактировал evgeny_ch - May 4 2009, 08:21


--------------------
Quo vadis?
Go to the top of the page
 
+Quote Post
Methane
сообщение May 4 2009, 08:11
Сообщение #13


Гуру
******

Группа: Свой
Сообщений: 3 615
Регистрация: 12-01-09
Из: США, Главное разведовательное управление
Пользователь №: 43 230



Цитата(VladimirYU @ May 4 2009, 11:06) *
А без обратной связи по скорости ИМХО задача для произвольной нагрузки вообще не решается.

Не по скорости а по перемещению. И решается. Если забивать в программу момент который эта нагрузка создает. Но это в теории. А на практике, лучше повесить на двигатель енкодер с дырками, и по этому енкодеру смотреть, шагнул двигатель или еще нет.
Go to the top of the page
 
+Quote Post
dinam
сообщение May 4 2009, 08:13
Сообщение #14


Профессионал
*****

Группа: Свой
Сообщений: 1 415
Регистрация: 10-06-05
Из: Наукоград Кольцово(Новосибирск)
Пользователь №: 5 898



Цитата(VladimirYU @ May 4 2009, 15:06) *
А без обратной связи по скорости ИМХО задача для произвольной нагрузки вообще не решается.
Ну такая задача не стоит. Т.к. предполагается что при любых заданных движениях пропусков шагов или другой бяки не происходит smile.gif . На всякий случай на исполнительном механизме стоит абсолютный датчик угловых перемещений.
Цитата(Methane @ May 4 2009, 15:11) *
Не по скорости а по перемещению. И решается. Если забивать в программу момент который эта нагрузка создает. Но это в теории. А на практике, лучше повесить на двигатель енкодер с дырками, и по этому енкодеру смотреть, шагнул двигатель или еще нет.
Да и тяжеловато это будет сделать. Сейчас у меня происходит управление по микрошагам. В каждом шаге 16 микрошагов. Двигатель с нагрузкой в виде абсолютного энкодера отрабатывает сейчас более 10 тыс. шагов в секуду. И это ещё не предел по силовой части. В общем хочется реализовать линейность именно в математике алгоритма, без всяких внешних датчиков.
Go to the top of the page
 
+Quote Post
VladimirYU
сообщение May 4 2009, 08:21
Сообщение #15


Местный
***

Группа: Свой
Сообщений: 426
Регистрация: 5-04-07
Из: Санкт-Петербург
Пользователь №: 26 782



Цитата(Methane @ May 4 2009, 12:11) *
Не по скорости а по перемещению. И решается. Если забивать в программу момент который эта нагрузка создает. Но это в теории. А на практике, лучше повесить на двигатель енкодер с дырками, и по этому енкодеру смотреть, шагнул двигатель или еще нет.

Именно по скорости. Обратная связь должна быть по регулируемой величине, да еще желательно и по ее производной, а не по ее интегралу. Ну а требуемый момент должен обеспечить драйвер управляющий током в фазах шаговика. Обратная связю по перемещению должна обеспечивать необходимую динамику и точность выхода в заданную позицию.
Go to the top of the page
 
+Quote Post
evgeny_ch
сообщение May 4 2009, 08:23
Сообщение #16


чукчхэшаражогрмонтажник
*****

Группа: Участник
Сообщений: 1 852
Регистрация: 13-07-07
Из: Minsk
Пользователь №: 29 094



Цитата(Methane @ May 4 2009, 11:11) *
Не по скорости а по перемещению. И решается. Если забивать в программу момент который эта нагрузка создает. Но это в теории. А на практике, лучше повесить на двигатель енкодер с дырками, и по этому енкодеру смотреть, шагнул двигатель или еще нет.
Не совсем так или так но не совсем.
В этом случае коммутация ШД осуществляется импульсами энкодера,
т. н. автокоммутация. Позволяет избавиться от резонансов и потери шагов.
Это делается просто на аппаратном уровне, как в контроллерах для BLDC
приводов HDD и пр. крутилок.

Сообщение отредактировал evgeny_ch - May 4 2009, 08:28


--------------------
Quo vadis?
Go to the top of the page
 
+Quote Post
Methane
сообщение May 4 2009, 08:26
Сообщение #17


Гуру
******

Группа: Свой
Сообщений: 3 615
Регистрация: 12-01-09
Из: США, Главное разведовательное управление
Пользователь №: 43 230



Цитата(evgeny_ch @ May 4 2009, 11:23) *
Не совсем так или так но не совсем.
В этом случает коммутация ШД осуществляется импульсами энкодера,
т. н. автокоммутация. Позволяет избавиться от резонансов и потери шагов.

Ну? Нафига в таком случае тот ваш алгоритм?
Go to the top of the page
 
+Quote Post
_Pasha
сообщение May 4 2009, 08:53
Сообщение #18


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Я тут подумал: раз у нас все сводится к конечным значениям длительности, попробуйте покопать приближение с помощью цепных дробей. Думаю, за вменяемое кол-во итераций все-же можно избавиться от деления. Наверное, и критерий будет такой, чтобы время не превышало аналогичной операции деления.
Go to the top of the page
 
+Quote Post
Огурцов
сообщение May 4 2009, 09:38
Сообщение #19


Гуру
******

Группа: Участник
Сообщений: 3 928
Регистрация: 28-03-07
Из: РФ
Пользователь №: 26 588



Поставьте датчик ускорения - будет красиво
Go to the top of the page
 
+Quote Post
khach
сообщение May 4 2009, 10:22
Сообщение #20


Гуру
******

Группа: Свой
Сообщений: 3 439
Регистрация: 29-12-04
Пользователь №: 1 741



"Красиво" управлять шаговиком- это только по таблицам. Обычно простой рампы (трапеции) достаточно. Но иногда нужен безударный разгон-торможение (т.е ускорение меняется тоже плавно от нуля к максимуму и наоборот) или учет потерь вращающего момента шаговика на высоких оборотах. Хуже всего, если механическая характеристика подвижной части системы переменная (например с грузом и без груза), а ездить надо с максимальной скоростью. Приходиться заводить несколько таблиц разгон-торможение.
По обратной связи- обычно достаточно диска на валу шаговика с прорезью и контролировать число шагов на оборот. Если их оказалось не 400 ( в полушаге для типовых моторов) то произошла потеря позиции и надо "кричать караул"- звать наладчика для корректировки законов разгона- торможения или смазки механизма. Энкодер бывает нужен только на этапе отладки механики в процессе проектирования привода, но там желателен и тензометрический датчик момента на валу, и датчик линейных ускорений подвижной части привода итд.
Go to the top of the page
 
+Quote Post
Methane
сообщение May 4 2009, 10:41
Сообщение #21


Гуру
******

Группа: Свой
Сообщений: 3 615
Регистрация: 12-01-09
Из: США, Главное разведовательное управление
Пользователь №: 43 230



Цитата(khach @ May 4 2009, 13:22) *
По обратной связи- обычно достаточно диска на валу шаговика с прорезью и контролировать число шагов на оборот. Если их оказалось не 400 ( в полушаге для типовых моторов) то произошла потеря позиции и надо "кричать караул"- звать наладчика для корректировки законов разгона- торможения или смазки механизма.

Зачем? Просто не делать следующий шаг, пока текущий не завершён. Все.
Go to the top of the page
 
+Quote Post
evgeny_ch
сообщение May 4 2009, 10:44
Сообщение #22


чукчхэшаражогрмонтажник
*****

Группа: Участник
Сообщений: 1 852
Регистрация: 13-07-07
Из: Minsk
Пользователь №: 29 094



Цитата(Methane @ May 4 2009, 11:26) *
Ну? Нафига в таком случае тот ваш алгоритм?
Тот алгоритм это какой? biggrin.gif
Я вроде и не предлагал алгоритмов.
Что касаемо ускорения, то его нужно рассматривать
применительно к механизму, но это не алгорим, аксиома называется.
Ненагруженный ШД (т. е. соотношение момента к инерции нагрузки)
может стартовать с максимальным ускорением, нагруженный с меньшим.
Что касается автонастройки, то без ОС это невозможно.


--------------------
Quo vadis?
Go to the top of the page
 
+Quote Post
khach
сообщение May 4 2009, 11:56
Сообщение #23


Гуру
******

Группа: Свой
Сообщений: 3 439
Регистрация: 29-12-04
Пользователь №: 1 741



Цитата(Methane @ May 4 2009, 12:41) *
Зачем? Просто не делать следующий шаг, пока текущий не завершён. Все.

Непонял. Мы же плавно разгоняемя до какой- то неведомой скорости, которая определяется трением в механизме, моментом инерции движущихся частей, уменьшением момента двигателя при росте частоты "шагания" и еще кучей параметров. Можно конечно все это моделировать, но обычно я пишу для готового механизма простенькую отладочную программку которя, безопасно двигая механизм, постепенно повышает скорость движения. И по датчику на валу отслеживает, при какой скорости начнем терять шаги. Получаю максимальную скорость механизма для данного движка и параметров его питания. Даю 25% запас по частоте и записываю это в еепром контроллера.
А безударный разгон бывает часто нужен в измерительной технике. При плавном измерении ускорения кривая изменения скорости имеет S-образный вид.
Go to the top of the page
 
+Quote Post
dpss
сообщение May 5 2009, 15:51
Сообщение #24


Знающий
****

Группа: Свой
Сообщений: 540
Регистрация: 19-04-08
Из: Москва
Пользователь №: 36 913



Цитата(khach @ May 4 2009, 15:56) *
При плавном измерении ускорения кривая изменения скорости имеет S-образный вид.

При S образном разгоне-торможении в сравнении с трапецией при одинаковой максимальной скорости и времени движения придется двигаться с большим ускорением , что не всегда позволяет привод или механическая нагрузка.
Go to the top of the page
 
+Quote Post
_Pasha
сообщение May 5 2009, 17:13
Сообщение #25


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Цитата(dpss @ May 5 2009, 18:51) *
При S образном разгоне-торможении в сравнении с трапецией при одинаковой максимальной скорости и времени движения придется двигаться с большим ускорением

Форму S образного разгона тоже можно разной придумать. Достаточно прикинуть сопряжение прямой и кусков параболы с ограничением на максимальное значение ускорения   производной
Go to the top of the page
 
+Quote Post
Skywolf
сообщение May 7 2009, 07:01
Сообщение #26


Частый гость
**

Группа: Свой
Сообщений: 171
Регистрация: 2-06-05
Из: Город дождей и белых ночей.....
Пользователь №: 5 683



а самый младший Cyclone II это 5 тыс. который что ли?. я на 8 тыс.(ep2c8t144) кручу 4 ШД ,делитель общий , 16 разряда . ШД работает в 10-микрошаговом режиме (1.8 градуса механических) итого 2000 шагов на оборот и максимальная скорость 65`536 (2^16) итого ~32 об./сек. , а больше и смысла нет, т.к. подовляющее большинство ШД быстрее крутится не способно. место осталось но мала, но там еще много доп. функций было.

Так что мне кажется что вы просто с разрядностью делителя промахнулись.


П.С. Имел опыт сделать тоже самое на таблице. брал MAX II (у него есть флеш пользователя) и в его флешку таблицу заливал. И на адрес скорость подавал а данные на счетчик отправлял. Но фигня получилась, не рекомендую. флеша мало, разрядность максимум 9 бит ...


просто картинка красивая, правда тут разгона/торможения не видно

осциллограма
Go to the top of the page
 
+Quote Post
dinam
сообщение May 8 2009, 06:55
Сообщение #27


Профессионал
*****

Группа: Свой
Сообщений: 1 415
Регистрация: 10-06-05
Из: Наукоград Кольцово(Новосибирск)
Пользователь №: 5 898



Да это на 4600 LEs. По поводу разрядности делителя. До того как задумался об линейности было сделано так. Скорость 23 разряда. Разгон/торможение 16 разрядов. Время пусть будет 16 разрядов. Если сделать разрядность скорости 18 и немножко другие величины подсократить, то по прикидкам в мегавизарде: 18/48 - 2445 LEs. Вроде должно влезть в Cyclone II если сделать общий делитель. Но пока не проверял, т.к. параллельно занимаюсь и другими делами. У меня как я писал 3200 импульсов на оборот. И максимальная скорость чуть более 50 об/сек. Но и это не предел, т.к. ШД пробовал крутить от 30В, а предполагается от 48В.
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 3rd July 2025 - 04:49
Рейтинг@Mail.ru


Страница сгенерированна за 0.01672 секунд с 7
ELECTRONIX ©2004-2016