Home Documentation Hardware Il Servomotore

Registration



Search

Vuoi imparare l'inglese ma hai poco tempo? Non ti...

 

Diventa sponsor del progetto Robot Golem

 

Diventa sponsor del progetto Robot Golem

Links

Power by Gentoo Linux

Laurtec.com

Roboitalia

Il Servomotore PDF Print E-mail
Written by Administrator   
Wednesday, 14 July 2010 22:17
AddThis Social Bookmark Button
There are no translations available.

Teoria e pratica con i servomotori

Il servomotore è un attuatore. Generalmente si presenta come un contenitore di materiale plastico dal quale esce un cavo di alimentazione/controllo ed un pignone dentellato.



all'interno dell'involucro vi trovano posto una circuiteria elettronica dedicata, un potenziometro, un motore elettrico alimentato con una tensione continua di 5/6 volts ed una serie di ingranaggi. Il principio di funzionamento è molto semplice: grazie ad un apposito segnale il pignone del motore si sposta  in un angolo compreso tra -90° e 90°.



Per permettere questo movimento, oltre a fornire le giuste tensioni di alimentazione viene dato come input un treno di impulsi, composto da un'onda quadra compresa in un range tra 600usec e 2100 usec:

 


da come si può notare tra i vari impulsi vi è una pausa di refresh, che generalmente viene impostata a 20msec.
Il potenziometro è collegato meccanicamente all'albero motore e serve per misurare l'attuale angolo di spostamento, se all'impulso inviato al servomotore corrisponde un angolo diverso di spostamento, esso ruoterà sino al raggiungimento dell'angolo di lavoro impostato.

 

Come calcolare il Δt

Ora che sappiamo quanto deve valere in termini di tempo il Δt, dobbiamo calcolarlo in base alla nostra configurazione hardware.
La scheda Freedom del Golem monta un PIC Microchip 18f4580 con un clock settato da 20MHz,  assumendo di volerla programmare nel modo più semplice possibile (busy waiting), dovremo creare un ciclo che apra e chiuda una porta del pic per creare un appropriato reno di impulsi:



TEMPO DI APERTURA / TEMPO DI UN CICLO = CICLI NECESSARI



Questo pic ha un TCY pari a 4/FOSC. Questo significa che con un clock di 20 MHz impiegherà 0,2 usec per compiere una singola istruzione, dunque avremo:

  • -90°: ( 600 / 0,2 )usec = 3000 cicli
  • +90°: ( 2100 / 0,2 )usec = 10500 cicli
  • refresh: 20ms / 0,2usec = 100000 cicli


qui sotto riportiamo un codice di esempio in c18

PORTDbits.RD6 = 1;   // apro la porta logica PORTD6
Delay100TCYx(30);    // aspetto 600usec
PORTDbits.RD6 = 0;   // chiudo la porta logica PORTD6
Delay1KTCYx(100);    // aspetto 20ms



Duty Cycle
l'esempio del codice riportato sopra però pone un grave difetto: il Pic risulta sempre impegnato a gestire il servomotore. Un primo parametro di misura utile può essere il duty cycle, che non è altro che il rapporto tra il tempo complessivo del segnale alto e la durata totale del segnale:



d = tempo complessivo segnale alto / tempo complessivo

 

  • nel caso di un treno di impulsi da 1500usec avrò un duty cycle del 7%
  • nel caso di un treno di impulsi da 1500usec avrò un duty cycle del 9%


qui emerge un parametro fondamentale: il vero lavoro che impegna pic è il cambio dello stato della porta logica da chiusa ad aperta e viceversa, se usiamo il pic a questo scopo come nel paragrafo sopra descritto abbiamo un problema di ottimizzazione, che in gergo viene denominato busy waiting (attesa attiva). Si potrebbe ottimizzare il programma  in base a questa esigenza, e per fare ciò abbiamo bisogno di una nozione più avanzata, la gestione degli interrupt.




Riferimenti
http://www.hitecrcd.com/files/Servomanual.pdf
http://www.microchip.com/wwwproducts/Devices.aspx?dDocName=en020615

Last Updated on Wednesday, 14 July 2010 22:52