Управление ШД без компьютера, автономно.

Duet
Offline
Зарегистрирован: 17.01.2015

Казалось бы простая задача, но мучаюсь уже пару месяцев. Задача простая, управление двумя драйверами шд, несколько режимов оборотов и по 4 кнопки на шд, две кнопки вращение +-, две кнопки два режима авто и ручной по удержанию. Простое управление двумя осями маленького станочка в ручном режиме, без чпу, без компьютера.
На ардуино похоже не вариант, перепробывал кучу библиотек, все с глюками, с ошибками, низкими оборотам.
Какие готовые решения можно использовать для таких задач? К примеру GRBL, но под нее еще и офф контроллер приобретать, а хотелось бы свою панель управления использовать.

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

А вы вообще по теме что-то искали? https://arduinomaster.ru/motor-dvigatel-privod/shagovye-dvigateli-i-motory-arduino/

sadman41
Offline
Зарегистрирован: 19.10.2016

Какие обороты "низкие" и "нормальные"?

Гриша
Offline
Зарегистрирован: 27.04.2014

отличное ТЗ, все все сразу поняли...

1) что с питанием, какая разводка

2) что за драйверы ШД

3) где код? 

у меня хрустальный шар Клапа отобрал - помочь не смогу... 

Morroc
Offline
Зарегистрирован: 24.10.2016

Duet пишет:
К примеру GRBL, но под нее еще и офф контроллер приобретать, а хотелось бы свою панель управления использовать.

А если подумать и не приобретать ? ) У вас одна ардуина и другая ближайшая в Китае ? Если вам нужно решить вопрос сделайте на паре ардуин, команды на простые движения элементарны, заодно сможете стандартным g-кодом кормить, а если поэкспериментировать... тады конечно можно и обсудить. Управление шд уровня grbl действительно не сильно простая штука, я из библиотек только accelstepper использовал чуток допилив, но с одним шд - проблем вроде не было.

Duet
Offline
Зарегистрирован: 17.01.2015

Драйвер TB6560+nema17 настроен на полный шаг, 1.6 А,блок питания 2А , но это для теста, будут Leadshine DM542+nema23. Обороты нужны высокие, 1000 об.мин, полный шаг 3300 шаг сек. В accelstepper не работает акселератор, плавный запуск не возможен. Рабочий по оборотам вариант на stepperQ на двух ардуино, но со сменой режимов проблемы(библиотека не дописана, автор Achest). Сейчас на Гайвере через ТС разбираюсь, но тоже не работает стабильно, через раз запускает и плавный запуск как то криво, шаги не соответствуют заданным. Прилагаю короткий код.

#include <GyverButton.h>
#include <GyverTimers.h>
#include <GyverStepper.h>
#define BTN_PIN1 6
#define BTN_PIN2 14
#define BTN_PIN3 15
#define BTN_PIN4 8
#define BTN_PIN5 9
GStepper<STEPPER2WIRE> stepper(200, 3, 4);
GButton butt1(BTN_PIN1,LOW_PULL,NORM_OPEN);
GButton butt2(BTN_PIN2,LOW_PULL,NORM_OPEN);
GButton butt3(BTN_PIN3,LOW_PULL,NORM_OPEN);
GButton butt4(BTN_PIN4,LOW_PULL,NORM_OPEN);
GButton butt5(BTN_PIN5,LOW_PULL,NORM_OPEN);   
int ggg = 0;          
int kkk = 0;          
int kkk2 = 0;         
void setup () 
{
  Timer2.setPeriod(stepper.getMinPeriod() / 2);
  Timer2.enableISR();
  stepper.setRunMode(KEEP_SPEED);
  stepper.setMaxSpeed(3000);
  stepper.setAcceleration(2500);
  pinMode(4, OUTPUT);
  pinMode(3, OUTPUT); 
}
ISR(TIMER2_A) {
  stepper.tick(); 
}
void loop() {
  butt1.tick();
  butt2.tick();
  butt3.tick();
  butt4.tick();
  butt5.tick();
//Кнопка вкл. выкл
if (butt1.isSingle()&& kkk == 1) 
{
  ggg = !ggg; 
  if (!ggg)stepper.stop();
} 
if (butt1.isHolded() && kkk2 == 1) 
{ 
  ggg = 1;
}
if (butt1.isRelease() && kkk2 == 1)
{ 
  ggg = 0;
  stepper.stop(); 
}
//Кнопки выбора режима. Ручной или Автомат.
if (butt2.isSingle()){kkk2 = 1; kkk = 0;}  //кнопка ручной режим
if (butt3.isSingle()){kkk = 1; kkk2 = 0;}  //кнопка авто  режим 
//переключатель оборотов
if (butt4.state() && ggg == 1) { motor_s1();} //переключатель оборотов режим 1 
if (butt5.state() && ggg == 1) { motor_s2();} //переключатель оборотов режим 2    
}
void motor_s1() {
    stepper.setSpeed(200); 
}
void motor_s2() { 
    stepper.setSpeed(3000);
}

Morroc
Offline
Зарегистрирован: 24.10.2016

Duet пишет:

будут Leadshine DM542+nema23. Обороты нужны высокие, 1000 об.мин, полный шаг 3300 шаг сек

Тем более стоит использовать grbl/marlin, к тому же вы сами про две ардуины уже писали. Лучше вы не сделаете точно, иначе вашего поста на этом форуме не было бы.

Duet пишет:
В accelstepper не работает акселератор, плавный запуск не возможен.

Работает, никаких проблем не было с этим.

sadman41
Offline
Зарегистрирован: 19.10.2016

Если при скорости в 3000 ставить акселерацию 2500, то конечно можно сказать, что она не работает ))

mykaida
mykaida аватар
Offline
Зарегистрирован: 12.07.2018

Duet пишет:

#include <GyverButton.h>
#include <GyverTimers.h>
#include <GyverStepper.h>

#include <GyverButton.h> //Тут возможны проблемы

#include <GyverTimers.h> //Тут возможны проблемы

#include <GyverStepper.h> //Тут возможны проблемы

Проблемы с Гайвером. Скорее всего. Он на отъе-сь отлаживает библиотеки.




Duet
Offline
Зарегистрирован: 17.01.2015

mykaida пишет:

Проблемы с Гайвером. 

Возможно, но основная проблема как я понял в библиотеках шд, они не рассчитаны на большую скорость.

Разные варианты пробовал и с кнопками велосипеда и accelstepper и с ТС. Единственная библиотека которая хорошо работает на высоких скоростях это stepperQ, только режимы менять когда двигатель выключен и один шд.

b707
Offline
Зарегистрирован: 26.05.2017

Взять библиотеку stepperQ, нанять программиста, заплатить ему тысяч 10 - и все вам напишут

Duet
Offline
Зарегистрирован: 17.01.2015

sadman41 пишет:
Если при скорости в 3000 ставить акселерацию 2500, то конечно можно сказать, что она не работает ))

Переустановил библиотеку, аксель заработал, но обороты не набирает, максимум 300 об.мин.

sadman41
Offline
Зарегистрирован: 19.10.2016

Duet пишет:

sadman41 пишет:
Если при скорости в 3000 ставить акселерацию 2500, то конечно можно сказать, что она не работает ))

Переустановил библиотеку, аксель заработал, но обороты не набирает, максимум 300 об.мин.

Забудьте эти "об/мин". Для цифрового мира они являются абстрактной единицей измерения, так как производительность ШД, в основном, привязывается к частоте, а конкретно - PPS (pulse per second). Так вот, в акселе, насколько я помню, интервалы в мс измеряются, стало быть потолок - 1000PPS. 

Morroc
Offline
Зарегистрирован: 24.10.2016

1000 об/мин это вентилятор ?) Там же момент будет никакой. Аксель действительно не сильно шустрый, но 300 об/мин - это точно в импульсы упирается ? на валу нагрузки нет ? С лидшайном и питании 36+ вольт разогнать так можно, думаю, а вот с указанным драйвером и если напряжение 12в... не уверен.

brokly
brokly аватар
Offline
Зарегистрирован: 08.02.2014

А я када в школе учился, у над ШД называли школу для детей с замедленным развитием :(

Duet
Offline
Зарегистрирован: 17.01.2015

Morroc пишет:
1000 об/мин это вентилятор ?) Там же момент будет никакой. Аксель действительно не сильно шустрый, но 300 об/мин - это точно в импульсы упирается ? на валу нагрузки нет ? С лидшайном и питании 36+ вольт разогнать так можно, думаю, а вот с указанным драйвером и если напряжение 12в... не уверен.

Нагрузка не большая, высокие обороты нужны для ускоренного холостого перемещения стола, редукция 1/86. Рабочие шаги будут до 2000 шаг.сек. На grbl сколько можно разогнать шагов в секунду?

Duet
Offline
Зарегистрирован: 17.01.2015

Не найду инфу по функциям GRBL для управления с другой ардуины по ISP. 

b707
Offline
Зарегистрирован: 26.05.2017

Duet пишет:

Не найду инфу по функциям GRBL для управления с другой ардуины по ISP. 

с чего вы взяли, что это возможно?

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Duet пишет:

Не найду инфу по функциям GRBL для управления с другой ардуины по ISP. 

А зачем здесь "другая Ардуина"? IMHO это лишнее звено.

Ну и потом, опять же IMHO, GRBL и ISP - вещи взаимоисключающие.

Duet
Offline
Зарегистрирован: 17.01.2015

Ой, извиняюсь. При использовании второй ардуины в качестве автономного контроллера подключается по RX/TX. С компа понятно что на G кодах, а с ардуинки тоже G кодами или там по другому?

sadman41
Offline
Зарегистрирован: 19.10.2016

GRBL работает через что-то кроме UART? Если нет, то какая разница чем G-коды туда закидывать - PC или другой Arduino?

Morroc
Offline
Зарегистрирован: 24.10.2016

Duet пишет:
С компа понятно что на G кодах, а с ардуинки тоже G кодами или там по другому?


Одинаково. Подключайте уже )

Duet
Offline
Зарегистрирован: 17.01.2015

Не много разобрался с GRBL. Не так то просто. В нем нету произвольного ручного перемещения. К примеру, пока сигнал подаешь, кнопку держишь, перемещение, отпустил , стоп. Только G кодами. Начальная и конечная.

nik182
Offline
Зарегистрирован: 04.05.2015

Только g-кодами это верно. Всё остальное нет. Как напишешь программу, так и будет. Можно написать что кнопка нажата долго и.т.д

Duet
Offline
Зарегистрирован: 17.01.2015

Вот только нету команды прерывания движения. Если строка задана, то пока он не достигнет заданной позиции повлиять нельзя. Для реализации ручного режима это целый гемор. Самое подходящие команды для движения это в относительной системе c заданной подачей G91G01X-220F200 и все.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

А откуда возникла идея использовать явно не подходящую условиям задачи GRBL?

Duet
Offline
Зарегистрирован: 17.01.2015

andriano пишет:

А откуда возникла идея использовать явно не подходящую условиям задачи GRBL?

Больше не чего не подходит для таких задач, а высокие обороты она отлично выдает.

 

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Ну это лишь говорит о том, что задача технически реализуема. Следовательно, над ней можно работать.

b707
Offline
Зарегистрирован: 26.05.2017

andriano пишет:

А откуда возникла идея использовать явно не подходящую условиям задачи GRBL?

от того что ни на какой другой библиотеке ТС не смог раскрутить свои моторы до 1000 об мин

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Нет, ну нет библиотеки потому, что задача нестандартная. Соответственно, и способ решения должен быть нестандартным, т.е. без использования библиотек.

 

И, кстати, по поводу "нестандартности" задачи: не кажется ли Вам, что требования высокой скорости и ручного управления противоречат друг другу?

sadman41
Offline
Зарегистрирован: 19.10.2016

andriano пишет:
И, кстати, по поводу "нестандартности" задачи: не кажется ли Вам, что требования высокой скорости и ручного управления противоречат друг другу?

С точки зрения логики - да. С бытовой точки зрения - нет. Народ привык к хорошему в быту и распостраняет это требование повсюду. Например - от ресторана требует производительности фастфуда. Селяви, как грицца.

Duet
Offline
Зарегистрирован: 17.01.2015

andriano пишет:

И, кстати, по поводу "нестандартности" задачи: не кажется ли Вам, что требования высокой скорости и ручного управления противоречат друг другу?

Почему противоречат? Рабочие режимы будут до 2000 шаг. сек, а 6000 шаг. сек это для быстрого холостого перемещения стола, потому что редукция 1/86. Без библиотек не как, сам не напишу, самое сложное это разгон и торможение.

sadman41
Offline
Зарегистрирован: 19.10.2016

Duet, а сколько вы готовы отвалить за удовольствие? Прикупите результат работы специалистов Trinamic (mechatronic solution) и не партесь. А ежели не готовы отвалить адские 20 тыщ за моторчик, то вкладывайте их на протяжении нескольких лет в собственную разработку.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Duet пишет:

andriano пишет:

...требования высокой скорости и ручного управления противоречат друг другу?

Почему противоречат? Рабочие режимы будут до 2000 шаг. сек, а 6000 шаг. сек это для быстрого холостого перемещения стола, потому что редукция 1/86.

Потому, что ротор двигателя имеет определенную инерцию, которая не позволяет ему стартовать сразу на высокой скорости, а также мгновенно остановиться. Поэтому единственный вариант добиться высокой скорости - это правильные с точки зрения физики кривые разгона и торможения.

Но для реализации этих кривых нужно знать, когда потребуется остановиться, уже в момент старта. Другими словами, о моменте остановки нужно знать заранее, чего в принципе не может быть при ручном управлении.

Цитата:

Без библиотек не как, сам не напишу, самое сложное это разгон и торможение.

Вот-вот. Именно разгон и торможение и несовместимы с ручным управлением.

Duet
Offline
Зарегистрирован: 17.01.2015

sadman41 пишет:

Duet, а сколько вы готовы отвалить за удовольствие? Прикупите результат работы специалистов Trinamic (mechatronic solution) и не партесь. А ежели не готовы отвалить адские 20 тыщ за моторчик, то вкладывайте их на протяжении нескольких лет в собственную разработку.

Профессиональная система в данном случае на шаговиках не нужна, это временное решение и не хотелось бы вкладывать большие ресурсы на времянку. В дальнейшем будут стоять мощные сервоприводы типа Delta на 2 квт., но это удовольствие обойдется около 300 к. руб., быстро не реализовать. Сейчас установил редуктора 1/86 и пытаюсь приладить маломощные шаговики, за счет высоких оборотов будет хоть какая то скорость ускоренного холостого перемещения.

sadman41
Offline
Зарегистрирован: 19.10.2016

В таком случае Вы находитесь в тупике: библиотек, которые нужны Вам, не существует, писать Вы их не способны, вкладываться в готовое решение не желаете. Придется изворачиваться в области механики, что гораздо сложнее. Если сумеете. возможно достигнете результата. Но наврядли, ибо если бы это было относительно просто, то кто-нибудь уже изладил публично доступную библиотеку или решение.

Финальную стоимость решения посчитайте самостоятельно.

rkit
Offline
Зарегистрирован: 23.11.2016

Нет никакой проблемы в том, чтобы отправлять g-код по кнопке.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

rkit пишет:

Нет никакой проблемы в том, чтобы отправлять g-код по кнопке.

Проблем с отправкой - нет.

Проблема исключительно в том, что G-код не решает задачу ТС.

rkit
Offline
Зарегистрирован: 23.11.2016

Решает замечательно.

Morroc
Offline
Зарегистрирован: 24.10.2016

Duet пишет:
Вот только нету команды прерывания движения. Если строка задана, то пока он не достигнет заданной позиции повлиять нельзя. Для реализации ручного режима это целый гемор.

Это верно. А что вам мешает подавать код типа такого ?

X5
X10
X15
X20
X25
X30
X35
X40
X45
X50
X55
X60

У меня grbl сейчас под рукой нет, но, к примеру marlin, видя продолжение кода, не спешит тормозить ось и отрабатывает такое как одно движение. Если grbl делает не так, то я бы порылся в режимах работы. Тут правда буфер можно переполнить, наверное. По мне так смысла мельчить шаг нет на полной скорости, даже если это энкодером управляется можно сделать шаг крупнее для быстрого перемещения и помельче если крутят медленно, а на кнопках либо дополнительный множитель x1-x5-x10 или просто несколько пар кнопок для разной скорости. Из за того, что ось останавливается с ускорением, попасть в нужное место вовремя отпустив кнопку... ну такое, чистая теория, все равно придется медленно подходить когда близко. 

Можно отложить ардуину в сторону, взять старый ноут с lpt и взгромоздить туда win xp + mach3, например. Там с этим проблем нет )

Duet
Offline
Зарегистрирован: 17.01.2015

andriano пишет:

Но для реализации этих кривых нужно знать, когда потребуется остановиться, уже в момент старта. Другими словами, о моменте остановки нужно знать заранее, чего в принципе не может быть при ручном управлении.

Почему? В библиотеках Asselstepper, stepperQ, GyverStepper вовремя вращения можно подать команду стоп и плавная остановка.

sadman41
Offline
Зарегистрирован: 19.10.2016

Если бы Вы читали описание функций AccelStepper, то знали бы, что по stop() движение заканчивается "как можно быстрее", а не "в заданной точке". О чем andriano и пишет.

Возможно, что Вы формулируете задачу не так, как её понимают остальные.

Duet
Offline
Зарегистрирован: 17.01.2015

Morroc пишет:

Можно отложить ардуину в сторону, взять старый ноут с lpt и взгромоздить туда win xp + mach3, например. Там с этим проблем нет )

Этот вариант рассматривал. Только зачем на LPT, есть и на USB Mach 3.

Morroc
Offline
Зарегистрирован: 24.10.2016

Какая то специальная железяка ? У меня был ноут с лпт и другой поновее с какой то карточкой внешней, работала тоже как лпт.

Duet
Offline
Зарегистрирован: 17.01.2015

Morroc пишет:
Какая то специальная железяка ? У меня был ноут с лпт и другой поновее с какой то карточкой внешней, работала тоже как лпт.

Контроллеры на али под Mach 3 есть на LPT и на USB, цена примерно одинаковая. Железяка высокоточный  координатно расточной станок, весом 10 тонн, на нем установлены светооптические линейки по которым можно координироваться и есть зажим стола, по этому мне нужно только осуществить движение с заданной скоростью, ручное позиционирование. Короче уговорили, возьму какой нибудь контроллер под mach 3, системник и клаву мини клаву Numpad 18 клавиш для удобства.

Duet
Offline
Зарегистрирован: 17.01.2015

Morroc пишет:
Какая то специальная железяка ? У меня был ноут с лпт и другой поновее с какой то карточкой внешней, работала тоже как лпт.

Контроллеры на али под Mach 3 есть на LPT и на USB, цена примерно одинаковая. Железяка высокоточный  координатно расточной станок, весом 10 тонн, на нем установлены светооптические линейки по которым можно координироваться и есть зажим стола, по этому мне нужно только осуществить движение с заданной скоростью, ручное позиционирование. Короче уговорили, возьму какой нибудь контроллер под mach 3, системник и клаву мини клаву Numpad 18 клавиш для удобства.