Share this

Diskussion über Schrittmotorsteuerungsmethoden basierend auf VC++

2026-02-21 12:53:48 · · #1
Ein Schrittmotor ist ein Motortyp, der elektrische Impulssignale in lineare oder Winkelbewegungen umwandelt. Die Ansteuerung von Schrittmotoren erfolgt jedoch üblicherweise in Assemblersprache oder C. Dieser Artikel zeigt anhand der Ansteuerung des Schrittmotorcontrollers SC3 und eines Translationstisches, wie die serielle Kommunikationsschnittstelle MSComm von Visual C++ 6.0 unter Windows genutzt werden kann, um die Datenkommunikation zwischen PC und Schrittmotorcontroller zu realisieren und schließlich die direkte Ansteuerung des Schrittmotors vom PC aus zu ermöglichen. Die grundlegenden Schritte und Methoden zur Erstellung des seriellen Kommunikationsprogramms werden detailliert beschrieben. Die Ergebnisse der Fehlersuche zeigen, dass das entwickelte Steuerungsprogramm einfach, verständlich und zuverlässig ist und eine benutzerfreundliche Mensch-Maschine-Schnittstelle bietet. Ein Schrittmotor ist ein elektromechanischer Digital-Analog-Wandler, der elektrische Impulse in Winkelbewegungen umwandelt. Er findet breite Anwendung in Steuerungssystemen. Die traditionelle Ansteuerung von Schrittmotoren erfolgt jedoch üblicherweise in Assemblersprache oder C. Diese Arbeit nutzt die serielle Kommunikationssteuerung MSComm von VC++, um die serielle Kommunikation zwischen einem PC und einer Schrittmotorsteuerung zu realisieren [1]. Im Gegensatz zu seriellen Kommunikationsprogrammen unter DOS erlaubt Windows Anwendungen nicht, Hardware direkt anzusteuern. Stattdessen werden Gerätetreiber des Windows-Betriebssystems zur Datenübertragung verwendet. Unter Win32 wird die serielle Schnittstelle als Datei behandelt und nicht direkt angesteuert. Für die serielle Kommunikation stellt Win32 entsprechende Datei-E/A- und Kommunikationsfunktionen bereit. Durch das Verständnis dieser Funktionen lassen sich Kommunikationsprogramme für unterschiedliche Anforderungen entwickeln. Es gibt im Allgemeinen drei Methoden zur Implementierung der seriellen Kommunikation [2][3]: die Verwendung der seriellen Kommunikationssteuerung MSComm von VC++ [4], die Implementierung einer benutzerdefinierten seriellen Kommunikationsklasse in einem einzelnen Thread und die Implementierung der seriellen Kommunikation in einer Multithread-Umgebung. In Anbetracht der praktischen Anwendung nutzt dieses System die serielle Kommunikationssteuerung MSComm von VC++ für die Softwareprogrammierung, wodurch die serielle Schnittstelle des Computers einfach verwaltet und gesteuert werden kann. 1. Systemaufbau Das System mit einem vom PC gesteuerten Schrittmotor ist in Abbildung 1 dargestellt. Abbildung 1: Blockdiagramm der PC-gesteuerten Schrittmotorsteuerung. Die Motorsteuerung dieses Systems nutzt die asynchrone Kommunikation über die serielle Schnittstelle RS-232 [5]. Da RS-232 ursprünglich als Standard zur Förderung der Datenkommunikation im öffentlichen Telefonnetz entwickelt wurde, ist sein Logikpegel symmetrisch zu Masse, was sich grundlegend von den Logikpegeln von TTL und MOS unterscheidet. Der Logikpegel 0 ist auf +5 bis +15 V und der Logikpegel 1 auf -5 bis -15 V spezifiziert. Daher muss der RS-232-Treiber auf TTL-Pegel umgestellt werden. 2. Technische Parameter der Steuerungssoftware und -hardware Dieses System verwendet den Schrittmotorcontroller SC3 und einen Translationstisch der Firma Zhuoli Hanguang Instrument Co., Ltd. zur dreidimensionalen Steuerung (x, y, z) des Translationstisches. Die Steuerung der Schrittmotorbewegung (Einzel- und Dauerbetrieb) erfolgt über eine serielle asynchrone RS-232-Schnittstelle. Die Positionsdaten des Motors werden zur Weiterverarbeitung an den PC zurückgemeldet. Die mechanischen Parameter des elektrischen Positioniertisches sind wie folgt: (1) Präzisions-Drehtisch: Modell RSA200 für die x-Achse. Drehbereich > ±40°; Übersetzungsverhältnis 180:1; kleinster Schritt 0,000 312 5°; Tischdurchmesser Φ200; Auflösung 0,001 25°; Wiederholgenauigkeit <0,005°; maximale Geschwindigkeit 25 U/s; maximale Traglast 60 kg. (2) Schwerlast-Positioniertisch: Modell TSA300B für die z-Achse. Minimaler Schrittabstand 0,003 15 mm; Wiederholgenauigkeit <0,005 mm; effektiver Hub des festen Positioniertisches: 150 mm. (3) Ultradünner elektrischer Translationstisch: Modell TSA30C, verwendet für die Y-Achse. Minimale Schrittweite 0,002 mm; Wiederholgenauigkeit <0,005 mm; effektiver Hub 30 mm. Der Schrittmotorcontroller SC3 verfügt über einen manuellen und einen gekoppelten Modus. Im manuellen Modus können folgende Operationen eingestellt werden: Geschwindigkeitseinstellung, Nullstellung, Richtungseinstellung, Positionseinstellung usw. Der gekoppelte Modus ermöglicht die direkte Steuerung der Motorbewegung durch die Anwendungssoftware. Da es sich um eine Weiterentwicklung handelt, muss die Anwendungssoftware die Steuerungsanweisungen und -protokolle des Originalcontrollers integrieren. Die wichtigsten Anweisungen dieses Steuerungssystems sind wie folgt: Kommunikationsanweisung: Format: "?R" & CHR$ (13). Innerhalb von 200 ms nach dem Senden der Anweisung antwortet SC3 mit "OK" & CHR$ (10) und signalisiert damit eine erfolgreiche Kommunikation. Abfrageanweisung: Format: "?V" & CHR$ (13). SC3 antwortet mit: "V Zahl" & CHR$ (10). Dabei ist Zahl der aktuelle Geschwindigkeitswert von SC3, dargestellt als ASCII-Code. Bereich: 0–255. Koordinatenabfrage-Befehlsformat: „?X“& CHR$ (13) oder „?Y“& CHR$ (13) oder „?Z“& CHR$ (13). SC3 antwortet mit: „X+Zahl“& CHR$ (10) oder „XZahl“& CHR$ (10) usw. für die anderen Achsen. Die Zahl ist der aktuelle Koordinatenwert von SC3 im ASCII-Code, und das positive oder negative Vorzeichen gibt die aktuelle Position relativ zur Einschaltposition (Position 0) an. Geschwindigkeitseinstellungs-Befehlsformat: „V“&Zahl& CHR$ (13). Die Zahl ist der Geschwindigkeitseinstellungswert im ASCII-Code. Bereich: 0–255. Nullstellungs-Befehlsformat: „HX“& CHR$ (13) oder „HY“& CHR$ (13) oder „HZ“& CHR$ (13). SC3 führt nach Empfang eines solchen Befehls eine Nullstellung durch. Nach Abschluss der Nullstellung sendet SC3 „OK“ & CHR$ (10) zurück und signalisiert damit den erfolgreichen Abschluss. Befehlsformat für die Nullstellungsabfrage: „?H“ & CHR$ (13). SC3 sendet daraufhin „H000“ & CHR$ (10) zurück. Die Bedeutung von 000 ist wie folgt: Erste Ziffer: 1 bedeutet, dass die z-Achse erfolgreich auf Null gesetzt wurde, 0 bedeutet, dass die z-Achse nicht auf Null gesetzt wurde. Zweite Ziffer: 1 bedeutet, dass die y-Achse erfolgreich auf Null gesetzt wurde, 0 bedeutet, dass die y-Achse nicht auf Null gesetzt wurde. Dritte Ziffer: 1 bedeutet, dass die x-Achse erfolgreich auf Null gesetzt wurde, 0 bedeutet, dass die x-Achse nicht auf Null gesetzt wurde. Das Format des Ausführungsbefehls lautet: "X Richtungsnummer" & CHR$ (13) oder "Y Richtungsnummer" & CHR$ (13) oder "Z Richtungsnummer" & CHR$ (13). 3. Softwareimplementierung 3.1 Verwendung des seriellen Kommunikationssteuerelements MSComm von VC++ zur Realisierung der seriellen Kommunikation. Erstellen Sie zunächst ein Kommunikationssteuerelement im Dialogfeld von VC++ [5]. Falls das Steuerelement in der Steuerelement-Symbolleiste fehlt, kann es über das Menü Projekt → Zum Projekt hinzufügen → Komponenten und Steuerelemente eingefügt werden. Ziehen Sie das Steuerelement anschließend aus der Symbolleiste in das Dialogfeld. Sie müssen sich nun lediglich um die Schnittstelle des Steuerelements zur API-Funktion des Windows-Kommunikationstreibers kümmern, d. h. Sie müssen nur die Eigenschaften und Ereignisse des MSComm-Steuerelements festlegen und überwachen. Definieren Sie im Klassenassistenten ein Memberobjekt (CMSComm m_Serial) für das neu erstellte Kommunikationssteuerelement. Über dieses Objekt können Sie die Eigenschaften des seriellen Ports festlegen. Das MSComm-Steuerelement verfügt über 27 Eigenschaften, darunter: Commport: Legt die Kommunikationsportnummer fest und gibt sie zurück (Standardwert: COM1). Settings: Legt Baudrate, Parität, Datenbits und Stoppbits als Zeichenkette fest und gibt sie zurück. PortOpen: Legt den Status des Kommunikationsports fest und gibt ihn zurück; der Port kann auch geöffnet und geschlossen werden. Input: Gibt Zeichen aus dem Empfangspuffer zurück oder entfernt sie. Output: Schreibt eine Zeichenkette in den Sendepuffer. InputLen: Legt die Anzahl der Zeichen fest, die bei jedem Aufruf von Input gelesen werden; der Standardwert ist 0, was bedeutet, dass der gesamte Inhalt des Empfangspuffers gelesen wird. InBufferCount: Gibt die Anzahl der im Empfangspuffer empfangenen Zeichen zurück; der Wert 0 leert den Empfangspuffer. InputMode: Definiert den Modus, in dem die Input-Eigenschaft Daten abruft (0: Textmodus; 1: Binärmodus). Die Eigenschaften RThreshold und SThreshold geben die Anzahl der Zeichen an, die im Empfangs- bzw. Sendepuffer empfangen werden können, bevor das OnComm-Ereignis eintritt. Im Folgenden finden Sie ein Beispiel für die Initialisierung eines seriellen Ports durch Festlegen von Steuerelementeigenschaften: Nach dem Öffnen des benötigten seriellen Ports muss das Timing der seriellen Kommunikation berücksichtigt werden. Während des Empfangens oder Sendens von Daten kann es erforderlich sein, Ereignisse und Fehler zu überwachen und darauf zu reagieren. Daher ist die ereignisgesteuerte Verarbeitung eine sehr effektive Methode zur Handhabung von Interaktionen mit dem seriellen Port. Verwenden Sie das Ereignis „OnComm“ und die Eigenschaft „CommEvent“, um die Werte von Kommunikationsereignissen und Fehlern zu erfassen und zu überprüfen. Wenn ein Kommunikationsereignis oder ein Fehler auftritt, wird das Ereignis „OnComm“ ausgelöst und der Wert der Eigenschaft „CommEvent“ geändert. Die Anwendung prüft den Wert der Eigenschaft „CommEvent“ und reagiert entsprechend. Fügen Sie im Programm mithilfe des Klassenassistenten die Funktion zur Verarbeitung der Nachricht „OnComm“ zum Steuerelement „CMSComm“ hinzu: 3.2 Systeminitialisierung Die Initialisierung muss vor der Ausführung der Anwendung durchgeführt werden. Das Ablaufdiagramm der Initialisierung ist in Abbildung 2 dargestellt. Abbildung 2: Ablaufdiagramm der Initialisierung. Beim Start des Programms wird die Initialisierungsfunktion „OnInitialUpdate()“ ausgeführt. Diese Funktion öffnet zunächst den seriellen Port 1 und konfiguriert die Kommunikationsparameter über die Memberfunktionen des Objekts m_ContrCom. Anschließend erscheint ein Dialogfeld zur Positionsauswahl; üblicherweise wird „Ausgangsposition beibehalten“ ausgewählt. Danach werden Befehle gesendet, um die Koordinatenwerte jeder Achse abzufragen. Dieser Prozess ist in Abbildung 2 dargestellt. Mit Ausnahme der x-Achse, die direkt Koordinatenabfragebefehle sendet, um Koordinatendaten zu erhalten, fragen die anderen beiden Achsen die Koordinaten über zwei aufeinanderfolgende Timer ab. Nach der Antwort der Timer wird das Programm in Abbildung 3 ausgeführt. Anschließend erscheint der Bedienbildschirm. 3.3 Programmierung des Betriebs: Geben Sie die Verschiebungs- und Geschwindigkeitswerte für eine bestimmte Achse in die Textfelder im Bereich „Motorbewegung“ ein. Drücken Sie die Schaltfläche „Starten“. Das Programm wandelt die Verschiebungswerte in ein Zeichen um, das die tatsächliche Anzahl der auszuführenden Schritte darstellt. Dieser Wert wird dann über den seriellen Port an den Schrittmotorcontroller SC3 gesendet, der die entsprechende Achse ansteuert, um die angegebene Anzahl von Schritten auszuführen. Nach der Ausführung sendet der SC3 ein „OK“-Zeichen an den seriellen Port zurück. Nach Empfang dieses Zeichens erkennt der PC das Ende des Motorbetriebs und sendet einen Koordinatenabfragebefehl an die serielle Schnittstelle. Der SC3 liefert die entsprechenden Koordinatendaten. Der PC empfängt, verarbeitet und zeigt diese Daten im Textfeld an. Damit ist ein Vorgang abgeschlossen. Alle wichtigen Datenkommunikationsprogramme zwischen PC und SC3-Steuerung sind in der MSComm-Steuerung enthalten. Dies umfasst den Empfang und die Erkennung der zurückgegebenen Zeichen sowie die Berechnung und Anzeige der Koordinaten für jede Achse. Nach Abschluss der Schrittmotorbewegung gibt der PC die Anzahl der vom Schrittmotor ausgeführten Schritte zurück. Um die entsprechenden Koordinaten anhand dieser Schrittzahl zu berechnen, muss der Impulsäquivalentwert jeder Achse bekannt sein. Bei jedem Schritt des Schrittmotors entspricht die Verschiebung des elektrischen Tisches dem Impulsäquivalentwert, d. h. der Auflösung. Koordinatenwert = Anfangskoordinaten + Anzahl der Schritte * Impulsäquivalentwert. Impulsäquivalentwert des Translationstisches = Steigung der Leitspindel (mm) * Schrittwinkel / (360 * Mikroschritte). Impulsäquivalent der Drehachse (x-Achse) (Grad) = Schrittwinkel des Schrittmotors / (Übersetzungsverhältnis * Mikroschritte). Die Mikroschritte werden über den DIP-Schalter auf der Rückseite des Controllers eingestellt. Der Schrittwinkel des Schrittmotors beträgt 1,8°, die Steigung der Gewindespindel der Längsachse 1 mm, die der Querachse 4 mm, das Übersetzungsverhältnis der Drehachse 180:1 und die Anzahl der Mikroschritte 2. Daher ergeben sich gemäß den obigen Formeln folgende Impulsäquivalente: Längsachse (z) = 1/100; Querachse (y) = 1/400; Drehachse (x) = 1/200. 4. Fazit: Die serielle Kommunikationssteuerung zwischen PC und Mikrocontroller ist in den letzten Jahren eine gängige und weit verbreitete Methode. Dieser Artikel stellt eine Anwendungssoftware vor, die mit der MSComm-Steuerung für die direkte PC-Steuerung von Schrittmotoren entwickelt wurde. Diese Software zeichnet sich durch eine benutzerfreundliche Oberfläche aus, ist einfach zu programmieren und zuverlässig, was sie zu einer praktischen und effektiven Methode macht. Darüber hinaus kann diese serielle Steuerungsmethode und -technologie auch in relevanten industriellen Steuerungsanwendungen eingesetzt werden.
Read next

Eine kurze Analyse der Verwendung von Drehzahlreglern mit variabler Frequenzumrichtertechnologie

Zusammenfassung: Dieser Artikel beschreibt kurz das Funktionsprinzip und die grundlegenden Leistungsmerkmale von Frequen...

Articles 2026-02-20