Servomotoren zijn erg handig in elektronica en embedded systemen. U kunt het gebruik van Servomotor overal om u heen vinden, ze worden gebruikt in speelgoed, robots, cd-lade van computer, auto's, vliegtuig enz. De reden van dit brede toepassingsgebied is dat de servomotor zeer betrouwbaar en nauwkeurig is. We kunnen het in een bepaalde hoek draaien. Ze zijn verkrijgbaar in een breed assortiment, van motoren met een hoog koppel tot motoren met een laag koppel. In deze tutorial gaan we een servomotor koppelen aan een 8051 microcontroller (AT89S52).
Eerst moeten we het werkingsprincipe van servomotoren begrijpen. Servomotor werkt volgens het PWM- principe (pulsbreedtemodulatie), wat betekent dat de rotatiehoek wordt bepaald door de duur van de toegepaste puls op de besturings-PIN. In wezen bestaat de servomotor uit een DC-motor die wordt bestuurd door een variabele weerstand (potentiometer) en enkele versnellingen. De hoge snelheid van de DC-motor wordt door Gears in koppel omgezet. We weten dat WERK = KRACHT X AFSTAND, in DC-motor is de kracht minder en is de afstand (snelheid) hoog en in Servo is de kracht hoog en is de afstand kleiner. Potentiometer is verbonden met de uitgaande as van de Servo, om de hoek te berekenen en de DC-motor op de gewenste hoek te stoppen.
Servomotor kan worden gedraaid van 0 tot 180 graden, maar kan, afhankelijk van de fabricage, tot 210 graden gaan. Deze mate van rotatie kan worden geregeld door een LOGIC niveau 1-puls toe te passen voor een duur tussen 1 ms en 2 ms. Een 1 ms kan de servo tot 0 graden draaien, 1,5 ms kan tot 90 graden draaien en een puls van 2 ms kan deze tot 180 graden draaien. Duur tussen 1 en 2 ms kan de servomotor in elke hoek tussen 0 en 180 graden draaien.
Schakelschema en werkuitleg
Servomotor heeft drie draden rood voor Vcc (voeding), bruin voor aarde en oranje is stuurdraad. Stuurdraad kan worden aangesloten op 8051, we hebben hem aangesloten op Pin 2.1 van 8051. Nu moeten we deze pin 1 ms op Logica 1 houden om hem 0 graden te draaien, 1,5 ms voor 90 graden, 2 ms voor 180 graden. We hebben chip Timers van 8051 gebruikt om vertraging te creëren. We hebben een vertraging van 50us gecreëerd via de functie "servo_delay", en de "for" -lus gebruikt om een vertraging in een veelvoud van 50us te creëren.
We gebruiken Timer 0 en in Mode 1, dus we hebben 01H in TMOD-register gezet. Modus 1 is de 16-bits timermodus en TH0 bevat een hoge byte en TL0 bevat een lage byte van een 16-bits timer. We hebben FFD2 in het 16 bit timerregister gezet, FF in TH0 en D2 in TL0. Als u FFD2 plaatst, wordt er een vertraging van ca. 50 ons met het kristal van 11.0592 MHz. TR0 en TF0 zijn de bits van het TCON-register, de TR-pin wordt gebruikt om de timer te starten wanneer deze is ingesteld en te stoppen wanneer deze is gereset (0). TF is een overloopvlag, ingesteld door hardware bij overloop en moet worden gereset door software. In feite vertelt TF de voltooiing van Timer en wordt deze door hardware ingesteld wanneer 16 timer-overgangen van FFFFH naar 0000H. U kunt lezen over de "8051 Timers" om de berekening van waarde in timersregisters te begrijpen, om de 50 us vertraging te creëren.
Nu gemeten vanaf CRO, zullen 13 lussen van de servo_delay-functie de vertraging van 1 ms geven, dus we zijn begonnen met 1 ms (13 lussen) en zijn gegaan naar 2 ms (26 lussen) om de servo van 0 naar 180 graden te draaien. Maar we hebben de vertraging langzaam opgevoerd van 1 ms, we hebben het venster van 1 ms tot 2 ms in 7 delen verdeeld, zoals 1,14 ms, 1,28 ms, 1,42 ms enzovoort, dus de servo zal in veelvoud van ca. 26 graden (180/7). Na 180 graden keert het automatisch terug naar 0 graden.