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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> acceleration/deceleration step motor
Maverick
сообщение Oct 4 2017, 08:15
Сообщение #1


я только учусь...
******

Группа: Модераторы
Сообщений: 3 394
Регистрация: 29-01-07
Из: Украина
Пользователь №: 24 839



Никто ничего не выкладывает на форум, ничем не делиться sm.gif
Ладно поделюсь я, может кому-то пригодиться...
Реализация разгона/торможения шагового двигателя (пока по трапециидальному закону, в дальнейшем можно встроить закон параболы и S образный закон, добавив дробный коеффициент для частоты reg_Fn).
Документ с описанием алгоритма, do файлы для моделсима, скриншот работы(jpg картинка), файлы описания, тестбенч - во вложении (архив 7z).
В общем:

Код
entity SMC is  -- Stepper_Motor_Controller
generic ( M : natural := 32 );
Port (
clk : in STD_LOGIC;
rst : in STD_LOGIC;
en     : in STD_LOGIC;  --enable work
dir     : in STD_LOGIC; --choice of direction acceleration/deceleration
Tmax : in STD_LOGIC_VECTOR (31 downto 0); -- maximum timing
Nsegment : in STD_LOGIC_VECTOR (7 downto 0); -- total segment acceleration/deceleration
T0 : in STD_LOGIC_VECTOR (31 downto 0); -- not used
Fmin : in STD_LOGIC_VECTOR (31 downto 0); --minimum  frequency
Fmax : in STD_LOGIC_VECTOR (31 downto 0); --maximum frequency
ena_work : out STD_LOGIC; --acceleration / deceleration time signal
out_shim : out STD_LOGIC );
end SMC;


Сильно не оптимизировал...
Конструктивная критика принимается.
Прикрепленные файлы
Прикрепленный файл  Stepper_Motor_Controller.7z ( 407.49 килобайт ) Кол-во скачиваний: 38
 


--------------------
If it doesn't work in simulation, it won't work on the board.

"Ты живешь в своих поступках, а не в теле. Ты — это твои действия, и нет другого тебя" Антуан де Сент-Экзюпери повесть "Маленький принц"
Go to the top of the page
 
+Quote Post
iosifk
сообщение Oct 4 2017, 08:40
Сообщение #2


Гуру
******

Группа: Модераторы
Сообщений: 3 708
Регистрация: 8-09-05
Из: спб
Пользователь №: 8 369



Цитата(Maverick @ Oct 4 2017, 11:15) *
Просто делюсь, может кому-то пригодиться...
Сильно не оптимизировал...
Конструктивная критика принимается.

Еще бы немного доделать...
Вы используете параметры, но только где-то "внутри", а надо бы все их вывести на "топ", потому как если кто-то захочет перестроить проект, ну например при симуляции, то не пришлось бы лезть в "дебри"... А в идеале - два набора параметров - для отладки и для железа. А еще рараметр "дебаг-релиз"...
Ну и полное отсутствие комментариев и заголовка с фамилией или хотя бы с ником автора - не красиво...


--------------------
www.iosifk.narod.ru
Go to the top of the page
 
+Quote Post
Maverick
сообщение Oct 4 2017, 09:39
Сообщение #3


я только учусь...
******

Группа: Модераторы
Сообщений: 3 394
Регистрация: 29-01-07
Из: Украина
Пользователь №: 24 839



Цитата(iosifk @ Oct 4 2017, 11:40) *
Еще бы немного доделать...
Вы используете параметры, но только где-то "внутри", а надо бы все их вывести на "топ", потому как если кто-то захочет перестроить проект, ну например при симуляции, то не пришлось бы лезть в "дебри"... А в идеале - два набора параметров - для отладки и для железа. А еще рараметр "дебаг-релиз"...
Ну и полное отсутствие комментариев и заголовка с фамилией или хотя бы с ником автора - не красиво...

спасибо, исправлю.
дополнение к пояснениям - в строке 125 файла SMC.vhd
reg_n <= "00000000000001111101000000000000"; -- значение бралось с "потолка" для симуляции

это значение 1 для пересчета частоты в период шима, в тактах частоты ПЛИС

T=1/reg_Fn


--------------------
If it doesn't work in simulation, it won't work on the board.

"Ты живешь в своих поступках, а не в теле. Ты — это твои действия, и нет другого тебя" Антуан де Сент-Экзюпери повесть "Маленький принц"
Go to the top of the page
 
+Quote Post
Tanya
сообщение Oct 4 2017, 10:48
Сообщение #4


Гуру
******

Группа: Модераторы
Сообщений: 8 572
Регистрация: 6-01-06
Пользователь №: 12 883



Цитата(Maverick @ Oct 4 2017, 11:15) *
Никто ничего не выкладывает на форум, ничем не делиться sm.gif
Сильно не оптимизировал...
Конструктивная критика принимается.

Я с точки зрения правильной теории разгоняю так, чтобы энергия линейно росла или убывала от времени. И практика подтверждает эту правильность. Вот делюсь и критикую одновременно. Есть резонанс, который нужно учитывать.
Go to the top of the page
 
+Quote Post
Maverick
сообщение Oct 12 2017, 14:11
Сообщение #5


я только учусь...
******

Группа: Модераторы
Сообщений: 3 394
Регистрация: 29-01-07
Из: Украина
Пользователь №: 24 839



заметил баг(пока не знаю точно) в своей реализации:
если в тестбенче стоит Nsegment <= "00001111"; то вроде все коректно. смотреть значение reg_Fn (при разгоне оно должно быть максимально приблизиться к Fmax, при торможении к Fmin)
если меняю, например на Nsegment <= "00000111"; то некоректно - в конце участка торможения(в конце второго импульса reg_ena_work) не достигает Fmin (reg_Fn порядка 1000) и вначале при разгоне(в начале первого импульса reg_ena_work) есть сильный скачок в reg_Fn - первое 56 (Fmin), следующее порядка 4000
Участки разгона торможения можно видеть по reg_ena_work.
не могу понять причину.
прошу помощи....

upd объяснение этому можно дать, что это происходит, так как количество сегментов меньшее и соответственно приближение грубее...


--------------------
If it doesn't work in simulation, it won't work on the board.

"Ты живешь в своих поступках, а не в теле. Ты — это твои действия, и нет другого тебя" Антуан де Сент-Экзюпери повесть "Маленький принц"
Go to the top of the page
 
+Quote Post
Doka
сообщение Oct 16 2017, 14:16
Сообщение #6


Electrical Engineer
******

Группа: СуперМодераторы
Сообщений: 2 085
Регистрация: 4-10-04
Из: Russia, Moscow
Пользователь №: 778



Цитата(Maverick @ Oct 4 2017, 11:15) *
Сильно не оптимизировал...
Конструктивная критика принимается.


не думали выложить на github.com ?
там удобнее отслеживать и развитие проекта (git) и связь с автором по найденным багам


--------------------
Блог iDoka.ru
CV linkedin.com/in/iDoka
Sources github.com/iDoka


Never stop thinking...........................
Go to the top of the page
 
+Quote Post
a123-flex
сообщение Oct 18 2017, 23:00
Сообщение #7


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

Группа: Свой
Сообщений: 1 050
Регистрация: 11-01-05
Из: Москва
Пользователь №: 1 884



Цитата(Maverick @ Oct 4 2017, 12:15) *
Реализация разгона/торможения шагового двигателя

а как собираетесь траекторию пространственную исполнять ?
это должен planner просчитывать, или проект для такого не предназначен ?


--------------------
Если хочешь узнать, что ждет тебя на дороге впереди, спроси у тех, кто возвращается по ней.
Go to the top of the page
 
+Quote Post
Maverick
сообщение Oct 19 2017, 07:40
Сообщение #8


я только учусь...
******

Группа: Модераторы
Сообщений: 3 394
Регистрация: 29-01-07
Из: Украина
Пользователь №: 24 839



Цитата(a123-flex @ Oct 19 2017, 02:00) *
а как собираетесь траекторию пространственную исполнять ?
это должен planner просчитывать, или проект для такого не предназначен ?

встроенный процессор для чего? sm.gif


--------------------
If it doesn't work in simulation, it won't work on the board.

"Ты живешь в своих поступках, а не в теле. Ты — это твои действия, и нет другого тебя" Антуан де Сент-Экзюпери повесть "Маленький принц"
Go to the top of the page
 
+Quote Post
a123-flex
сообщение Oct 19 2017, 18:36
Сообщение #9


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

Группа: Свой
Сообщений: 1 050
Регистрация: 11-01-05
Из: Москва
Пользователь №: 1 884



Цитата(Maverick @ Oct 19 2017, 10:40) *
встроенный процессор для чего? sm.gif

Извиняюсь, а зачем тогда ПЛИС ?
Или вы хотите в режиме большого дробления работать ? Или специфический привод ?

В смысле ПЛИС и встроенный процессор это круто конечно, но при обычных условиях на обсчет траекторий и 300 команд сервиса достаточно процессора за 0.6$.
ПЛИС немного дороже)))


--------------------
Если хочешь узнать, что ждет тебя на дороге впереди, спроси у тех, кто возвращается по ней.
Go to the top of the page
 
+Quote Post
Maverick
сообщение Oct 27 2017, 12:28
Сообщение #10


я только учусь...
******

Группа: Модераторы
Сообщений: 3 394
Регистрация: 29-01-07
Из: Украина
Пользователь №: 24 839



Цитата(a123-flex @ Oct 19 2017, 21:36) *
Извиняюсь, а зачем тогда ПЛИС ?
Или вы хотите в режиме большого дробления работать ? Или специфический привод ?

В смысле ПЛИС и встроенный процессор это круто конечно, но при обычных условиях на обсчет траекторий и 300 команд сервиса достаточно процессора за 0.6$.
ПЛИС немного дороже)))

возможно.
мне нужна быстрота управления лазером при позиционировании как по шагам/микрошагам так и от encoder (квадратурный выход)...


--------------------
If it doesn't work in simulation, it won't work on the board.

"Ты живешь в своих поступках, а не в теле. Ты — это твои действия, и нет другого тебя" Антуан де Сент-Экзюпери повесть "Маленький принц"
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Oct 27 2017, 14:07
Сообщение #11


Гуру
******

Группа: Свой
Сообщений: 4 232
Регистрация: 17-02-06
Пользователь №: 14 454



а я мутил в свое время систему с обратной связью для шаговика по энкодеру. В таком раскладе ускорения становятся ненужны, они всегда максимум что тянет мотор, а траектория задает ход системы.
Go to the top of the page
 
+Quote Post
Maverick
сообщение Oct 27 2017, 15:23
Сообщение #12


я только учусь...
******

Группа: Модераторы
Сообщений: 3 394
Регистрация: 29-01-07
Из: Украина
Пользователь №: 24 839



Цитата(Golikov A. @ Oct 27 2017, 17:07) *
а я мутил в свое время систему с обратной связью для шаговика по энкодеру. В таком раскладе ускорения становятся ненужны, они всегда максимум что тянет мотор, а траектория задает ход системы.

можно попдробнее?


--------------------
If it doesn't work in simulation, it won't work on the board.

"Ты живешь в своих поступках, а не в теле. Ты — это твои действия, и нет другого тебя" Антуан де Сент-Экзюпери повесть "Маленький принц"
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Oct 30 2017, 09:30
Сообщение #13


Гуру
******

Группа: Свой
Сообщений: 4 232
Регистрация: 17-02-06
Пользователь №: 14 454



ну дело было так.
Шаговики с энкодером и управлением степ-дир через драйвер и микрошаг был настроен на примерно 1 отсчет энкодера.
У нас есть положение мотора в микрошагах и есть положение мотора по энкодеру.
У схемы управления 2 задачи:
1 выставить шаги в желаемую точку
2 не дать мотору (реальному его положению) убежать от магнитного поля (заданному драйвером через микрошаги) больше чем на шаг чтобы не было срыва мотора.

дальше у нас есть set_point - желаемое положение схемы, real_point - положение текущее по счетчику шагов и ref_point - текущее положение по энкодеру.

каждый такт управления считаем (set_point- real_point) чтобы понять куда двигаться.
каждый такт управления делаем до N шагов, например если N = 10 и set_point - real_point = 1, делаем 1 шаг, если set_point - real_point = 4 - делаем 4 шага, если разность 11 и больше, делаем 10. (эта цифра определяется из необходимой частоты схемы управления и возможностей драйвера по шагам и необходимой "глубины" управления)

так же мы проверяем чтобы |real_point - ref_point| был меньше полного шага (полушага). то есть
needStep = (set_point- real_point);
если (|needStep| > N(максимального числа шагов за такт управления)) ограничиваем |needStep| до N
если после этого (|real_point + needStep - ref_point| > limit)) ограничиваем needStep так чтобы мы не превысили лимит.

это первая простая пропорциональная ступень.

к примеру мы стоим в 0, нам ставят попасть в точку 50, лимит по энкодеру 10, шагов на такт управления 5
ref_point = 0, real_point = 0; set_point = 50; limit = 10, N = 5;
1. NS = 50 - 0 = 50; 50 > 5 -> NS = 5; (0 + 5 - 0) < 10-> NS = 5; схема делает 5 шагов
схема начала разгоняться, пусть прошла 1 шаг
ref_point = 1, real_point = 5; set_point = 50;
2. NS = 50 - 5 = 45, 45 > 5 -> NS = 5; (5 + 5 - 1) < 10 -> NS = 5; схема делаем 5 шагов
схема продолжает разгон, пусть прошла еще 2 шаг
ref_point = 3, real_point = 10; set_point = 50;
3. NS = 50 - 10 = 40, 40 > 5 -> NS = 4; (10 + 5 - 3) > 10 -> NS = 3; схема делает 3 шага
и так далее... в целом мотор может потом догнать схему управления и они пойду вместе, а может так и отставать до самого конца. величина насколько можно упустить мотор от поля определяет ускорение схемы (так как это сила с которой мотор тянет), а также величину перерегулирования.

При разгоне схема будет держать силу тяги в + 10 шагов, разгоняя мотор, если эта величина будет в полшага (в шаг по некоторым источникам), это будет максимально эффективный разгон
когда достигнута точка 50, NS = 0 до тех пор, пока мотор по инерции не пролетит это значение, дальше магнитное поле побежит за мотором, оно будет держать "силу тяги" в -10 шагов, тормозя мотор, если это величина будет в полшага (шаг по некоторым источникам) - то это будет максимально эффективное торможение. Сила торможения начнет нарастать сразу как мотор перейдет точку 50

При этом если при резонансах мотор кинет через пару шагов, схема это прекрасно отработает подвинув поле за мотором. Число шагов на такт регулирования определяет эту "глубину" управления, то есть какого уровня выбросы схема может отработать, быстро подвинув поле.

Дальше на это наворачивается уже следующая ступень управления, которая двигает set_point по желаемой траектории движения, мотор отработает эту траекторию, если ему хватит на это сил. Это новое звено уже может иметь интегральные и диф звенья для выполнения необходимой задачи по движению и конечному положению.
Go to the top of the page
 
+Quote Post
Maverick
сообщение Nov 3 2017, 09:03
Сообщение #14


я только учусь...
******

Группа: Модераторы
Сообщений: 3 394
Регистрация: 29-01-07
Из: Украина
Пользователь №: 24 839



Цитата(Golikov A. @ Oct 30 2017, 11:30) *

спасибо за столь развернутое объяснение


--------------------
If it doesn't work in simulation, it won't work on the board.

"Ты живешь в своих поступках, а не в теле. Ты — это твои действия, и нет другого тебя" Антуан де Сент-Экзюпери повесть "Маленький принц"
Go to the top of the page
 
+Quote Post
a123-flex
сообщение Nov 7 2017, 07:48
Сообщение #15


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

Группа: Свой
Сообщений: 1 050
Регистрация: 11-01-05
Из: Москва
Пользователь №: 1 884



Цитата(Golikov A. @ Oct 30 2017, 13:30) *
ну дело было так.

хитроумно.

Но с точными перемещениями на известной нагрузке схема проигрывает стандартному стеку в точности - насколько я понимаю в Вашей
схеме привод будет прецессировать +- N шагов вокруг заданной траектории по каждой оси, или примерно 2*N на 3 осях, что, при N=2 уже равно 4 шагам. Такая потеря точности для некоторых применений недопустима.

На неизвестной нагрузке наверно схема себя окупает.


--------------------
Если хочешь узнать, что ждет тебя на дороге впереди, спроси у тех, кто возвращается по ней.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 13th December 2017 - 20:51
Рейтинг@Mail.ru


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