Sei sulla pagina 1di 59

I.T.I.S.

ALESSANDRO ROSSI VICENZA

Controllo wireless di motori passo passo


Gestione hardware e interfaccia grafica
di Nicola Casarin 5aBT
A.S. 2010/2011

Tesina per lesame di stato dellanno corrente

Controllo wireless di motori passo passo I.T.I.S. ALESSSANDRO ROSSI

1 Scopo
Lo scopo del progetto quello di pilotare a distanza uno o pi motori passo passo, detti anche stepper, mediante la gestione della temporizzazione, e quindi della velocit, ed acquisire dati relativi alla corrente. Per fare ci si utilizzano microcontrollori PIC, schede dedicate di potenza e comando per motori passo passo, moduli radio per lo scambio dati tra PC e microcontrollore e uninterfaccia grafica per PC.

2 Descrizione generale
La realizzazione di questo progetto caratterizzata dai seguenti punti. Studio del funzionamento e delle modalit di pilotaggio dei motori passo facendo particolare attenzione alle seguenti caratteristiche: caratteristiche elettriche e meccaniche; numero di passi; tipo di motore (unipolare o bipolare); modalit di pilotaggio (azionamento a una fase, a due fasi, mezzo passo, ); vantaggi e svantaggi. Studio dei circuiti classici di pilotaggio: ponte ad H e integrato L298 per la parte di potenza; parte di logica con lintegrato L297. Studio e utilizzo dellintegrato A4988 di ultima generazione per il pilotaggio dei motori passo passo che comprende: sezione di logica di comando; sezione di controllo e protezione; parte di potenza con ponte ad H caratterizzato da transistor DMOS. Sviluppo della circuiteria per lalimentazione del sistema. Sviluppo del software in linguaggio C per i microcontrollori mediante lutilizzo del programma Mplab con il compilatore in C HI-TECH della Microchip; utilizzo della strumentazione per la programmazione dei microcontrollori. Analisi delle caratteristiche generali dei microcontrollori PIC della Microchip in particolare quelli della serie 18F. Utilizzo del microcontrollore PIC18F4550 per generare gli impulsi temporizzati per il comando della parte di logica degli integrati (generazione degli impulsi di clock) mediante la gestione di uno dei timers interni. In particolare si dovuto sviluppare un algoritmo specifico per la gestione di pi motori in contemporanea e per ottenere una temporizzazione pi precisa possibile. Utilizzo del microcontrollore PIC18F4550 per la comunicazione seriale con il PC in modalit null modem, per il comando del primo microcontrollore e per lacquisizione di un dato analogico. La gestione della comunicazione seriale avviene mediante la gestione dei registri del modulo interno USART del PIC. Studio della tecnica di trasmissione asincrona con lo standard RS232. Utilizzo dei moduli radio Xbee Pro a 2,4GHz come moduli di trasmissione senza cavi per la comunicazione seriale e studio della tecnica di modulazione (4PSK) utilizzata da tali dispositivi.

Sviluppo di uninterfaccia grafica con linguaggio di programmazione Visual Basic


utilizzando lambiente di sviluppo Visual Studio della Microsoft per il controllo della velocit dei motori e per il monitoraggio della corrente.

Pagina 2

Controllo wireless di motori passo passo I.T.I.S. ALESSSANDRO ROSSI

3 Schema a blocchi generale

PC
USB

INTERFACCIA (VISUAL BASIC)

USB/SERIALE
RX TX

XBEE

ALIMENTAZIONE

XBEE
TX RX

USART
MASSA 7/12V 5V

PIC
I/O ADC

PIC

AMPLIFICATORE E FILTRO

DRIVER

DRIVER

TENSIONE

RESISTENZA 0,05Ohm

MOTORE

MOTORE

CORRENTE

Pagina 3

Controllo wireless di motori passo passo I.T.I.S. ALESSSANDRO ROSSI

4 Pilotaggio dei motori


4.1 Informazioni generali
I motori passo passo possono essere fatti avanzare a singoli passi e bloccati in una posizione qualunque, in modo da consentire facilmente posizionamenti di grande precisione, utili in una vasta serie di applicazioni quali ad esempio i servomeccanismi nellautomazione industriale, nella robotica, nelle stampanti, nei plotter, nei diskdrive, ecc. Per poter essere pilotati, i motori passopasso richiedono per sequenze di impulsi particolari, che debbono essere generati da opportuni circuiti elettronici.

4.2 Caratteristiche meccaniche


I motori passo-passo si dividono tradizionalmente in tre grandi gruppi: motori a magnete permanente, motori a riluttanza variabile e motori ibridi; questi ultimi sono i migliori. In realt la quasi totalit di quelli oggi reperibili sono proprio del terzo tipo ed il tipo di motori usato per questo progetto. Un motore ibrido costituito da un rotore e da uno statore come mostrato in Figura 1. Il rotore formato da una coppia di ruote dentate affiancate e solidali all'albero (i "denti" sono chiamati coppette) costituite da un nucleo magnetico (le due ruote sono permanentemente magnetizzate, una come NORD, l'altra come SUD) e le coppette in materiale ferromagnetico. Il numero di denti variabile ma 50 in assoluto il pi diffuso. Tra le due ruote presente uno sfasamento esattamente pari ad 1/2 del passo dei denti: il dente di una delle due sezioni corrisponde quindi alla valle dell'altra. Nel rotore non sono presenti fili elettrici e quindi manca completamente ogni connessione elettrica tra la parte in movimento e quella fissa: questo riduce notevolmente lattrito. Lo statore appare come il classico insieme di avvolgimenti ed il circuito magnetico costituito da 4 o, pi frequentemente, 8 "espansioni polari". All'interno dello statore sono presenti piccoli denti che si affacciano esattamente a quelli del rotore o meglio, sono esattamente affacciati al rotore solo il gruppo di denti appartenenti ad una espansione polare e a quella opposta; le altre coppie sono sfalsate rispettivamente di 1/4, 1/2 e 3/4 del passo dei denti. Avvolti intorno ai poli magnetici dello statore ci sono i fili che, opportunamente percorsi da corrente, generano il campo magnetico. Il numero di poli nello statore e quello delle coppette del rotore, in pratica, indica il numero di posizioni di equilibrio che il rotore assume effettuando un giro completo. Questo numero viene indicato come passi/giro del motore passo passo (tipicamente 200, ma si possono trovare da 16, 100, 200 ed anche 400). Si noti come i passi/giro sia un numero sempre divisibile per quattro. Pi elevato il numero di passi/giro, tanto pi fluido sar il movimento del rotore, ma anche sar necessario fornire un numero pi elevato di commutazioni elettriche nella stessa unit di tempo.

Figura 1: rotore e statore di uno stepper ibrido

Pagina 4

Controllo wireless di motori passo passo I.T.I.S. ALESSSANDRO ROSSI

4.3 Tipo di motore


In base al numero di fili di alimentazione che si vedono allesterno si pu capire se lo stepper unipolare o bipolare. Nel nostro caso sono stati scelti motori bipolari. Se sono presenti due soli avvolgimenti (avvolti su pi espansioni polari), allora all'esterno arrivano due sole coppie di fili: in questo caso si parla di motori bipolari in quanto la corrente dovr percorrere le fasi nei due versi al fine di creare gli opportuni campi magnetici. Se invece sono presenti quattro avvolgimenti avvolti a coppie (in antiparallelo) sulle espansioni polari, allora all'esterno arrivano almeno cinque fili (spesso sono infatti presenti delle connessioni interne al motore tra le varie fasi). Si parla in questo caso di motori unipolari in quanto la corrente nella singola fase ha sempre lo stesso verso. possibile creare due campi magnetici opposti semplicemente scegliendo in quale dei fili debba passare la corrente.

Figura 3: stepper bipolare

Figura 2: stepper unipolare

4.4 Modalit di pilotaggio


Riguardo ai motori bipolari, essi possono essere pilotati in vari modi a seconda del campo magnetico che viene generato con gli avvolgimenti. Essendoci due bobine si possono attivare una alla volta oppure entrambe contemporaneamente ottenendo un determinato campo magnetico risultante. La schematizzazione degli avvolgimenti rappresentata in Figura 4.

Figura 4: rappresentazione delle fasi

Pagina 5

Controllo wireless di motori passo passo I.T.I.S. ALESSSANDRO ROSSI

Pilotaggio a singola fase Il pilotaggio a singola fase consiste praticamente nellalimentare un singolo avvolgimento alla volta, per cui il magnete allinterno si allineer con le linee del campo magnetico generato dallavvolgimento. Se si toglie lalimentazione da un avvolgimento e si alimenta laltro, verr generato un campo magnetico perpendicolare al precedente, di conseguenza il magnete del rotore dovr ruotare per allinearsi al nuovo campo magnetico. Ripetendo questa operazione si ottiene la rotazione del rotore, e quindi dellalbero, anche se a scatti. Il funzionamento illustrato in figura.

Step1 Step2 Step3 Step4

A + 0 0

B 0 + 0

C 0 + 0 -

D 0 0 +

Figura 5: funzionamento a singola fase

Pilotaggio a due fasi A differenza del pilotaggio a singola fase, in quello a due fasi vengono attivati entrambi gli avvolgimenti contemporaneamente che danno luogo ad un campo magnetico dato dalla risultante di due campi magnetici perpendicolari: esso sar dunque 2 volte maggiore e inclinato di 45 rispetto a quello generato con una sola bobina. Per fare ci si parte alimentando due avvolgimenti contemporaneamente: il magnete si posizioner quindi a 45 rispetto ai due avvolgimenti allineandosi con il campo magnetico. Successivamente si inverte la polarizzazione di una bobina mentre si mantiene la stessa polarizzazione per laltra bobina. A questo punto il rotore dovr ruotare per allinearsi al nuovo campo magnetico che perpendicolare al precedente. Poi si cambier polarizzazione allavvolgimento dove prima era rimasta invariata mentre rester la stessa per lavvolgimento dove prima era variata. Cos facendo si ottiene una rotazione identica (anche se sfasata) rispetto al pilotaggio con una sola fase ma in questo secondo caso la coppia sar maggiore a causa del maggiore campo magnetico in gioco.

Pagina 6

Controllo wireless di motori passo passo I.T.I.S. ALESSSANDRO ROSSI

Step1 Step2 Step3 Step4

A + + -

B + +

C + + -

D + +

Figura 6:funzionamento a due fasi

Pilotaggio a mezzo passo Come precedentemente evidenziato, i due modi di pilotaggio sono identici per quanto riguarda la velocit di rotazione ma i campi magnetici generati sono sfasati di 45(nel caso pi semplice: 4 passi). Quindi si pu pensare di sfruttare le caratteristiche dei due tipi di pilotaggio per far ruotare il rotore di solo mezzo passo. Se infatti si alimenta prima solo un avvolgimento e poi due avvolgimenti lasse ruoter solo i 45 e non di 90. A livello pratico si procede nel seguente modo; si fa riferimento alla figura che segue. Allinizio si alimenta solo lavvolgimento che fa capo ai terminali A e B e il magnete si posizioner verticalmente. Poi si alimenta anche il secondo avvolgimento ottenendo cos un campo magnetico inclinato di 45 rispetto al precedente e al quale si allineer il magnete. Per il passo successivo si toglie lalimentazione al primo avvolgimento e si mantiene quella del secondo cos il rotore si posizioner orizzontalmente. Successivamente si alimenter il primo avvolgimento con una tensione uguale e opposta rispetto al primo caso e si mantiene sempre quella del secondo. Poi si toglier lalimentazione al secondo avvolgimento e cos via. Quindi il rotore sottoposto sequenzialmente ad un campo magnetico di un dato valore e successivamente a uno maggiore di 2 volte rispetto al precedente, per poi tornare di nuovo a quello precedente.

Pagina 7

Controllo wireless di motori passo passo I.T.I.S. ALESSSANDRO ROSSI

Figura 7: funzionamento a mezzo passo

Step1 Step2 Step3 Step4 Step5 Step6 Step7 Step8

A + + 0 0 +

B 0 + + + 0 -

C 0 + + + 0 -

D 0 0 + + +

Pagina 8

Controllo wireless di motori passo passo I.T.I.S. ALESSSANDRO ROSSI

Pilotaggio microstepping Modulando ulteriormente il campo magnetico risultante si pu ottenere una serie ampia a piacere di posizioni intermedie tra due passi inviando agli avvolgimenti due correnti di diverso valore: il rotore si posizioner tanto pi vicino ad una posizione di equilibrio tanto maggiore sar la corrente nella fase corrispondente rispetto a quella dell'altra. In pratica le correnti assumono un andamento che tende ad approssimare quello sinusoidale, con uno sfasamento di 90 tra le due fasi. Ci fa assomigliare il funzionamenti del motore passo-passo a quello di un motore sincrono a due fasi, che in effetti suo stretto parente.

Figura 8:andamento della corrente in una fase nel pilotaggio a 1/16 di passo Figura 9: andamento della corrente con pilotaggio 1/16 di passo

Pagina 9

Controllo wireless di motori passo passo I.T.I.S. ALESSSANDRO ROSSI

5 Dispositivi per il pilotaggio


5.1 Caratteristiche elettriche dei motori
La caratteristica fondamentale di tutti i motori, sia stepper ma anche quelli in alternata e in continua, che sono caratterizzati da unelevata induttanza. C poi da tener conto che gli avvolgimenti hanno anche una certa resistenza, per cui un motore, o la bobina di uno stepper, equivale a un induttore in serie con un resistore. Si pu perci studiare il motore come un circuito RL dove i parametri R e L sono rispettivamente la resistenza e linduttanza caratteristiche del motore in questione. Linduttore un componente che immagazzina energia in forma di campo magnetico e tende ad opporsi alle variazioni della corrente che scorre nella spira. Il rapporto L/R corrisponde alla costante di tempo che si misura in secondi. Nel caso in esame, ossia il pilotaggio di motori stepper, gli avvolgimenti sono sottoposti a segnali di onda rettangolare e quindi riconducibili a segnali a gradino. Nellistante t in cui viene applicato il gradino la tensione dingresso passa da un valore iniziale ad un valore prestabilito teoricamente in un tempo infinitesimo. Quando viene applicato un gradino di tensione a un circuito RL, allistante t linduttore si comporta come se fosse un circuito aperto quindi la corrente che passa attraverso i due componenti nulla. Poi la corrente comincia a scorrere fino a raggiungere un certo valore di regime con un andamento esponenziale crescente che tanto pi lento quanto pi elevata la costante di tempo . Supponendo che il gradino sia di ampiezza E, landamento della corrente it dal momento in cui viene applicato il gradino e dato dalla seguente formula:

=( ) 1

R 5.3

= 6,6*10-3/5,3 = 1,2ms

V1 50 Hz 1V

L 6.6mH

Queste immagini illustrano un circuito RL, con parametri che caratterizzano quelli di una bobina di uno stepper, sottoposto ad un segnale ad onda quadra di frequenza 50Hz e quindi periodo pari a
Pagina 10

Controllo wireless di motori passo passo I.T.I.S. ALESSSANDRO ROSSI

20ms. Dal primo istante fino a met del periodo si vede che landamento della corrente esponenziale e che si avvicina asintoticamente al valore di regime. Si nota quindi che se il semiperiodo fosse uguale o inferiore a circa 4 o 5 volte la corrente non riuscirebbe a raggiungere un valore abbastanza vicino a quello di regime, per cui, se il segnale di clock avesse un semiperiodo inferiore a 4 o 5 volte , il valore medio della corrente sarebbe minore. Sapendo che lasse gira grazie al campo magnetico generato che a sua volta causato dalla corrente, ne deriva che se la corrente non raggiunge un certo valore il campo magnetico generato non sufficiente a far ruotare il rotore. In conclusione, ci sar un tempo minimo di durata per il periodo del segnale applicato, sotto il quale il rotore non gira.

5.2 Ponte ad H
Per il pilotaggio dei motori passo passo bipolari necessario un circuito per gestire agevolmente il verso della corrente in quanto la corrente che scorre negli avvolgimenti di questi motori scorre prima in un verso e poi nellaltro. Ci si potrebbe ottenere facilmente con unalimentazione duale ma siccome nella gran parte dei casi essa non disponibile, bisogna ricorrere allutilizzo di quattro interruttori disposti in una particolare configurazione chiamata ponte ad H. Ovviamente in questo circuito gli interruttori non sono di tipo meccanico ma sono dei transistor. Nel seguente esempio viene illustrato il funzionamento del ponte con dei semplici interruttori.

VCC

VCC

T1 2 L 3

T2

T3 0

T4

Figura 10: ponte ad H con interruttori

In questo schema lavvolgimento del motore rappresentato dalla bobina L e lalimentazione singola. Innanzitutto bisogna precisare che la coppia di interruttori o i transistor dello stesso ramo (ad esempio T1-T3 e T2-T4) non devono assolutamente essere attivati contemporaneamente altrimenti si creerebbe un corto circuito che causerebbe danni al circuito e allapparato di alimentazione.
Pagina 11

Controllo wireless di motori passo passo I.T.I.S. ALESSSANDRO ROSSI

Nel caso in cui due interruttori affiancati (T1-T2 e T3-T4) venissero attivati contemporaneamente, ai capi dellinduttore non ci sarebbe differenza di potenziale e non scorrerebbe su di esso quindi nessuna corrente. Se invece gli interruttori vengono chiusi in diagonale (T1-T4 o T2-T3) la corrente sulla bobina p scorrere. In particolare, facendo riferimento alla figura 10, se vengono chiusi gli interruttori T1 e T4 la corrente sulla bobina scorre da sinistra a destra e il campo magnetico avr quindi un certo verso. Se invece vengono chiusi gli interruttori T2 e T3 la corrente scorre da destra a sinistra generando quindi un campo magnetico uguale e opposto al precedente. Diodo di riciclo Nella configurazione vista, sono presenti quattro diodi di protezione ciascuno in parallelo a un interruttore. Per capire il loro scopo bisogna ricordare una propriet dellinduttore: esso si oppone a cambiamenti di corrente, soprattutto se avvengono molto rapidamente. Per cui, quando viene interrotta lalimentazione ai capi della bobina, la corrente cha scorre in essa tende a continuare a scorrere e deve quindi trovare un percorso di sfogo nel momento in cui vengono aperti gli interruttori. In questo caso la corrente scorre sui diodi di riciclo. Per esempio, supponendo che i due interruttori T1 e T4 vengano improvvisamente aperti, la corrente, prima di esaurirsi dopo un brevissimo tempo, costretta a scorrere sui diodi ai capi degli interruttori T2 e T3. Similmente succederebbe se venissero aperti gli interruttori T2 e T3.

5.3 Integrato L298


Lintegrato L298 uno dei dispositivi pi usati per gestire la parte di potenza dei motori in continua e passo passo. Anche se non usato per la versione definitiva di questo progetto, di fondamentale importanza esaminare la sua struttura per capire poi il funzionamento dei dispositivi dedicati per il pilotaggio degli stepper. Nella figura seguente illustrato lo schema semplificato dellintegrato in esame.

Figura 11: schema circuitale

Pagina 12

Controllo wireless di motori passo passo I.T.I.S. ALESSSANDRO ROSSI

Dallo schema si vede che lintegrato contiene due ponti ad H, ognuno con quattro BJT npn che svolgono la funzione di interruttori (sono state omesse le resistenze per la polarizzazione dei BJT per semplificare lo schema). I BJT (bipolar junction transistor) sono transistori comandati in corrente: Affinch ci sia una corrente che scorre tra collettore ed emettitore (corrente di collettore Ic), ce ne deve essere una che scorre tra base ed emettitore (corrente di base Ib). Le due correnti sono legate dalla seguente relazione: Ic = Ib*hFE
VCC VCC
Ic

Rc 2

Rb
Ic

1 0 Ie

Figura 12: schema di polarizzazione di un BJT

Il parametro hFE il guadagno (adimensionale) del BJT ed dellordine di 100 per i BJT di bassa potenza, mentre pi basso per i BJT per elevate potenze. Dallemettitore esce una corrente Ie che data dalla somma di Ib e Ic; siccome per la Ib molto debole, essa si pu trascurare e quindi si pu affermare con buona approssimazione che Ic circa pari a Ie. I BJT in questione funzionano in ON-OFF, quindi ognuno di loro mandato in saturazione quando deve condurre, mentre quando non deve condurre mandato in interdizione. Un BJT in saturazione quando la corrente di base maggiore del rapporto tra la corrente di collettore massima e lhFE minimo, mentre in interdizione quando la corrente di base praticamente nulla e ci implica una corrente di collettore nulla o molto debole. Nel circuito semplificato dellL298, si vede che i BJT sono comandati con delle porte logiche AND. Perci, quando luscita di una porta logica a livello alto manda in conduzione il BJT la cui base collegata alluscita della porta in questione. Luscita della porta logica AND va a livello logico alto quando entrambi gli ingressi sono a livello alto, mentre se anche solo un ingresso si trova a livello logico basso allora anche luscita a livello logico basso. La tabella della verit della porta AND la seguente:

Pagina 13

Controllo wireless di motori passo passo I.T.I.S. ALESSSANDRO ROSSI

A 0 0 1 1

B 0 1 0 1

Y 0 0 0 1

Dove A e B sono gli ingressi e Y luscita. Facendo riferimento alla figura 11 che illustra lo schema dellintegrato, si vede che per ognuno dei due ponti ad H c un ingresso di enable (EnA e EnB). Si prenda in esame il ponte ad H denominato A nello schema. Se lingresso di enable a livello logico basso, manda a livello logico basso tutte le uscite delle porte AND e i transistor che sono comandati da tali porte sono tutti interdetti. In questo modo non passa corrente sul carico. Se invece lo stesso ingresso di enable a livello logico alto, luscita delle porte AND dipende esclusivamente dal secondo ingresso. A questo punto bisogna distinguere tre situazioni diverse tenendo conto che le due porte inferiori hanno il secondo ingresso negato. 1 Se gli ingressi In1 e In2 sono entrambi a livello alto, le uscite elle porte superiori vanno a livello logico alto e mandano in conduzione i due transistor superiori, mentre sono interdetti i due transistor inferiori. Se invece i due ingressi, In1 e In2, sono entrambi a livello logico basso, mandano a livello logico alto le uscite delle porte inferiori che a sua volta mandano in conduzione i due transistor inferiori, mentre sono interdetti i due transistor superiori. In entrambi i casi i due terminali delluscita si trovano allo stesso potenziale e perci non pu scorrere corrente sul carico. 2 Se lingresso In1 a livello alto e lingresso In2 a livello basso, sono mandati in conduzione il transistor superiore a sinistra e il transistor inferiore a destra, mentre gli altri due sono interdetti. In tal modo la corrente sul carico pu scorrere da sinistra a destra. 3 - Se invece lingresso In2 a livello alto e lingresso In1 a livello basso, sono mandati in conduzione il transistor superiore a destra e il transistor inferiore a sinistra, mentre gli altri due sono interdetti. In tal modo la corrente sul carico pu scorrere da destra a sinistra. Ne consegue che: se il carico una bobina di uno stepper, essa sar attraversata da una corrente il cui verso dipende dagli ingressi In1 e In2 e il campo magnetico generato sar conforme con la corrente. Utilizzando entrambi i ponti ad H presenti nellintegrato si pu cos gestire un motore passo passo. Dallo schema si nota anche che sono presenti due pin per lalimentazione: - Vs serve per lalimentazione della parte di potenza, ossia dei ponti, ed quella che deve fornire pi potenza. Essa deve avere un valore compreso tra 6V e 50V. - Vss serve per lalimentazione della parte di logica, ossia delle porte logiche. Il suo valore non deve superare i 7V. Le due resistenze Rsa e Rsb sono di valore molto basso, 0,5, e quando sono attraversate da una corrente I, la tensione ai loro capi data dal prodotto: I * 0,5. Siccome la corrente che le attraversa la corrente che scorre anche sul carico, allora conoscendo la tensione ai loro capi si sa anche la corrente che scorre negli avvolgimenti e questo sar utile per la parte di controllo.

Pagina 14

Controllo wireless di motori passo passo I.T.I.S. ALESSSANDRO ROSSI

5.4 Integrato L297


Lintegrato L297 adibito al controllo dei motori passo passo. La sua funzione principale quella di generare le combinazioni di impulsi necessari per il comando degli stepper. Le sue uscite sono 6, 4 per la polarizzazione dei ponti ad H e 2 enable, e andranno collegate ai 6 ingressi dellintegrato L298. Di seguito illustrato lo schema semplificato dellintegrato.

Dallo schema si nota lingresso CLOCK al quale va applicato un segnale donda rettangolare la cui frequenza sar anche la frequenza di commutazione dei segnali duscita. Gli latri due ingressi per il pilotaggio del motore sono i pin HALF/FULL e DIRECTION. Lingresso HALF/FULL determina la modalit di pilotaggio. Per la precisione, quando esso a livello alto il motore ruota in modalit mezzo passo. Quando esso a massa, invece, il motore gira a velocit standard. Il pin DIRECTION determina il verso di rotazione del motore. Il pin HOME unuscita che va a massa quando le uscite ABCD non sono nella combinazione iniziale che 0101. Lingresso CONTROL va messo a massa in quanto permette in alcuni casi di consumare meno energia. I due ingressi SENS1 e SENS2 coincidono con gli ingressi invertenti di due comparatori allinterno del dispositivo. Essi vanno collegati con i pin Rsa e Rsb dellintegrato L298. Quando la tensione su questi pin maggiore della tensione di riferimento posta sul pin Vref i due comparatori Vanno a -Vsat e attivano lingresso di reset del latch allinterno del dispositivo. In questo modo si attiver un segnale di PWM che permette di diminuire il valore medio dei segnali duscita. Quindi la corrente fornita dal ponte ad H collegato a questo dispositivo diminuir.

Pagina 15

Controllo wireless di motori passo passo I.T.I.S. ALESSSANDRO ROSSI

In conclusione, variando la tensione sul pin Vref si fissa anche la tensione massima che pu esserci ai capi delle resistenze Rsa e Rsb oltre la quale si attiva il controllo della corrente. Fissandola tensione massima ai capi della resistenza si fissa di conseguenza anche la corrente massima che scorre su di esse e perci anche la corrente massima che pu scorrere sul carico del ponte ad H. Lingresso OSC va collegato ad un circuito RC per la generazione del senale di PWM, mentre lingresso SYNC pu essere utilizzato in sostituzione dellingresso OSC se c un altro circuito con lintegrato L297. Di seguito illustrato il circuito che comprende i due integrati L297 e L297 per il pilotaggio di un motore stepper.

Pagina 16

Controllo wireless di motori passo passo I.T.I.S. ALESSSANDRO ROSSI

6 Integrato A4988
6.1 Caratteristiche generali
Lintegrato A4988 un dispositivo della casa Allegro progettato per la gestione di motori stepper bipolari il quale incorpora, a livello generale, le funzioni precedentemente illustrate svolte dagli integrati L297 e L298. LA4988 costituito da una circuiteria leggermente pi complessa rispetto agli integrati precedenti e perci incorpora pi funzioni per quanto riguarda la parte di controllo e comando. Inoltre, la parte di potenza stata migliorata introducendo luso di transistor DMOS per i due ponti ad H i quali incorporano gi i diodi di riciclo. Oltre alle ridotte dimensioni e al costo non elevato, il fatto di avere la parte di logica e di comando incorporate in un unico integrato permette di ridurre il margine di errore nella fase di montaggio della circuiteria. Lalimentazione pu andare da 8V a 35V per la parte di potenza e pu fornire in uscita fino a 2A per bobina. Lalimentazione della parte di logica pu andare da 3,3V fino a 5V. Si possono selezionare 5 modalit di pilotaggio: full step, step, step, 1/8 step, 1/16 step. Contiene anche una protezione per i cortocircuiti. Di seguito illustrato lo schema generale.

Figura 13: schema a blocchi dell'integrato

Pagina 17

Controllo wireless di motori passo passo I.T.I.S. ALESSSANDRO ROSSI

Lazienda Pololu ha poi provveduto a creare una piccola scheda che incorpora tutta la circuiteria aggiuntiva SMD per il funzionamento dellintegrato. Il risultato una scheda delle dimensioni 1,52*2,03 cm alla quale sufficiente collegare lalimentazione, i terminali del motore e i terminali lalimentazione, per il comando che possono essere quelli di un microcontrollore. Di seguito illustrato il circuito per lutilizzo dellintegrato.

Figura 14: collegamenti minimi per il pilotaggio

Pagina 18

Controllo wireless di motori passo passo I.T.I.S. ALESSSANDRO ROSSI

6.2 Sezione di comando


Con riferimento alla figura 14 si pu vedere che i 6 pin per il comando (STEP, DIR, RESET, MS1, MS2, MS3) sono collegati al blocco translator il quale genera le combinazioni di impulsi per il pilotaggio dei due ponti. Il blocco translator inoltre fornisce il valore per il DAC che permette di controllare il segnale di PWM il quale regola la corrente sul carico nel funzionamento microstepping permettendo anche una minore distorsione. Allingresso STEP va applicato il clock il cui periodo corrisponde alla durata di ogni step. Ne consegue che il tempo che impiega lasse del motore a compiere un giro completo sar dato dal prodotto del numero di passi che il motore deve fare affinch lasse compia un giro completo per il periodo del clock. Ponendo quindi Tg pari al tempo (in secondi) che impiega lasse a girare su se stesso, allora fg = 1/Tg corrisponde al numero di giri al secondo del motore. Ponendo poi Tk pari al periodo del clock (quindi fk = 1/Tk la frequenza del clock) e N il numero di passi per giro (solitamente 200) si ottiene che il numero di giri del motore si calcola: fg = 1/(Tk*N) = fk/N Da questa formula si nota che il numero di giri al secondo direttamente proporzionale alla frequenza del clock e inversamente proporzionale al numero di passi del motore. Lingresso RESET, attivo basso, se attivato manda in interdizione i mosfet dei ponti ad H finch resta attivo e manda il blocco translator allo stato HOME nel quale le uscite sono settate alla combinazione iniziale. Lingresso DIR stabilisce il senso di rotazione dellasse del motore. In base alla combinazione degli ingressi MS1, MS2 e MS3 si possono ottenere le varie modalit di pilotaggio come indicato nella seguente tabella: MS1 L H L H H MS2 L L H H H MS3 L L L L H Microstep resolution Full step Half step Quarter step Eighth step Sixteenth step

Lingresso ENABLE, attivo basso, se attivato manda in interdizione i mosfet per cui disattiva i due ponti ma il blocco tranlaltor continua a funzionare normalmente. Questo ingresso deve quindi rimanere alto fintantoch si vuole che il motore continui a girare. Se viene mandato a livello basso lingresso SLEEP viene disattivata gran parte della circuiteria compresi i ponti ad H. Appena questo ingresso ritorna a livello alto il blocco translator riparte dallo stato HOME e le parti di potenza del dispositivo vengono attivate 1ms dopo il primo segnale di step per permettere loro di stabilizzarsi.

Pagina 19

Controllo wireless di motori passo passo I.T.I.S. ALESSSANDRO ROSSI

6.3 Sezione di controllo e protezione


Il controllo della corrente nei dispositivi per il pilotaggio dei motori stepper differisce dal controllo della corrente per i motori in continua a causa della differente natura dei due tipi dei motori anche se il principio su cui si basa lo stesso. Nei motori in continua la velocit di rotazione e la coppia sono entrambe in funzione della corrente: questultima pu essere limitata con lapplicazione di un segnale PWM il cui valore medio determina di conseguenza il valore della corrente. Di conseguenza, diminuendo il valore della corrente diminuiscono anche la velocit e la coppia. Nei motori stepper, invece, la velocit dipende esclusivamente dalla frequenza del clock applicato, dato che il numero di passi un parametro fisso del motore. Quindi, diminuendo la corrente che scorre negli avvolgimenti, diminuisce solamente la coppia quando avviene un passo e il motore pu perdere qualche passo se viene impressa una forza opposta al senso di rotazione dellasse. C da dire per che nel tempo in cui lasse sta fermo finch si esaurisce il periodo del clock, la corrente sul carico del ponte ad H, e quindi sugli avvolgimenti, va a regime e il carico coincide praticamente solo la resistenza degli avvolgimenti che molto bassa. Il tal caso si ha quindi una corrente abbastanza elevata che per non influente per la velocit del motore. Si va quindi ad applicare un segnale PWM per limitare la corrente ai fini di evitare un eccessivo consumo di energia che va poi a trasformarsi solamente in calore facendo cos diminuire lefficienza dei dispositivi di pilotaggio. Similmente allintegrato L297, ci sono due comparatori al cui ingresso invertente arriva una tensione che proporzionale alla corrente che scorre sul carico, mentre allingresso non invertente c la tensione duscita del DAC la quale dipende dalla Vref, che viene posta su un ingresso, e il valore fornito dal blocco translator. In base alla tensione duscita del comparatore, il latch per il PWM genera gli opportuni segnali che si ottengono anche grazie al segnale proveniente dal blocco OSC. I segnali generati dai due latch PWM e dal blocco translator entrano poi nel blocco control logic che li elabora e va a comandare il blocco gate drive il quale costituisce lultimo stadio prima dei due ponti ad H. La massima corrente duscita si pu calcolare conoscendo la tensione applicata al pin Vref con la seguente formula: Imax = Vref/(8*Rs) dove Rs la resistensa sulla quale scorre la corrente del carico, in questo caso essa pari a 0,05 e il suo valore molto basso per non influenzare troppo la corrente. Nel blocco gate drive entrano poi due segnali provenienti dai blocchi current regulator e charge pump. Il blocco charge pump, che necessita di un condensatore di 100nF, genera una tensione maggiore rispetto a quella fornita dal pin Vbb per gestire il gate dei mosfet. Il blocco current regulator, che va disaccoppiato con un condensatore di 220nF, disabilit i mosfet in caso di malfunzionamento del dispositivo.

Pagina 20

Controllo wireless di motori passo passo I.T.I.S. ALESSSANDRO ROSSI

6.4 Parte di potenza


In questo dispositivo, i due ponti ad H, che costituiscono la parte di potenza, sono realizzati con transistor MOSFET di potenza. I transistor mosfet e jfet appartengono alla categoria di transistor FET (field effect transistor ossia transistor a effetto di campo) che, come dice il nome, sfruttano leffetto di un campo elettrico. La variante mosfet (metal oxide silicon fet) deriva dal fatto che il gate del transistor costituito da tre strati: uno di metallo al quale collegato il terminale del gate; uno di ossido di silicio che funziona da isolante; uno strato di silicio drogato nel quale si forma un canale di dove si accumulano cariche minoritarie. Di seguito illustrata la struttura di un transistor mosfet.

Figura 15: struttura di un mosfet

Nella figura 15 viene evidenziato in grigio il substrato di silicio drogato positivamente, in bianco il le zone di silicio drogato negativamente, in marrone lo strato di ossido di silicio e in nero il metallo. La tecnologia che utilizza lossido di silicio come isolante chiamata silicon gate ed la tecnologia tuttora pi diffusa per la fabbricazione dei mosfet. Funzionamento Mettendo i terminali di source a drain a massa e applicando una tensione positiva tra gate e source (Vgs), ad esso vengono attratte le cariche negative per lo stesso principio proprio dei condensatori e cominciano a crescere le zone di svuotamento, ossia di carica mediamente neutra, nelle zone di confine tra il semiconduttore di tipo p e quello di tipo n. Quando la tensione Vgs raggiunge una certa soglia, al di sotto dello strato di ossido del gate si crea una zona in cui sono presenti elettroni liberi che collega le due zone di tipo n che costituiscono il source e il drain, inoltre, maggiore la tensione Vgs e maggiore la sezione del canale. Questa situazione illustrata in figura 16a. Per questi motivi, il transistor appena descritto viene detto: a canale n e a riempimento. Se a questo punto si applica una debole differenza di potenziale positiva tra drain e source (Vds), si crea una corrente che dipende dalla sezione del canale e quindi dalla tensione sul gate.
Pagina 21

Controllo wireless di motori passo passo I.T.I.S. ALESSSANDRO ROSSI

Se invece la tensione Vds aumenta, la differenza di potenziale tra drain e gate non pi sufficiente a mantenere il canale vicino alla zona di drain creando quindi un punto di strozzamento detto di pinch-off. In questo modo la sezione del canale aumenta spostandosi verso il source e la corrente . rimane costante perch nel punto di pinch off c la tensione di soglia che serve a mantenere il pinch-off canale la quale fissa e quindi anche la differenza di potenziale tra source e il punto di pinch ale pinch-off fissa. A sua volta questa differenza di potenziale crea una corrente di valore costante. Cos il transistor in saturazione ed la modalit di funzioname funzionamento nel ponte ad H. Questa situazione illustrata in figura 16b 16b.

Figura 16: funzionamento di un mosfet

Accorgimenti Sia per i mosfet che per i jfet bisogna tener conto che lo strato di ossido che separa il silicio dal metallo nel gate molto sottile e bisogna proteggerlo da eventuali scariche con delle opportune resistenze. Mosfet di potenza Per gestire correnti maggiori sono stati ideati transistor che sopportano potenze elevate. I DMOS sono dei mosfet di potenza che grazie alla loro struttura sono adatti ad essere percorsi da correnti d elevate. Nel caso dei DMOS vengono creati due transistor nello stesso componente i qual quali, lavorando in parallelo, riescono a sopportare una corrente maggiore. cono

Figura 17: struttura di un DMOS

Pagina 22

Controllo wireless di motori passo passo I.T.I.S. ALESSSANDRO ROSSI

7 Alimentazione
7.1 Sezione di comando
Sia per le caratteristiche dei componenti usati, sia per ragioni di compatibilit con eventuali altri dispositivi, per questo sistema si usa unalimentazione di 5V per la parte di logica. Nel caso sia disponibile soltanto unalimentazione che supera i 5V si usa allora lo stabilizzatore di tensione 7805 il quale necessita di una tensione dingresso di almeno 7V e riesce a fornire una corrente sufficiente per gli scopi di questo progetto. Gli stabilizzatori di cui fa parte il 7805 si basano sul principio del diodo zener il quale pu condurre inversamente e ai suoi capi si ha una certa tensione che assume il valore che fa condurre il diodo. Siccome poi vengono utilizzati anche dei componenti attivi, come i BJT, per aumentare il valore della corrente disponibile, la tensione dingresso deve essere superiore al valore di tensione al quale il diodo zener conduce. previsto un deviatore nel caso sia disponibile anche unalimentazione esterna di 5V in modo tale da permettere di scegliere la fonte di alimentazione pi adeguata.

7.2 Sezione di potenza


Il valore dellalimentazione per la parte di potenza vincolato dalla tensione che necessita lintegrato A4988 e lo stabilizzatore 7805. Per lo stabilizzatore la tensione minima dingresso 7V mentre per la parte di potenza del driver A4988 il valore minimo 8V ma tollerabile anche un valore di tensione di poco inferiore a 8V. Stabilito il valore minimo, si pu supporre di alimentare il circuito con unalimentazione di 12V che un valore standard ma questo valore pu anche essere diverso. Per quanto riguarda lalimentazione totale, stato previsto un interruttore per la massa nel caso si voglia disattivare lalimentazione.

Pagina 23

Controllo wireless di motori passo passo I.T.I.S. ALESSSANDRO ROSSI

8 Microcontrollori PIC
8.1 Generalit
I microcontrollori PIC sono dispositivi risc della Microchip e hanno avuto unampia diffusione a livello industriale. I microcontrollori vanno distinti dai microprocessori in quanto non sono semplici CPU ma incorporano in un unico dispositivo anche le memorie (ROM e RAM), le periferiche e molte altre funzioni, come per esempio: convertitori analogico digitali, moduli USART, SPI, I2C, PWM, timer, interrupt, ecc. Nel tempo sono state sviluppate sempre pi famiglie di pic che implementano sempre pi funzioni e sono sempre pi prestanti. Le varie categorie sono: PIC10F, PIC12F, PIC16F, PIC18F, PIC24F, PIC30F, PIC33F, PIC32MX. Gli ultimi sviluppati (PIC32MX) sono microcontrollori a 32 bit. I PIC utilizzati in questo progetto appartengono alla famiglia 18F che sono a 8 bit e sono unevoluzione di quelli della famiglia 16F.

8.2 PIC18F4550
Il PIC18F4550 e un dispositivo a 40 pin con memoria di programma di tipo flash. Di seguito sono elencate le principali caratteristiche. - Range di tensione compreso tra 2V e 5,5V. - Frequenza massima di clock pari a 48MHz. - Set di istruzioni: 75 istruzioni. - 32kByte di memoria flash di programma. - Memoria programma (in numero di istruzioni): 16384 words. - 2048 Bytes di RAM. - 256 Bytes di ROM. - 35 periferiche di I/O (PORTA, PORTB, PORTC, PORTD, PORTE). - 13 canali per lADC a 10 bit. - Un modulo PWM. - Un modulo I2C. - Un modulo USART. - 2 comparatori. - 1 timer a 8 bit e 3 timers a 16 bit. - Un modulo USB. - 20 sorgenti di interrupt. Di seguito illustrato lo schema a blocchi generale del PIC. Sullo schema vengono evidenziate le varie funzioni di ogni pin.

Pagina 24

Controllo wireless di motori passo passo I.T.I.S. ALESSSANDRO ROSSI

Pagina 25

Controllo wireless di motori passo passo I.T.I.S. ALESSSANDRO ROSSI

Pedinatura del PIC18F4550

Pagina 26

Controllo wireless di motori passo passo I.T.I.S. ALESSSANDRO ROSSI

8.3 Linguaggio di programmazione


Per la programmazione dei microcontrollori stato scelto il linguaggio C per semplificare la stesura del software che altrimenti in linguaggio Assembly sarebbe stato pi lungo e di difficile comprensione. Il problema della programmazione in C di un microcontrollore il fatto di non conoscere con precisione le istruzioni in Assembly che corrispondono ad unistruzione in C e quindi non si conosce di conseguenza il tempo impiegato per svolgere tale istruzione. Questo problema non ha nessuna ricaduta per quanto riguarda il PIC adibito alla trasmissione seriale, mentre se ne dovuto tener conto nel PIC adibito alla generazione dei due clock per il pilotaggio degli stepper in quanto bisogna sapere esattamente il periodo del clock e le istruzioni del programma introducono un certo ritardo. Il software stato sviluppato con il programma Mplab della Microchip. Questo programma a sua volta usa vari compilatori per compilare i programmi a seconda della famiglia di PIC utilizzata e in base al tipo di linguaggio: C o Assembly. Per compilare i programmi in C Per i PIC18F stato utilizzato il compilatore HI-TECH sempre della Microchip. Per programmare i microcontrollori stato utilizzato il programmatore Pickit2 della Microchip.

Figura 18: programmatore Pickit2

Pagina 27

Controllo wireless di motori passo passo I.T.I.S. ALESSSANDRO ROSSI

9 PIC per la temporizzazione


9.1 Forma donda del clock
Per generare il segnale di clock bisogna conoscerne i vari parametri. Lampiezza 5V ed data dalla tensione di lavoro degli integrati. Il tipo di forma donda sicuramente rettangolare perch ci possono essere solo due valori di tensione, ossia 0V e 5V. In questo caso il segnale durante il tempo T pari al periodo del clock rimane a livello basso per circa 8s (0,008ms) e poi va a livello alto per il resto del periodo. Il tempo di 8s stato scelto perch il tempo minimo per il driver A4988 riesce ad accorgersi che c stata una commutazione: ne deriva che il segnale di clock di frequenza massima che il driver riesce a riconoscere ha un periodo di 16 s. Non stata scelta unonda quadra perch, come verr spiegato in seguito, ci sarebbero stati maggiori problemi di temporizzazione. Per determinare il periodo minimo del clock, e quindi la frequenza massima, bisogna conoscere le caratteristiche del motore come precedentemente illustrato. Tipicamente per i motori passo passo il tempo minimo in cui riescono ancora a compiere i passi senza che ci siano problemi di circa 1ms, tempo che aumenta per i motori pi potenti in quanto la resistenza e linduttanza degli avvolgimenti crescono. In conclusione il clock generato avr un periodo di 1ms e un duty-cycle del 99,2% in quanto il tempo del periodo in cui il segnale a livello alto di 0,992ms (992 s).

9.2 Gestione di pi clock


Per gestire pi motori in contemporanea non si pu semplicemente variare il periodo del clock di base, ma bisogna prenderlo come riferimento. Il principio lo stesso dei contatori solo che con i microcontrollori c bisogno di un algoritmo. Per ottenere in uscita su un pin un clock di periodo multiplo di quello base bisogna fare ricorso a due variabili: una che viene incrementata ad ogni impulso di clock e una che assume normalmente il valore 1. La prima variabile, come detto, si incrementa ad ogni ciclo di programma e viene azzerata quando raggiunge il valore stabilito. Quando questa si azzera, viene mandata a zero anche la seconda e rimane a questo valore per la durata del periodo. Il segnale duscita dato dal risultato della OR logica tra il clock di base e la seconda variabile. In questo modo quando la seconda variabile a zero, luscita assume lo stesso valore del clock di base, mentre quando a uno, luscita assume sempre il valore uno. Di seguito illustrata la tabella di verit delloperazione OR logica che nel caso in esame viene fatta via software. A B Y 0 0 0 0 1 1 1 0 1 1 1 1 Di seguito riportato un esempio in cui la prima variabile va da 0 a 3.

Pagina 28

Controllo wireless di motori passo passo I.T.I.S. ALESSSANDRO ROSSI


V

5V

T=1ms V

5V

T=3ms V

5V

T=3ms

Figura 19: gestione del clock

Sono riportati rispettivamente: landamento del clock di base facendo lipotesi semplificativa che sia unonda quadra, landamento della seconda variabile e luscita. Si vede che se la seconda variabile fosse sempre a zero, luscita avrebbe lo stesso andamento del clock. Questo sistema permette di ottenere numerosi segnali di clock i cui periodi sono tutti multipli di quello base.

9.3 Regolazione del clock


Tenendo conto che il in numero di giri del motore dipende dallinverso del periodo del clock e che questultimo ha una variazione minima di un millisecondo, ne consegue che passando da un periodo di 1ms a 2 ms la velocit del motore va dal valore massimo a direttamente la met del valore massimo senza la possibilit di avere valori intermedi: questo causa limpossibilit di una gestione abbastanza precisa della velocit del motore. Per risolvere questo problema si pone il periodo del clock di base pari a un decimo di millisecondo: questo permette di gestire con pi precisione la velocit del motore dato che ora tra la velocit massima e met della velocit massima si possono avere dieci valori di velocit. Nella stesura del software per bisogna mettere un controllo in modo che il periodo del clock duscita non scenda mai sotto il millisecondo.

Pagina 29

Controllo wireless di motori passo passo I.T.I.S. ALESSSANDRO ROSSI

9.4 Gestione del timer


Il pic ha al suo interno 4 timers di cui uno a 8 bit (timer2) e 3 a 16 bit (timer0, timer1, timer3). Quello utilizzato il timer0 che costituito da due registri a 8 bit (il cui valore va da 0 a 255) che sono: TMR0L, il meno significativo, e TMR0H, il pi significativo. Il registro TMR0L incrementa il suo valore in base alla frequenza di clock di sistema e al valore di prescaler, mentre il registro TMR0H si incrementa ogni volta che TMR0L raggiunge il valore finale. Quindi con i due registri si ottiene un numero di 16 bit che si incrementa. Per gli scopi del sistema stato sufficiente lutilizzo solo di TMR0L. Il timer0 gestito dal registro T0CON i cui bit sono descritti di seguito.

Al registro T0CON stato assegnato il seguente valore in binario: 0b11000010. Le impostazioni sono le seguenti: timer abilitato; funzionamento a 8 bit; sorgente dal clock di sistema (fosc/4); prescaler assegnato; prescaler pari a 8. Senza il prescaler, il timer si incrementerebbe con una frequenza pari a un quarto di quella di sistema che di 40MHz ottenuta con un opportuno quarzo. fosc/4 = 10MHz La frequenza con cui si incrementa il timer, noto il prescaler, :

Pagina 30

Controllo wireless di motori passo passo I.T.I.S. ALESSSANDRO ROSSI

fT = fosc/(4*prescaler) Quindi con un quarzo da 40MHz e il prescaler pari a 8 si ha: fT = 40*106/(4*8) = 1250kHz Il periodo del clock per il pilotaggio degli stepper (Tk) che deve essere di 100s si otterr quindi dopo 125 incrementi di TMR0L. Tk = 125/(1250*103) = 0,1*10-3s = 0,1ms = 100 s Il tempo in cui il segnale di clock deve stare a livello basso pari a 10 incrementi, ossia 8 s: questi 10 incrementi verranno poi scalati, quindi il segnale rimarr a livello alto per 115 incrementi. Nel software, allinizio di ogni ciclo di programma viene azzerato il valore di TMR0L e il numero di incrementi che sono stati compiuti verranno poi scalati dai 115 incrementi precedentemente stabiliti.

9.5 Acquisizione dei dati


Il microcontrollore deve ricevere il valore per il quale deve moltiplicare il periodo del clock di base al fine di ottenere i due segnali di clock per gestire i due motori. I due valori acquisiti vengono memorizzati nelle variabili delay_dx e delay_sx. Questi valori vengono acquisiti mediante i pin di PORTB di entrambi i pic con lausilio dei due pin RD6 e RD7. Per questo pic viene impostato RD6 in ingresso, assieme a tutti i pin di PORTB, e RD7 in uscita mentre per il secondo pic si ha il contrario. Tutti i pin di PORTB e in pi RD6 e RD7 del pic in questione sono collegati con i corrispondenti pin del secondo pic. Quando viene messo a livello alto il pin RD7 significa che il pic richiede la variabile delay_sx; quando il secondo pic mette a livello alto il pin RD6 allora il valore di PORTB viene memorizzato nella variabile delay_sx e viene posto a livello basso RD7 per richiedere il valore di delay_dx. Quando RD6 torna a livello basso viene memorizzato il valore di PORTB in delay_dx e viene posto di nuovo a livello alto RD7. Cos il ciclo continua. Di seguito viene illustrato il diagramma dove vengono evidenziate la varie fasi.

PIC TEMPORIZZAZIONE
RD7=1 RD6
delay_sx=PORTB

RD7=0

RD6

delay_dx=PORTB

RD7

RD6=1

PORTB=delay_sx

RD7

RD6=0

PORTB=delay_dx

PIC TRASMISSIONE SERIALE

Pagina 31

Controllo wireless di motori passo passo I.T.I.S. ALESSSANDRO ROSSI

9.6 Creazione del ritardo


Per ottenere un certo ritardo della durata voluta bisogna aspettare che il timer compia tanti incrementi che corrispondono al tempo voluto. Per fare ci si assegna al registro TMR0L un valore che pari alla differenza tra il numero massimo di incrementi (256) e il numero di incrementi che deve compiere (10 e 115). Una volta assegnato il valore, si aspetta fino a quando non raggiunge il valore massimo e torna a zero: a questo punto il ritardo compiuto. Listruzione che si usa il while con la seguente sintassi: while(TMR0L!=0); Il programma si blocca su questa istruzione finch il valore di TMR0L diverso da zero (diverso si indica con != ) e finch non si verifica la suddetta situazione, lo stato del pic non cambia a parte il valore di TMR0L.

9.7 Descrizione del programma


Allinizio del programma, prima di main(), vengono dichiarate tutte le variabili, poi allinterno di main() vengono inizializzate, ossia viene dato loro un valore iniziale, e vengono impostati i vari registri, tra cui T0CON e tutti i registri TRIS i quali determinano se ciascun pin in ingresso o in uscita. Conclusa linizializzazione, inizia il ciclo while(1) che un ciclo infinito in quanto il microcontrollore deve svolgere il programma finch rimane acceso. I programma allinterno del ciclo while diviso in 9 parti. - Prima parte: viene azzerato il valore di TMR0L per tener conto di quanti incrementi compie prima del ritardo. - Seconda parte: il pic acquisisce le due variabili delay_dx e delay_sx dal secondo pic. Queste due variabili determinano quante volte il periodo del clock di base viene contenuto nel periodo dei clock duscita. - Terza parte: viene controllato che le due variabili appena acquisite non abbiano un valore minore di dieci che il minimo tollerabile per non avere un periodo troppo breve: se esse sono pari a 10 il clock duscita ha un periodo di 1ms. - Quarta parte: le variabili i e j sono quelle che vengono incrementate per ogni ciclo di programma e quando esse raggiungono lo stesso valore rispettivamente di delay_dx e delay_sx ritornano a zero. Quando ci succede, anche le variabili passo_dx e passo_sx (rappresentate dal secondo grafico di figura 19), che normalmente sono a 1, vanno a zero, per poi ritornare a 1 quando i e j sono diverse da zero. - Quinta parte: prima di compiere i ritardi che determinano il periodo, si tiene conto degli incrementi che sono gi stati compiuti da TMR0L. Nella variabile time viene memorizzato il valore attuale di TMR0L sommato a 141 in quanto poi i 115 incrementi andranno da 141 a 246. - Sesta parte: la variabile uscita, che ha lo stesso andamento del clock di base, viene messa a zero per la prima parte del periodo che dura 10 incrementi (il sua andamento viene approssimativamente rappresentato dal primo grafico di figura 19). Sul pin RC0 c il clock destro mentre sul pin RC1 c il clock sinistro. Il loro valore il risultato della OR logica tra uscita e passo_dx per RC0 e tra uscita e passo_sx per RC1 (il loro andamento rappresentato sul terzo grafico di figura 19). - Settima parte: qui viene eseguito il primo ritardo pari a 8s che corrisponde a 10 incrementi del timer. Il valore di TMR0L parte da 246 e va fino a 256 quando praticamente si azzera.
Pagina 32

Controllo wireless di motori passo passo I.T.I.S. ALESSSANDRO ROSSI

- Ottava parte: sia RC0 che RC1 tornano a 1 seguendo landamento della variabile uscita. - Nona parte: qui avviene il secondo ritardo che dura 92s, ossia 115 incrementi meno quelli gi compiuti durante il programma.

9.8 Software
#include <htc.h> unsigned char passo_dx, passo_sx; unsigned char uscita; unsigned char delay_dx, delay_sx; unsigned char i, j; char time; main(){ //servono al momento di fare la OR //ha lo stessa andamento del clock di base //determinano la frequenza //controllano la frequenza: i=dx, j=sx //tiene conto del tempo trascorso dall'inizio del ciclo //INIZIO PROGRAMMA // PARTE INIZIALE T0CON=0b11000010; TRISE=0; PORTE=0; TRISD=64; PORTD=0; TRISC=0; PORTC=0; TRISB=255; TRISA=0; PORTA=0; delay_dx=10; delay_sx=10; passo_dx=0; passo_sx=0; uscita=1; i=0; j=0; while(1){ // INIZIO CICLO PROGRAMMA
Pagina 33

// impostazione di T0CON //PORTE in uscita //RD6 in ingresso //PORTC in uscita //PORTB in ingresso //PORTA in uscita

//inizializzazione delle variabili

Controllo wireless di motori passo passo I.T.I.S. ALESSSANDRO ROSSI

// PARTE 1 TMR0L=0; // PARTE 2 if(PORTDbits.RD6==0){ delay_dx=PORTB; PORTDbits.RD7=1; } if(PORTDbits.RD6==1){ delay_sx=PORTB; PORTDbits.RD7=0; }

//resetto TMR0L

//controllo la variabile che viene messa a disposizione //acquisisco la variabile delay_dx //richiedo delay_sx

//richiedo delay_dx

// PARTE 3 if(delay_dx<10){ //se delay_dx minore di 10 allora va posto a 10 delay_dx=base_delay;//per rispettare la durata minima del periodo dei clock }//duscita if(delay_sx<10){ //se delay_sx minore di 10 allora va posto a 10 delay_sx=base_delay;//per rispettare la durata minima del periodo dei clock } //duscita

// PARTE 4 i++; j++; if(i>=delay_dx){ i=0; passo_dx=0; } else passo_dx=1; if(j>=delay_sx){ j=0; passo_sx=0; } else passo_sx=1;

// clock DESTRO //se i raggiunge il valore di delay_dx, riparte da zero //quando i a zero, anche passo_dx va a zero

//normalmente la variabile passo_dx resta a 1 // clock SINISTRO //se j raggiunge il valore di delay_sx, riparte da zero //quando j a zero, anche passo_sx va a zero

//normalmente la variabile passo_sx resta a 1

// PARTE 5 time=141+TMR0L; //memorizzo il numero di incrementi gi fatti //sarebbe 131 (256-125) ma ne aggiungo 10 per la prima parte del periodo
Pagina 34

Controllo wireless di motori passo passo I.T.I.S. ALESSSANDRO ROSSI

// PARTE 6 uscita=0; //prima parte del periodo del clock di base PORTCbits.RC0=uscita|passo_dx; //qui avviene la OR tra uscita e passo_xx PORTCbits.RC1=uscita|passo_sx; //su RC0 c' il clock di destra e su RC1 il clock di sinistra

// PARTE 7 TMR0L=246; while(TMR0L!=0);

//dieci incrementi (256-10) //qui avviene il primo ritardo

// PARTE 8 uscita=1; PORTCbits.RC0=uscita; PORTCbits.RC1=uscita;

//i segnali d'uscita vanno a 1

// PARTE 9 TMR0L=time; while(TMR0L!=0); } }

//secondo ritardo che completa il periodo (115 incrementi)

Pagina 35

Controllo wireless di motori passo passo I.T.I.S. ALESSSANDRO ROSSI

10 Pic per la trasmissione seriale


10.1 Standard RS232
Il modulo adibito alla comunicazione seriale detto USART (UniversalSyncronousAsynchronousReceiverTransmitter). Questo modulo permette la comunicazione seriale full-duplex asincrona o sincrona tra le periferiche e il computer mediante protocollo RS-232. In questo tipo di comunicazione ogni byte che si desidera inviare preceduto da un bit di start (livello basso) e uno o due bit di stop (livello alto). Tuttavia si possono inserire dei bit ridondanti come quello di parit (pari o dispari) tra il dato da inviare e il bit di stop. Un parametro essenziale di questo standard il baud rate. Esso, infatti, esprime la quantit di simboli inviati al secondo, ne consegue che lintervallo di tempo che intercorre tra linvio di un bit ed un altro dato dallinverso del baud rate. In figura rappresentato un segnale compatibile con questo standard:

10.2 Modulo USART


Allinterno del pic presente un modulo USART per la comunicazione seriale. Nel pic il pin adibito alla ricezione seriale RC7 (RX), mentre RC6 (TX) il pin che trasmette il segnale. I registri presenti in questo pic per la gestione del modulo USART sono 5: TXSTA, RCSTA, BAUDCON, SPBRG e SPBRGH. Registro TXSTA

Questo registro gestisce la trasmissione di dati. - Il primo bit viene usato nella trasmissione a 9 bit e funge da bit di parit o di indirizzo. - Il secondo bit un flag che va a 1 quando loperazione di trasmissione completata. - Il terzo bit va messo a 1 per la trasmissione ad alta velocit. - Il quarto bit va messo a 1 se si vuole trasmettere il carattere di break. - Il quinto bit abilita la trasmissione asincrona se posto a zero, altrimenti abilita la trasmissione sincrona. - Il sesto bit abilita la trasmissione se posto a 1. - Il settimo bit abilita la trasmissione a 9 bit se posto a 1, altrimenti la trasmissione a 8 bit.

Pagina 36

Controllo wireless di motori passo passo I.T.I.S. ALESSSANDRO ROSSI

- Lottavo bit non viene usato nella trasmissione asincrona. A questo registro viene dato il valore in binario 0b00100100 quando bisogna trasmettere un carattere per avere: trasmissione asincrona a 8 bit ad alta velocit. Durante la ricezione deve mantenere lo stesso valore Il carattere da trasmettere deve essere posto sul registro TXREG. Registro RCSTA Questo il registro adibito alla gestione della ricezione dei dati.

- Il primo bit viene usato nella ricezione a 9 bit. - I bit 1 e 2 vanno a uno rispettivamente se c stato un errore di overrun e framing. - Il quarto bit viene usato nella ricezione a 9 bit. - Il quinto bit abilita la ricezione se posto a 1. - Il sesto bit usato nella ricezione sincrona. - Il settimo bit abilita la ricezione a 8 bit se posto a zero, altrimenti abilita quella a 9 bit. - Lottavo bit abilita i pin RC7 e RC6 per la comunicazione seriale quando viene messo a uno. A questo registro viene assegnato il valore in binario 0b10010000 per la ricezione asincrona a 8 bit. Durante la trasmissione lottavo bit deve rimanere sempre a 1 mentre gli altri non hanno influenza. Quando si riceve un dato, questo viene posto nel registro RCREG Registro BAUDCON

Per quanto riguarda questo registro, tutti i bit vanno messi a zero tranne il quarto che abilita lutilizzo di entrambi i registri SPBRG e SPBRGH per la trasmissione ad alta velocit. Il registro SPBRG il meno significativo mentre SPBRGH il pi significativo. Per calcolare il baud rate desiderato si usa la seguente formula fornita dal costruttore: BaudRate = fosc/[4*(n+1)] dove n il numero combinato dei valori dei registro SPBRG e SPBRGH e fosc la frequenza di sistema pari a 40MHz. Si scelto il baud rate di 115200baud che tra i pi elevati tra quelli standard. Il valore di n si calcola: n = [fosc/(4*BaudRate)] 1 Ponendo Baud Rate = 115200 si ottiene: n = [40*106/(4*115200)] 1 = 85,8 Viene arrotondato a 86. Con n = 86 si ha un baud rate di 114943baud. Lerrore percentuale si calcola:
Pagina 37

Controllo wireless di motori passo passo I.T.I.S. ALESSSANDRO ROSSI

Err% = [(BaudRate effettivo BaudRate desiderato)/BaudRate desiderato]*100 Err% = [(114943 115200)/115200]*100 = - 0,22% NOTA: nonostante il valore per SPBRG sia calcolato che consigliato da datasheet sia 86, in realt per il funzionamento corretto bisogna assegnare a SPBRG il valore 30.

10.3 Interrupt
Questo pic deve ricevere dal PC tre dati: un byte per la velocit del primo motore (delay_dx), un byte per la velocit del secondo motore (delay_sx) e un byte per il comando della direzione, dello stop e il mezzo passo di entrambi i motori (control_xx). Per distinguere i tre dati, essi vengono preceduti da un altro byte che pu assumere il valore 1(delay_dx), 2(delay_sx) e 3(control_xx). In base a questo valore il pic assegna il successivo byte ricevuto a una della tre variabili. Siccome non si pu prevedere larrivo di un segnale e i byte ricevuti sono due consecutivi, bisogna ricorrere allinterrupt. Abilitando linterrupt per la ricezione, appena arriva un segnale il programma entra in automatico nella subrutine di interrupt e riesce a riconoscere con certezza i byte ricevuti. I registri del pic per la gestione degli interrupt sono 10 ma solo 5 coinvolgono la seriale e sono: RCON, INTCON, PIR1, PIE1 e IPR1. Va messo a 1 lottavo bit (IPEN) del registro RCON per abilitare lalta priorit agli interrupt selezionati. A questo punto va messo a 1 anche lottavo bit(GIE/GIEH) di INTCON che abilita gli interrupt con alta priorit. Poi va messo a 1 il sesto bit (RCIE) del registro PIE1 per abilitare linterrupt per la ricezione seriale. Va messo a 1 anche il sesto bit (RCIP) del registro IPR1 per dare lalta priorit allinterrupt desiderato. Il sesto bit (RCIF) del registro PIR1 un flag che va a 1 quando si scatena linterrupt in questione e viene resettato in automatico quando viene letto il valore su RCREG.

10.4 Conversione analogico-digitale


Il pic contiene al suo interno un convertitore AD a 10 bit e possono essere selezionati 13 canali. In questo caso sufficiente un solo canale ed stato scelto RA0. Il risultato della conversione viene posto in due registri: ADRESH e ADRESL. Se gli otto bit meno significativi vengono posti su ADRESL si pu prelevare un valore da 10 bit. Mentre se gli otto bit pi significativi vengono posti su ADRESH allora su tale registro si ottiene praticamente la conversione a otto bit che quella scelta per questo progetto. I registri per la gestione della conversione AD sono: ADCON0, ADCON1, ADCON2. Registro ADCON0 I bit 6 e 7 non sono implementati. I quattro bit dal 2 al 5 servono per selezionare il canale: per selezionare RA0 (AN0) il loro valore 0000. I bit 1 e 2 vanno posti a livello alto per abilitare la conversione.

Pagina 38

Controllo wireless di motori passo passo I.T.I.S. ALESSSANDRO ROSSI

Registro ADCON1 I bit 6 e 7 non sono implementati. Il bit 5 serve per selezionare la tensione di riferimento minore (VREF-): se viene messo a livello basso, la tensione a cui corrisponde lo zero e la massa. Se invece viene messo a livello alto, lo zero della conversione, ossia la tensione minima, corrisponde alla tensione sul pin RA2 (AN2). Il bit 4 serve per selezionare la tensione di riferimento massima (VREF+): se viene messo a livello basso, la tensione a cui corrisponde a 1023 (255 se la conversione a 8 bit) e Vdd. Se invece viene messo a livello alto, il valore massimo della conversione, ossia la tensione massima, corrisponde alla tensione sul pin RA3 (AN3). In questo progetto stata scelta come tensione di riferimento, sia massima che minima, la tensione di alimentazione, quindi entrambi i bit precedentemente descritti sono stati posti a zero. I bit da 0 a 3 servono per stabilire quali tra i pin che possono essere ingressi analogici vengono posti come ingressi analogici o digitali. Per avere solo RA0 come ingresso analogico il loro valore deve essere 1110. Registro ADCON2 Lottavo bit stato posto a 1 per la conversione a 8 bit come precedentemente esposto Il settimo bit non implementato. I tre bit da 3 a 5 selezionano il tempo di acquisizione: stato dato loro il valore 111. I tre bit da 0 a 2 selezionano il clock per la conversione: stato dato loro il valore 001 per avere un clock di frequenza pari a fosc/8.

10.5 Filtro passa basso


Il convertitore AD stato utilizzato per rilevare la corrente che scorre su un avvolgimento di uno dei due motori. possibile rilevare questo valore perch, lintegrato A4988 dispone di due pin (SENS1 e SENS2) ai quali vallo collegate due resistenze da 0,05 attraverso le quali scorre la corrente degli avvolgimenti e che servono, come precedentemente visto, per rilevare la corrente e di conseguenza controllarla. La corrente per ha landamento di unonda a dente di sega in quanto caratteristica dellinizio del transitorio del circuito RL dei motori. Inoltre, dato il basso valore delle resistenze, la tensione che viene rilevata molto bassa. Si deciso quindi di rilevare il valore medio della corrente ottenendo cos un dato significativo per gli scopi del progetto. Innanzitutto la tensione prelevata sulla resistenza stata posta allingresso di un buffer come stadio separatore in modo tale da poter gestire il segnale senza influenzare il circuito della parte di potenza del motore. Il segnale stato poi filtrato con un filtro del secondo ordine a reazione positiva semplice con approssimazione di Bessel. Il filtro con approssimazione di Bessel caratterizzato da uno smorzamento pari a 3/2 = 0,866 e un guadagno A0 alle basse frequenze di 3-3 = 1,27. stato scelto questo tipo di filtro perch presenta meno ripple e ha un roll-off che raggiunge il valore asintotico di -40dB/dec in maniera molto graduale. La frequenza di taglio stata fissata a 40Hz e quindi 0 = 2**40 = 251,3rad/s.

Pagina 39

Controllo wireless di motori passo passo I.T.I.S. ALESSSANDRO ROSSI

Figura 20: risposta in frequenza (modulo) dei vari filtri

VCC 5V VCC 2 Vsens


4

Vsens

3 1 2 11

C2 1.5uF
4

R1 2.7k

R2 2.7k

10 8 7 9

6 R4 68k 7 R3 1k 0

1 C1 1.5uF

6 11

RB 2.7k 3 RA 10k

11

Il segnale in uscita del filtro stato poi amplificato con in amplificatore non invertente di guadagno pari a 78. Dimensionamento Con la frequenza di taglio stabilita si ottiene la pulsazione 0 come visto. Essa pari a 1/(R1*R2*C1*C2), quindi ponendo R1=R2=R e C1=C2=C si ottiene: 0 = 1/(R*C). Con la formula inversa si ottiene invece: R=1/(C*0) Ponendo C=1,5F si ottiene una resistenza R=2,7k. Sapendo che A0 si ottiene con la seguente formula: A0 = 1+RB/RA. Ponendo A0 = 1,27 e RA=10k si ottiene RB=2,7k. Sapendo che il guadagno A1 del terzo amplificatore deve essere 78 si ottiene R3=1k e R4=68k. In questo modo il valore della tensione duscita in funzione del valore medio della corrente si calcola: Vout= I*Rsens*A0*A1 = I*0,05*1,27*78 = I*4,953

Pagina 40

Controllo wireless di motori passo passo I.T.I.S. ALESSSANDRO ROSSI

Quindi con una corrente di 1A si ha una Vout di 4,953V. Per avere 5V in uscita la corrente deve essere: Imax = 5/4,953 = 1,009A. Lintegrato usato per gli operazionali LM324 che contiene 4 operazionali.

10.6 Descrizione programma


In questo programma oltre alla funzione main() presente anche la subrutine dellinterrupt dichiarata come void interrupt int_ser(void). Il programma entra in automatico in questa subrutine quando si verifica la condizione necessaria per scatenare linterrupt ossia la ricezione di un dato via seriale. Quindi in questo caso, prima dellinizio della funzione main(), oltre alla dichiarazione delle variabili si dovuto fare il prototipo della funzione void interrupt int_ser(void). Poi allinterno della funzione main(), per prima cosa sono stati impostati i registri per le periferiche di I/O, per la trasmissione seriale, per la conversione AD e infine per linterrupt. Allinterno del ciclo while il programma diviso in 4 parti. - Prima parte: vengono abilitate la comunicazione seriale, sia in ricezione che in trasmissione, e la conversione AD nel caso venissero disabilitate. - Seconda parte: se il valore analogico di ADRESH diverso dalla variabile value e la variabile d assume il valore 2500, allora value assume lo stesso valore di ADRESH per essere trasmessa e si attende finch la trasmissione non completa monitorando il bit TMRT del registro TXSTA: quando pari a 0 sigifica che la trasmissione in corso. - Terza parte: viene incrementata la variabile d e quando raggiunge il valore 5000 viene riportata a 1. Questa variabile viene incrementata ad ogni ciclo del programma, quindi essa assume il valore 2500 ogni 5000 cicli. Quindi il valore analogico viene trasmesso non solo se diverso da precedente, ma anche ogni 5000 cicli di programma. Questa parte stata aggiunta altrimenti ci sarebbero stati dei momenti in cui la trasmissione del pic avveniva ad una velocit tale che, per come strutturato il software del programma per il PC, la ricezione da parte del PC non era efficace. Questa tecnica stata usata per non utilizzare il timer dato che non era necessaria una precisa temporizzazione. Il valore 5000 stato stabilito facendo delle prove. - Quarta parte: qui avviene la trasmissione dei dati ricevuti al primo pic la quale stata precedentemente descritta. Va notato che questa volta RD7 in ingresso, RD6 in uscita e PORTB in uscita: il contrario rispetto al primo pic. Su PORTB vengono poste le variabili delay_dx e delay_sx. Poi a PORTD viene assegnato il valore della variabile cotrol_xx che comprende anche lo stato di RD6. I sei pin da RD0 a RD5 sono adibiti al comando dei driver per i motori. I pin RD0 e RD1 controllano rispettivamente la direzione del motore destro e del motore sinistro. I pin RD2 e RD3 controllano rispettivamente lenable del driver di destra e di sinistra: se questi pin sono a livello basso i motori girano altrimenti restano fermi. I pin RD4 e RD5 se a livello alto, abilitano lhalf_step dei motori rispettivamente di destra e di sinistra.

Pagina 41

Controllo wireless di motori passo passo I.T.I.S. ALESSSANDRO ROSSI

Subrutine di interrupt Quando il programma entra nella subrutine di interrupt viene subito memorizzato il valore di RCREG nel primo elemento del vettore number, ossia number[0]. Il primo dato ricevuto pu essere 1, 2 o 3. Poi si attende larrivo del secondo dato che va memorizzato in number[1]. Se il valore di number[0] 1 allora number[1] corrisponde a delay_dx. Se il valore di number[0] 2 allora number[1] corrisponde a delay_sx. Se il valore di number[0] 3 allora number[1] corrisponde a control_xx.

10.7 Software
#include <htc.h> void interrupt int_ser(void); //prototipo funzione di interrupt unsigned char number[2]; unsigned char value=0; //vettore per memorizzare i dati //variabile per memorizzare il valore analogico

unsigned char delay_dx=10;//valore per il delay del motore dx unsigned char delay_sx=10; //valore per il delay del motore sx unsigned char control_xx=12;//valore per lo stop, dir e half step unsigned int d=1; void main() { TRISA=1; TRISB=0; TRISD=128; TRISE=0; //INIZIO PROGRAMMA //RA0 in ingresso //PORTB in uscita //RD7 ingresso //PORTE in uscita

PORTB=delay_dx; //inizializzazione PORTA=0; PORTD=control_xx; PORTE=0; BAUDCON=0b00001000; SPBRG=30; SPBRGH=0; TXSTA=0b00100100; RCSTA=0b10010000; ADCON0=3; ADCON1=0b00001110; //registri per la comunicazione seriale

//registri per l'ADC

Pagina 42

Controllo wireless di motori passo passo I.T.I.S. ALESSSANDRO ROSSI

ADCON2=0b00111001; //INTERRUPT RCON=RCON|0b10000000; //metto a 1 il bit IPEN INTCON=0b10000000; //abilito gli interrupt di alta priorit PIE1=0b00100000; //abilito l'interrupt quando l'uart riceve IPR1=0b00100000; //viene data l'alta priorit all'interrupt dell'uart while(1){ //INIZIO CICLO PROGRAMMA

//PARTE 1 vengono abilitate: la conversione, la trasmissione e la ricezione ADCON0=3; TXSTAbits.TXEN=1; RCSTAbits.SPEN=1; //PARTE 2 if((value!=ADRESH )&& d==2500){ value=ADRESH; TXREG=value; while(TXSTAbits.TRMT==0); } //PARTE 3 d++; if(d>=5000){ d=1; } //PARTE 4 if(PORTDbits.RD7==1){ PORTB=delay_sx; control_xx=control_xx|0b01000000; } if(PORTDbits.RD7==0){ PORTB=delay_dx; control_xx=control_xx&0b10111111; } PORTD=control_xx; } }

//trasmissione //attesa

//trasferimento dati //setto RD6

//resetto RD6

Pagina 43

Controllo wireless di motori passo passo I.T.I.S. ALESSSANDRO ROSSI

void interrupt int_ser(void){ number[0]=RCREG; while(PIR1bits.RCIF==1); while(PIR1bits.RCIF==0); number[1]=RCREG; if(number[0]==1) delay_dx=number[1]; if(number[0]==2) delay_sx=number[1]; if(number[0]==3) control_xx=number[1]; }

//subrutine di interrupt

//attesa per l'arrivo del secondo dato

//assegnazione dei dati

Pagina 44

Controllo wireless di motori passo passo I.T.I.S. ALESSSANDRO ROSSI

11 Moduli radio
11.1 Descrizione
La connessione wireless effettuata mediante i moduli radio Xbee PRO. Questi moduli sono usati in tipologie di reti a radio frequenza che rientrano nelle low bitrate Personal Area Network (PAN). Queste sono reti con lo stesso standard di comunicazione dello ZigBee, che d la possibilit di connettere pi sistemi (come in questo caso computer e pic) sostituendo cos la connessione cablata che fa uso di cavi. Il termine ZigBee, deriva da ziggingbee, la danza delle api domestiche, metodo attraverso il quale vengono comunicati i dati essenziali per la sopravvivenza della colonia. Questi moduli possono funzionare nella connessione point to point o nella connessione point to multipoint, peer to peer o mesh. ZigBee stato concepito nel 1998 per soddisfare il bisogno di piccole reti autoconfiguranti ed economiche. Lo standard ZigBee definisce un meccanismo di comunicazione wireless operante su piccole distanze e con una modesta banda passante: 250 kbps su un raggio teorico che va da dieci fino ad alcune centinaia di metri. Si pu quindi dire che le caratteristiche che ne hanno determinato la scelta sono: Basso costo; Basso consumo; Medio - bassa velocit di trasmissione (sufficiente per i nostri scopi); Semplicit di utilizzazione (comunicazione seriale). In questo caso i moduli radio sono stati utilizzati per la connessione point to point semplicemente per la comunicazione seriale senza flili tra due dispositivi (pic e PC) mediante i terminali RX e TX.

Caratteristiche generali Specification Voltage supply Operating Current (Tx) Operating Current (Rx) Idle Current Operating Frequency Band Indoor Range Outdoor Range Transmit Power Output Receiver Sensitivity RF Data Rate Serial Interface Data Rate

Value 3,0V 3,4V 295 mA 45 mA 15 mA 2.4 GHz up to 100m up to 1.6 Km 63mW (18dBm) -102 dBm 250 Kbps 1200 230.4 Kbps

Pagina 45

Controllo wireless di motori passo passo I.T.I.S. ALESSSANDRO ROSSI

Descrizione dei pin Pin 1 2 3 4 5 6

Name Vcc Dout Din D8 Reset PWM0/RSSI

Direction Otput Input Output Input Output

7 8 9

PWM1 DTR/SLEEP_RQ/D18

Output Input

10 11 12

GND AD4/DIO4 CTS/DIO7

Either Either

13 14 15

ON/SLEEP VREF Associate/AD5/DIO5

Output Input Either

16

RTS/AD6/DIO6

Either

17 18 19 20

AD3/DIO3 AD2/DIO2 AD1/DIO1 AD0/DIO0

Either Either Either Either

Description Power supply UART Out UART IN Digital Output Reset PWM Output 0 / RX Signal Strength Indicator PWM Output 1 Do not connect Pin Sleep Control Line or Digital Input 8 GND Analog Input 4 or Digital I/O 4 Clear-to-Send Flow Control or Digital I/O 7 Module Status Indicator Voltage Reference for A/D Inputs Associated Indicator, Analog Input 5 or Digital I/O 5 Request-to-Send Flow Control, Analog Input 6 or Digital I/O 6 Analog Input 3 or Digital I/O 3 Analog Input 2 or Digital I/O 2 Analog Input 1 or Digital I/O 1 Analog Input 0 or Digital I/O 0

Pagina 46

Controllo wireless di motori passo passo I.T.I.S. ALESSSANDRO ROSSI

La seguente figura illustra schematicamente la connessione wireless tra due dispositivi che fanno uso di questi moduli radio in relazione alla pedinatura.

11.2 Circuito di interfaccia per il PC

Questo circuito, venduto gi assemblato, permette linterfaccia tra il PC e i moduli radio Xbee. Il principio di funzionamento basato sul FT232. Infatti questo un convertitore USB/seriale, e questo ha reso possibile la comunicazione tra il PC e i moduli radio.

Pagina 47

Controllo wireless di motori passo passo I.T.I.S. ALESSSANDRO ROSSI

11.3 Circuit0 di interfaccia per il PIC

Questo circuito necessario in quanto il pic e il resto della circuiteria lavorano con una tensione di alimentazione di 5V, mentre lXBee lavora a 3,3V. Il circuito composto principalmente da un regolatore di tensione 5V 3,3V e comprende dei led che fanno capo ai pin DIN, DOUT, RSSI e alimentazione. I led per DIN e DOUT si accendono quando in atto al comunicazione seriale.

Pagina 48

Controllo wireless di motori passo passo I.T.I.S. ALESSSANDRO ROSSI

11.4 Modalit operative


Idle Mode Quando il modulo Xbee non trasmette n riceve segnali, si imposta automaticamente in idle mode (inattivo). Durante questa modalit lXbee controlla se ci sono dati in arrivo e pu operare in una delle seguenti modalit a seconda delle condizioni in atto: Sleep Mode (quando stata compiuta una richiesta di sleep); Transmit Mode (quando il dato pronto per essere spedito); Receive Mode (quando si riceve un dato attraverso lantenna); Command Mode (quando invia una command Mode Sequence). Le tre modalit possono essere riassunte con il seguente schema:

Sleep Mode In questa modalit lXbee entra in uno stato dove il consumo effettivamente minimo (esso infatti assorbe una corrente minore di 10 A). Il modulo entra in questo stato quando incontra una delle seguenti condizioni: Sleep_RQ (pin 9) a 3.3 V; Il modulo nello stato idle per un tempo definito dal parametro ST (time before sleep). Transimit Mode In questa confiqurazione il modulo riesce a trasmettere dati a radio frequenza. Il modulo Xbee esce dallo stato idle e si imposta in transimit mode quando un dato pronto per essere inviato. Il destination address determina quale sar il punto (o nodo) che dovr ricevere il dato. Prima di inviarlo, il modulo si assicura che sia stata stabilita una connessione con il destinatario. Se il destination address non conosciuto dal modulo mittente, si avvier un processo denominato network address discovery.
Pagina 49

Controllo wireless di motori passo passo I.T.I.S. ALESSSANDRO ROSSI

Questo processo illustrato dalla figura sottostante.

Receive Mode Se viene ricevuto un pacchetto valido, il modulo si imposta in Receive Mode. Una volta entrati in questa modalit, il modulo in grado di ricevere segnali a radio frequenza. Command Mode E la modalit indispensabile al fine di modificare i parametri interni (baud rate, channel, IDPAN, ecc) del modulo Xbee. A tale scopo necessario: entrare nella modalit AT Command Mode; inviare ATCommands; commandResponse; uscire da ATCommand Mode. In questa modalit, inviando speciali comandi AT (attention), possibile modificare i parametri interni del modulo radio, come la PAN, destinationaddress, source address, baud rate ecc.. Per accedere a questa modalit necessario inviare al modulo, una sequenza di tre caratteri +++ e aspettare un determinato tempo (scritto nelleeprom
Pagina 50

Controllo wireless di motori passo passo I.T.I.S. ALESSSANDRO ROSSI

del modulo) chiamato guardtimes prima e dopo linvio di questa sequenza. Una volta inviati questi caratteri, il modulo risponde OK OK\r. Una volta entrati nella modalit Command Mode, attivato un timer (comando CT), ed il modulo in grado di ricevere comandi AT sul pin DIN. Inviare comandi AT Per inviare ATCommands al fine di impostare parametri necessario usare questa sintassi:

Il precedente esempio cambierebbe il destinationaddresslow a 0x1F. Per memorizzare qualsiasi parametro del modulo in una memoria non volatile (eeprom) sufficiente alsiasi inviare il comando WR (write). In questo modo tutti i parametri modificati verranno mantenuti anche dopo aver tolto lalimentazione. CommandResponse Una volta inviato un comando, se lesecuzione avvenuta con successo, lXbee risponder OK\r. Se invece perviene un errore, esso risponder ERROR. r. Uscire da ATCommand Mode Esistono due modi per uscire da questa modalit: inviare ATCN\r al modulo Xbee; r attendere un tempo specificato dal command mode timeout (CT) senza inviare alcun o carattere.

11.5 Modulazione
La modulazione utilizzata da questi moduli la 4PSK (phase shift keying). Essa una modulazione digitale, ovvero una modulazione con portante sinusoidale e segnale informativo (modulante) di tipo digitale. Questa modulazione numerica consiste nel generare un segnale portante avente quattro diversi valori di fase, ad ognuno dei quali si associa una coppia di bit, denominati dibit. Le fasi, come tutte le regole riguardanti le telecomunicazioni, sono stati stabiliti regole dallITU-T e sono: 45,135, 225 e 315. T

Ricordando che, per la formula delladdizione: ( )= ( ) cos( ) Risulta semplice la realizzazione della seguente tabella:
Pagina 51

( ) cos ( )

Controllo wireless di motori passo passo I.T.I.S. ALESSSANDRO ROSSI

Dibit 00 01 10 11

Cambiamenti di fase 45 135 225 315

Segnale associato ( ) 90 = cos ( + 180 = sen ( 90 = cos (

) ) )

12 Visual Basic
12.1 Informazioni sul linguaggio di programmazione Basic
BASIC in informatica, acronimo per Beginner's All-purpose Symbolic Instruction Code, un linguaggio di programmazione ad alto livello, generalmente interpretato o compilato, sviluppato verso la met degli anni Sessanta da John Kemeny e Thomas Kurtz presso il Dartmouth College della Nuova Scozia, in Canada. Il BASIC deve la sua popolarit alla relativa semplicit con cui si apprende e si utilizza. Nel corso degli anni il linguaggio ha conosciuto enormi perfezionamenti. Mentre le prime versioni erano di tipo interpretato e non strutturate, e quindi inadatte per applicazioni complesse e professionali, le pi recenti sono strutturate e, spesso, di tipo compilato. Inoltre, gli ultimi sviluppi hanno portato a integrare la programmazione a oggetti nel linguaggio, rendendolo quindi molto avanzato. Il BASIC, soprattutto nelle versioni per Windows, rimane anche oggi un linguaggio relativamente semplice e trova tuttora numerose applicazioni; in particolare nella didattica, per compiti semplici, in ambito freeware e shareware e, in generale, ovunque non si richiedano velocit molto elevate, poich il linguaggio normalmente lento se comparato, ad esempio, con il C++.

12.2 Ambiente di sviluppo


I compilatore di Visual Basic, un software che permette di sviluppare uninterfaccia grafica utilizzando il linguaggio Basic con molte semplificazioni, in quanto fornisce gi parti di software sviluppate e degli oggetti grafici che sono facilmente gestibili. Infatti, una volta inserito un componente, se ne possono modificare facilmente i parametri e questi sono anche agevolmente modificabili via software. Il compilatore di Visual Basic stato usato allinterno del programma Visual Studio, il quale permette lo sviluppo di applicazioni anche con altri tipi di linguaggio.

Pagina 52

Controllo wireless di motori passo passo I.T.I.S. ALESSSANDRO ROSSI

12.3 Descrizione programma


Componenti di input Nellinterfaccia grafica sviluppata sono presenti due TrackBar le quali sono costituite da un cursore che pu essere posizionato a piacere tra una posizione di valore minimo e una di valore massimo. Queste sono usate per determinare il valore delle variabili delay_dx e delay_sx per il pic e quindi il range di valori di queste barre va da 0 a 255. Il loro valore viene inviato solo se c stato uno spostamento del cursore, ossia solo se c stata una variazione del valore della posizione del cursore. Il loro valore viene visualizzato, per ciascuna barra, in un componente di output chiamato Label che visualizza semplicemente un numero e in questo caso il valore della posizione del cursore. Nellinterfaccia sono poi presenti sei CheckBox che permettono di selezionare o deselezionare lopzione associata. Questi possono assumere 2 valori: vero (true) o falso (false). Essi sono disposti a coppie e di ogni coppia uno adibito ad un controllo per il motore destro e uno per il motore sinistro. Quindi ci sono 3 tipi di controllo: verso delle rotazione (oraria o antioraria), stop del motore, abilitazione del mezzo-passo. Ognuno di questi check, se allo stato true mette a uno un bit della variabile control che corrisponde (per quanto riguarda la funzione di ogni bit) alla variabile control_xx del pic. Appena uno di loro cambia di stato viene inviata la variabile control. I check per lo stop sono inizialmente allo stato true. Componenti di output Nellinterfaccia presente una barra di progressione (ProgressBar) il cui valore va da 0 a 255 e visualizza il valore analogico a 8 bit acquisito dal pic che dipende dalla corrente. Vicino ad essa c una Label che visualizza il valore della corrente in milliAmpere. Il valore visualizzato viene calcolato con la seguente forula: valore = n*1009/255 Dove n il byte ricevuto dal pic acquisito con lADC e 1009 il valore in mA della corrente corrispondente al valore di 255 ossia a 5V. stato previsto anche un grafico che illustra landamento della corrente. Per tracciarlo stata usata una variabile per la coordinata orizzontale, che viene incrementata ogni volta di uno, e una variabile per la coordinata verticale, data dal valore dal valore analogico inviato dal pic: le due variabili insieme quindi determinano la posizione di un punto. Ogni punto viene quindi congiunto con una linea al punto precedente. Il timer Nel software stato utilizzato un timer con una temporizzazione di 10ms. In questo modo ogni 10ms viene controllato lo stato delle due TrackBar e se il valore di una delle due diverso dal precedente esso viene inviato. Poi sempre dopo lo stesso intervallo di tempo viene aggiornato il grafico e lo stato della ProgressBar verificando se stato ricevuto un dato oppure no.

Pagina 53

Controllo wireless di motori passo passo I.T.I.S. ALESSSANDRO ROSSI

Porta seriale Nel software stato aggiunto un componente per gestire la comunicazione seriale. La porta seriale va abilitata allinizio del software quando vengono inizializzate le variabili. I dati ricevuti o trasmessi devono appartenere ad un vettore.

12.4 Suddivisione del software


Il software costituito da ununica classe di tipo private. Allinterno sono contenute delle subrutine di tipo private. Ogni subrutine viene chiamata dal programma al verificarsi di una certa condizione e al loro interno vengono inserite le opportune istruzioni. Le subrutine sono legate ognuna alla seguente condizione: - tick del timer ogni 10ms; - caricamento del programma (dove viene inserita linizializzazione delle variabili); - ricezione seriale di dati; - cambiamento di stato di un ChekBox (6 subrutine); - caricamento del programma (per disegnare le linee del grafico).

12.5 Software
Public Class Form1 Dim bytDato(0 To 1) As Byte Dim intData(0 To 3) As Integer Dim bytRic(0 To 1) As Byte Dim intRic As Integer Dim intTarget As Integer Dim intRem As Integer Dim Control As Byte Dim Graf As Integer Dim Val As Integer Dim newVal As Integer 'velocit dx, velocit sx 'valori istantanei e precedenti delle due ProgressBar

'ricezione dati 'avviso di ricezione

'variabile corrispondente a control_xx 'ascisse 'ordinata precedente 'ordinata attuale

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Label1.Text = 0 'inizializzazione Label3.Text = 0 intData(1) = 0 intData(3) = 0 bytRic(0) = 0 intTarget = 1 intRem = 0 Control = 12 ' dati sul controllo Graf = 10 Val = 0 Timer1.Enabled = True SerialPort1.Open() 'abilitazione timer 'abilitazione porta seriale

Pagina 54

Controllo wireless di motori passo passo I.T.I.S. ALESSSANDRO ROSSI


CheckBox3.Checked = True CheckBox4.Checked = True End Sub

Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick 'SerialPort1.Read(bytRic, 0, 1) 'ricezione If intTarget = 1 Then ProgressBar1.Value = bytRic(0) + 1 'livello ProgressBar1.Value = bytRic(0) Label2.Text = intRic intTarget = 0 newVal = bytRic(0) newVal = newVal / 2 End If 'grafico PictureBox1.CreateGraphics.DrawLine(Pens.Red, Graf, 130 - Val, Graf + 1, 130 newVal) Graf = Graf + 1 Val = newVal If Graf = 710 Then Graf = 10 PictureBox1.CreateGraphics.Clear(Color.White) PictureBox1.CreateGraphics.DrawLine(Pens.Black, 0, 130, 710, 130) PictureBox1.CreateGraphics.DrawLine(Pens.Black, 10, 140, 10, 0) PictureBox1.CreateGraphics.DrawLine(Pens.Gray, 0, 104, 710, 104) 'orizzontale salto di 33 PictureBox1.CreateGraphics.DrawLine(Pens.Gray, PictureBox1.CreateGraphics.DrawLine(Pens.Gray, PictureBox1.CreateGraphics.DrawLine(Pens.Gray, PictureBox1.CreateGraphics.DrawLine(Pens.Gray, PictureBox1.CreateGraphics.DrawLine(Pens.Gray, PictureBox1.CreateGraphics.DrawLine(Pens.Gray, PictureBox1.CreateGraphics.DrawLine(Pens.Gray, PictureBox1.CreateGraphics.DrawLine(Pens.Gray, PictureBox1.CreateGraphics.DrawLine(Pens.Gray, PictureBox1.CreateGraphics.DrawLine(Pens.Gray, End If 0, 0, 0, 0, 78, 710, 78) 'orizzontale 52, 710, 52) 'orizzontale 26, 710, 26) 'orizzontale 1, 710, 1) 'orizzontale 140, 140, 140, 140, 140, 140, 110, 210, 310, 410, 510, 610, 0) 0) 0) 0) 0) 0) 'verticale 'verticale 'verticale 'verticale 'verticale 'verticale

110, 210, 310, 410, 510, 610,

intData(0) = TrackBar1.Value intData(2) = TrackBar2.Value If (intData(0) = intData(1)) = False Then 'trasmissione bytDato(0) = 1 bytDato(1) = intData(0) Label1.Text = bytDato(1) 'intData SerialPort1.Write(bytDato, 0, 2) intData(1) = intData(0) End If If (intData(2) = intData(3)) = False Then 'trasmissione bytDato(0) = 2 bytDato(1) = intData(2) Label3.Text = bytDato(1)

Pagina 55

Controllo wireless di motori passo passo I.T.I.S. ALESSSANDRO ROSSI


SerialPort1.Write(bytDato, 0, 2) intData(3) = intData(2) End If End Sub

Private Sub Receive(ByVal sender As System.Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived 'Timer1.Enabled = False bytRic(0) = SerialPort1.ReadByte intRic = bytRic(0) * 1009 / 255 intTarget = 1 'Timer1.Enabled = True End Sub 'bytDato(2)= -, -, halfstepsx, halfstepsx, stopsx, stopdx, dirsx, dirdx Private Sub CheckBox1_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox1.CheckedChanged bytDato(0) = 3 If CheckBox1.Checked = True Then Control = Control Or 1 Else Control = Control And 254 End If bytDato(1) = Control SerialPort1.Write(bytDato, 0, 2) End Sub Private Sub CheckBox2_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox2.CheckedChanged bytDato(0) = 3 If CheckBox2.Checked = True Then Control = Control Or 2 Else Control = Control And 253 End If bytDato(1) = Control SerialPort1.Write(bytDato, 0, 2) End Sub Private Sub CheckBox3_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox3.CheckedChanged bytDato(0) = 3 If CheckBox3.Checked = True Then Control = Control Or 4 Else Control = Control And 251 End If bytDato(1) = Control SerialPort1.Write(bytDato, 0, 2) End Sub

'negato

Private Sub CheckBox4_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox4.CheckedChanged bytDato(0) = 3 If CheckBox4.Checked = True Then

'negato

Pagina 56

Controllo wireless di motori passo passo I.T.I.S. ALESSSANDRO ROSSI


Control = Control Or 8 Else Control = Control And 247 End If bytDato(1) = Control SerialPort1.Write(bytDato, 0, 2) End Sub Private Sub CheckBox5_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox5.CheckedChanged bytDato(0) = 3 If CheckBox5.Checked = True Then Control = Control Or 16 Else Control = Control And 239 End If bytDato(1) = Control SerialPort1.Write(bytDato, 0, 2) End Sub Private Sub CheckBox6_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox6.CheckedChanged bytDato(0) = 3 If CheckBox6.Checked = True Then Control = Control Or 32 Else Control = Control And 223 End If bytDato(1) = Control SerialPort1.Write(bytDato, 0, 2) End Sub Private Sub PictureBox1_Paint(ByVal sender As System.Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles PictureBox1.Paint e.Graphics.Clear(Color.White) 'grafico e.Graphics.DrawLine(Pens.Black, 0, 130, 710, 130) 'orizzontale e.Graphics.DrawLine(Pens.Black, 10, 140, 10, 0) 'verticale e.Graphics.DrawLine(Pens.Gray, e.Graphics.DrawLine(Pens.Gray, e.Graphics.DrawLine(Pens.Gray, e.Graphics.DrawLine(Pens.Gray, e.Graphics.DrawLine(Pens.Gray, e.Graphics.DrawLine(Pens.Gray, e.Graphics.DrawLine(Pens.Gray, e.Graphics.DrawLine(Pens.Gray, e.Graphics.DrawLine(Pens.Gray, e.Graphics.DrawLine(Pens.Gray, e.Graphics.DrawLine(Pens.Gray, End Sub End Class 0, 0, 0, 0, 0, 104, 710, 104) 'orizzontale 78, 710, 78) 'orizzontale 52, 710, 52) 'orizzontale 26, 710, 26) 'orizzontale 1, 710, 1) 'orizzontale 140, 140, 140, 140, 140, 140, 110, 210, 310, 410, 510, 610, 0) 0) 0) 0) 0) 0) 'verticale 'verticale 'verticale 'verticale 'verticale 'verticale

110, 210, 310, 410, 510, 610,

Pagina 57

Controllo wireless di motori passo passo I.T.I.S. ALESSSANDRO ROSSI

12.6 Interfaccia

13 Realizzazione
Il circuito totale stato realizzato con tecnica filata su basetta millefori. I collegamenti sono stati eseguiti rispettando un certo criterio per luso dei fili in modo da facilitare il riconoscimento del loro uso: sono stati usati fili bianchi per la massa, fili rossi per i 5V, fili arancioni per i 12V, fili blu per i collegamenti tra i vari componenti. Non sono stati usati dispositivi per il raffreddamento dati gli scopi del circuito e si agito sulla limitazione di potenza dei driver in modo la corrente non superi gli 800mA circa.

14 Conclusioni
Questo sistema si presenta pi come modello che non per la diretta commercializzazione: i vari blocchi possono agevolmente essere sostituiti con altri pi adatti in base alle esigenze. I due pic, per esempio, possono essere sostituiti con un unico integrato che implementa il multitasking e linterfaccia grafica pu essere realizzata con altri linguaggi di programmazione o applicazioni (C++, Java, LabView, ). Linterfaccia wireless presenta il vantaggio, oltre al comando a distanza, di disaccoppiare fisicamente i PC dal circuito di pilotaggio: questo evita che il PC sia soggetto a danni in caso di malfunzionamento della circuiteria.

Pagina 58

Controllo wireless di motori passo passo I.T.I.S. ALESSSANDRO ROSSI

15 Fonti
Siti web: - www.wikipedia.it (caratteristiche dei motori passo passo); - www.pololu.com (informazioni siu driver A4988). Datasheet: - L297 (ST); - L298 (ST); - A4988 (Allegro); - PIC18F4550 (Microchip); - LM324 (ST); - XBee Pro (MaxStream). Libri di testo: - Sistemi 3, sistemi automatici di controllo e di misura (Calderini) Autori: A. De Santis, M. Cacciaglia, C. Saggese. - Elettronica analogica (Petrini editore) Autori: E. Cuniberti, L. De Lucchi. - Manuale di elettronica e telecomunicazioni (Hoepli) Autori: Giuseppe Biondo, Enrico sacchi. Software di supporto: - Multisim; - Dip Trace.

Vengono allegati: lo schema circuitale e la lista dei componenti.

Pagina 59