Sommario:

Guida un motore passo-passo con un microprocessore AVR: 8 passaggi
Guida un motore passo-passo con un microprocessore AVR: 8 passaggi

Video: Guida un motore passo-passo con un microprocessore AVR: 8 passaggi

Video: Guida un motore passo-passo con un microprocessore AVR: 8 passaggi
Video: PierAisa 140: Semplice pilotaggio Motore Step Passo Passo da stampante con interruttori 2024, Luglio
Anonim
Guida un motore passo-passo con un microprocessore AVR
Guida un motore passo-passo con un microprocessore AVR

Hai dei motori passo-passo recuperati da stampanti/unità disco/ecc in giro?

Alcuni sondaggi con un ohmetro, seguiti da un semplice codice driver sul microprocessore e camminerai con stile.

Passaggio 1: conoscere gli stepper

Conosci gli stepper
Conosci gli stepper
Conosci gli stepper
Conosci gli stepper

Fondamentalmente, dovrai capire dove vanno tutti i piccoli fili.

Il primo passo è capire se si tratta di un motore unipolare o bipolare. Dai un'occhiata a Jones on Steppers per qualche informazione più approfondita, poi al sito di Ian Harries per un metodo semplice per capire un motore sconosciuto. Leggi un po ', quindi unisciti a me in una guida dettagliata di questo motore che ho acquistato a buon mercato. (Sono in vendita a $ 0,99 in questo momento. Sono piccoli, relativamente leggeri, ma non hanno molta coppia. Non so ancora a cosa serviranno.)

Passaggio 2: trova un terreno comune

Trova un terreno comune
Trova un terreno comune
Trova un terreno comune
Trova un terreno comune

Quindi hai cinque (o quattro o sei) fili. Il tuo motore avrà due metà e probabilmente puoi anche dire semplicemente guardando a quale lato appartiene ciascun filo.

Se stai guardando solo quattro fili, sei fortunato: è un motore bipolare. Tutto quello che devi fare è capire quali due coppie di fili vanno insieme. Se hai un motore unipolare, o più di 4 fili, dovrai rompere il tuo ohmetro. Quello che stai cercando è il filo comune (massa) per ciascuna metà. Puoi dire quale è la massa in un motore bipolare perché ha la metà della resistenza a uno dei poli rispetto ai poli tra di loro. Nella foto sono le mie note dal collegamento di fili a fili e annotazione della resistenza (o se sono collegati affatto). Puoi vedere che il bianco è il terreno per il trio inferiore b/c ha metà della resistenza al rosso o al blu che hanno l'uno verso l'altro. (Questo motore è strano e non ha un rubinetto centrale sulla bobina del magnete superiore. È come se fosse mezzo bipolare, mezzo unipolare. Forse potresti usarlo per rilevare la rotazione nella bobina rosso-bianco-blu quando il nero-giallo la bobina viene azionata.)

Passaggio 3: scopri l'ordine di passaggio

Capire l'ordine di passaggio
Capire l'ordine di passaggio

Stavo per guidare questo motore come bipolare, quindi sto ignorando il filo di terra bianco. Ho solo quattro fili di cui preoccuparmi.

Potresti comunque voler far funzionare il tuo motore unipolare come bipolare, perché utilizza l'intera bobina in entrambe le fasi invece di alternare le due metà di ciascuna bobina. Più bobina = più coppia. Fai passare la corrente attraverso una coppia (osservando la polarità che hai scelto) e poi fai passare la corrente attraverso l'altra coppia allo stesso tempo. Quando colleghi la seconda coppia, guarda in che direzione gira il motore. Scrivi questo. Ora inverti la polarità sulla prima coppia che hai scelto. Quindi ricollegare la seconda coppia con la polarità anch'essa invertita. Nota la direzione. Da questo dovresti essere in grado di capire la sequenza per ruotare il motore in entrambe le direzioni. Nel mio esempio, entrambi hanno finito per girare in senso antiorario, quindi passare attraverso la sequenza nello stesso modo che ho scelto farà muovere il motore in senso antiorario.

Passaggio 4: prendere il motore per un test drive

Portare il motore per un giro di prova
Portare il motore per un giro di prova

Se non sei già attrezzato per la programmazione di microprocessori, potresti fare di peggio del Ghetto Development Kit o di uno qualsiasi dei vari programmatori PIC. Collega i fili direttamente al tuo microproc e masterizzalo con il seguente codice:

/* Giocando a far funzionare i piccoli motori passo-passo. */

/* Include la funzione di ritardo */ #define F_CPU 1000000UL #include /* Pin defs for ATTiny2313 */ /* Ordine in senso orario */ #define BLUE _BV(PB0) #define BLACK _BV(PB1) #define RED _BV(PB2) #define YELLOW _BV(PB3) #define DELAY 200 /* millisecondi tra i passaggi */ int main(void){ DDRB = 0xff; /* Abilita l'output su tutti i pin B */ PORTB = 0x00; /* Impostali tutti su 0v */ while(1){ /* loop principale qui */ PORTB = BLUE; _delay_ms(RITARDO); PORTB = NERO; _delay_ms(RITARDO); PORTB = ROSSO; _delay_ms(RITARDO); PORTB = GIALLO; _delay_ms(RITARDO); } } Quanto è semplice quel codice? Davvero semplice. Tutto ciò che fa è fare alcune belle definizioni in modo che io possa fare riferimento ai fili per colore piuttosto che ai loro nomi di pin, e poi li attiva in sequenza con un ritardo regolabile nel mezzo. Per cominciare, ho selezionato un ritardo di mezzo secondo tra i passaggi. Guarda il breve video per i risultati. Se sei davvero impegnato, conta il numero di passaggi per ciclo per calcolare la risoluzione angolare a passo singolo del motore. (Oh sì. PS. Guida facilmente senza carico a 3,6 V. Guarda la batteria nel video.)

Passaggio 5: oscillare avanti e indietro

Quindi lo hai eseguito in senso orario. Qualcosa di più interessante? Un po' di pulizia del codice e possiamo eseguirlo avanti e indietro. Ho inserito la sequenza in senso orario in un array in modo da poter scorrere le fasi con un semplice ciclo for. Ora puoi eseguire il ciclo su o giù per andare in senso orario o antiorario.

int main(void){ const uint8_t delay = 50; const uint8_t in senso orario = {BLU, NERO, ROSSO, GIALLO}; uint8_t io; DDRB = 0xff; /* Abilita l'output su tutti i pin B */ PORTB = 0x00; /* Impostali tutti a 0v */ while(1){ /* ciclo principale qui */ for (i=0; i<=3; i++){ /* scorri i colori in senso orario */ PORTB = in senso orario; _delay_ms(ritardo); } for (i=3; i>=0; i--){ /* scorre i colori ccw */ PORTB = in senso orario; _delay_ms(ritardo); } }} Guarda il video audace per l'avanti e indietro.

Passaggio 6: non faccio mai un mezzo passo, perché non sono un mezzo passo…

A parte il testo della ricerca, fare un mezzo passo con il motore è dove si trova. Ottieni più corrente di picco, una coppia più istantanea e il doppio della risoluzione angolare. Mezza passo in poche parole: invece di Blu, Nero, Rosso, Giallo, si guida il motore con Blu, Blu+Nero, Nero, Nero+Rosso, Rosso, Rosso+Giallo, Giallo, Giallo+Blu. Il risultato è che per metà del tempo si impegnano entrambi i magneti contemporaneamente. E durante i tempi in cui entrambi i set sono impegnati, il motore punta a metà strada tra i due, riducendo l'angolo tra i "passi" e facendo girare il motore in modo più fluido. Puoi dire dal video? Non ne sono sicuro… Ora la parte del codice che esegue il semipasso è simile a questa:

void halfStepping(uint16_t delay, uint8_t direction){ uint8_t i; for (i=0; i<=3; i++){ PORTB = direzione; /* parte a bobina singola */ _delay_ms(delay); PORTB |= direzione[i+1]; /* aggiungi a metà passo */ _delay_ms(delay); }} Il primo comando PORTB imposta un singolo polo a positivo e tutto il resto a negativo. Poi aspetta. Quindi il secondo comando PORTB imposta un secondo polo (sull'altro avvolgimento) su positivo, impegnando entrambi gli avvolgimenti per 1,4 volte la coppia (e 2 volte la corrente). In allegato il programma completo. Sono ora definiti due array (in senso orario, antiorario) ed entrambi hanno 5 elementi ciascuno per consentire l'ingresso i+1 nella funzione halfStepping.

Passaggio 7: aggiungere un driver del motore

Aggiungi un driver del motore
Aggiungi un driver del motore
Aggiungi un driver del motore
Aggiungi un driver del motore
Aggiungi un driver del motore
Aggiungi un driver del motore

Fin qui tutto bene.

L'unico problema è che il motore non sembra avere così tanta coppia, il che potrebbe essere dovuto al fatto che il microprocessore emetterà solo ~50 mA per pin. L'ovvio passo successivo sarebbe collegarlo a un driver del motore per fornirgli più succo. Ma poi un piccolo pensiero: lo sto guidando solo con 5v e la resistenza dell'avvolgimento della bobina è di ~ 125 ohm. Il che significa che il motore assorbe solo 40 mA per pin e dovrebbe essere pilotato bene dal (massiccio!) chip AVR. Quindi, per ottenere più tensione per pilotare il motore, l'ho collegato a un chip H-bridge SN754410. Il circuito è piuttosto semplice. Ogni pin dell'AVR va a un input e i pin di output corrispondenti vanno al motore. Il chip necessita di 5 V per la sezione logica e può richiedere molta più tensione nella sezione del motore. L'esecuzione a 11,25 V (tre batterie da 3,6 V) ha aiutato un po'. Notevolmente più coppia al mio dito, ma non è ancora una centrale elettrica. Non male per un motore che è più piccolo di un nichel, però. E ora il circuito è diventato un driver per motori passo-passo bipolare generico. Aggiunto il 29 novembre: ieri sera ho fatto funzionare il motore a 12v per un po' e ha iniziato a surriscaldarsi. Non sono sicuro se fosse un problema di frequenza di risonanza o se fosse semplicemente troppa corrente per gli avvolgimenti. Ad ogni modo, fai un po' di attenzione se stai guidando questo piccolo motore con tensioni maggiori.

Passaggio 8: la fine

Allora cosa ho imparato? Guidare un motore passo-passo con un AVR (e un chip H-bridge) è piuttosto semplice, anche nella modalità "fantasiosa" semi-passo.

Non sono ancora sicuro di cosa farò con i piccoli motori passo-passo, però. Eventuali suggerimenti?

Consigliato: