Ciao a tutti,
sono alle prime armi con il controllo di motori passo-passo, ma per il momento sembra funzionare tutto come dovrebbe. Ho solo un piccolo problema relativo al numero di passi di un motore da 200 passi /giro...
Utilizzo un driver M542T (che è un microstepper) ed impostando i jumper su ON-ON-ON-ON (rif. datasheet sottostante) gli step del motore passano da 200 a 400; se con Arduino imposto un ciclo di 200 passi faccio quindi mezzo giro del motore.
La domanda è: come si fa con questo Driver a non fargli ridurre il numero di step?
Sotto ho riportato le specifiche del Driver, del motore ed il codice che ho usato.
Grazie in anticipo
Link Driver:
http://eu.stepperonline.com/download/pdf/M542T.pdf
Link motore:
http://eu.stepperonline.com/download/pdf/23HS41-1804S.pdf
Codice:
/*
Motore con potenziometro per regolatore velocità, pulsanti per impulsi ed interruttore
per movimento continuo
*/
const int Enable = 6; // pin enable su M542T
const int Direzione = 7; // pin direzione su M542T
const int Pulsazione = 8; // pin pulsazione su M542T
const int Potenziometro = A0;
const int StepOrario = 12;
int ValoreStepOrario = 0;
int PotVal;
int Speed; //microsecondi
float NumGiri = 1; //numero giri
int NumStep = 200; //numero step motore per giro
int TotSteps = NumStep * NumGiri;
void setup() {
// put your setup code here, to run once:
pinMode(Enable, OUTPUT);
pinMode(Direzione, OUTPUT);
pinMode(Pulsazione, OUTPUT);
pinMode(Potenziometro, INPUT);
pinMode(StepOrario, INPUT);
digitalWrite(Enable, HIGH);
digitalWrite(Direzione, LOW);
digitalWrite(Pulsazione, LOW);
}
void loop() {
// put your main code here, to run repeatedly:
ValoreStepOrario = digitalRead(StepOrario);
PotVal = analogRead(Potenziometro);
Speed = map(PotVal, 0, 1023, 1200, 300); //min 300 microsecondi
if (ValoreStepOrario == HIGH) {
delay(250);
digitalWrite(Enable, LOW);
digitalWrite(Direzione, HIGH);
for (int i = 0; i < TotSteps; i++) {
digitalWrite(Pulsazione, HIGH);
delayMicroseconds(Speed);
digitalWrite(Pulsazione, LOW);
delayMicroseconds(Speed);
}
digitalWrite(Enable, HIGH);
}
}