Servomotoren sind sehr nützlich in der Elektronik und in eingebetteten Systemen. Sie können die Verwendung von Servomotoren überall um Sie herum finden, sie werden in Spielzeug, Robotern, CD-Fach von Computern, Autos, Flugzeugen usw. verwendet. Der Grund für dieses breite Spektrum ist, dass Servomotoren sehr zuverlässig und präzise sind. Wir können es in einen bestimmten Winkel drehen. Sie sind in einem weiten Bereich erhältlich und reichen von Motoren mit hohem Drehmoment bis zu Motoren mit niedrigem Drehmoment. In diesem Tutorial werden wir einen Servomotor an den 8051-Mikrocontroller (AT89S52) anschließen.
Zuerst müssen wir das Funktionsprinzip von Servomotoren verstehen. Der Servomotor arbeitet nach dem PWM-Prinzip (Pulse Width Modulation), dh sein Drehwinkel wird durch die Dauer des an seine Steuer-PIN angelegten Impulses gesteuert. Grundsätzlich besteht der Servomotor aus einem Gleichstrommotor, der von einem variablen Widerstand (Potentiometer) und einigen Zahnrädern gesteuert wird. Die Hochgeschwindigkeitskraft des Gleichstrommotors wird von Zahnrädern in Drehmoment umgewandelt. Wir wissen, dass WORK = FORCE X DISTANCE ist, im Gleichstrommotor ist die Kraft geringer und die Entfernung (Geschwindigkeit) hoch und im Servo ist die Kraft hoch und die Entfernung ist geringer. Das Potentiometer ist mit der Abtriebswelle des Servos verbunden, um den Winkel zu berechnen und den Gleichstrommotor im erforderlichen Winkel anzuhalten.
Der Servomotor kann von 0 bis 180 Grad gedreht werden, je nach Hersteller jedoch bis zu 210 Grad. Dieser Rotationsgrad kann durch Anlegen eines LOGIC Level 1-Impulses für eine Dauer zwischen 1 ms und 2 ms gesteuert werden. Ein 1 ms kann das Servo um 0 Grad drehen, 1,5 ms können sich um 90 Grad drehen und ein 2 ms Impuls kann es um 180 Grad drehen. Eine Dauer zwischen 1 und 2 ms kann den Servomotor in einen beliebigen Winkel zwischen 0 und 180 Grad drehen.
Schaltplan und Arbeitserklärung
Der Servomotor hat drei Drähte Rot für Vcc (Stromversorgung), Braun für Masse und Orange ist Steuerkabel. Das Steuerkabel kann an 8051 angeschlossen werden. Wir haben es an Pin 2.1 von 8051 angeschlossen. Jetzt müssen wir diesen Pin 1 ms lang an Logik 1 halten, um ihn um 0 Grad, 1,5 ms für 90 Grad und 2 ms für 180 Grad zu drehen. Wir haben On-Chip-Timer von 8051 verwendet, um Verzögerungen zu erzeugen. Wir haben eine Verzögerung von 50us durch die Funktion "servo_delay" erzeugt und die "for" -Schleife verwendet, um eine Verzögerung in einem Vielfachen von 50us zu erzeugen.
Wir verwenden Timer 0 und im Modus 1, also haben wir 01H in das TMOD-Register eingetragen. Modus 1 ist der 16-Bit-Timer-Modus und TH0 enthält High-Byte und TL0 enthält Low-Byte des 16-Bit-Timers. Wir haben FFD2 in das 16-Bit-Timer-Register, FF in TH0 und D2 in TL0 gelegt. Durch Setzen von FFD2 wird eine Verzögerung von ca. 50 us mit dem Kristall von 11.0592MHz. TR0 und TF0 sind die Bits des TCON-Registers, des TR-Pins, der zum Starten des Timers beim Setzen und zum Stoppen beim Zurücksetzen (0) verwendet wird. TF ist ein Überlauf-Flag, das bei Überlauf von der Hardware gesetzt wird und von der Software zurückgesetzt werden muss. Grundsätzlich teilt TF den Abschluss des Timers mit und wird von der Hardware eingestellt, wenn 16 Timer von FFFFH nach 0000H übertragen werden. Sie können über die „8051 Timer“ lesen, um die Berechnung des Werts in Timer-Registern zu verstehen und die Verzögerung von 50 us zu erzeugen.
Wenn nun vom CRO aus gemessen wird, ergeben 13 Schleifen der Funktion servo_delay die Verzögerung von 1 ms. Wir haben also von 1 ms (13 Schleifen) begonnen und sind auf 2 ms (26 Schleifen) gegangen, um den Servo von 0 auf 180 Grad zu drehen. Aber wir haben die Verzögerung langsam von 1 ms erhöht, wir haben das Fenster von 1 ms bis 2 ms in 7 Teile wie 1,14 ms, 1,28 ms, 1,42 ms usw. unterteilt, sodass sich das Servo in einem Vielfachen von ca. 26 Grad (180/7). Nach 180 kehrt es automatisch auf 0 Grad zurück.