|
acceleration/deceleration step motor |
|
|
|
Oct 4 2017, 08:15
|

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

|
Никто ничего не выкладывает на форум, ничем не делиться  Ладно поделюсь я, может кому-то пригодиться... Реализация разгона/торможения шагового двигателя (пока по трапециидальному закону, в дальнейшем можно встроить закон параболы и 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; Сильно не оптимизировал... Конструктивная критика принимается.
--------------------
If it doesn't work in simulation, it won't work on the board.
"Ты живешь в своих поступках, а не в теле. Ты — это твои действия, и нет другого тебя" Антуан де Сент-Экзюпери повесть "Маленький принц"
|
|
|
|
2 страниц
1 2 >
|
 |
Ответов
(1 - 23)
|
Oct 4 2017, 08:40
|
Гуру
     
Группа: Модераторы
Сообщений: 4 011
Регистрация: 8-09-05
Из: спб
Пользователь №: 8 369

|
Цитата(Maverick @ Oct 4 2017, 11:15)  Просто делюсь, может кому-то пригодиться... Сильно не оптимизировал... Конструктивная критика принимается. Еще бы немного доделать... Вы используете параметры, но только где-то "внутри", а надо бы все их вывести на "топ", потому как если кто-то захочет перестроить проект, ну например при симуляции, то не пришлось бы лезть в "дебри"... А в идеале - два набора параметров - для отладки и для железа. А еще рараметр "дебаг-релиз"... Ну и полное отсутствие комментариев и заголовка с фамилией или хотя бы с ником автора - не красиво...
--------------------
www.iosifk.narod.ru
|
|
|
|
|
Oct 4 2017, 09:39
|

я только учусь...
     
Группа: Модераторы
Сообщений: 3 447
Регистрация: 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.
"Ты живешь в своих поступках, а не в теле. Ты — это твои действия, и нет другого тебя" Антуан де Сент-Экзюпери повесть "Маленький принц"
|
|
|
|
|
Oct 18 2017, 23:00
|
Профессионал
    
Группа: Свой
Сообщений: 1 687
Регистрация: 11-01-05
Из: Москва
Пользователь №: 1 884

|
Цитата(Maverick @ Oct 4 2017, 12:15)  Реализация разгона/торможения шагового двигателя а как собираетесь траекторию пространственную исполнять ? это должен planner просчитывать, или проект для такого не предназначен ?
--------------------
Если хочешь узнать, что ждет тебя на дороге впереди, спроси у тех, кто возвращается по ней.
|
|
|
|
|
Oct 19 2017, 18:36
|
Профессионал
    
Группа: Свой
Сообщений: 1 687
Регистрация: 11-01-05
Из: Москва
Пользователь №: 1 884

|
Цитата(Maverick @ Oct 19 2017, 10:40)  встроенный процессор для чего?  Извиняюсь, а зачем тогда ПЛИС ? Или вы хотите в режиме большого дробления работать ? Или специфический привод ? В смысле ПЛИС и встроенный процессор это круто конечно, но при обычных условиях на обсчет траекторий и 300 команд сервиса достаточно процессора за 0.6$. ПЛИС немного дороже)))
--------------------
Если хочешь узнать, что ждет тебя на дороге впереди, спроси у тех, кто возвращается по ней.
|
|
|
|
|
Oct 30 2017, 09:30
|
Гуру
     
Группа: Свой
Сообщений: 4 256
Регистрация: 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 по желаемой траектории движения, мотор отработает эту траекторию, если ему хватит на это сил. Это новое звено уже может иметь интегральные и диф звенья для выполнения необходимой задачи по движению и конечному положению.
|
|
|
|
|
Nov 7 2017, 07:48
|
Профессионал
    
Группа: Свой
Сообщений: 1 687
Регистрация: 11-01-05
Из: Москва
Пользователь №: 1 884

|
Цитата(Golikov A. @ Oct 30 2017, 13:30)  ну дело было так. хитроумно. Но с точными перемещениями на известной нагрузке схема проигрывает стандартному стеку в точности - насколько я понимаю в Вашей схеме привод будет прецессировать +- N шагов вокруг заданной траектории по каждой оси, или примерно 2*N на 3 осях, что, при N=2 уже равно 4 шагам. Такая потеря точности для некоторых применений недопустима. На неизвестной нагрузке наверно схема себя окупает.
--------------------
Если хочешь узнать, что ждет тебя на дороге впереди, спроси у тех, кто возвращается по ней.
|
|
|
|
|
Nov 7 2017, 09:54
|
Профессионал
    
Группа: Свой
Сообщений: 1 687
Регистрация: 11-01-05
Из: Москва
Пользователь №: 1 884

|
Цитата(Golikov A. @ Nov 7 2017, 11:51)  Известная нагрузка - это весьма условная штука. По мере засорения привода, высыхания смазки, выроботки рельс, а особенно на прецизионных приводах все это плывет. Обычная практика взять мотор с запасом, и дат току с запасом. Если есть переменный объект движения, то подобрать кривые с запасом. Если запасы невелики получается муторная настройка системы или не максимальные ее характеристики. А если добавить еще резонансы моторов помноженные на резонансы системы то совсем грустно. Не знаю насколько по Вашему прецизионен smd placer - автомат... Но там все указанные проблемы успешно решаются - placer по регламенту положено смазывать (убийство направляющих - для идиота - обслуживание ГОРАЗДО дешевле станка). Корректно обслуженный аппарат работает 24/7 годами. Что касается резонансов, то я знаю, как аппарат выстраивают - даже тупой драйвер Leadshine имеет встроенные алгоритмы исключения резонансов, не говоря уже о средствах более высокого уровня, типа планировщика. Так что в рабочей системе их можно исключить. Полностью. Цитата(Golikov A. @ Nov 7 2017, 11:51)  Однако нет такой потери точности относительно системы со "стандартным стеком". Если у вас мотор может отработать траекторию без отставания в случае посчитанных шагов, то и тут он это сделает точно также. Если не может, то и в обычном случае он отстанет. Другое дело что предложенная система это увидит и не даст магнитному полю улететь от мотора на срыв шагов, а в обычном случае идут банальны пропуски шагов. Дальше вопрос сигнализации этого факта. Возможно, подойти к вопросу с другой стороны ? Вы ведь пользуетесь энкодером, значит сравниваться нужно с ним ? В стандартной системе с энкодером можно обнаруживать срыв и динамически подстраивать допустимый момент в настройках проекта.. После этого привод станет абсолютно точным)
--------------------
Если хочешь узнать, что ждет тебя на дороге впереди, спроси у тех, кто возвращается по ней.
|
|
|
|
|
Nov 7 2017, 10:55
|
Гуру
     
Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454

|
Хм... хотите сказать что в СМД плайсере управление моторами без обратной связи, просто расчетное? Понятно что вес смд компонента ничтожен по сравнению с манипулятором, и можно его не считать вообще. И грязи от обрабатываемых элементов в них тоже нету. Но все равно как-то мне слабо вериться в отсутствие обратных связей в приводах. Я без наезда, просто мысли) Цитата Что касается резонансов, то я знаю, как аппарат выстраивают - даже тупой драйвер Leadshine имеет встроенные алгоритмы исключения резонансов Эти системы играют злую шутку если надо абсолютно синхронизовать несколько осей, особенно если есть требование неизменной общей скорости. Цитата В стандартной системе с энкодером можно обнаруживать срыв и динамически подстраивать допустимый момент в настройках проекта.. нам не подошло такое решение) Собственно я не настаиваю, есть разные решение, я предложил одно из
|
|
|
|
|
Nov 7 2017, 11:00
|
Профессионал
    
Группа: Свой
Сообщений: 1 687
Регистрация: 11-01-05
Из: Москва
Пользователь №: 1 884

|
Цитата(Golikov A. @ Nov 7 2017, 13:55)  Хм... хотите сказать что в СМД плайсере управление моторами без обратной связи, просто расчетное? Понятно что вес смд компонента ничтожен по сравнению с манипулятором, и можно его не считать вообще. И грязи от обрабатываемых элементов в них тоже нету. Но все равно как-то мне слабо вериться в отсутствие обратных связей в приводах. Я без наезда, просто мысли) Абсолютно нет. Совершенно точно есть. Я просто говорил о том, что этим можно пользоваться по-разному. Цитата(Golikov A. @ Nov 7 2017, 13:55)  нам не подошло такое решение) Собственно я не настаиваю, есть разные решение, я предложил одно из  Ваше решение очень даже изящное, а поднять целиком весь стек - достойно уважения. Цитата(Golikov A. @ Nov 7 2017, 13:55)  Эти системы играют злую шутку если надо абсолютно синхронизовать несколько осей, особенно если есть требование неизменной общей скорости. В сложной системе все играет злую шутку, и мастерство - в том, чтобы эти шутки замаскировать)
--------------------
Если хочешь узнать, что ждет тебя на дороге впереди, спроси у тех, кто возвращается по ней.
|
|
|
|
|
Nov 7 2017, 14:16
|
Профессионал
    
Группа: Свой
Сообщений: 1 687
Регистрация: 11-01-05
Из: Москва
Пользователь №: 1 884

|
Цитата(Golikov A. @ Nov 7 2017, 16:32)  Тогда я заинтересовался  Можно хотя бы грубо (схематично) как выглядит обработка и управление у вас? Слои стека и все такое? grbl) пока. Мы не стали выпиливать свою систему управления, было много проблем и без этого. В итоге начали прикручивать внешние энкодеры, навесили их снаружи, даже не успели внутрь засунуть - проект рухнул в другом месте. Сейчас все на паузе. Вообще, мне очень стыдно в этом признаваться. Но у меня возникло ощущение, что grbl закрывает практически все возможные хотелки.
--------------------
Если хочешь узнать, что ждет тебя на дороге впереди, спроси у тех, кто возвращается по ней.
|
|
|
|
|
Nov 7 2017, 14:36
|
Профессионал
    
Группа: Свой
Сообщений: 1 687
Регистрация: 11-01-05
Из: Москва
Пользователь №: 1 884

|
Цитата(Golikov A. @ Nov 7 2017, 17:33)  ну... G коды создать тоже задача. И не все системы рулятся г кодами. Спасибо за наводку, изучу. Нет такой задачи. Есть миллион готовых конверторов + миллион оболочек управления. Профессиональные разработчики не могут видеть такое, тк у них от етого кровь из глаз. Но это все равно есть.
--------------------
Если хочешь узнать, что ждет тебя на дороге впереди, спроси у тех, кто возвращается по ней.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|