- Was ist ein Servomotor?
- Verbindung von Servomotoren mit Mikrocontrollern:
- Programmieren eines Servomotors mit PICF877A PIC-Mikrocontroller:
- Schaltplan:
- Simulation und Hardware-Setup:
Dies ist unser 11. Tutorial zum Erlernen von PIC-Mikrocontrollern mit MPLAB und XC8. In diesem Tutorial lernen wir, wie man einen Servomotor mit einem PIC-Mikrocontroller steuert. Wenn Sie bereits mit Servomotoren gearbeitet haben, können Sie die erste Hälfte dieses Tutorials überspringen. Wenn Sie mit dem Servomotor selbst noch nicht vertraut sind, lesen Sie weiter.
Bis jetzt haben wir viele grundlegende Tutorials behandelt, wie z. B. LED-Blinken mit PIC, Timer in PIC, LCD-Schnittstelle, 7-Segment-Schnittstelle, ADC mit PIC usw. Wenn Sie ein absoluter Anfänger sind, besuchen Sie bitte die vollständige Liste der PIC-Tutorials hier und Fang an zu lernen.
In unserem vorherigen Tutorial haben wir gelernt, wie PWM-Signale mit dem PIC-Mikrocontroller erzeugt werden. Die Signale wurden basierend auf dem vom Potentiometer abgelesenen Wert erzeugt. Wenn Sie dann alle Programme verstanden haben, herzlichen Glückwunsch, Sie haben auch bereits für einen Servomotor codiert. JA, Servomotoren reagieren auf die PWM-Signale (die wir hier mit Timern erstellen). In diesem Tutorial erfahren Sie, warum und wie. Wir werden das Hardware-Setup für dieses Projekt simulieren und erstellen. Das detaillierte Video finden Sie am Ende dieses Tutorials.
Was ist ein Servomotor?
Ein Servomotor ist eine Art Aktuator (meistens kreisförmig), der eine Winkelsteuerung ermöglicht. Es gibt viele Arten von Servomotoren, aber in diesem Tutorial konzentrieren wir uns auf die unten gezeigten Hobby-Servomotoren.
Hobby-Servos sind beliebt, weil sie die kostengünstige Methode der Bewegungssteuerung sind. Sie bieten eine Standardlösung für die meisten Anforderungen von R / C- und Roboter-Hobbyisten. Sie machen es auch überflüssig, für jede Anwendung ein individuelles Steuerungssystem zu entwerfen.
Die meisten Hobby- Servomotoren haben einen Drehwinkel von 0 bis 180 °, aber Sie können bei Interesse auch einen 360 ° -Servomotor erhalten. Dieses Tutorial verwendet einen 0-180 ° -Servomotor. Es gibt zwei Arten von Servomotoren, die auf dem Getriebe basieren, einer ist der Kunststoffgetriebeservomotor und der andere ist der Metallgetriebeservomotor. Metallgetriebe werden an Orten eingesetzt, an denen der Motor stärkerem Verschleiß ausgesetzt ist, jedoch nur zu einem hohen Preis.
Servomotoren haben eine Nennleistung in kg / cm (Kilogramm pro Zentimeter). Die meisten Hobby-Servomotoren haben eine Nennleistung von 3 kg / cm oder 6 kg / cm oder 12 kg / cm. Dieses kg / cm gibt an, wie viel Gewicht Ihr Servomotor in einer bestimmten Entfernung heben kann. Beispiel: Ein Servomotor mit 6 kg / cm sollte 6 kg heben können, wenn die Last 1 cm von der Motorwelle entfernt aufgehängt ist. Je größer der Abstand, desto geringer die Tragfähigkeit. Erfahren Sie hier die Grundlagen des Servomotors.
Verbindung von Servomotoren mit Mikrocontrollern:
Die Verbindung von Hobby-Servomotoren mit der MCU ist sehr einfach. Servos haben drei Drähte. Davon werden zwei für die Versorgung verwendet (positiv und negativ) und einer für das Signal, das von der MCU gesendet werden soll. In diesem Tutorial verwenden wir einen MG995 Metal Gear Servo Motor, der am häufigsten für humanoide Bots von RC-Cars usw. verwendet wird. Das Bild von MG995 ist unten dargestellt:
Die Farbcodierung Ihres Servomotors kann abweichen. Überprüfen Sie daher das jeweilige Datenblatt.
Alle Servomotoren arbeiten direkt mit Ihren + 5V-Versorgungsschienen, aber wir müssen vorsichtig sein, wie viel Strom der Motor verbrauchen würde. Wenn Sie mehr als zwei Servomotoren verwenden möchten, sollte ein geeigneter Servoschutz entworfen werden. In diesem Tutorial verwenden wir einfach einen Servomotor, um zu zeigen, wie unsere PIC-MCU zur Steuerung des Motors programmiert wird. Überprüfen Sie die folgenden Links, um den Servomotor mit einem anderen Mikrocontroller zu verbinden:
- Servomotor mit 8051 Mikrocontroller
- Servomotorsteuerung mit Arduino
- Raspberry Pi Servomotor Tutorial
- Servomotor mit AVR-Mikrocontroller
Programmieren eines Servomotors mit PICF877A PIC-Mikrocontroller:
Bevor wir mit der Programmierung für den Servomotor beginnen können, sollten wir wissen, welche Art von Signal zur Steuerung des Servomotors gesendet werden soll. Wir sollten die MCU so programmieren, dass PWM-Signale an das Signalkabel des Servomotors gesendet werden. Im Servomotor befindet sich eine Steuerschaltung, die den Arbeitszyklus des PWM-Signals liest und die Welle der Servomotoren an der entsprechenden Stelle positioniert, wie in der folgenden Abbildung gezeigt
Jeder Servomotor arbeitet mit einer anderen PWM-Frequenz (die häufigste Frequenz ist 50 Hz, die in diesem Lernprogramm verwendet wird). Überprüfen Sie daher anhand des Datenblattes Ihres Motors, auf welcher PWM-Periode Ihr Servomotor arbeitet.
Die Details zum PWM-Signal für unseren Tower pro MG995 sind unten aufgeführt.
Daraus können wir schließen, dass unser Motor mit einer PWM-Periode von 20 ms (50 Hz) arbeitet. Daher sollte die Frequenz unseres PWM-Signals auf 50 Hz eingestellt werden. Die Frequenz der PWM, die wir in unserem vorherigen Tutorial eingestellt hatten, betrug 5 kHz. Die Verwendung derselben Frequenz hilft uns hier nicht weiter.
Aber wir haben hier ein Problem. Der PIC16F877A kann mit dem CCP-Modul keine niederfrequenten PWM-Signale erzeugen. Laut Datenblatt beträgt der niedrigstmögliche Wert, der für die PWM-Frequenz eingestellt werden kann, 1,2 kHz. Wir müssen also die Idee der Verwendung des CCP-Moduls fallen lassen und einen Weg finden, unsere eigenen PWM-Signale zu erzeugen.
Daher werden wir in diesem Tutorial das Timer-Modul verwenden, um die PWM-Signale mit einer Frequenz von 50 Hz zu erzeugen und ihren Arbeitszyklus zu variieren, um den Winkel des Servomotors zu steuern. Wenn Sie mit Timern oder ADC mit PIC noch nicht vertraut sind, greifen Sie bitte auf dieses Tutorial zurück, da ich die meisten Dinge überspringen werde, da wir sie dort bereits behandelt haben.
Wir initialisieren unser Timer-Modul mit einem Prescaler von 32 und lassen es für jede 1us überlaufen. Laut unserem Datenblatt sollte die PWM nur eine Dauer von 20 ms haben. Unsere Ein- und Auszeit sollten also genau 20 ms betragen.
OPTION_REG = 0b00000100; // Timer0 mit externer Frequenz und 32 als Prescaler TMR0 = 251; // Lade den Zeitwert für 1us delayValue kann zwischen 0-256 liegen. Nur TMR0IE = 1; // Timer-Interrupt-Bit im PIE1-Register aktivieren GIE = 1; // Global Interrupt aktivieren PEIE = 1; // Peripheral Interrupt aktivieren
In unserer Interrupt-Routinefunktion schalten wir den Pin RB0 für die angegebene Zeit ein und für die Reibzeit (20 ms - on_time) aus. Der Wert der Einschaltzeit kann mithilfe des Potentiometers und des ADC-Moduls festgelegt werden. Der Interrupt ist unten dargestellt.
oid Interrupt timer_isr () {if (TMR0IF == 1) // Timer ist übergelaufen {TMR0 = 252; / * Laden Sie den Timer-Wert. (Hinweis: Timervalue ist 101 von 100 instaed, da der TImer0 zwei Anweisungszyklen benötigt, um die Inkrementierung von TMR0 zu starten. * / TMR0IF = 0; // Timer-Interrupt-Flag-Anzahl löschen ++;} if (count> = on_time) { RB0 = 1; // den Wert für das Blinken der LEDs ergänzen} if (count> = (on_time + (200-on_time))) {RB0 = 0; count = 0;}}
In unserer while- Schleife lesen wir einfach den Wert des Potentiometers mithilfe des ADC-Moduls und aktualisieren die Einschaltzeit der PWM mithilfe des Lesewerts.
während (1) {pot_value = (ADC_Read (4)) * 0,039; on_time = (170-pot_value); }}
Auf diese Weise haben wir ein PWM-Signal mit einer Periode von 20 ms und einem variablen Arbeitszyklus erstellt, das mit einem Potentiometer eingestellt werden kann. Der vollständige Code wurde unten im Codeabschnitt angegeben.
Lassen Sie uns nun die Ausgabe mithilfe der Proteus-Simulation überprüfen und mit unserer Hardware fortfahren.
Schaltplan:
Wenn Sie bereits auf das PWM-Tutorial gestoßen sind, sind die Schaltpläne dieses Tutorials identisch, außer dass wir anstelle des LED-Lichts einen Servomotor hinzufügen.
Simulation und Hardware-Setup:
Mit Hilfe der Proteus-Simulation können wir das PWM-Signal mit einem Oszilloskop überprüfen und auch den Drehwinkel des Servomotors überprüfen. Im Folgenden sind einige Schnappschüsse der Simulation dargestellt, bei denen festgestellt werden kann, dass sich der Drehwinkel des Servomotors und das PWM-Tastverhältnis basierend auf dem Potentiometer ändern. Überprüfen Sie am Ende das vollständige Video der Rotation bei verschiedenen PWM.
Wie wir sehen können, ändert sich der Servo-Rotationswinkel basierend auf dem Potentiometerwert. Fahren wir nun mit unserem Hardware-Setup fort.
Im Hardware-Setup haben wir gerade die LED-Platine entfernt und den Servomotor hinzugefügt, wie in den obigen Schaltplänen gezeigt.
Die Hardware ist im Bild unten dargestellt:
Das folgende Video zeigt, wie der Servomotor auf die verschiedenen Positionen des Potentiometers reagiert.
Das ist es!! Wir haben einen Servomotor mit einem PIC-Mikrocontroller verbunden. Jetzt können Sie Ihre eigene Kreativität einsetzen und Anwendungen dafür finden. Es gibt viele Projekte, die einen Servomotor verwenden.