1.2.10. fejezet, Motor Control Shield
Waveshare és az 5 csatlakozós léptető motor
Hardver eszközök:
Kit beszerezhető az rPibolt.hu-nál. A vezérlőhöz adott arduino minta kód 4 DC motor vezérléséhez készült.
int motor1_dir1 = 12; int motor1_dir2 = 13; int motor1_pwm = 11; int motor2_dir1 = 8; int motor2_dir2 = 7; int motor2_pwm = 10; int motor3_dir1 = 5; int motor3_dir2 = 4; int motor3_pwm = 9; int motor4_dir1 = 3; int motor4_dir2 = 2; int motor4_pwm = 6; void setup() { pinMode(motor1_dir1,OUTPUT); pinMode(motor1_dir2,OUTPUT); pinMode(motor1_pwm,OUTPUT); pinMode(motor2_dir1,OUTPUT); pinMode(motor2_dir2,OUTPUT); pinMode(motor2_pwm,OUTPUT); pinMode(motor3_dir1,OUTPUT); pinMode(motor3_dir2,OUTPUT); pinMode(motor3_pwm,OUTPUT); pinMode(motor4_dir1,OUTPUT); pinMode(motor4_dir2,OUTPUT); pinMode(motor4_pwm,OUTPUT); digitalWrite(motor1_dir1,0); digitalWrite(motor1_dir2,1); digitalWrite(motor1_pwm,1); digitalWrite(motor2_dir1,0); digitalWrite(motor2_dir2,1); digitalWrite(motor2_pwm,1); digitalWrite(motor3_dir1,0); digitalWrite(motor3_dir2,1); digitalWrite(motor3_pwm,1); digitalWrite(motor4_dir1,0); digitalWrite(motor4_dir2,1); digitalWrite(motor4_pwm,1); } void loop() { analogWrite(motor1_pwm, 128); analogWrite(motor2_pwm, 128); analogWrite(motor3_pwm, 128); analogWrite(motor4_pwm, 128); delay(500); }
A két léptető motor vezérlése (csak példa, ezzel az eszközzel nem működik!):
#include <Stepper.h> Stepper stepper1 = Stepper(512, 2, 3, 4, 5); Stepper stepper2 = Stepper(512, 7, 8, 12, 13); void setup() { stepper1.setSpeed(250); stepper2.setSpeed(250); } void loop() { stepper1.step(5); stepper2.step(5); delay(1); }
A 2. motor manuális vezérlésre egy minta. Ezeket a digitális kimeneteket használja az eszköz, de még nem teljesen jó. Lassan forog, és a várakozási idő csökkentésével sem lett sokkal gyorsabb. Elvileg ez a sorrend nagyobb nyomatékot biztosít, de a 0,2,4,6 lépés sorrend alkalmazásával meg sem mozdult a motor.
int bluePin = 10; int pinkPin = 11; int yellowPin = 12; int orangePin = 13; int currentStep = 0; boolean dir = true; int stepperSpeed = 5; void setup() { // put your setup code here, to run once: pinMode(bluePin,OUTPUT); pinMode(pinkPin,OUTPUT); pinMode(yellowPin,OUTPUT); pinMode(orangePin,OUTPUT); digitalWrite(bluePin,LOW); digitalWrite(pinkPin,LOW); digitalWrite(yellowPin,LOW); digitalWrite(orangePin,LOW); } void loop() { switch(currentStep){ case 0: digitalWrite(bluePin,HIGH); digitalWrite(pinkPin,LOW); digitalWrite(yellowPin,LOW); digitalWrite(orangePin,LOW); break; case 1: digitalWrite(bluePin,HIGH); digitalWrite(pinkPin,HIGH); digitalWrite(yellowPin,LOW); digitalWrite(orangePin,LOW); break; case 2: digitalWrite(bluePin,LOW); digitalWrite(pinkPin,HIGH); digitalWrite(yellowPin,LOW); digitalWrite(orangePin,LOW); break; case 3: digitalWrite(bluePin,LOW); digitalWrite(pinkPin,HIGH); digitalWrite(yellowPin,HIGH); digitalWrite(orangePin,LOW); break; case 4: digitalWrite(bluePin, LOW); digitalWrite(pinkPin, LOW); digitalWrite(yellowPin, HIGH); digitalWrite(orangePin, LOW); case 5: digitalWrite(bluePin, LOW); digitalWrite(pinkPin, LOW); digitalWrite(yellowPin, HIGH); digitalWrite(orangePin, HIGH); case 6: digitalWrite(bluePin, LOW); digitalWrite(pinkPin, LOW); digitalWrite(yellowPin, LOW); digitalWrite(orangePin, HIGH); case 7: digitalWrite(bluePin, HIGH); digitalWrite(pinkPin, LOW); digitalWrite(yellowPin, LOW); digitalWrite(orangePin, HIGH); default: digitalWrite(bluePin, LOW); digitalWrite(pinkPin, LOW); digitalWrite(yellowPin, LOW); digitalWrite(orangePin, LOW); break; } currentStep = (++currentStep > 7) ? 0 : currentStep; delay(stepperSpeed); }
A 1. motor manuális vezérléshez a lábkiosztás:
int bluePin = 6; int pinkPin = 7; int yellowPin = 9; int orangePin = 8;
2017.12.20.-án kiadott a gyártó egy vezérlő programot a léptetőmotorokhoz. A mellékelt mintakóddal a 360 fokos forgást teszteltem, de 362-vel volt mindig pontosan a fordulat egy kör.
A példa programban fordított irányú forgást az alábbi kóddal lehet eszközölni a Motor.cpp-ben:
void Motor_Trun(BYTE Motor_dev, signed long Angle) { ... if (Angle > 0) { Serial.println("* positive angle *\r\n"); unsigned long beats = (Angle * 4098) / 360 ; //Need to turn the beat 4076 for(beats = beats; beats > 0; beats--){ Motor_Setbit(sMotor, BeatCode[Index]); Index++; if(Index % 8 == 0){ Index = Index & 0x07; //Greater than 8 clear 0 } } } else { Serial.println("* negative angle *\r\n"); unsigned long beats = (abs(Angle) * 3586) / 360 ; Index = 7; for(beats = beats; beats > 0; beats--){ Motor_Setbit(sMotor, BeatCode[Index]); Index--; if(Index == 0){ Index = 7; } } } ... }
Motor csatlakozó kiosztás (DC motor)
Hasznos linkek
Összeszerelve
A motor működése
CNC Plotter Arduino project
- A hozzászóláshoz be kell jelentkezni