Ардуино и драйверы ШД
- Войдите на сайт для отправки комментариев
Всем доброго времени суток.
У меня имеются 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);
}