Share this

Eine einfache Motion-Control-Chip-Lösung auf SOPC-Basis

2026-02-21 12:30:17 · · #1
Zusammenfassung: Der SM1000 ist eine kostengünstige Lösung für die Bewegungssteuerung auf Chipebene und eine SOPC-Lösung. Er bietet programmierbare Zähl- und Impulsgenerierungsfunktionen mit bis zu 32 Bit und ist dadurch einfach und komfortabel für Kundenanwendungen zu handhaben. Er eignet sich für ein breites Spektrum allgemeiner Bewegungssteuerungsanwendungen. Schlüsselwörter: Bewegungssteuerung, Programmierbares Zählen, Impulsgenerierung, SOPC. Moderne Bewegungssteuerungen haben sich zu offenen Bewegungssteuerungen mit dedizierten anwendungsspezifischen integrierten Schaltungen (ASICs) oder FPGAs als Kernverarbeitungskomponenten weiterentwickelt. Ein Hauptmerkmal solcher Lösungen ist die unabhängige Hardware-Implementierung der Bewegungssteuerung, was die Systemleistung und -zuverlässigkeit erhöht. Dadurch werden die Probleme der Bandbreitenbeschränkungen reiner MCU- oder DSP-Systeme sowie die Komplexität der Anwender- und Bewegungssteuerungssoftware effektiv gelöst. Verschiedene Arten dedizierter Bewegungssteuerungschips sind in der Industrie seit Langem verfügbar. Obwohl sie hohe Funktionalität und Leistung bieten, sind sie in der Regel komplex und daher für Kunden schwer zu handhaben. Anwender benötigen häufig eine Systemlösung, die einen benutzerfreundlichen Motion-Control-Chip mit einem universellen Mikrocontroller/Prozessor für allgemeine oder Anwendungen im unteren bis mittleren Preissegment kombiniert. In dieser Lösung übernimmt der Motion-Control-Chip die wichtige Motorsteuerungssignalgenerierung und bietet gleichzeitig hohe Leistung sowie weitere Systemschnittstellen (Zähler wie der 8253/8254 wären aufgrund ihrer kurzen Zähldauer und des Mangels an anderen Ressourcen unzureichend). Der Mikrocontroller/Prozessor steuert die Motorbewegung über einfache Steuerbefehle, wodurch mehr Ressourcen für die Systemschnittstelle oder Anwendungssoftware zur Verfügung stehen. Kurz gesagt: Es wird eine Lösung benötigt, die die Arbeitsteilung zwischen Hardware und Software im Motion-Control-System effektiv koordiniert, die Kundenentwicklung in der Software erleichtert und die Systemleistung in der Hardware sicherstellt. Der SOPC-Motion-Control-Chip der SM1000-Serie von Shenzhen Smarteer Technology Development Co., Ltd. erfüllt diese Anforderungen. Nach der leistungsstarken Motion-Control-FPGA/Chip-Serie SM5000 wurde er nach kontinuierlicher Technologieentwicklung und Marktforschung speziell für Anwendungen im mittleren bis unteren Preissegment entwickelt. Die SM1000-Serie ist eine einfache Motion-Control-Chip-Serie mit bis zu 32-Bit programmierbaren Zähl- und Impulsgenerierungsfunktionen und Impulsfrequenzen von über 10 MHz. Zusätzlich verfügt der Chip über zahlreiche Systemressourcen, darunter einen integrierten 3-zu-8-Decoder, einen Adressspeicher, eine Matrix-Tastatur-Scanschnittstelle und universelle I/Os. Dank der SOPC-Technologie lässt sich der Chip an spezifische Kundenbedürfnisse anpassen. Die SM1000 ist benutzerfreundlich und eignet sich für ein breites Spektrum an allgemeinen Motion-Control-Anwendungen. In Kombination mit einem Mikrocontroller (MCU) oder einer CPU ermöglicht sie den einfachen Aufbau von Motion-Control-Systemen, insbesondere für Embedded-Systeme und Systemintegration. Die SM1000 eignet sich hervorragend für die unabhängige Ansteuerung von Mehrachsenmotoren und ermöglicht in Verbindung mit Steuerungssoftware die flexible Implementierung von Beschleunigungs- und Verzögerungssteuerungen sowie die Ansteuerung von Mehrachsen-Gelenkketten. Im Folgenden werden die technischen Merkmale und Anwendungsbereiche der SM1000-Serie vorgestellt. I. Technische Spezifikationen der SM1000-Chiplösung  Eingangstaktfrequenz CLK bis zu 78 MHz.  1–4 32-Bit-Zähler mit einem Zählbereich von 1 bis 2147483647.  1–4 32-Bit-Direktimpulsteiler mit einstellbarem Frequenzkoeffizientenbereich von 1 bis 2147483647.  1–4 Vorwärts-/Rückwärtsimpulsausgänge, die als Differenzausgänge konfiguriert werden können.  1–4 Vorwärts-/Rückwärtsimpulsausgangs-Gültigkeitsanzeigen, die als Differenzausgänge konfiguriert werden können.  Maximale Ausgangsimpulsfrequenz: CLK/64 (abweichend von SM1001)  Weitere Funktionen:  Eingebauter 3-zu-8-Decoder, der 7 zusätzliche Chip-Select-Signale ausgibt;  8 universelle Eingänge + 8 universelle Ausgänge;  Anschluss an ein 8x8-Matrix-Tastenfeld zum direkten Auslesen von Tastencodes/gültigen Werten möglich;  8-Bit-Datenschnittstelle (integrierter Adressspeicher, direkter Anschluss an eine MCS51-CPU möglich). II. Spezifikationen der SM1000-Serie III. Funktionsblockdiagramm SM1000 IV. Übersicht der Funktionspins V. Anwendungsbeispiele  Schrittmotorsteuerung  Textilmaschinen: Nähmaschinen/Stickmaschinen usw.  Roboterarme/-hände  Systeme zur räumlichen Koordinatenmessung/Positionierung  Kostengünstige Allzweck-Bewegungssteuerungen  Bohr- und Fräsmaschinen  Sonstige VI. Einführung in die Programmieranwendung A. CPU-Schnittstelle Dieser Chip verwendet eine universelle 8051 8-Bit-Adress-/Daten-Multiplexschnittstelle. Da der Chip über einen integrierten Adressspeicher verfügt, kann er direkt an den Adress-/Datenbus des 8051-Mikrocontrollers angeschlossen werden, ohne dass Adress- und Datenbus durch den Adressspeicher getrennt werden müssen. Zusätzlich besitzt der Chip einen integrierten 3-zu-8-Decoder, der sieben Chip-Select-Signale für die benutzerdefinierte Adressdekodierung ausgibt. Dies vereinfacht die Entwicklung von Anwendungssystemen auf Basis des 8051-Mikrocontrollers erheblich. Die gesamte Schnittstelle benötigt nur 14 Leitungen. Sie umfasst:  8 Adress-/Datenbusleitungen: AD0–7  3 Chip-Select-Leitungen: CS1–3  1 Adressspeicher-Aktivierungsleitung: ALE  1 Lese-Aktivierungsleitung: RD_n  1 Schreib-Aktivierungsleitung: WR_n. Die Ausgabe der sieben Chip-Select-Leitungen sowie die Adresszuordnung sind in Tabelle 2 dargestellt. B. Adresszuweisung C. Lese-/Schreibvorgänge der CPU Lese-/Schreibimpulszähler: Der Impulszählerwert kann direkt über Befehle geschrieben werden. Zum Lesen muss er jedoch zunächst mit einem Befehl zwischengespeichert und anschließend direkt ausgelesen werden, wie unten dargestellt. Format für Schreibvorgänge: a. (*Adresse) = Daten; Dabei gilt: Adresse = Basisadresse + 0 + nn*16 + mm; nn = (0~3) ist die Kanalnummer, mm = (0~3) ist die Byteadresse; Daten sind 8-Bit-Bytes. Format für Lesevorgänge: a) (*Zwischenspeicheradresse) = beliebige Daten; b) Variable = (*Leseadresse); Dabei gilt: Zwischenspeicheradresse = Basisadresse + 10 + nn * 16; nn = (0~3) ist die Kanalnummer, 10 ist die Zwischenspeicheradresse des Impulszählers; Die Zwischenspeicheradresse ist ein 8-Bit-Byte mit beliebigen Daten und hat keinen konkreten Wert. Leseadresse = Basisadresse + 0 + mm; mm = (0~3) ist die Byte-Adresse; Hinweis: Die Impulszählerlänge beträgt 32 Bit, und der gesamte Einstellungsbereich ist zulässig: 0x00000000~0xFFFFFFFF. Die tatsächliche Anzahl der Ausgabeimpulse ergibt sich aus der folgenden Formel: Anzahl der Impulse = (Impulszählerwert + 1) / 2; Wenn der Impulszählerwert den Maximalwert 0xFFFFFFFF hat, beträgt die maximal zulässige Anzahl an Impulsen 2147483648. Wenn der Impulszählerwert den Minimalwert 0x00000001 hat, beträgt die minimal zulässige Anzahl an Impulsen 1. Der Impulszählerwert muss ungerade sein; ist er gerade, ist die Breite des letzten Impulses sehr gering. Der Ausgabeimpuls ist eine Rechteckwelle mit der entsprechenden Frequenz. Schreiben der Impulsfrequenzdaten: Das Format zum Schreiben der Impulsfrequenzdaten ist: a) (*Adresse) = Daten; wobei: Adresse = Basisadresse + 4 + nn*16 + mm; nn = (0~3) ist die Kanalnummer, mm = (0~3) ist die Byteadresse; die Daten sind ein 8-Bit-Byte. Im 32-Bit-Fall: Die Länge des Pulsfrequenzwerts beträgt 32 Bit, und der zulässige Einstellbereich ist: 0x00000001~0xFFFFFFFF. Die tatsächliche Ausgangspulsfrequenz wird durch die folgende Formel gegeben: Wenn der Pulsfrequenzwert < 0x00800000: Pulsfrequenz = (Eingangstaktfrequenz / 2^28) * Pulsfrequenzwert; Wenn der Pulsfrequenzwert ≥ 0x00800000: Pulsfrequenz = (Eingangstaktfrequenz / (2^36 + 2^28) * Pulsfrequenzwert). 24-Bit-Fall: Die Länge des Pulsfrequenzwerts beträgt 24 Bit, und der zulässige Einstellbereich ist: 0x000001~0xFFFFFF. Die tatsächliche Ausgangspulsfrequenz wird durch die folgende Formel gegeben: Wenn der Pulsfrequenzwert < 0x00400000: Pulsfrequenz = (Eingangstaktfrequenz / 2^25) * Pulsfrequenzwert; Wenn der Pulsfrequenzwert ≥ 0x00400000: Pulsfrequenz = (Eingangstaktfrequenz / (2^33 + 2^25) * Pulsfrequenzwert. Start des Pulskanalbetriebs: Format für den Start des Pulskanalbetriebs: a, (*Adresse) = Daten; wobei: Adresse = Basisadresse + 8; Daten sind 8 Bit, die als Start-Enable-Flag verwendet werden, definiert als: D0----Wenn 1, Kanal 1 ist aktiviert, 0 ist nicht aktiviert; D1 – Wenn 1, ist Kanal 2 aktiviert, 0 ist nicht aktiviert; D2 – Wenn 1, ist Kanal 3 aktiviert, 0 ist nicht aktiviert; D3 – Wenn 1, ist Kanal 4 aktiviert, 0 ist nicht aktiviert. Stopp-Impulskanal-Operation: Format für die Stopp-Impulskanal-Operation: a, (*Adresse) = Daten; wobei: Adresse = Basisadresse + 9; Daten sind 8 Bit, die als Stopp-Aktivierungsflag verwendet werden und wie folgt definiert sind: D0 – Wenn 1, ist Kanal 1 aktiviert, 0 ist nicht aktiviert; D1 – Wenn 1, ist Kanal 2 aktiviert, 0 ist nicht aktiviert; D2 – Wenn 1, ist Kanal 3 aktiviert, 0 ist nicht aktiviert; D3 – Wenn 1, ist Kanal 4 aktiviert, 0 ist nicht aktiviert. Datenrücklese-Latch: Um Daten für eine bestimmte Funktion zu lesen, muss die CPU die Daten zuerst sperren, bevor sie sie lesen kann; andernfalls kann sie nur die zuvor gesperrten Daten lesen. Es gibt drei Arten von Funktionsdaten:  Impulszähler Wert: 32 Bit;  Wert des allgemeinen Eingangsports: 8 Bit;  Wert des Tastencodes: 7 Bit; Die CPU liest Daten in 8-Bit-Byte-Schritten. Der 32-Bit-Impulszählerwert muss viermal gelesen werden, wobei die Reihenfolge von 0 bis 3 beliebig ist. 8-Bit-Werte können nur ab Adresse 0 gelesen werden. Das Format ist: a. (*Latch-Adresse) = beliebige Daten; b. Variable = (*Leseadresse); Dabei gilt: Latch-Adresse und Leseadresse sind in der Adresszuordnungstabelle 1 zu finden. 8/8-Bit-Allzweck-Ein-/Ausgabeports: Dieser Chip verfügt über 8-Bit-Allzweck-Ein- und -Ausgabeports. Der Lesebefehl für den 8-Bit-Allzweck-Eingangsport lautet: a. (*Latch-Adresse) = beliebige Daten; b. Variable = (*Leseadresse); Dabei gilt: Latch-Adresse = Basisadresse + 12; Leseadresse = Basisadresse + 0; (alle Leseadressen sind gleich). Der Schreibbefehl für den 8-Bit-Allzweck-Ausgangsport lautet: a. (*Schreibadresse) = Daten; wobei: Schreibadresse = Basisadresse + 11; Die zu schreibenden Daten sind ein 8-Bit-Byte. 8x8-Tastaturschnittstelle: Dieser Chip unterstützt eine 8x8-Matrix-Tastatur, scannt die Tastatur automatisch, identifiziert die Tastencodes, und die CPU kann den aktuellen Tastencodewert über die Schnittstelle lesen. Die Befehle lauten wie folgt: a. (*Latch-Adresse) = Beliebige Daten; b. Variable = (*Leseadresse); wobei: Latch-Adresse = Basisadresse + 28; Leseadresse = Basisadresse + 0; (Alle Leseadressen sind gleich). Tastencodierungsformat: Flag-Bit: 1 bedeutet, dass eine Taste gedrückt ist, 0 bedeutet, dass keine Taste gedrückt ist; X: Ignorieren; Rücklesecode: 0–7 ist der Zeilen- (oder Spalten-)Code, der der aktuellen Taste entspricht, speziell bezogen auf die Eingangsleitung (KBC_0–7); Scan-Code: 0–7 ist der Spalten- (oder Zeilen-)Code, der der aktuellen Taste entspricht; speziell bezogen auf die Ausgangsleitung (KBS_0~7); VII. Programmierbeispiel //A. Definition der Adresskonstanten: (Annahme: Chip-Basisadresse ist 0xe000) #define MC_sys_CLK 32000000 // Definiert die Betriebsfrequenz des Chips #define MC_CNT_WR_Base_Addr (volatile unsigned char *) 0xe000 // Definiert die Basisadresse zum Schreiben des Zählerwerts #define MC_CNT_Latch_WR_Base_Addr (volatile unsigned char *) 0xe00A // Definiert die Basisadresse zum Schreiben des Zählerlatches #define MC_FRQ_WR_Base_Addr (volatile unsigned char *) 0xe004 // Definiert die Basisadresse zum Schreiben des Frequenzwerts #define MC_Startup_WR_Base_Addr (volatile unsigned char *) 0xe008 // Definiert die Basisadresse zum Starten des Schreibvorgangs #define MC_Stop_WR_Base_Addr (volatile unsigned char *) 0xe009 // Definiert die Basisadresse zum Stoppen des Schreibvorgangs #define MC_GPOut_WR_Base_Addr (volatile unsigned char *) 0xe00B // Definiert die allgemeine Basisadresse für das Schreiben des Ausgabewerts #define MC_GPIn_Latch_WR_Base_Addr (volatile unsigned char *) 0xe00C // Definiert die allgemeine Basisadresse für das Schreiben des Eingabewert-Latches #define MC_KB_Latch_WR_Base_Addr (volatile unsigned char *) 0xe01C // Definiert die Basisadresse für das Schreiben des Tastaturcode-Latches #define MC_RD_Base_Addr (volatile unsigned char *) 0xe000 // Definiert die Basisadresse für das Lesen des Rücklesewerts // B, Subroutine Slice: // 0, Verzögerungssubroutine: Zwischen den Lese-/Schreibbefehlen des Chips ist ein bestimmtes Zeitintervall erforderlich. void delay(int n) { int i; for( i = 0; i > 0) & 0x0ff);delay(10); MC_CNT_WR_Base_Addr[n*16+1] = (char)((cnt>> 8) & 0x0ff); delay(10); MC_CNT_WR_Base_Addr[n*16+2] = (char)((cnt>>16) & 0x0ff); delay(10); MC_CNT_WR_Base_Addr[n*16+3] = (char)((cnt>>24) & 0x0ff); //2, den Impulswert des n-ten Kanals lesen MC_CNT_Latch_WR_Base_Addr [n*16+0] = (char)0; delay(10); //Impulswert des n-ten Kanals speichern Cnt = MC_ RD_Base_Addr [0]; delay(10); // 0 Bytes Daten zurücklesen Cnt |= MC_RD_Base_Addr[1] << 8; delay(10); // 1 Byte Daten zurücklesen Cnt |= MC_RD_Base_Addr[2] << 16; delay(10); // 2 Bytes Daten zurücklesen Cnt |= MC_RD_Base_Addr[3] << 24; // 3 Bytes Daten zurücklesen if (Cnt == 0xffffffff) { // Nach dem n-ten Kanalimpuls weiterverarbeiten } // 3. Frequenzwert des n-ten Kanalimpulses schreiben Nfrq = frq_pulse * 0x10000000 / MC_sys_CLK; // Ganzzahl-Überlaufproblem beachten MC_FRQ_WR_Base_Addr[n * 16 + 0] = (char)((Nfrq >> 0) & 0x0ff); delay(10); MC_FRQ_WR_Base_Addr [n*16+1] = (char)((Nfrq>> 8) & 0x0ff); delay(10); MC_FRQ_WR_Base_Addr [n*16+2] = (char)((Nfrq>>16) & 0x0ff); delay(10); MC_FRQ_WR_Base_Addr [n*16+3] = (char)((Nfrq>>24) & 0x0ff); //4. Starte den Mehrkanal-Impulsbetrieb MC_Startup_WR_Base_Addr[0] = (F0 & 1) | ((F1<<1)&2) | ((F2<<2)&4 | ((F3<<3)&8) ; //5. Stoppt den Mehrkanal-Impulsbetrieb MC_Stop_WR_Base_Addr[0] = (F0 & 1) | ((F1<<1)&2) | ((F2<<2)&4 | ((F3<<3)&8) ; //6. Gibt einen 8-Bit-Allzweckausgang aus MC_GPOut_WR_Base_Addr [0] = (char)(GPOut &0x0ff) ; //7, 8-Bit-Allzweckeingang MC_GPIn_Latch_WR_Base_Addr [0] = (char)0; delay(10); //Latch-Allzweckeingangswert GPIn_V = MC_RD_Base_Addr [0] ; //8, 7-Bit-Tastatur-Tastencode-Eingabe MC_KB_Latch_WR_Base_Addr [0] = (char)0; delay(10); //Latch-Tastencodewert KBCode = MC_RD_Base_Addr [0] ; if(KBCode & 0x80) { //Aktuell ist eine Taste gedrückt} VIII. Blockdiagramm des Bewegungssteuerungssystems basierend auf SM1000. Im obigen Schema werden außer der 1-4-Achsen-Bewegungssteuerung selbst keine Decoder, Latches oder andere Chips auf der Platine benötigt. Die Tastenabtastschaltung spart zudem viel MCU-Bandbreite. Die digitalen Universal-Ein-/Ausgänge erhöhen den Bedienkomfort des Systems. Englischer Titel: Die einfache Motion-Control-IC-Lösung basierend auf SOPC. Referenzen: Keine. Autorenbiografie: Yu Fengbing, männlich, leitender Ingenieur mit langjähriger Erfahrung in der integrierten Schaltungstechnik und im Geschäftsleben, derzeit Geschäftsführer der Shenzhen Smedy Technology Development Co., Ltd. Hu Junjian, männlich, leitender Ingenieur mit langjähriger Erfahrung in der integrierten Schaltungstechnik und Signalverarbeitungstechnik, derzeit Technischer Direktor der Shenzhen Smedy Technology Development Co., Ltd. Kontaktinformationen: Raum 601, Jinda Technology Center, Nr. 8 Kefeng Road, Science und Technologiepark, Bezirk Nanshan, Shenzhen. Tel.: 0755-26506310
Read next

Anwendung von SPS im Bereich der Stahlwalzproduktion

Dieser Artikel beschreibt den Einsatz des ABB MasterPiece200/1 SPS-Steuerungssystems in der Stabbündelungsanlage einer S...

Articles 2026-02-20