Stepper motor

con Micro-gt

Progetto numero 10

progetto

autore

email

note

Funzionamento steppermotor con Micro-gt e PIC 16f877a

Daniele Scaranaro

daneel16@gmail.com

Linguaggio C, compilatore HITECH-MICROCHIP, microcontrollore 16F877A

Premessa

I motori detti 'STEP' o, in italiano, motori 'PASSO-PASSO' vengono impiegati per azionamenti di precisione come macchine a controllo numerico, stampanti, pantografi, frese, distributori automatici e molto altro.

Il loro funzionamento è ben visibile in questa animazione (figura1):






 

 


figura 1

Anche se molto semplificato, si può notare come il movimento sia generato modificando la polarità degli avvolgimenti presenti nello statore.

Per tale motivo i lati degli avvolgimenti vengono marcati come A e A negato e B e Bnegato (nell'esempio usa X e Y ma è lo stesso).

Creiamo una tabella dove inseriamo sulle colonne i nomi dei lati avvolgimenti e mettiamo il numero '1' dove viene collegata la +Vcc e zero dove colleghiamo la massa, è facile intuire come il motore possa venire pilotato dalla ripetizione di una 'MATRICE BINARIA' (la tabella in figura è esplicativa)

Schema elettrico con descrizione














 

 

 


 

figura 2

Nella realizzazione ho utilizzato la scheda Micro-gt che monta a bordo un integrato chiamato L298 che si occupa di pilotare il motore ricevendo la 'MATRICE DI PASSO' in ingresso.

Notate nello schema ,in figura2, l'integrato L298 che riceve i 4 bit in ingresso tramite i dip-switch S14 e pilota il motore sui connettori X4-1e2 e X5-1-2 .



 









figura 3

-----------------------------------------------------------------------------------













figura 4

Ho collegato 8 pulsanti al PORTB per comandare l'esecuzione della matrice di passo a varie velocità figura 5



















 

 

 

 

 

 

 

figura 5



Le 4 uscite del PORTD cioè RD0,RD1,RD2,RD3 tramite un cavetto sono state portate all'ingresso del dip-switch S14 di figura2.

Ecco il sorgente in C:



/**********************************************************************
* STEPPER MOTOR WITH Micro-GT *
* 07/07/2012 *
*hardware Micro-GT versatile IDE->L298 integrated module *
* PIC16F877A *
* MpLab 8.60 compiler Hitech C16 *
* performed by SCARANARO DANIELE *
* assistente al corso ZIP edizione 2012 *
***********************************************************************/
#define _LEGACY_HEADERS
#include <pic.h>
#include "delay.h"
#include "settaggi.h"

#define stepper PORTD


void main (){ //start main function body
settaggi();
while(1){
if(RB0==0 && RB1==1 && RB2==1 && RB3==1 && RB4==1 && RB5==1 && RB6==1 && RB7==1){
stepper =10;
DelayMs(3);
stepper =6;
DelayMs(3);
stepper =5;
DelayMs(3);
stepper =9;
DelayMs(3);
}
if(RB0==1 && RB1==0 && RB2==1 && RB3==1 && RB4==1 && RB5==1 && RB6==1 && RB7==1){
stepper =9;
DelayMs(3);
stepper =5;
DelayMs(3);
stepper =6;
DelayMs(3);
stepper =10;
DelayMs(3);
}

/******************low speed 1************************/

if(RB0==1 && RB1==1 && RB2==0 && RB3==1 && RB4==1 && RB5==1 && RB6==1 && RB7==1){
stepper =9;
DelayMs(6);
stepper =5;
DelayMs(6);
stepper =6;
DelayMs(6);
stepper =10;
DelayMs(6);
}
/******************low speed 2************************/

if(RB0==1 && RB1==1 && RB2==1 && RB3==0 && RB4==1 && RB5==1 && RB6==1 && RB7==1){
stepper =9;
DelayMs(10);
stepper =5;
DelayMs(10);
stepper =6;
DelayMs(10);
stepper =10;
DelayMs(10);
}
/******************low speed 3************************/

if(RB0==1 && RB1==1 && RB2==1 && RB3==1 && RB4==0 && RB5==1 && RB6==1 && RB7==1){
stepper =9;//step matrix 1010
DelayMs(20);
stepper =5;
DelayMs(20);
stepper =6;
DelayMs(20);
stepper =10;
DelayMs(20);
}
/******************low speed 4************************/

if(RB0==1 && RB1==1 && RB2==1 && RB3==1 && RB4==1 && RB5==0 && RB6==1 && RB7==1){
stepper =9;
DelayMs(30);
stepper =5;
DelayMs(30);
stepper =6;
DelayMs(30);
stepper =10;
DelayMs(30);
}
/******************low speed 5************************/

if(RB0==1 && RB1==1 && RB2==1 && RB3==1 && RB4==1 && RB5==1 && RB6==0 && RB7==1){
stepper =9;
DelayMs(60);
stepper =5;
DelayMs(60);
stepper =6;
DelayMs(60);
stepper =10;
DelayMs(60);
}
/*******block motor*******************************/
if(RB0==1 && RB1==1 && RB2==1 && RB3==1 && RB4==1 && RB5==1 && RB6==1 && RB7==0){
stepper =9;

}
else{
stepper=0;

}

}

}

 

download programma in HITEC C16
 

Potete notare che alle uscite PORTD ho assegnato un 'alias' in parole povere un nome mnemonico che renda più facile lo scrivere il programma.

Si nota che per far girare il motore basata mandare alle uscite PORTD (stepper) una serie di numeri che si ripetono.

La velocità di ripetizione di questi numeri regola la velocità del motore, nel nostro esempio sono stati mandati alle uscite del pic i numeri 9,5,6,10 che in binario sono:

9 = 1001

5 = 0101

6= 0110

10= 1010

E adesso piccola domanda per vedere se avete compreso il funzionamento del motore passo-passo.......se invece di ripetere la serie di numeri 9,5,6,10 mettessi un numero fisso?

Ovvio.....il motore resta fermo con il rotore bloccato, e questo è uno dei vantaggi di questo tipo di azionamento.

Nel codice, il pulsante RB7 fa proprio il blocco motore, mettendo il numero 9 (1001) alle uscite.

Il filmato del funzionamento lo trovate qui:

http://www.youtube.com/watch?v=s49aBz7C5iw&feature=youtu.be

Questo progetto è ridistribuibile secondo i termini di licenzaCreative Commons Attribuzione-Condividi allo stesso modo 3.0 Italia

 

Note aggiuntive

Questo argomento e' stato trattato durante il corso do programmazione dei Microcontroolori PIC tenutosi a Padova tra giugno e luglio 2012 in cui Daniele Scaranaro ha svolto le funzioni di assistente.

di Marco Gottardo.

Buon divertimento e buon lavoro.

Ing. Marco Gottardo as ad.noctis

 

  Pagina precedente