Perfezionamento Driver motore stepper ELECTROYOUaiutami tu!
Buon giorno a tutti, ho finito ieri sera di realizzare questa scheda per il controllo di un motore stepper.
il circuito è composto da 3 parti: alimentazione, controllo e una di potenza.
la prima e la terza sono state ottimate, il problema rimane sulla scheda di controllo, cotituita da un PIC16F690.
Come saprete il motore per girare deve ricevere un vettore di 4 bit che regola l eccitazione delle bobine in modo tale da ruotare in modo ben preciso. Io ho improvvisato un ADC che mi legge il valore di un potenziometro e mi assegna tale valore alla variabile che regola la velocità del motore.
Ho poi inserito 2 pulsanti che mi permettono uno di fare marcia-arresto e uno l inversione di marcia.
purtroppo mi trovo ad affrontare alcuni problemi che non riesco a risolvere, ovvero:
Ecco il codice in MikroC:
questo invece è lo schema elettrico che rappresenta i collegamenti dei pulsanti e del potenziometro:
COME POSSO QUINDI RISOLVERE I PROBLEMI DI MALFUNZIONAMENTO DEI PULSANTI??? AVETE QUALCHE CONSIGLIO SULLA GESTIONE DELLE FUNZIONI NEL CODICE?
è una delle prime esperienze con i micro e spesso mi perdo in un bichier' d'acqua! scusate le possibili eresie nel codice! GRAZI PER L' AIUTO!
il circuito è composto da 3 parti: alimentazione, controllo e una di potenza.
la prima e la terza sono state ottimate, il problema rimane sulla scheda di controllo, cotituita da un PIC16F690.
Come saprete il motore per girare deve ricevere un vettore di 4 bit che regola l eccitazione delle bobine in modo tale da ruotare in modo ben preciso. Io ho improvvisato un ADC che mi legge il valore di un potenziometro e mi assegna tale valore alla variabile che regola la velocità del motore.
Ho poi inserito 2 pulsanti che mi permettono uno di fare marcia-arresto e uno l inversione di marcia.
purtroppo mi trovo ad affrontare alcuni problemi che non riesco a risolvere, ovvero:
- CONFIGURAZIONE PULSANTI
- la risposta alla pressione non è interpretata correttamente il 100% delle volte
- mancanza di antirimbalzo
- errato codice di interpretazione del pulsante
CONVERTITORE A/D - quando il potenziometro è ruotato completamente la conversione del DAC sballa
- possibile configurazione errata dei registri
Ecco il codice in MikroC:
- Codice: Seleziona tutto
void main(void) {
int clockwise[]={5,9,10,6}; //numero porta output in decimale MOTORE AVANTI
int counter_clockwise[]={6,10,9,5}; //numero porta output in decimale MOTORE INDIETRO
int velocity = 100; //velocita' di stepping
int switchedOn=0; //decide quando accendere spegnere il dispositivo
int spin_clockwise=1;
int i;
char resV = 0;
/*Init PORTx*/
TRISA = 0b00000100; // Input for RA2
TRISC = 0b01100000; //RC5, sono input, le altre output
/* Init ADC */
ANSELH = 0; // Set PORT AN8 to AN11 as Digital O
ADCON0=0b10001001; // select right justify result. ADC port channel 2 ETC P115
ADCON1=0b00010000; // Select the FRC for 8 MHz
PORTC = 0x00; //azzero la PORTC
while (1) {
if (switchedOn==0) //questa parte è la routine che mi ferma
while (PORTC&0x32) switchedOn=1; //e mi fa partire il motore, controllando
} //lo stato di RC5 che determina la marcia
else { //o l' arresto.
while (PORTC&0x32) {switchedOn=0; PORTC = 0x00;}
}
if (switchedOn==1) { //qua invece controllo lo stato di rotazione
if (spin_clockwise==1) //del motore, invertendo la variabile spin_clockwise
while (PORTC&0x64) spin_clockwise=0; //tra 0(pulsante non premuto) o 1(il pulsante è stato premuto)
else
while (PORTC&0x64) spin_clockwise=1;
}
/*ADC CONVERSION START*/
resV=ADC_Read(2) >> 6; //scrivi in resV solo i 4 BIT PIù SIGNIFICATIVI
velocity = resV*20;
/*ADC CONVERSION STOP*/
if(switchedOn==1) //questa parte è quella che da l' uscita
for(i=0; i<=3; i++) { //per l azionamento del motore, controllando lo stato
if (spin_clockwise) //delle variabili switchedOn(marcia o arresto)
PORTC = clockwise[i]; //e spin_clockwise(avanti o indietro)
else
PORTC = counter_clockwise[i];
if (velocity==0) velocity=1;
Vdelay_ms(velocity); //Vdelay_ms(velocity) è il ritardo che mi regola così la
} //velocità di eseguzione del for quindi la velocità
} //del motorino
}
questo invece è lo schema elettrico che rappresenta i collegamenti dei pulsanti e del potenziometro:
COME POSSO QUINDI RISOLVERE I PROBLEMI DI MALFUNZIONAMENTO DEI PULSANTI??? AVETE QUALCHE CONSIGLIO SULLA GESTIONE DELLE FUNZIONI NEL CODICE?
è una delle prime esperienze con i micro e spesso mi perdo in un bichier' d'acqua! scusate le possibili eresie nel codice! GRAZI PER L' AIUTO!


