Sunteți pe pagina 1din 8

Servomotor PWM

Di ciplina: Microcontrolere
Realizator: Mot Vasile Cosmin
Prof. Coordonator: Beriliu Ilie.
Servomotorul
Ce este servomotorul?
Este format dintr-un motor de curent continuu un poten iometru i un circuit de
comand!. Motora ul este ata at de an"rena#ul care controleaz! roti a e$terioar!.
%tunci c&nd motorul se rote te rezisten a poten iometrului ' i modific!
valoarea iar circuitul de comand! pe (aza valori poten iometrului re"leaz! c&t
de mult s! se roteasc! i 'n ce direc ie.
)n momentul 'n care a$ul motorului este 'n pozi ia dorit! alimentarea motorului
se opre te. Pozi ia dorit! se seteaz! prin trimiterea unui impuls electric pe firul
de comand!. Viteza motorului este propor ional! cu diferen a dintre pozi ia lui
curent! i pozi ia dorit!. De e$emplu dac! motorul este departe de pozi ia dorit!
se va roti 'ncet i dac! este aproape se va roti repede aceasta numindu-se control
propor ional.
Cum se controleaz servomotorul?
Servomotorul se controleaz! printr-un impuls electric P*M pe firul de
comand!. Servomotorul se poate roti 'n + direc i 'n func ie de impulsul de
comand! i anume ma$im minim i pozi ia neutr! adic! , "rade.
De o(icei un servomotor se poate roti in am(ele par i -, de "rade adic! o
direc ie total! de ./, de "rade. Pozi ia neutr! este pozi ia 'n care servomotorul
are de parcurs aceea distan ! 'n am(ele sensuri. Impulsul P*M trimis c!tre
motor determin! pozi ia a$ului i pe (aza duratei impulsului acesta se rote te 'n
pozi ia dorit!.
Servomotorul a teapt! s! primeasc! un impuls la fiecare 0,ms iar lun"imea
impulsului determin!
distan a p&n! unde s! se
roteasc!. De e$emplu la un
impuls cu o durat! de .1ms
motorul se va roti -, de
"rade2 dac! impulsul este de
.ms se va roti la , "rade i
un impuls de 0ms 'l va roti
la ./, de "rade.
C&nd servomotorul este
comandat s! se roteasc! acesta se rote te pe pozi ia dorit! i se opre te acolo.
Dac! ac ion!m asupra lui cu o for ! e$tern! acesta ' i va men ine pozi ia. 3or a
ma$im! pe care poate s! o e$ercite un servomotor se nume te cuplul
servomotorului.
Specifica i generale ale unui servomotor.
4ensiunea de alimentare : 5./V - 6V
Viteza 5./V : 6, "rade7 ,..6s sau ,.0+s
Viteza 6V : 6, "rade7 ,..5s sau ,..-s
Cuplu 5./V : 1./8"7cm sau +.08"7cm
Cuplu 6V : 6.98"7cm sau 5..8"7cm
:reutate : 5+"
Dimensiuni : 5,.9$0,.1$+-.1 mm
Pentru a comanda acest servomotor cu impuls P*M avem nevoie de un
microcontroler. Din componen a acestui microcontroler ne vom folosi de timer
, i timer . de convertorul %DC i de )ntreruperi.
4imer-ul
Specifica i "enerale:
- implementare fizic! ca i num!r!tor independent de CP;.
- valoarea 'ntr-un timer poate fi citit! sau scris!.
- la dep! irea valori ma$ime se seteaz! un (it de dep! ire i se pot "enera
'ntreruperi.
- sursa semnalului de cloc< poate fi intern! sau e$tern!.
- 'ntr-un microcontroler pot e$ista cel pu in 0 timere.
Timer 0
- func ioneaz! cu (it de carr= i fla".
- este un timer7counter de / (i i.
- poate fi citit i scris.
- are un prescaler de / (i i pro"rama(il soft>are.
- poate "enera 'ntreruperi la dep! irea valorii ma$ime a re"istrului 4MR de la
33? la ,,?.
- re"istrul de control este @P4I@ABRE:
Ini ializare timer ,:
- "olesc re"istrul 4MR , i (itul 4,CS.
- invalidez 'ntreruperile.
- mer" 'n (ancul @P4I@ABRE:.
- scriu valoarea 'n timer @P4I@ABRE:.
- revin 'n (an< ,.
- validez 'ntreruperile.

Timer 1
- este un timer7counter de .6 (i i 4MR .C 4MR .D.
- poate fi citit sau scris.
- prescaler de .05 i / (i i pro"rama(ili soft>are.
- poate "enera 'ntreruperi la dep! irea valorii ma$ime a re"istrului 4MR de la
3333? la ,,,,?.
- mod de operare: timer sincron2 num!r!tor sincron sau asincron.
- re"istrul de control este 4.C@A.
Ini ializare timer .:
- "olesc re"istrul 4.C@A.
- "olesc 4MR .C si 4MR .D.
- invalidez 'ntreruperile.
- mer" 'n (an< ..
- pun valoarea corespunz!toare 'n 4.C@A.
- mer" 'n (an< ,.
- validez 'ntreruperile.
Convertorul %7D

Specifica i "enerale:
- este un convertor %7D pe ., (i i.
- uC are 5 intr!ri analo"ice acestea sunt multiple$ate 'ntr-un circuit de
e antionare memorare.
- ie irea acestui circuit este le"at! la intrarea convertorului.
- sunt 0 re"istre vala(ile care controleaz! func ionalitatea convertorului
%DC@A, i %ASED.
- ciclu de conversie este de .ms.
- perioada de conversie este de 00us.
- modulul %7D necesit! cel pu in 5us pentru 'nc!rcarea condensatorului de
e antionare-memorare.
- rezultatul pe ., (i i este se"mentat2 doar cei mai semnificativi / (i i vor fi
folosi i.
- re"istrul %ASED specific! pinii de uz "eneral care sunt confi"ura i ca intr!ri
analo"ice pentru modulul %7D.
- 'n acest caz cursorul poten iometrului serve te ca intrare pentru pinul %A,.
- dac! (itul VC3: este setatEF.GH atunci convertorul are ca referin ! pinul Vref
iar dac! nu este setatEF,GH atunci referin a va fi alimentarea Vdd.

)ntreruperi
)ntreruperile apar de la dep! irea valorii ma$ime a re"istrului 4MR, i
4IMER.. Da 'ntreruperi avem i laten !. Pentru 'ntreruperi sincrone care sunt
tipic interne laten a este de +4CI.
Controlul servomotorului cu P*M:
Semnalul P*M are perioada de 0,ms. ;n"?iul pe care 'l are servomotorul este
'n func ie de durata 'n starea lo"ic! J.K a semnalului "enerat.
4imer , se ini ializeaz! cu valoarea .9- adic! o perioad! de E0,msH. 4imer . se
ini ializeaz! cu valoarea 3C./ 4MR.CL3C i 4MR.DL./.
Codul surs!:
#include <htc.h>
#include <pic.h>
#define _XTAL_FREQ 4000000 //40MHz
#define !M_in "#$%
// &ecl'('(e' functil)(
*)id #nit!M+,-
*)id inte((upt #.(+,-
*)id #nit+,-
un.i/ned int (e'dA&0+,-
un.i/ned '&'t'-
int ti1e(21. 3 04F025-
int A&0*'l-
int ti1e(6'l-//*'l ce ) depun in TMR2 H# .i L$
//int 'dc_*'l7t1(27t1(2_*'l-
*)id 1'in+,
8
#nit+,-
#nit!M+,- // #nit !M
9hile+2,
8
:
-:
*)id #nit+,
8
//
A;<EL 3 0=00022000- // #;> // A;<>
TR#<#$ 3 0420- // "4 int('(e
A&0$;0 3 0=20002200- // <hut )ff the A/& 0)n*e(te(
0M0$; 3 040?- // en'=le c)1p'('t)'(e
6R0$; 3 0400- // en'=le 6(ef

"#$ 3 0400-
#;T0$; 3 04@0- // en'=le int((e(upt 'nd fl'/
T20$; 3 040A-
$T#$;_RE"3 0=0000222- //p(e.c'le( 2B2
:
*)id #nit!M+,
8

TMR0 3 04C%- // *'l)'(e .t'(t TMR0
TMR2H 3 04F0- // *'l)'(e .t'(t TMR2H
TMR2L 3 0425- // *'l)'(e .t'(t TMRL
TMR2#E32-
T0#E 3 2-
"#E 3 2-
T0#F 3 0-
TMR2#F 3 0-
(etu(n-
:
un.i/ned int (e'dA&0+,
8
int l)9307hi/h30-
"$_n&$;E 3 2- // En'=le ")/&)ne
if++A&0$;0 D 040%,33 040%,8
l)9 3 A&RE<L-
hi/h 3 A&RE<H-
hi/h 3 hi/h<<5-
hi/h 3 hi/h E l)9-
:
(etu(n hi/h-
:
*)id inte((upt #.(+*)id,
8
if++T0#EDT0#F,332, //#f Ti1e(0 #nte((upt
8
(e'dA&0+,-
A&0*'l 3 (e'dA&0+,-
ti1e(6'l 3 ti1e(21. F A&0*'l-
TMR2H 3 ti1e(6'l>>5-
TMR2L 3 ++ti1e(6'l<<5,>>5,-
!M_in 3 2-
TMR2#E 3 2-
T0#F 3 0-
TMR0 3 04C%-
A&0$;0 E3 0402-
:
if++TMR2#EDTMR2#F,332, //#f Ti1e(2 #nte((upt
8
!M_in 3 0-
TMR2#F 3 0-
:
:
Sc?em! simulat! 'n Proteus: