Comandă pentru servo-motor

by donpedro

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

S-ar putea să vă placă și