Ciao a tutti ,
sono alle prese con un motore passo passo .
Devo comandarne il senso di rotazione , destro e sinistro , e la velocita’ con un potenziometro .
Finora sono riuscito a scrivere questo pseudo programma , che risponderebbe
alle esigenze di progetto ma al lato pratico presenta una grande lacuna che e’ l’accelerazione .
Mi servirebbe una partenza meno secca quando mi trovo con il riferimento di velocita’ al massimo
Ho cercato in giro per i vari forum senza trovare una soluzione adatta al mio programma .
Probabilmente e’ sbagliato l’approccio nella gestione del motore , ma non saprei proprio come procedere.
const int Step=7; //pin di step
const int Dir=8; //pin direzione avanti /indietro
const int EN=12; //pin abilitazione marcia(low =abilitata)
const int puls1=4; // pulsante avanti
const int puls2=5; // pulsante indietro
int puls1State=0; //variabile pulsante avanti
int puls2State=0; //variabile pulsante indietro
int sensor=A1; // potenziometro velocita'
int sensorValue=0; //variabile potenziometro
void setup(){
pinMode (7,OUTPUT); //step
pinMode (8,OUTPUT); //direzione
pinMode (12,OUTPUT); //enable
pinMode(4,INPUT); //pl avanti
pinMode(5,INPUT); //pl indietro
pinMode(A1,INPUT); //potenziometro
}
void loop(){
int sensorValue=analogRead(A1);
int step_time= map(sensorValue,0,1024,1100,1);
digitalWrite(EN,HIGH); //alla prima alimentazione tiene spento il motore
puls1State=digitalRead(4);
puls2State=digitalRead(5);
if (puls1State==1){
digitalWrite(EN,LOW);
digitalWrite(Dir,HIGH);
}
if (puls2State==1){
digitalWrite(EN,LOW);
digitalWrite(Dir,LOW);
}
if (step_time==1100){
digitalWrite (EN,HIGH);//disabilito la marcia quando il pot e' a zero
}
digitalWrite (Step,HIGH);
delayMicroseconds(step_time);
digitalWrite (Step,LOW);
delayMicroseconds(step_time);
}