I'm really bad with this coding part of using two stepper motor encoder encoders to control two stepper motors [using 28BYJ-48 stepper motor with the ULN2003 board]. This code works fine using one rotary encoder for one stepper motor using this off oyostepper.com.
When I slightly modify the code for two encoders and two stepper motors I'm using this: However I'm not getting the results I expected. The two motors just don't respond. #include "Stepper.h" #define STEPS 32 // Number of steps for one revolution of Internal shaft // 2048 steps for one revolution of External shaft volatile boolean TurnDetected; // need volatile for Interrupts volatile boolean rotationdirection; // CW or CCW rotation const int PinCLK = 2; // Generating interrupts using CLK signal const int PinDT = 3; // Reading DT signal const int PinSW = 4; // Reading Push Button switch const int PinCLK2 = 46; const int PinDT2 = 47; const int PinSW2 = 48; int RotaryPosition = 0; // To store Stepper Motor Position int RotaryPosition2 = 0; int PrevPosition; // Previous Rotary position Value to check accuracy int PrevPosition2; int StepsToTake; // How much to move Stepper int StepsToTake2; // Setup of proper sequencing for Motor Driver Pins // In1, In2, In3, In4 in the sequence 1-3-2-4 Stepper small_stepper(STEPS, 8, 10, 9, 11); Stepper small_stepper2(STEPS, 40, 41, 42, 43); // Interrupt routine runs if CLK goes from HIGH to LOW void isr () { delay(4); // delay for Debouncing if (digitalRead(PinCLK)) rotationdirection = digitalRead(PinDT); else rotationdirection = !digitalRead(PinDT); TurnDetected = true; /////I added this delay(4); // delay for Debouncing if (digitalRead(PinCLK2)) rotationdirection = digitalRead(PinDT2); else rotationdirection = !digitalRead(PinDT2); TurnDetected = true; } /////up to here void setup () { pinMode(PinCLK, INPUT); pinMode(PinDT, INPUT); pinMode(PinSW, INPUT); digitalWrite(PinSW, HIGH); // Pull-Up resistor for switch attachInterrupt (0, isr, FALLING); // interrupt 0 always connected to pin 2 on Arduino UNO pinMode(PinCLK2, INPUT); pinMode(PinDT2, INPUT); pinMode(PinSW2, INPUT); digitalWrite(PinSW2, HIGH); // Pull-Up resistor for switch attachInterrupt (0, isr, FALLING); // interrupt 0 always connected to pin 2 on Arduino UNO } void loop () { small_stepper.setSpeed(600); //Max seems to be 700 if (!(digitalRead(PinSW))) { // check if button is pressed if (RotaryPosition == 0) { // check if button was already pressed } else { small_stepper.step(-(RotaryPosition * 50)); RotaryPosition = 0; // Reset position to ZERO } } // Runs if rotation was detected if (TurnDetected) { PrevPosition = RotaryPosition; // Save previous position in variable if (rotationdirection) { RotaryPosition = RotaryPosition - 1; } // decrase Position by 1 else { RotaryPosition = RotaryPosition + 1; } // increase Position by 1 TurnDetected = false; // do NOT repeat IF loop until new rotation detected // Which direction to move Stepper motor if ((PrevPosition + 1) == RotaryPosition) { // Move motor CW StepsToTake = 50; small_stepper.step(StepsToTake); } if ((RotaryPosition + 1) == PrevPosition) { // Move motor CCW StepsToTake = -50; small_stepper.step(StepsToTake); small_stepper2.setSpeed(600); //Max seems to be 700 if (!(digitalRead(PinSW2))) { // check if button is pressed if (RotaryPosition2 == 0) { // check if button was already pressed } else { small_stepper2.step(-(RotaryPosition * 50)); RotaryPosition2 = 0; // Reset position to ZERO } } // Runs if rotation was detected if (TurnDetected) { PrevPosition2 = RotaryPosition2; // Save previous position in variable if (rotationdirection) { RotaryPosition2 = RotaryPosition2 - 1; } // decrase Position by 1 else { RotaryPosition2 = RotaryPosition2 + 1; } // increase Position by 1 TurnDetected = false; // do NOT repeat IF loop until new rotation detected // Which direction to move Stepper motor if ((PrevPosition2 + 1) == RotaryPosition2) { // Move motor CW StepsToTake = 50; small_stepper2.step(StepsToTake); } if ((RotaryPosition2 + 1) == PrevPosition2) { // Move motor CCW StepsToTake = -50; small_stepper2.step(StepsToTake); } } } } } http://forum.cncprovn.com/threads/3967-CKD-Suu-tam-Arduino-closed-loop-Stepper-motor?p=151859 https://forum.level1techs.com/t/closed-loop-control-for-3d-printers/80674/3
0 Comments
Leave a Reply. |