dinam 1 4 мая, 2009 Опубликовано 4 мая, 2009 · Жалоба Сваял плату управления четырьмя ШД. В известной статье , авторства Л.Pидико есть формула: T = T0/(1+T0At), где T – длительность шага, T0 – начальная длительность шага, A – ускорение, t – текущее время. У меня управление ШД сделано на самом хилом Cyclone II. При попытке в лоб реализовать эту формулу съедаются все ресурсы FPGA даже при управлении одного ШД. Может быть есть более элегантное решение позволяющее вычислить период следующего шага при линейном ускорении-торможении? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
LessNik 0 4 мая, 2009 Опубликовано 4 мая, 2009 · Жалоба С Cyclone II не работал. Но думаю, можешь сгенерить таблицу с нужными длительностями шага. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Methane 0 4 мая, 2009 Опубликовано 4 мая, 2009 · Жалоба Сваял плату управления четырьмя ШД. В известной статье , авторства Л.Pидико есть формула: T = T0/(1+T0At), где T – длительность шага, T0 – начальная длительность шага, A – ускорение, t – текущее время. У меня управление ШД сделано на самом хилом Cyclone II. При попытке в лоб реализовать эту формулу съедаются все ресурсы FPGA даже при управлении одного ШД. Может быть есть более элегантное решение позволяющее вычислить период следующего шага при линейном ускорении-торможении? Там же есть макрофункция ROM. В нее и запишите значения. А потом просто инкрементируйте адресс, с данных получайте время шага. Хотя что-то сомнительно что одно умножение на константу у вас циклон второй съело. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dinam 1 4 мая, 2009 Опубликовано 4 мая, 2009 · Жалоба Не совсем понял про какую вы таблицу говорите. Ведь у меня в этой формуле есть три переменные. T0 и А задаются с компьютера и t берется со счетчика в FPGA. Умножение практические не съедает ресурсов, используются аппаратные умножители. Основная проблема в делениии. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Methane 0 4 мая, 2009 Опубликовано 4 мая, 2009 · Жалоба Не совсем понял про какую вы таблицу говорите. Ведь у меня в этой формуле есть три переменные. T0 и А задаются с компьютера и t берется со счетчика в FPGA. Умножение практические не съедает ресурсов, используются аппаратные умножители. Основная проблема в делениии. Ну так замените деление умножением. Если не можете формулу упростить. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
evgeny_ch 0 4 мая, 2009 Опубликовано 4 мая, 2009 (изменено) · Жалоба Сваял плату управления четырьмя ШД. В известной статье , авторства Л.Pидико есть формула: T = T0/(1+T0At), где T – длительность шага, T0 – начальная длительность шага, A – ускорение, t – текущее время. У меня управление ШД сделано на самом хилом Cyclone II. При попытке в лоб реализовать эту формулу съедаются все ресурсы FPGA даже при управлении одного ШД. Может быть есть более элегантное решение позволяющее вычислить период следующего шага при линейном ускорении-торможении?Не совсем верный заголовок в части формулировки линейное ускорение/торможение. Ускорение ШД (точнее механизма с ШД) принимается равным константе, а изменяется лишь скорость (частота вращения). Правильно говорить разгон/торможение как закон изменения скорости, который может быть и нелинейным. Изменено 4 мая, 2009 пользователем evgeny_ch Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dinam 1 4 мая, 2009 Опубликовано 4 мая, 2009 · Жалоба Ну так замените деление умножением. Если не можете формулу упростить.А поконкретнее можно? Не совсем верный заголовок в части формулировки линейное ускорение/торможение. Ускорение ШД (точнее механизма с ШД) принимается равным константе, а изменяется лишь скорость (частота вращения). Правильно говорить разгон/торможение как закон изменения скорости, который может быть и нелинейным. Возможно вы и правы :cheers: . Сейчас у меня реализован нелинейный закон изменения скорости при разгоне и торможении. К тому же ещё и можно задавать разные значения при разгоне/торможении. И всё это хозяйство немного ресурсов требует. А вот линейное изменение скорости у меня пока не получается. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Methane 0 4 мая, 2009 Опубликовано 4 мая, 2009 · Жалоба А поконкретнее можно? Ну вынесите в таблицу значения Y=T0/(1+T0*A*t) Или вообще сделайте обратную связь по перемещению шагового двигателя. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dinam 1 4 мая, 2009 Опубликовано 4 мая, 2009 · Жалоба Ну вынесите в таблицу значения Y=T0/(1+T0*A*t) Или вообще сделайте обратную связь по перемещению шагового двигателя. Если б T0 и A были бы известной константой, то проблем бы не было. Сам этот способ уже не раз применял. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VladimirYU 0 4 мая, 2009 Опубликовано 4 мая, 2009 · Жалоба Ну вынесите в таблицу значения Y=T0/(1+T0*A*t) Или вообще сделайте обратную связь по перемещению шагового двигателя. А без обратной связи по скорости ИМХО задача для произвольной нагрузки вообще не решается. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Methane 0 4 мая, 2009 Опубликовано 4 мая, 2009 · Жалоба Если б T0 и A были бы известной константой, то проблем бы не было. Сам этот способ уже не раз применял. Ну так найдите пределы изменения T0 и А, и забейте в таблицу только деление. Потом можно линейно аппроксимировать. И вообще, можно туда запхать NIOS, который и будет делить. Вы что-то делаете не так, причем сильно не так. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
evgeny_ch 0 4 мая, 2009 Опубликовано 4 мая, 2009 (изменено) · Жалоба А поконкретнее можно? Возможно вы и правы :cheers: . Сейчас у меня реализован нелинейный закон изменения скорости при разгоне и торможении. К тому же ещё и можно задавать разные значения при разгоне/торможении. И всё это хозяйство немного ресурсов требует. А вот линейное изменение скорости у меня пока не получается. AVR446: Linear speed control of stepper motor. Driving Stepper Motors with Quadratic Equations. Generate stepper-motor speed proiles in real time. Изменено 4 мая, 2009 пользователем evgeny_ch Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Methane 0 4 мая, 2009 Опубликовано 4 мая, 2009 · Жалоба А без обратной связи по скорости ИМХО задача для произвольной нагрузки вообще не решается. Не по скорости а по перемещению. И решается. Если забивать в программу момент который эта нагрузка создает. Но это в теории. А на практике, лучше повесить на двигатель енкодер с дырками, и по этому енкодеру смотреть, шагнул двигатель или еще нет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dinam 1 4 мая, 2009 Опубликовано 4 мая, 2009 · Жалоба А без обратной связи по скорости ИМХО задача для произвольной нагрузки вообще не решается.Ну такая задача не стоит. Т.к. предполагается что при любых заданных движениях пропусков шагов или другой бяки не происходит :) . На всякий случай на исполнительном механизме стоит абсолютный датчик угловых перемещений. Не по скорости а по перемещению. И решается. Если забивать в программу момент который эта нагрузка создает. Но это в теории. А на практике, лучше повесить на двигатель енкодер с дырками, и по этому енкодеру смотреть, шагнул двигатель или еще нет.Да и тяжеловато это будет сделать. Сейчас у меня происходит управление по микрошагам. В каждом шаге 16 микрошагов. Двигатель с нагрузкой в виде абсолютного энкодера отрабатывает сейчас более 10 тыс. шагов в секуду. И это ещё не предел по силовой части. В общем хочется реализовать линейность именно в математике алгоритма, без всяких внешних датчиков. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VladimirYU 0 4 мая, 2009 Опубликовано 4 мая, 2009 · Жалоба Не по скорости а по перемещению. И решается. Если забивать в программу момент который эта нагрузка создает. Но это в теории. А на практике, лучше повесить на двигатель енкодер с дырками, и по этому енкодеру смотреть, шагнул двигатель или еще нет. Именно по скорости. Обратная связь должна быть по регулируемой величине, да еще желательно и по ее производной, а не по ее интегралу. Ну а требуемый момент должен обеспечить драйвер управляющий током в фазах шаговика. Обратная связю по перемещению должна обеспечивать необходимую динамику и точность выхода в заданную позицию. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться