Управление большим шаговым двигателем

letruk

✩✩✩✩✩✩✩
1 Авг 2022
3
0
Здравствуйте все.
Сложилась определенного рода проблема.
Имеется в наличии Шаговый двигатель Leadshine Nema 34 (86CME85-BZ) и драйвер CLE24.
Для управления использую Arduino Mega 2560
Вообщем проблема в том что ни как не могу заставить этот двигатель крутится, только дергается и все.
Сам драйвер использую в режиме шагового двигателя серво функции отключены. В зависимости от микрошага меняется только тон дерганья.
C++:
#include <AccelStepper.h>
AccelStepper Stepper1(1,53,51); //использует пин 12 и 13 для dir и step, 1 - режим "external driver" (A4988)
int dir = 1; //используется для смены направления
void setup() {
  Stepper1.setMaxSpeed(10000); //устанавливаем максимальную скорость вращения ротора двигателя (шагов/секунду)
  Stepper1.setAcceleration(20000); //устанавливаем ускорение (шагов/секунду^2)
}

void loop() {
  if(Stepper1.distanceToGo()==0){ //проверка, отработал ли двигатель предыдущее движение
    Stepper1.move(1600*dir); //устанавливает следующее перемещение на 1600 шагов (если dir равен -1 будет перемещаться -1600 -> противоположное направление)
    //dir = dir*(-1); //отрицательное значение dir, благодаря чему реализуется вращение в противоположном направлении
    delay(10); //задержка на 1 секунду
}
Stepper1.run(); //запуск шагового двигателя. Эта строка повторяется вновь и вновь для непрерывного вращения двигателя
}
Если кто то сможет помочь буду очень признателен.
 

Старик Похабыч

★★★★★★★
14 Авг 2019
4,272
1,303
Москва
Ну для начала
delay(10); //задержка на 1 секунду
это не 1 секунда, а 0.01 секунды. Но надеюсь это просто опечатка.
10000 шагов в секунду это не многовато ли для мотора ? Если без дробления шага (а я не знаю какое там выставлено дробление в драйвере, я не нашел такого драйвера), то получается скорость 50 оборотов в секунду.

Начните с медленного вращения. Скажем 1 оборот в секунду.
 

rkit

★★★✩✩✩✩
5 Фев 2021
510
127
Accelstepper даже 1000 шагов выдает со скрипом, какие уж 10000.
 

letruk

✩✩✩✩✩✩✩
1 Авг 2022
3
0
@Старик Похабыч,
На драйвере микрошаг пробовал менять от 800 до 40000, на 800 получается что двигатель делает шаг в перед и сразу на зад, по мере увеличения микрошага двигатель делает все тоде самое только медленнее, а на очень большом микрошаге вообще как будто бы не двигается.
Задержку пробовал увеличивать до секунды и более при это уменьшая количество шагов и ускорение, но в целом картина от этого не меняется.
На всякий случай прикрепил фото драйвера.
 

Вложения

Старик Похабыч

★★★★★★★
14 Авг 2019
4,272
1,303
Москва
То, что драйвер поддерживает такое дробление это хорошо, но не значит что ардуина и мотор с этим справятся.
1. Проверить правильность подключения обмотки мотора: парные обмотки имеют сопротивление.
2. Поставить минимальное дробление - я тут вижу 800. Для 17-го мотора с полным у меня получалось с места делать 1000 шагов в секунду. Т.е. 5 оборотов в секунду примерно.
2. Написать простенькую программу выдачи сигнала на пин STEP (на драйврере PULS). Тут не надо трогать пины DIR и EN - EN поставить в рабочее положение, DIR в любое. Программа должна выдавать высокий сигнал на PULS на какое то время. Я бы сделал минимум на 10микросекунд. Т.е. цикл loop выглядел бы так:
C++:
digitalWrite(PULSE,HIGH);
delayMicroseconds(10);
digitalWrite(PULSE,LOW);
delayMicroseconds(990);
Возможно паузы надо будет увеличить что бы найти минимальное рабочее решение, а может и нет. А уж после можно менять микрошаги. Если это будут работать при 800, то для 1600 общее время уменьшить в 2 раза. 5 и 495 сделать. Но 1-ое значение не делать меньше 1.
 

letruk

✩✩✩✩✩✩✩
1 Авг 2022
3
0
@Старик Похабыч,
Спасибо огромное все заработало, даже время регулировать не пришлось на любом микрошаге работает плавно без рывков.