Блок ускорения/торможения Шагового двигателя
Добавлено: 01 мар 2019, 14:56
Уважаемые господа - товарищи!
Имею законченную разработку ручного управления для станков с приводами ШД (управление от энкодера, авто подача/ускоренная подача, индикация перемещений, программирование конечной точки перемещения и т.д.).
viewtopic.php?f=54&t=4600&p=64206#p64206
Но это приемлемо для сравнительно небольших ШД. При использовании более мощных ШД, при резком старте/тормозе, возникают сильные стуки в электро-механической части. Это не очень здорово, мягко говоря, сказывается на работе и ресурсе станка.
Виной всему - отсутствие функции разгона/торможения в блоках.
В консультациях с [ref]vacz[/ref] и с [ref=#ff8000]Sancho[/ref], , выяснилось, что существующие ПБ не очень способны сделать это.
Начитавшись в других форумах о возможности формирования режима ускорения/торможения, нашел библиотеки с данными функциями. Но эти библиотеки тоже не без "изъяна". Во всяком случае, возникают проблемы с индикацией перемещений.
Лучшие рецензии на библиотеку нашего соотечественника, написанную на основании вышеизложенных.
http://arduino.ru/forum/programmirovani ... celstepper Попробовал написать свой блок (это второй ПБ CODE в моей практике FLProg). Но, видно еще не дорос. Никак не пойму, как выводить функции на контакты Блока и связывать с командами библиотеки.
В общем задача такая:
Входы блока
- Старт (бесконечное количество шагов до команды "Стоп") stepperq.moveTo(100000L);
- Одиночный старт (для возможности управления от энкодера по каждому тику) "stepper.run(); ? "
- Индексированное перемещение (по заданному количеству шагов) stepperq.move();
- Стоп stepperq.stop();
- Направление "?"
- Скорость stepperq.setSpeed();
- Ускорение/торможение stepperq.setAcceleration();
- Делитель (множитель) шагов - кратность количества импульсов каждому сигналу "Старт"
(примерно такая функция "Divider", которая была в генераторах от Слимпера) "stepRevo=(); ?"
Выходы блока
- Выходные Step/Dir (без Enable) - пины Ардуино, с возможностью переназначения. Режим 1 в библиотеке.
- Количество сделанных шагов (для индикации перемещения) "??"
Вырисовывается три режима.
- Режим перемещения от энкодера.
- Режим вкл./выкл. подачи без индексирования (нет конечной точки останова). Вкл. подачи - мягкий разгон - проход на заданной скорости - выкл. подачи - замедление с остановом (прогнозируемый пролет).
- Режим с индексированием. Как предыдущий режим, но останов с замедлением происходит точно к заданной точке.
Если у кого-то есть навыки в написании блока, есть время и есть желание, помогите с написанием сего. Или подскажите поэтапно, как это выполнить самому.
Имею законченную разработку ручного управления для станков с приводами ШД (управление от энкодера, авто подача/ускоренная подача, индикация перемещений, программирование конечной точки перемещения и т.д.).
viewtopic.php?f=54&t=4600&p=64206#p64206
Но это приемлемо для сравнительно небольших ШД. При использовании более мощных ШД, при резком старте/тормозе, возникают сильные стуки в электро-механической части. Это не очень здорово, мягко говоря, сказывается на работе и ресурсе станка.
Виной всему - отсутствие функции разгона/торможения в блоках.
В консультациях с [ref]vacz[/ref] и с [ref=#ff8000]Sancho[/ref], , выяснилось, что существующие ПБ не очень способны сделать это.
Начитавшись в других форумах о возможности формирования режима ускорения/торможения, нашел библиотеки с данными функциями. Но эти библиотеки тоже не без "изъяна". Во всяком случае, возникают проблемы с индикацией перемещений.
Лучшие рецензии на библиотеку нашего соотечественника, написанную на основании вышеизложенных.
http://arduino.ru/forum/programmirovani ... celstepper Попробовал написать свой блок (это второй ПБ CODE в моей практике FLProg). Но, видно еще не дорос. Никак не пойму, как выводить функции на контакты Блока и связывать с командами библиотеки.
В общем задача такая:
Входы блока
- Старт (бесконечное количество шагов до команды "Стоп") stepperq.moveTo(100000L);
- Одиночный старт (для возможности управления от энкодера по каждому тику) "stepper.run(); ? "
- Индексированное перемещение (по заданному количеству шагов) stepperq.move();
- Стоп stepperq.stop();
- Направление "?"
- Скорость stepperq.setSpeed();
- Ускорение/торможение stepperq.setAcceleration();
- Делитель (множитель) шагов - кратность количества импульсов каждому сигналу "Старт"
(примерно такая функция "Divider", которая была в генераторах от Слимпера) "stepRevo=(); ?"
Выходы блока
- Выходные Step/Dir (без Enable) - пины Ардуино, с возможностью переназначения. Режим 1 в библиотеке.
- Количество сделанных шагов (для индикации перемещения) "??"
Вырисовывается три режима.
- Режим перемещения от энкодера.
- Режим вкл./выкл. подачи без индексирования (нет конечной точки останова). Вкл. подачи - мягкий разгон - проход на заданной скорости - выкл. подачи - замедление с остановом (прогнозируемый пролет).
- Режим с индексированием. Как предыдущий режим, но останов с замедлением происходит точно к заданной точке.
Если у кого-то есть навыки в написании блока, есть время и есть желание, помогите с написанием сего. Или подскажите поэтапно, как это выполнить самому.