Buonasera,
Sto iniziando a toccare con mano le funzionalità di arduino ed eccomi che da subito mi sono trovato di fronte al mio primo problema.
Io dovrei gestire la velocità di due motori passo passo con i rispettivi potenziometri. Alcuni dati:
Ardino uno rev3
2 Motori nema 23 3a
2 Driver della microstep M542
2 Potenziometri da 50K ohm
all'inizio ho gestito un solo motore senza problemi, anzi va che è una favola! di seguito il codice:
/*
Driver microstep ST-M542
Pul+ -> +5V
Pul- -> Pin 9
Dir+ -> +5V
Dir- -> Pin 8
Enable+ non connesso
Enable- non connesso
*/
int PotPin1 = A3; // pin analogico usato per connetter il potenziometro1
int PotVal = 0; // variabile letta dal PotPin1
void setup() {
pinMode(8, OUTPUT); //Pin direzione
pinMode(9, OUTPUT); //Pin step
digitalWrite(8, LOW);
digitalWrite(9, LOW);
}
void loop() {
PotVal = analogRead(PotPin1); // legge il valore del potenziometro1 (valore tra 0-1023)
PotVal = map(PotVal,0,1023,0,1600); // map(valore,valmin,valmax,outputvalmin,outputvalmax)
digitalWrite(9, HIGH);
delayMicroseconds(PotVal);
digitalWrite(9, LOW);
delayMicroseconds(PotVal);
}
Nel momento in cui duplico il listato noto che i motori non seguono i due potenziometri in modo distinto ma al contrario sembrano che vadano all unisono, o comunque il secondo potenziometro non sembra funzionare. Di seguito il codice:
/*
Driver microstep ST-M542
Pul+ -> +5V
Pul- -> Pin 9
Dir+ -> +5V
Dir- -> Pin 8
----
Pul+ -> +5V
Pul- -> Pin 7
Dir+ -> +5V
Dir- -> Pin 6
----
Enable+ non connesso
Enable- non connesso
*/
int PotPin1 = A3; // pin analogico usato per connetter il potenziometro1
int PotPin2 = A2; // pin analogico usato per connetter il potenziometro2
int PotVal1 = 0; // variabile letta dal PotPin1
int PotVal2 = 0; // variabile letta dal PotPin2
void setup() {
pinMode(8, OUTPUT); //Pin direzione1
pinMode(9, OUTPUT); //Pin step1
pinMode(6, OUTPUT); //Pin direzione2
pinMode(7, OUTPUT); //Pin step2
digitalWrite(8, LOW);
digitalWrite(9, LOW);
digitalWrite(6, LOW);
digitalWrite(7, LOW);
}
void loop() {
PotVal1 = analogRead(PotPin1); // legge il valore del potenziometro1 (valore tra 0-1023)
PotVal1 = map(PotVal1,0,1023,0,1600); // map(valore,valmin,valmax,outputvalmin,outputvalmax)
PotVal2 = analogRead(PotPin2); // legge il valore del potenziometro2 (valore tra 0-1023)
PotVal2 = map(PotVal2,0,1023,0,1600); // map(valore,valmin,valmax,outputvalmin,outputvalmax)
digitalWrite(9, HIGH);
delayMicroseconds(PotVal1);
digitalWrite(9, LOW);
delayMicroseconds(PotVal1);
digitalWrite(7, HIGH);
delayMicroseconds(PotVal2);
digitalWrite(7, LOW);
delayMicroseconds(PotVal2);
delay(15); //ritardo per completare il ciclo
}
Ora io è da un pò che sto guardando in rete qualche soluzione ma penso seriamente che sia una cavolata tale che nessuno si è mai preso la briga di scrivere, chiedo aiuto in tal senso grazie mille!