Регулятор скорости вращения для биполярного шагового двигателя на базе Arduino Nano

По многочисленным просьбам подписчиков на моем канале, пришлось сделать димер на базе платы Arduino Nano, и драйвера DRV8825

регулятор скорости вращения, для униполярного шагового двигателя на базе Arduino Nano

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

Плата Arduino Nano, драйвер для шагового двигателя DRV8825, биполярный шаговый двигатель от компании MITSUMI, потенциометр 3,3 килоома (подойдет любой маломощный от 3 до 10 килоома), 2 кнопки, макетная плата, и соединительные провода.

регулятор скорости вращения, для униполярного шагового двигателя на базе Arduino Nano

Скетч для первого варианта (с кнопками)


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


  1. const int startButton = 8;
  2. const int reversButton = 9;
  3. const int stepPin = 11;
  4. const int enablePin = 12;
  5. const int dirPin = 13;
  6. int i=0, j=0, k=0, l=0, stepState=0;
  7. unsigned long previousMillis = 0;
  8. long interval = 0;
  9. long previousMillis2 = 0;
  10. long previousMillis3 = 0;
  11. void setup()
  12. {
  13. pinMode( startButton, INPUT_PULLUP);
  14. pinMode( reversButton, INPUT_PULLUP);
  15. pinMode( stepPin, OUTPUT); digitalWrite( stepPin, LOW);
  16. pinMode( enablePin, OUTPUT); digitalWrite( enablePin, LOW);
  17. pinMode( dirPin, OUTPUT); digitalWrite( dirPin, LOW);
  18. }
  19. void loop()
  20. {
  21. int sensorReading = analogRead(A3);
  22. interval = map(sensorReading, 0, 1023, 32767, 1000);
  23. unsigned long currentMillis = micros();
  24. if (currentMillis - previousMillis >= interval) {
  25. previousMillis = currentMillis;
  26. if (stepState == LOW) { stepState = HIGH;} else { stepState = LOW;}
  27. digitalWrite( stepPin, stepState);
  28. }else{ digitalWrite( stepPin, LOW);}
  29. if(digitalRead( startButton) == LOW){
  30. if (millis() -previousMillis2 >100)
  31. { previousMillis2 = millis(); i++; if(i==1){ j++;} if (j>1){ j=0;}
  32. }} else{ i=0;}
  33. if(j==0){ digitalWrite( enablePin, HIGH); }else{ digitalWrite( enablePin, LOW);}
  34. if(digitalRead( reversButton) == LOW){
  35. if (millis() -previousMillis3 >100)
  36. { previousMillis3 = millis(); l++; if(l==1){ k++;} if (k>1){ k=0;}
  37. }} else{ l=0;}
  38. if(k==0){ digitalWrite( dirPin, HIGH); }else{ digitalWrite( dirPin, LOW);}
  39. }

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


Схема для первого варианта

схема регулятор скорости вращения, для униполярного шагового двигателя на базе Arduino Nano

Скетч для второго варианта


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


  1. const int stepPin = 11;
  2. const int enablePin = 12;
  3. const int dirPin = 13;
  4. int stepState=0;
  5. unsigned long previousMillis = 0;
  6. long interval = 0;
  7. void setup()
  8. {
  9. pinMode( stepPin, OUTPUT); digitalWrite( stepPin, LOW);
  10. pinMode( enablePin, OUTPUT); digitalWrite( enablePin, LOW);
  11. pinMode( dirPin, OUTPUT); digitalWrite( dirPin, LOW);
  12. }
  13. void loop()
  14. {
  15. int sensorReading = analogRead(A3);
  16. interval = map(sensorReading, 0, 1023, 32767, 1000);
  17. unsigned long currentMillis = micros();
  18. if (currentMillis - previousMillis >= interval) {
  19. previousMillis = currentMillis;
  20. if (stepState == LOW) { stepState = HIGH;} else { stepState = LOW;}
  21. digitalWrite( stepPin, stepState);
  22. }else{ digitalWrite( stepPin, LOW);}
  23. }

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


Схема для второго варианта

схема регулятор скорости вращения, для униполярного шагового двигателя на базе Arduino Nano

Видео "Регулятор скорости вращения для биполярного шагового двигателя на базе Arduino Nano"


Регулятор скорости вращения для биполярного шагового двигателя на базе Arduino Nano