Ардуино и драйверы ШД

Нет ответов
everlast
Offline
Зарегистрирован: 29.10.2015

Всем доброго времени суток.

У меня имеются Arduino, Shield CNC(lkz XGE), ШД моторы и драйвера для ШД моторов A4988.

Подключаю моторы через данный шилд, но для проверки на макетке ставлю один драйвер и подключаю один мотор. http://arduino-diy.com/arduino-sovety-dlya-nachinayushchikh-shagovyy-dvigatel-Nema-17

Задача такая: нужно, что бы мотор во время ожидания(когда он не двигается), не потреблял ток. Я поставил перемычку Sleep-Reset и с помощью Enable вкл/выкл драйвер. Получается так, что всё работает, когда он делает много шагов, но когда 1 шаг, мотор делает шаг, отключается драйвер, и мотор делает дерганое движение непонятно куда. Т.е. никакой точности при том, что бы ШД не потреблял ток, нет.

Подскажите как решить такую задачу?

int dirPin1 = 4;
int stepPin1 = 3;
int btnPin1 = 15; 
int val_btn1 = 0;
int flag1_motor=0;

void setup() 
{
  Serial.begin(112500);
 pinMode(dirPin1, OUTPUT);
 pinMode(stepPin1, OUTPUT);
 pinMode(btnPin1,INPUT_PULLUP);
 
// pinMode(6,OUTPUT); //RST
// pinMode(7,OUTPUT); //Sleep
 pinMode(11,OUTPUT); //EN
//
// digitalWrite(6, HIGH); //RST
// digitalWrite(7, HIGH); //Sleep
 digitalWrite(11, HIGH); //EN
}

void step1(boolean dir,int steps)
{
  digitalWrite(dirPin1,dir);
  delay(50);
   for(int i=0;i<steps;i++)
   {
    // если на pin кнопки что-то пришло, то выходим из цикла принудительно
    val_btn1= digitalRead(btnPin1);
    if(val_btn1==LOW)
    {digitalWrite(stepPin1, HIGH);
   delayMicroseconds(800);
   digitalWrite(stepPin1, LOW);
   delayMicroseconds(800);
   flag1_motor=1;}
    if((val_btn1==HIGH)&&(flag1_motor==1))
   {flag1_motor=0;
   break;
   }
   if((val_btn1==HIGH)&&(flag1_motor==0))
   {digitalWrite(stepPin1, HIGH);
   delayMicroseconds(800);
   digitalWrite(stepPin1, LOW);
   delayMicroseconds(800);}
   }
}
void loop()
{
// step1(true,2);
// delay(5);
 digitalWrite(11, HIGH); //EN
 Serial.println("HIGH_off");
 delay(1000);
 digitalWrite(11, LOW);
 delay(1000);
 Serial.println("LOW_on");
 step1(false,1000);
 delay(1500);
}