Jauniems elektronikos mėgėjams, norintiems užsiimti robotų, lėktuvų, laivų, automobilių modelių konstravimu, dažnai tenka susidurti su padavimo (servo) mechanizmų valdymu. Padavimo mechanizmas susideda iš nedidelio variklio, keleto krumpliaračių bei valdymo elektronikos, kurie sumontuoti nedidelėje dėžutėje (1 pav.). Tokie padavimo mechanizmai dažnai naudojami žaislinių automobilių priekinių ratų valdymui. Lėktuvų modeliuose jie naudojami kaip valdymo priemonė, keičianti skrydimo kryptį. Padavimo mechanizmai gali būti naudojami robotų kojų valdymui, taip suteikdami galimybę robotui vaikščioti ar atlikti kitokius veiksmus.
1 pav. Padavimo mechanizmo pavyzdys
Padavimo mechanizmas turi sukimosi ašį, prie kurios tvirtinamas laikiklis. Juo gali būti atliekami kokie nors veiksmai (2 pav.). Kaip matyti paveiksle, baltas plastiko laikiklis gali būti pasukamas 120o kampu. Dažniausiai padavimo mechanizmai gaminami mechaniniam judesiui, nereikalaujančiam apsisukimo 360o kampu, todėl iš karto gali būti nustatoma pradinė laikiklio padėtis, kuri yra valdoma per prijungiamuosius laidus.
2 pav. Padavimo mechanizmo veikimas (kairėje – padavimo mechanizmo būsena prieš pasisukimą, dešinėje – po pasisukimo)
Kaip pavyzdys padavimo mechanizmo valdymui panaudotas mikrovaldiklis „Attiny 13“. Tai mažas, pigus, bet galingas 8 kojų mikrovaldiklis, kurio viduje esančiu Timer/Counter įrenginiu realizuotas valdymas. Padavimo mechanizmai paprastai valdomi impulso pločio moduliacija (PWM).
3 pav. Bendra principinė elektrinė schema
3 paveiksle pateikta principinė elektrinė schema, kuriai sukonstruoti reikia labai nedaug detalių: kelių kondensatorių, varžos, potenciometro, jungčių, „Attiny“ mikrovaldiklio ir, žinoma, padavimo mechanizmo. Mikrovaldiklis programuojamas per SPI jungtį (SPI_PROG). Programa naudoja vidinį mikrovaldiklio Timer/Counter įrenginį Fast PWM režime. Tokiu būdu keičiamas impulso plotis nuo 100 us (pradinė būsena) iki 2,5 ms, tuo tarpu išlaikant 13 ms impulsų pasikartojimo dažnį, kas atitinka 75 Hz dažnį (4 pav.). Paprastai padavimo mechanizmai turi pasisukimo ribas, kurias bandant viršyti padavimo mechanizmas pradeda stipriai kaisti ir gali sugesti (atsiranda padavimo mechanizmo vibravimas), todėl geriau neviršyti padavimo mechanizmui skirto impulso pločio. Neturint padavimo mechanizmo aprašymo, galima eksperimentiškai parinkti minimalų ir maksimalų impulso plotį. Reikia turėti omenyje, kad impulsų pasikartojimų periodas negali būti bet koks. Šiuo atveju naudojamas 75 Hz dažnis, kurio ribose telpa 13 ms impulso plotis. Šiuo atveju, jei valdomų impulsų pasikartojimo periodas bus mažesnis nei 13 ms, tai nebus galima pasiekti padavimo mechanizmo maksimalaus pasisukimo. Padavimo mechanizmui valdyti galima sėkmingai naudoti ir 100 Hz pasikartojimo impulsus.
4 pav. Impulsai, kurie paduodami į padavimo mechanizmo valdomąjį įėjimą (75 Hz, 100,5 us atitinka pradinę servo mechanizmo būseną ir 2,546 ms impulso plotį)
Žemiau pateiktas programos kodas C kalba, rašytas IAR terpėje. Čia panaudotas ADC keitiklis, kuriame analoginis potenciometro signalas keičiamas į skaitmeninį. Keičiant potenciometro padėtį, jo centriniame gnybte gaunamos įtampos, kurios keitiklyje keičiamos skaičiais. Pastarasis skaičius įtakoja impulso plotį, verčia jį keistis. Toks impulsas paduotas į padavimo mechanizmą priverčia jį įgauti vis skirtingas pasisukimo reikšmes.
5 pav. Padavimo mechanizmo ir surinktos schemos pavyzdys
Kondensatorius C3 skirtas padavimo mechanizmo, kuris reaguoja į bet kokį impulso pločio pokytį, įtampos šuolių sumažinimui. Mikrovaldiklio ADC yra 10 bitų (1024 reikšmės), o OCR0A registras yra tik 8 bitų (256 reikšmės), todėl norint suderinti juos ir įvertinti maksimalią ribą 2,5 ms, vykdomas ADC 10 bitų skaičiaus sutalpinimas į 8 bitus atliekant paprasčiausią dalybą: OCR0A=(int)b/21. Kadangi duomenų skaitymas iš ADC registro ir impulso pločio reguliavimas vykdomas tol, kol yra maitinimo įtampa, todėl atsuktuvu keičiant potenciometro padėtį (5 pav.), galima reguliuoti padavimo mechanizmo pasisukimą.
#include <ioavr.h>
#include "ina90.h"
#include <intrinsics.h>
void main( )
{unsigned long b=0;
// Taimerio dalis
OCR0A=20; // Nustatomas pradinis impulso plotis 100 us
TCNT0=0;
TCCR0A=(1<<COM0A1)|(0<<COM0A0)|(1<<WGM02)|(1<<WGM01)
|(1<<WGM00);
TCCR0B=(0<<CS02)|( 1<<CS01)|(1<<CS00);
// ADC keitiklio dalis
ADMUX=(1<<REFS0)|(0<<ADLAR)|(1<<MUX1)|(1<<MUX0);
ADCSRA=(1<<ADEN)|(0<<ADSC)|(0<<ADATE)|(0<<ADPS2)
|(0<<ADPS1)|(0<<ADPS0);
DIDR0=1<<ADC3D;
DDRB=21; // Mikrovaldiklio išvado servo mechanizmui valdyti nustatymas į išėjimą
while(1) // Amžino ciklo pradžia
{ADCSRA=(1<<ADEN)|(1<<ADSC); // Paleidžiamas ADC keitiklis
//įtampai pakeisti į skaičių
b=ADCL+(ADCH<<8); //Suformuojamas vienas 10 bitų ADC žodis (skaičius)
if (b==0) b=1;
if ((int)b>20)
OCR0A=(int)b/21; // Vykdomas impulso pločio keitimas
__delay_cycles(50); // Vėlinimas, leidžiantis keisti impulso pločio keitimo greitį
}// Amžino ciklo pabaiga
}
Pastaba: programavimo ženklas << IARo terpėje veiks tik tada, jei bus aktyvuotas: Enable Bit definitions in I/O – Include files
Sukompiliuota programa: pwm.hex
PCB: pcb.pcb
Sėkmės bandymuose.
Reklama: weldingtech.net.