Inhaltsverzeichnis:
2025 Autor: John Day | [email protected]. Zuletzt bearbeitet: 2025-01-23 12:52
Hallo nochmal Freunde:) Also, in diesem Projekt werden wir einen Servomotor mit STM32F4 ARM MCU steuern. In meinem Fall werde ich Discovery Board verwenden, aber wenn Sie das Wesentliche des Problems verstehen, können Sie es für jede MCU anwenden. So. Lass uns anfangen:)
Schritt 1: Hardware- und Softwareanforderungen
Als Hardware benötigen wir:
- Eine MCU, die in meinem Fall ein STM32f4-Discovery-Board ist
- Ein üblicher Servomotor, wie SG90 oder ein anderer
Als Software benötigen wir:
- STM32CubeMX
- Keil uVision
Wenn Sie all dies haben, springen Sie zum nächsten Schritt:)
Schritt 2: STM32CubeMX-Konfiguration
Wie Sie wissen, benötigen wir zur Steuerung eines Servomotors ein PWM-Signal. Die Anforderungen an das PWM-Signal sind wie folgt:
- PWM-Periode muss 20 mS. betragen
- Die Einschaltzeit muss zwischen 0,5 mS und 2,5 mS liegen. Wenn die Einschaltzeit 0,5 mS beträgt, dreht sich das Servo um 0 Grad, 1,5 mS für 90 Grad und 2,5 mS für 180 Grad.
Wir müssen also PWM konfigurieren und verwenden zu diesem Zweck Timer1.
- Wählen Sie zuerst TIM1 aus dem Abschnitt Timer. Dieser Schritt
-
Dann aus dem Modus-Abschnitt
- Wählen Sie die interne Uhr Dieser Schritt
- PWM-Generierung CH1 Dieser Schritt
-
Dann aus dem Abschnitt Konfiguration
- Prescaler auf 160 setzen Dieser Schritt
- Zählerperiode auf 2000 setzen Dieser Schritt
- Puls auf 50 setzen Dieser Schritt
- Außerdem können Sie in der Taktkonfiguration die Takte des APB1-Timers auf 16 MHz einstellen. Dieser Schritt
Lassen Sie uns nun ein wenig über diesen Schritt sprechen:
Die Frequenz unserer APB1 Timer-Uhr beträgt 16 MHz. Das bedeutet also, dass 16.000.000 Ticks erforderlich sind, um 1 Sekunde zu erhalten. Allerdings haben wir unseren Prescaler auf 160 gesetzt. Das heißt, wir teilen unsere Frequenz durch diese Zahl und reduzieren die Anzahl der Ticks auf 100.000. Für 1 Sekunde brauchen wir also 100.000 Ticks. Wir benötigen jedoch, wie bereits erwähnt, 20 ms PWM-Periode. Nach einfacher Mathematik brauchen wir also 2000 Ticks für 20 mS. Indem wir Counter Period auf 2000 setzen, bestimmen wir die Periode des PWM-Signals, die 20 ms beträgt. Jetzt müssen wir die Tick-Nummer bestimmen, um die Einschaltzeiten von 0,5 mS bis 2,5 mS zu erreichen. Wir können diese Gleichung aus einfacher Mathematik erhalten und sie lautet:
On_Time = (Tick_Number / 100). Beachten Sie, dass dies die on_time ist, die den Winkel des Servomotors ändert. Also, unter dem Bild fasse ich diesen Schritt zusammen. Wenn Sie Fragen haben, schreiben Sie in die Kommentare und ich werde so schnell wie möglich antworten.
Bild der Berechnungen
Nachdem Sie all dies getan haben, generieren Sie Code:)
Schritt 3: Keil UVision-Codierung
Also, lassen Sie uns zuerst bestimmen, was wir tun wollen? Wir wollen eine Funktion schreiben, die Grad akzeptiert und in das Servo schreiben. Also, wie werden wir das machen? Wie bereits erwähnt, müssen wir die Pünktlichkeit ändern, um den Winkel zu ändern. Unsere Winkel ändern sich zwischen [0, 180] und unsere Anzahl der Ticks, die die Zeitänderungen bestimmt, zwischen [50, 250]. Wir brauchen also eine Abbildungsfunktion, die den gegebenen Winkel auf den Bereich der Anzahl von Ticks abbildet. Zum Beispiel für 0 Grad 50 Ticks, für 180 Grad 250 Ticks usw. Schreiben wir also unsere Mapping-Funktion:
int map(int st1, int fn1, int st2, int fn2, int value){ return (1.0*(value-st1))/(((fn1-st1)*1.0) * (fn2-st2)+st2; }
Dies ist unsere Mapping-Funktion. Interessiert Sie, wie es abgeleitet wird? Dann lies das. Wir nehmen also unsere Reichweiten und den Wert, den wir abbilden möchten.
Lassen Sie uns nun eine Funktion schreiben, die den Winkel akzeptiert und ihn dem Bereich der Ticks zuordnet:
void servo_write (int angle) {htim1. Instance->CCR1 = map (0, 180, 50, 250, angle); }
Wie Sie sehen, akzeptiert dieser Code Winkel und ordnet ihn dem Bereich der Anzahl von Ticks zu. Anschließend wird die Anzahl der Ticks an das CCR1-Register übergeben, das die Einschaltzeit und damit den Winkel steuert.
Damit all dies funktioniert, starten wir jedoch zuerst das pwm, was mit nur einer Codezeile erledigt werden kann:
HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1);
Wir haben also eine Funktion, die Winkel akzeptiert und in das Servo schreibt. Lassen Sie es uns testen und unsere Sweep-Funktion schreiben, die sehr einfach ist:
Void servo_sweep (void) { for (int i = 0; i <= 180; i ++) {servo_write (i); HAL_Delay(10); } for(int i = 180; i>= 0; i--) {servo_write (i); HAL_Delay(10); } }
Also zähle einfach bis 180 hoch und dann runter bis 0 und schreibe diese Werte in das Servo:) Also, lass uns das Ergebnis sehen!
Schritt 4: Das Ergebnis:)
Das ist also das Ende. Wenn Sie Fragen haben, fragen Sie bitte. Gerne beantworte ich sie. Vielen Dank fürs Lesen und hoffe, ich sehe Sie im nächsten Projekt:)
Empfohlen:
Heimwerken -- Einen Spinnenroboter herstellen, der mit einem Smartphone mit Arduino Uno gesteuert werden kann – wikiHow
Heimwerken || Wie man einen Spider-Roboter herstellt, der mit einem Smartphone mit Arduino Uno gesteuert werden kann: Während man einen Spider-Roboter baut, kann man so viele Dinge über Robotik lernen. Wie die Herstellung von Robotern ist sowohl unterhaltsam als auch herausfordernd. In diesem Video zeigen wir Ihnen, wie Sie einen Spider-Roboter bauen, den wir mit unserem Smartphone (Androi
Bewegungsaktivierte Cosplay Wings mit Circuit Playground Express - Teil 1: 7 Schritte (mit Bildern)
Bewegungsaktivierte Cosplay-Flügel mit Circuit Playground Express - Teil 1: Dies ist Teil 1 eines zweiteiligen Projekts, in dem ich Ihnen meinen Prozess zur Herstellung eines Paars automatisierter Feenflügel zeige. Der erste Teil des Projekts ist der Mechanik der Flügel, und der zweite Teil macht es tragbar und fügt die Flügel hinzu
Raspberry Pi mit Node.js mit der Cloud verbinden – wikiHow
So verbinden Sie Raspberry Pi mit Node.js mit der Cloud: Dieses Tutorial ist nützlich für alle, die einen Raspberry Pi mit Node.js mit der Cloud, insbesondere mit der AskSensors IoT-Plattform, verbinden möchten. Sie haben keinen Raspberry Pi? Wenn Sie derzeit keinen Raspberry Pi besitzen, empfehle ich Ihnen, sich einen Raspberry Pi zuzulegen
Steuern von Haushaltsgeräten mit Node-MCU und Google Assistant - IOT - Blynk - IFTTT: 8 Schritte
Steuern von Haushaltsgeräten mit Node-MCU und Google Assistant | IOT | Blynk | IFTTT: Ein einfaches Projekt zur Steuerung von Geräten mit Google Assistant: Warnung: Der Umgang mit Netzstrom kann gefährlich sein. Mit äußerster Sorgfalt behandeln. Stellen Sie einen professionellen Elektriker ein, während Sie mit offenen Stromkreisen arbeiten. Ich übernehme keine Verantwortung für die da
Knoten-MCU mit 4-Port-Relaismodul, Blynk-App, IFTTT und Google Home. Gewinn?: 5 Schritte
Knoten-MCU mit 4-Port-Relaismodul, Blynk-App, IFTTT und Google Home. Profit?: In diesem Beitrag dreht sich alles darum, wie Sie Google Home mit NodeMCU und der blynk-App verbinden. Sie können Ihre Geräte mit einem einfachen blynk-gesteuerten NodeMCU-Schalter und Google Assistant steuern. Also los, Ok Google.. Schalten Sie das Ding ein