Stap 4: Tweede ronde van code voor alternatieve Stappenmotor en bestuurder
Ik gebruikte de EasyDriver van SparkFun samen met een stappenmotor NEME17 tijdens mijn eerste testen.
Ik heb een grotere motor en bestuurder aan boord van mijn oude RepStrap, (NEM23 stepper met RepRap stepper motor stuurprogramma v1.2 door Zach Hoeken). Het gebruik van dit vereist twee kleine adujstemnts aan de code.
1 - de inschakelen pinnen zijn tegenovergestelde.
EasyDriver: Laag = Enable
Steper stuurprogramma v1.2: hoog = Enable
2 - Ik kan niet schijnen om te rijden het NEM23 zo snel als de NEM17. Beide planken kunnen u schakelen tussen volledige en halve stap. Ik ben waarschijnlijk half intensivering van de NEM23 en volledige intensivering van de NEM17. In plaats van het werkelijke verschil uitzoeken, heb ik net de vertraging tussen de stappen in de code aangepast.
Hier is de code. Ik heb nota's toegevoegd aan de code om te laten zien waar ik wijzigingen hebt aangebracht.
//////////////////// ARDUINO CODE /////////////////////////////////////
joystickj met 2 potten om een controle stepper en DC motor snelheid en richting *** / /
Opmerking: gewijzigd voor het uitvoeren van NEM23 stepper met Stepper Motor Driver v1.2 van RepRap
verklaar pinnen voor Stepper
int potPin_X = 1;
int Step_X = 13;
int Dir_X = 12;
int Enable_X = 8;
verklaren van waarden voor stepper
int Speed_X = 0; stap snelheid (vertraging tussen stappen)
int val_X = 0;
int h = 0;
pinnen voor DC motor A verklaren
int potPin_A = 2; Selecteer de invoer pin voor de potmeter
int val_A = 0; variabele de waarde afkomstig van de sensor opslaan
Declareer variabelen voor DC A
int j = 0;
int Dir_A = 4;
int Speed_A = 5;
VOID Setup {}
Setup van stepper pinnen
pinMode (Step_X, uitvoer);
pinMode (Dir_X, uitvoer);
pinMode (Enable_X, uitvoer);
Setup DC motor A pinnen
pinMode (Dir_A, uitvoer);
pinMode (Speed_A, uitvoer);
Serial.begin(9600); Merk op dat seriële comm kan worden gebruikt om te debuggen
maar het zal vertragen de code en de stappenmotor alot vertragen (en verwarrend voor mij)
}
void loop {}
STEPPER LEZEN EN CONTROLE / / /
lezen van locatie voor joystick en berekenen van de waarden voor stappenmotor
val_X = analogRead(potPin_X); luiden naar de waarde van de sensor
h = val_X - 517; center posities - 517 is hoe ver van centrum?
h = abs(h); absolute waarde
Speed_X = 70000/h; Deze wiskunde keert u de waarde en is volledig schaalbaar als nodig (waarde gevonden via trial and error)
De vertraging tussen stappen bepaalt de snelheid van de motor
Dus, vertraging omhoog = snelheid omlaag
Opmerking: Speed_X = 70000/h goed gewerkt voor deze combinatie: EasyDriver -> NEM17-stepper
Speed_X = 160000/h; Opmerking: Snelheidsberekening uit Stepper Motor Driver V1-2 (RepRap) -> NEM23-stepper
controle van de stappenmotor / /
OPMERKING:
voor EasyDriver: hoog = disable
voor RepReap Stepper driver v1.2: laag = Disable
Als (val_X > = 530) {}
digitalWrite(Enable_X,HIGH); inschakelen
digitalWrite (Dir_X, hoge); Set richting
digitalWrite(Step_X,HIGH);
delayMicroseconds(2);
digitalWrite(Step_X,LOW);
delayMicroseconds(Speed_X);
}
Als (val_X < = 500) {}
digitalWrite(Enable_X,HIGH); / / enable
digitalWrite (Dir_X, laag); Andere richting
digitalWrite(Step_X,HIGH);
delayMicroseconds(2);
digitalWrite(Step_X,LOW);
delayMicroseconds(Speed_X);
}
Als (val_X < = 530 & & val_X > = 500) {}
digitalWrite(Enable_X,LOW); de stappenmotor uitschakelen als de joystic in het centrum ligt
voor EasyStepper: hoog = disable
voor RepReap Stepper driver v1.2: laag = Disable
}
DC MOTOR A - LEZEN EN CONTROLEREN / / /
Lezen van locatie voor joystick en berekenen van de afstand en vanuit Midden
val_A = analogRead(potPin_A); luiden naar de waarde van de sensor
j = val_A - 517; 517 is center posities - hoe ver van centrum
j = abs(j); absolute waarde
sommige grenzen op j te houden PWM waarden nuttige plaatsen
onder 100 de motor niet verplaatst en PWM max is 255
Als (j > = 510) {}
j = 510; de meest de PWM-pin kan doen is 255
}
Als (j < = 200 & & j > = 10) {}
j = 200; onder 100 PWM de motor maakt een hoge pek klinken en niet beweegt
}
Als (j < = 10) {}
j = 0; minder dan 10 is de joystick zeer dicht bij het centrum
}
Uitvoeren van DC motor een gebaseerd op analoge ingang joystick
Als (val_A > = 530) {}
digitalWrite (Dir_A, hoge); andere richting
analogWrite (Speed_A, j/2); PWM uit (delen door 2 omdat max is 255)
}
Als (val_A < = 500) {}
digitalWrite (Dir_A, laag); //
analogWrite (Speed_A, j/2); //
}
Als (val_A < = 530 & & val_A > = 500) {}
analogWrite (Speed_A, 0); uitschakelen als de joystick in het midden
}
afdrukken van waarden voor foutopsporing
Serial.Print(val_A); getallen verzenden met PC, zodat u kunt zien wat het gaande
Serial.Print(",");
Serial.println(j);
}