Servomotoarele sunt folosite în modelele telecomandate-radio (maşini, avioane), robotică, echipamente de testare, automatizări industriale. Sunt uşor de procurat, sunt mici, compacte şi relativ ieftine. Motoarele în sine sunt cutii negre care conţin un motor, cutie de viteză şi decodoare electronice. În cutie intră trei fire: 5V, masa şi semnalul. Un ax scurt iese din motor care de obicei are un dispozitiv de interfaţă ataşat. Cele mai multe servomotoare se vor roti în jur de 100 de grade în mai puţin de o secundă în funcţie de semnalul de intrare. Acest kit va controla până la 4 servomotoare simultan.
Asamblare
Asiguraţi-vă că aţi pus condensatorul electrolitic şi integratul IC1 corect.
Ca să completaţi kit-ul sunt necesare între unu şi patru potenţiometre de 5KW – 10KW pentru a produce semnalul de intrare. Conectaţi fiecare potenţiometru ca un divizor de tensiune cu pinul central la semnalul de intrare. Servomotoarele nu sunt incluse în kit deoarece utilizatorii au de obicei propriul lor servomotor pe care vor să-l comande.
Descrierea circuitului
Tot efortul pentru a comanda sevomotorul este făcut în microcontrolerul PIC preprogramat (mC). Un mC poate înlocui o mulţime de integrate şi alte chip-uri. Totul este făcut software. Conectaţi o sursă de alimentare de 5V capabilă să alimenteze un amplificator.
Semnalele de intrare sunt între 0 – 5V generate prin conectarea potenţiometrelor ca divizori de tensiune. În interiorul PIC-ului, un convertor AD (multiplexat când există mai mult de un semnal de intrare) schimbă semnalul de tensiune în sistemul Modulării Impulsurilor în Cod folosit de servomotoare. Acest semnal este un impuls de 5V de lungime între 1 şi 2ms repetat de 50 ori pe secundă. Aceasta înseamnă o frecvenţă a cadrelor de 20 ms. Lăţimea impulsului determină poziţia servomotorului. Cele mai multe servomotoare se vor deplasa până la jumătatea cursei lor când vor primi un impuls de 1,5 ms. O extremă a mişcării se obţine, în general, pentru o lăţime a impulsului de 1.0 ms, cealaltă extremă la 2 ms cu o uşoară variaţie de-a lungul intervalului, iar poziţia neutră la 1.5 ms. Perioada dintre impulsuri este utilizată pentru a sincroniza receptorul.
Servomotoarele sunt dispozitive cu buclă de reacţie. Ele îşi compară permanent poziţia programată (proporţională cu lăţimea impulsului) cu poziţia lor reală (proporţională cu tensiunea semnalului de intrare). Dacă este vreo diferenţă între cele două, electronica sevomotorului va comanda motorul să ajusteze eroarea (diferenţa). Aceasta înseamnă că servomotorul va rezista forţelor care încearcă să-i schimbe poziţia. Când un servomotor nu este alimentat sau nu primeşte impulsurile de poziţionare, axul de ieşire poate fi rotit uşor cu mâna.
Componente
Rezistoare 1/4W, 5%:
470K R1-R5 / 5 buc.
470R R6-R9 / 4 buc.
0,1mF C4 / 1 buc.
15pF condensator ceramic C1, C2 / 2 buc.
2200mF condensator electrolitic C3 / 1 buc.
XTAL 3,579MHz
PIC16C71-04/P programat / IC1
Soclu IC 18 pini
2 borne polare
PROGRAM:SERVO.SRC
;Acest program generează modularea impulsurilor în lăţime ale tensiunilor eşantionate. ;PIC 16C71 are încorporate patru convertoare ADC care sunt setate în acest caz să citească 0-5V ;ca valori binare 0 – 255.
;Rezultatele ADC sunt încărcate într-o rutină de întârziere care este implementată folosind contorul de timp real (RTCC-real time clock counter). În principiu RTCC numără de la ;valoarea încărcată până când ajunge la 255 şi apoi începe de la 0, declanşând o întrerupere.
;Programul este destinat să comande un servomotor deci este inclusă o întârziere fixă de aroximativ 0,8 ms. Lăţimea maximă a pulsului este de 2,2 msec.
;Trebuie subliniat faptul că cele patru ADC eşantionează şi transmit la ieşire secvenţial. Dacă toate convertoarele sunt oprite, controlerul trece în starea SLEEP care opreşte totul cu excepţia ceasului de supraveghere (WDT- watch dog timer). Când perioada WDT se termină (aproximativ 18 msec), controlerul se resetează complet şi procesul reîncepe. Astfel, în cazul în care toate intrările sunt de 0V, ciclul durează 4*0,8+18 »21 ms .
;Următoarele constante setează tactul ADC
;AD_clk = 0 ;perioada oscilatorului PICx2(<=1MHz).
;AD_clk = 64 ;perioada oscilatorului PICx8(<=4MHz).
;AD_clk = 128 ;perioada oscilatorului PICx32(<=16MHz).
AD_clk = 192 ;oscilatorul independent RC, 2-6us.
;Următoarele constante selectează un pin pentru intrarea ADC
AD_ch = 0 ;ADC canal 0 (Ain0, pin 17).
;AD_ch = 8 ;ADC canal 1 (Ain1, pin 18).
;AD_ch = 16 ;ADC canal 2 (Ain0, pin 1).
;AD_ch = 24 ;ADC canal 3 (Ain0, pin 2).
AD_ctl = AD_clk | AD_ch ;OR logic.
;Următoarele constante determină care pini vor fi utilizaţi de ADC şi dacă tensiunea continuă sau ra.3 vor servi ca tensiune de referinţă.
AD_ref = 0 ;ra.0 prin 3 utilizabil, Vcc referinţă.
;AD_ref = 1 ;ra.0 prin 3 utilizabil, ra.3 referinţă.
;AD_ref = 2 ;ra.0/1 utilizabil, Vcc referinţă.
;AD_ref = 3 ;toţi neutilizabili - numai intrări digitale.
device
pic16c71,hs_osc,wdt_on,pwrt_off,protect_on
id 'ADC1'
counter1 = 10h
counter2 = 11h
integer1 = 12h
integer2 = 13h
dummy = 14h
flag = 15h
servo0 = rb.5
servo1 = rb.4
servo2 = rb.3
servo3 = rb.2
org 0
jmp start
org 4
clrb RTIF
setb flag.0
reti
start
mov !ra, #255 ;setează ra la intrare
mov !rb,#0 ;setează rb la iesire
clr rb ;şterge portul rb
mov dummy,#255
mov intcon,#0 ;opreşte întreruperea
mov adcon0,#AD_ctl ;setează ceasul şi canalul AD
setb rp0 ;nu înregistrează pagina 1
mov adcon1,#AD_ref ;setează pinii utilizabili. Vref
mov option,#00001000b ;WDT pornit
clrb rp0 ;înapoi să înregistreze pagina 0.
setb adon ;aplică tensiune la ADC
setb go_done ;începe conversia
not_done
snb go_done ;optează pentru 0
jmp not_done ;dacă 1, optează din nou.
mov counter2,adres ;mută rezultatele ADC în contor
mov integer1,#3 ;offset constant.
mov integer2,#5 ;multiplicator ADC
setb servo0 ;semnalul de ieşire la servo0
call delay
clrb servo0
call pause ;setarea întârzierii ADC
clrb rp0 ;asigură înregistrarea paginii 0
clrb chs1 ;selectează canalul 1
setb chs0
mov dummy,#255 ;reîncarcă variabila aparentă
clrb adres
setb go_done ;începe conversia
not_done1
snb go_done ;optează pentru 0
jmp not_done1 ;dacă 1, optează din nou.
mov counter2,adres ;mută rezultatele ADC în contor
mov integer1,#3 ;offset constant.
mov integer2,#5 ;multiplicator ADC
setb servo1 ;impulsul de ieşire la servo1
call delay
clrb servo1
call pause
clrb rp0 ;asigură înregistrarea paginii 0
setb chs1 ;selectează canalul 2
clrb chs0
mov dummy,#255 ;reîncarcă variabila aparentă
clr adres
setb go_done ;începe conversia
not_done2
snb go_done ;optează pentru 0
jmp not_done2 ;dacă 1, optează din nou.
mov counter2,adres ;mută rezultatele ADC în contor
mov integer1,#3 ;offset constant.
mov integer2,#5 ;multiplicator ADC
setb servo2 ;impulsul de ieşire la servo2
call delay
clrb servo2
call pause
clrb rp0 ;asigură înregistrarea paginii 0
setb chs1 ;selectează canalul 3
setb chs0
mov dummy,#255
clr adres
setb go_done ;începe conversia
not_done3
snb go_done ;optează pentru 0
jmp not_done3 ;dacă 1, optează din nou.
mov counter2,adres ;mută rezultatele ADC in contor
mov integer1,#3 ;offset constant.
mov integer2,#5 ;multiplicator ADC
setb servo3 ;impulsul de ieşire la servo3
call delay
clrb servo3
sleep
jmp start ;timpul expiră după 18 msec
;Numărul buclelor pe care le face această rutină de întârziere este dependent de rezultatul ;conversiei AD. Cu cât este mai mare tensiunea, cu atât întârzierea este mai lungă.
delay clrb rp0 ;pagina 0
mov intcon,#10100000 ;activează RTCC
;*********************Partea fixă a întârzierii rutinei********************
delay1 mov RTCC,#55 ;intârzierea fixă
wait1 jnb flag.0,wait1 ;
clrb flag.0 ;flag setat pe întrerupere
djnz integer1,delay1 ;trece de trei ori prin ea
;*********************Partea variabilă a întîrzierii rutinei********************
sub dummy,counter2 ;RTCC contorizează
load mov RTCC,dummy ;încarcă RTCC
wait2 jnb flag.0,wait2 ;buclă infinită
clrb flag.0
djnz integer2,load;trece de cinci ori
mov intcon,#0 ;dezactivează întreruperea
ret
pause mov counter1,#120
settle djnz counter1,setlle ;timpul pentru ADC
ret
*************************************
*
www.microchip.com
ftp://ftp.futureone.com/pub/microchip/
http://kitsrus.com/back.html#pic
http://dontronics.com
Chandler Arizona – 1.02.2001
Microchip Technology Inc. realizează microcontrolere RISC programabile care sunt folosite în controlul aplicaţiilor pe 8 sau 16 biţi şi dispozitive care includ management termic, management al sistemului de alimentare. De asemenea, compania oferă echipamente microperiferice complementare: echipamente microID™RFID, interfaţă serială pentru memorie EEPROM, dispozitive de securitate KEELOQ®. Această paletă largă de produse vizează miile de aplicaţii şi cererea din ce în ce mai mare de echipamente de înaltă performanţă din domeniul construcţiei de automobile, sistemelor de comunicaţii, calculatoare şi sisteme de control industriale.
Produsele Microchip sunt certificate ISO 9001 şi QS9000.
Sediul companiei este în Chandler Arizona şi are reprezentanţe în Europa, Asia şi America de Sud.
Informaţii suplimentare despre Microchip Technology Inc. puteţi găsi la adresa www.microchip.com
Chandler Arizona – 22.01.2001
Microchip Technology Inc. lansează a şasea ediţie a catalogului “Third party guide” ce prezintă familia de microcontrolere coprocesoare PIC, memorii EEPROM şi gama de produse periferice Microchip.
Ediţia 2001 prezintă un număr impresionant de companii care realizează accesorii, asambloare, compilatoare, sisteme de operare în timp real, emulatoare, simulatoare şi software pe baza microcontrolerelor cu procesoare PIC ale firmei Microchip.
Cele mai cunoscute companii menţionate în catalog sunt: Advanced Transdata, BP Microsystems, Data I/O, HI-TECH Software, Diversified Engineering, IAR Systems, Logical Devices Inc, PROCHIPS Inc, Realogy,
RF Solutions Ltd, System General Corporation, TechTool,
Vector Informatic GmbH.
Adiţional, catalogul conţine un capitol prin care asigură consultanţă şi asistenţă de specialitate pentru produsele Microchip.
Catalogul este disponibil on-line la adresa www.microchip.com