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