Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Управление шаговым двигателем через STEP/DIR-интерфейс
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Работаем с ПЛИС, области применения, выбор
Я.К.
Есть задача: управлять шаговиком через драйвер со STEP/DIR-интерфейсом.
Крайне полезно уметь плавное ускорение и замедление (с заданным ограничением по ускорению и замедлению).

Имею спросить: нет ли где готовой реализации модуля управления шаговиком с плавным ускорением и замедлением?

P.S. Устройство — Cyclone V.

Maverick
Цитата(Я.К. @ Jan 25 2016, 12:56) *
Есть задача: управлять шаговиком через драйвер со STEP/DIR-интерфейсом.
Крайне полезно уметь плавное ускорение и замедление (с заданным ограничением по ускорению и замедлению).

Имею спросить: нет ли где готовой реализации модуля управления шаговиком с плавным ускорением и замедлением?

P.S. Устройство — Cyclone V.

форма ускорения, замедления и работы шагового двигателя с постоянным ускорением может быть трапеция - наклонные стороны (нарастание ускорение и замедление, горизонтальная полочка трапеции работа шагового двигателя с постоянным ускорением), т.е. функция прямой с определенным углом наклоном (рекомендуют в некоторых источниках брать угол 45 градусов).
Берете несколько точек на прямой и строите пропорциональную зависимость для ширины импульса (STEP, т.е. количество импульсов в периоде для модуля PWM), зная минимальный шаг и количество микрошагов за шаг(16/32/64 и т.д.).

в некоторых источниках пишут, что лучше строить ускорение/замедление не по наклонным прямым трапеции, а когда боковые/наклонные стороны трапеции имеют функцию не наклонной прямой, а кусок синусоиды или косинусоиды.
Тогда в точке перехода на постоянную скорость (точка пересечения наклонной линии и горизонтальной) не будет скачков в работе шагового двигателя, т.к. нет разрыва функции во втором (кажется) дифференциале этой функции
Формула во вложении. Да, таблица понадобиться одна как для спада, так и для нарастания ускорения.

из готовых решений - платно

DIR нужен, чтобы поменять вращение в обратную сторону. Изменение лучше делать когда шаговик остановлен.
sergey sva
Это лучше реализовать на микроконтроллере (процессоре) . Удобнее писать вычисления с запятой.
Где-то был исходник(давно делал) для 6-ти координатного станка. Функция вычисляет подачу(ускорение) еще умеет делать линейные и круговые движения при фрезеровании радиусов. Делал на микроконтроллере lpc4337 на плате от starterkit удобно тем что одно ядро работает для управления моторами а второе на интерфейс. Если надо поищу.
yakub_EZ
Вот здесь есть примеры на верилоге - fpga4fun
yakub_EZ
Цитата(Maverick @ Jan 26 2016, 14:51) *
забыл, указать ссылку откуда формула[/url]

Вы дали ссылку на свой диск C - C:/Users/Alex/Downloads/425093.pdf
Maverick
Цитата(yakub_EZ @ Jan 26 2016, 14:10) *
Вы дали ссылку на свой диск C - C:/Users/Alex/Downloads/425093.pdf

подправил ссылку
Я.К.
Цитата
Это лучше реализовать на микроконтроллере (процессоре) . Удобнее писать вычисления с запятой.
Где-то был исходник(давно делал) для 6-ти координатного станка. Функция вычисляет подачу(ускорение) еще умеет делать линейные и круговые движения при фрезеровании радиусов. Делал на микроконтроллере lpc4337 на плате от starterkit удобно тем что одно ядро работает для управления моторами а второе на интерфейс. Если надо поищу.


А и давайте. Глядишь, ещё кому пригодится.

^_^
sergey sva
Соврал я 4 координаты XYZ и A поворотная ось.
пользоваться так
Код
struct pos current;
float cur_speed;
float sp_limit = 200.0;

double x=0.0, y=0.0, z=0.0, a=0.0, angle=0.0;
int msg = COMPLETE, ent_type, ent_type_now = LINE_ENT;

/* SysTick interrupt happens every 10us */
void SysTick_Handler(void) {

    if(tick_taimer==1)tick_taimer = 0;

} //SysTick



main{

define_data(&hardware, &software, 0);//тут нужно настроить подачи скорости...

define_data(&hardware, &software, 1);  //тут нужно настроить подачи скорости...



        sp_limit =  SLAVETOMASTER->move.feending;
        msg = move(&hardware, &software, &current, &cur_speed, &sp_limit,

SLAVETOMASTER->move.x,SLAVETOMASTER->move.y, SLAVETOMASTER->move.z, SLAVETOMASTER->move.a, SLAVETOMASTER->move.angele, SLAVETOMASTER->move.typemov,  //сюда координаты куда нужно перемещаться


                x, y, z, a,
                angle,ent_type //тип перемещения круговая интерполяция, линейная или ускоренная подача


        );

}


void outportb_(int por, BYTE dat ) //дергает ножками

void update_display(struct soft_setup *soft_config, double x, double y,
        double z, double a, float speed, float a_speed, float f_rate, int item) //выводит данные на дисплей о перемещении

Нажмите для просмотра прикрепленного файла
Эдди
Это вы даблы и флоаты на мелкоконтроллер воткнули для управления шаговиком? O_o

Мде. Я под столом!!!
Александр77
Цитата(Эдди @ Jan 28 2016, 17:39) *
Это вы даблы и флоаты на мелкоконтроллер воткнули для управления шаговиком? O_o
Мде. Я под столом!!!

Какой я неграмотный. Более 10 лет назад, мне хватило нескольких счетчиков, мультиплексора и немного логики (из наших к155) для реализации ступенчатого управления скоростью ШД.
Теперь понимаю, что все это было напрасно - только сверхточные вычисления могут спасти человечество от подобных ошибок.
Даешь 128 битный процессор для управления утюгом!
bb-offtopic.gif
x893
Посмотрел оригинал вышепридённой программы - там вообще мрак.
Правда с 2009 года всё заброшено и сам сайт закрыт.
С косинусами/синусами/арктангенсами давно уже никто не делает - самые замороченные делают или через таблицу или через cordic.
net
какие все молодцы. жаль ничего никто не выкладывает
x893
Цитата(net @ Jan 29 2016, 12:21) *
какие все молодцы. жаль ничего никто не выкладывает

На github 100500 проектов на любой цвет и вкус
Зачем здесь пастить килотонны букв ?
Tanya
Цитата(Maverick @ Jan 26 2016, 11:39) *
в некоторых источниках пишут, что лучше строить ускорение/замедление не по наклонным прямым трапеции, а когда боковые/наклонные стороны трапеции имеют функцию не наклонной прямой, а кусок синусоиды или косинусоиды.
Тогда в точке перехода на постоянную скорость (точка пересечения наклонной линии и горизонтальной) не будет скачков в работе шагового двигателя, т.к. нет разрыва функции во втором (кажется) дифференциале этой функции
Формула во вложении. Да, таблица понадобиться одна как для спада, так и для нарастания ускорения.

Если посмотреть на зависимость момента от скорости, то станет ясно, что нужно следить (ограничивать) механическую мощность. Формулы легко получить самостоятельно. Могу только еще сказать, что такой метод обеспечивает самое быстрое перемещение.
Baser
Цитата(Я.К. @ Jan 25 2016, 12:56) *
Есть задача: управлять шаговиком через драйвер со STEP/DIR-интерфейсом.
Крайне полезно уметь плавное ускорение и замедление (с заданным ограничением по ускорению и замедлению).

Имею спросить: нет ли где готовой реализации модуля управления шаговиком с плавным ускорением и замедлением?

Не совсем понятно, что имеется в виду под "готовой реализацией" ?
Исходники программ или готовый модуль? Если готовый модуль, так их в сети 1001 штука.
Мы для выставки, когда механика нового прибора уже была готова, а платы управления к ней я еще и не начинал делать, купили по-быстрому модуль 1063 - PhidgetStepper Bipolar 1-Motor
http://www.phidgets.com
там драйвер Allegro A3979
И забабахали для выставки имитацию прибора на нем biggrin.gif

Ну а потом я уже глядя на описание API к этой плате, написал свои функции на хиленьком MSP430 на 8 МГц.
Разгон и торможение делал по-простому без всех этих умных слов ("без разрыва функции скорости во второй производной").
Конечно без разрыва то лучше, но быстродействие MSP430 не позволяло вычислять новый период шага на каждый шаг
(макс.частота шагов управления движком у меня была 2 кГц), так что я реализовал кусочно-линейный разгон и торможение:
Пересчет периода проводился 64 раза в секунду, между ними постоянная скорость.
Получились кусочки от одного до 30 шагов длиной (при разной скорости).
Ну и еще при разгоне проходит последовательно все 4-е режима работы драйвера:
от микрошага 1/16 через 1/4 и 1/2 до полного шага на максимальной скорости.

На глаз и слух никаких рывков при работе нет, хотя рабочий ток (ограничение) приходится подбирать,
так как эффект заклинивания от электромеханического резонанса проявиться может.
sergey sva
Думаю у вас не получиться сделать фрезерный станок 4х координатный на нескольких к155 с таблицами или кордиком. Этот код от станка он управляет скоростью подач, для линейных или круговых перемещений. Достаточно задать шаг винта, количество шагов на оборот, ускорение. После вызова функции с координатами xyza станок фрезерует всеми координатами радиус или линию. Там только не доделано 3d две плоскости они не были нужны. Микроконтроллер не простой выше постом было название двух ядерный. lpc4337 зтот код замечательно на нем работает.
Я.К.
В общем и целом, я решил пока не париться, а просто заказать драйвер L6470. Туда, пишут, можно задать максимальное ускорение, и он сам будет его отрабатывать. Безо всякого сложного кода.
Baser
Цитата(Я.К. @ Jan 29 2016, 22:48) *
В общем и целом, я решил пока не париться, а просто заказать драйвер L6470. Туда, пишут, можно задать максимальное ускорение, и он сам будет его отрабатывать. Безо всякого сложного кода.

Прикольный драйвер. Когда пару лет назад занимался шаговиками, таких монстров "все-в-одном" еще не было.
Делал на Allegro A3979.
Хотя посмотрел функционал - все это почти один-в-один пришлось реализовывать программно.
Но, конечно, 1/128 микрошаг с макс. частотой полных шагов в 15.6 кГц (это 2 МГц входного сигнала STEP) на обычном МК не выдашь.
Тут DSP нужен или что-то на жесткой логике.

Хотя необходимость режима микрошага больше чем 1/16 вызывает вопросы.
На мой взгляд при этом возможность проскальзывания значительно возрастает.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.