Professional Documents
Culture Documents
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.
Pagina 2
PC
USB
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
Pagina 4
Pagina 5
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.
A + 0 0
B 0 + 0
C 0 + 0 -
D 0 0 +
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
A + + -
B + +
C + + -
D + +
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
A + + 0 0 +
B 0 + + + 0 -
C 0 + + + 0 -
D 0 0 + + +
Pagina 8
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
=( ) 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
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
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
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.
Pagina 12
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
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
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
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
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
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.
Pagina 17
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.
Pagina 18
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
Pagina 20
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
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.
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
Pagina 22
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.
Pagina 23
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
Pagina 25
Pagina 26
Pagina 27
Pagina 28
5V
T=1ms V
5V
T=3ms V
5V
T=3ms
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.
Pagina 29
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
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.
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
Pagina 31
- 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
//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
// 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
// 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
Pagina 35
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
- 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
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.
Pagina 38
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.
Pagina 39
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
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.
Pagina 41
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
Pagina 42
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
//resetto RD6
Pagina 43
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
Pagina 44
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
7 8 9
PWM1 DTR/SLEEP_RQ/D18
Output Input
10 11 12
Either Either
13 14 15
16
RTS/AD6/DIO6
Either
17 18 19 20
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
La seguente figura illustra schematicamente la connessione wireless tra due dispositivi che fanno uso di questi moduli radio in relazione alla pedinatura.
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
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
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
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
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 ( )
Dibit 00 01 10 11
) ) )
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++.
Pagina 52
Pagina 53
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.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
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
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
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
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
Pagina 57
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
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.
Pagina 59