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

Управление биполярным шаговым двигателем при помощи инкрементального (инкрементного) энкодера EC11, Arduino Nano и DRW8825

Для проекта используется:

Плата Arduino Nano, инкрементальный (инкрементный) энкодер EC11, драйвер для шагового двигателя DRV8825, макетная плата, соединительные провода, и биполярный шаговый двигатель Mitsumi.

плата Arduino Nano, драйвер шагового двигателя DRV8825, макетная плата, соединительные провода, биполярный шаговый двигатель Mitsumi, инкрементальный (инкрементный) энкодер EC11.

Для сканирования контактов энкодера можно использовать этот скетч! Загрузите его на плату до подключения энкодера к плате!


//Начало скетча для теста контактов энкодера


  1. void setup()
  2. {
  3. Serial.begin(9600);
  4. pinMode( 2, OUTPUT); digitalWrite( 2, HIGH);
  5. pinMode( 3, INPUT);
  6. pinMode( 4, INPUT);
  7. pinMode( 5, INPUT);
  8. }
  9. void loop()
  10. {
  11. int sw = digitalRead(3);
  12. int clk = digitalRead(5);
  13. int dt = digitalRead(4);
  14. Serial.print("SW=");Serial.print(sw);
  15. delay(10);
  16. Serial.print(" CLK=");Serial.print(clk);
  17. delay(10);
  18. Serial.print(" DT=");Serial.println(dt);
  19. delay(100);
  20. }

//Конец скетча для теста контактов энкодера




После загрузки скетча для теста контактов энкодера, можно подключать энкодер к плате Arduino Nano, как показано на этой схеме.

Схема подключения инкрементального (инкрементного) энкодера EC11 к Arduino Nano

Скетч проекта


//Начало скетча


  1. const int stepPin = 11;
  2. const int enablePin = 12;
  3. const int dirPin = 13;
  4. const int plus = 2;
  5. const int sw = 3;
  6. const int dt = 4;
  7. const int clk = 5;
  8. int state_SW = 0;
  9. int state_DT = 0;
  10. int state_CLK = 0;
  11. int i = 0, j = 0, steps = 0;
  12. int limit, limit_1 = 1, limit_2 = 5;
  13. void setup()
  14. {
  15. Serial.begin(9600);
  16. pinMode( plus, OUTPUT); digitalWrite( 2, HIGH);
  17. pinMode( sw, INPUT);
  18. pinMode( dt, INPUT);
  19. pinMode( clk, INPUT);
  20. pinMode( stepPin, OUTPUT); digitalWrite( stepPin, LOW);
  21. pinMode( enablePin, OUTPUT); digitalWrite( enablePin, LOW);
  22. pinMode( dirPin, OUTPUT); digitalWrite( dirPin, LOW);
  23. }
  24. void loop()
  25. {
  26. state_SW = digitalRead(sw);
  27. state_DT = digitalRead(dt);
  28. state_CLK = digitalRead(clk);
  29. if (state_SW == LOW){ limit = limit_2;}else{ limit = limit_1;}
  30. if ((state_DT == HIGH)&&(state_CLK == LOW)&&(i == 0)&&(j == 0)){ i = 1;}
  31. if ((state_DT == LOW)&&(state_CLK == LOW)&&(i == 1)&&(j == 0)){ i = 2;}
  32. if ((state_DT == LOW)&&(state_CLK == HIGH)&&(i == 2)&&(j == 0)){ i = 3;}
  33. if ((state_DT == HIGH)&&(state_CLK == HIGH)&&(i == 3)&&(j == 0)){ i = 0;
  34. Serial.println("Step +");
  35. steps = limit; digitalWrite( dirPin, HIGH);
  36. }
  37. if ((state_DT == LOW)&&(state_CLK == HIGH)&&(j == 0)&&(i == 0)){ j = 1;}
  38. if ((state_DT == LOW)&&(state_CLK == LOW)&&(j == 1)&&(i == 0)){ j = 2;}
  39. if ((state_DT == HIGH)&&(state_CLK == LOW)&&(j == 2)&&(i == 0)){ j = 3;}
  40. if ((state_DT == HIGH)&&(state_CLK == HIGH)&&(j == 3)&&(i == 0)){ j = 0;
  41. Serial.println("Step -");
  42. steps = limit; digitalWrite( dirPin, LOW);
  43. }
  44. if(steps > 0){ steps--;
  45. digitalWrite( stepPin, HIGH); delay(5);
  46. digitalWrite( stepPin, LOW);
  47. }
  48. }

//Конец скетча




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

Схема управления биполярным шаговым двигателем с использованием инкрементального (инкрементного) энкодера EC11, Arduino Nano и драйвера для шаговых двигателей DRW8825

Видео проекта “Управление биполярным шаговым двигателем при помощи инкрементального энкодера”


Управления биполярным шаговым двигателем с использованием инкрементального (инкрементного) энкодера EC11, Arduino Nano и драйвера для шаговых двигателей DRW8825.