Synchronisierung von Mikrocontroller-PWM-Ausgängen zur effizienteren Ansteuerung von Lasten
Zur Verfügung gestellt von Nordamerikanische Fachredakteure von DigiKey
2020-01-08
Die meisten Mikrocontroller verfügen über mindestens einen Peripheriebaustein für Pulsweitenmodulation (PWM), der mehrere Wellenformen in Form von Rechteckwellen generiert. Diese PWM-Ausgaben können zur Ansteuerung von synchronen Lasten, z. B. von Schrittmotoren in mechanischen Systemen und von Leistungs-MOSFETs in Leistungswandlern, verwendet werden. Bei diesen Lasten müssen die PWM-Wellenformen exakt synchronisiert werden, damit die richtige Ansteuerung der Ziellast gewährleistet ist.
Wenn der PWM-Peripheriebaustein nicht sorgfältig programmiert ist, kann es zu gelegentlichen Phasenverschiebungen zwischen den Wellenformen kommen, was zu einem Synchronizitätsverlust führen kann, wenn die Signalflanken nicht richtig ausgerichtet sind. Diese Phasenverschiebungen führen zu einer ineffizienten Ansteuerung der Lasten, die eine Verschwendung von Energie und möglicherweise die Erzeugung von übermäßiger Wärme zur Folge hat. Bei den verbreiteten PWM-Peripheriebausteinen ist es möglich, einen PWM-Ausgang zu aktivieren oder zu deaktivieren, wobei aber Phasenverschiebungen mit anderen PWM-Ausgängen verursacht werden.
Dies ist insbesondere bei kleinen batteriebetriebenen IoT-Anwendungen (Internet der Dinge, Internet of Things) ein Problem, wenn ein einziger PWM-Peripheriebaustein mit 16 oder 32 Ausgängen zur Steuerung von mehreren externen Lasten verwendet wird. Bei diesen IoT-Anwendungen können Phasenverschiebungen zu einer Verschwendung von Batteriestrom führen. Darüber hinaus könnten sie wegen der nicht erkannten Phasenverschiebungen von der Netzwerkdiagnose des IoT-Endpunkts nicht erfasst werden.
In diesem Artikel werden einige Anwendungen für PWM-Peripheriebausteine von Mikrocontrollern sowie die Umstände, unter denen PWM-Wellenformen in diesen Anwendungen synchron sein müssen, behandelt. Dann wird ein Mikrocontroller von Maxim Integrated betrachtet, der über einen Peripheriebaustein für Impulsfolgen verfügt, der explizit für die Vermeidung eines Synchronizitätsverlusts von Wellenformen in diesen Anwendungen konstruiert ist, und anschließend wird die Konfiguration dieses Peripheriebausteins zur Sicherstellung einer effizienten Ansteuerung der Ziellast untersucht.
PWM-Peripheriebausteine von Mikrocontrollern und ihre Ziellasten
Die meisten Universal-Mikrocontroller verfügen über mindestens einen PWM-Peripheriebaustein, mit dem regelmäßige wiederholte Rechteckwellen erzeugt werden. Viele Lasten können von einer PWM-Ansteuerung profitieren – von einfachen Lasten bis zu komplexeren mechanischen Ansteuerungssystemen.
LEDs (Light emitting diodes) sind ein Beispiel für eine einfache Last, die sehr effizient von einem PWM-Signal angesteuert werden kann, insbesondere dann, wenn eine farbige LED gedimmt werden muss. Im Gegensatz zum Dimmen einer LED durch Variieren des Durchlass-Gleichstroms erhält das PWM-Dimmen die Lichtqualität besser, ohne dass sich die Farbe merklich ändert. Ein PWM-Baustein kann problemlos eine oder mehrere LEDs ansteuern. Wenn die LEDs als optische Anzeige für einen Bediener verwendet werden, fallen Phasendifferenzen zwischen zwei oder mehr LEDs nicht auf. Wenn die LEDs allerdings in komplexeren Anwendungen eingesetzt werden, in denen z. B. mehrere LEDs Daten in Form von Lichtmodulation an optische Rezeptoren übermitteln, kann die Synchronisierung der LEDs eine wichtige Designüberlegung darstellen.
Eine weitere einfache Last für einen Mikrocontroller-PWM-Baustein ist ein Gleichstrommotor, der über einen Motoransteuerungs-IC angesteuert wird. Zwar kann die Drehzahl des Gleichstrommotors einfach durch Änderungen der Spannung zwischen den beiden Anschlüssen geändert werden, aber eine PWM-Steuerung ermöglicht eine genauere Steuerung der Motordrehzahl. Wenn in einem geschlossenen Steuerungssystem ein Geschwindigkeitssensor verwendet wird, kann die Motordrehzahl mit höherer Genauigkeit aufrechterhalten werden. Wenn zwei oder mehr Gleichstrommotoren verwendet werden, die gleichzeitig betrieben werden müssen, könnte es erforderlich sein, die PWM-Wellenformen zu synchronisieren, um eine exakte Drehzahlsteuerung beider Motoren aufrechtzuerhalten.
Ansteuerung von bipolaren Schrittmotoren
Die Designsituation wird komplexer, wenn bipolare Schrittmotoren angesteuert werden. Bipolare Schrittmotoren werden durch zwei umpolbare stromdurchflossene Wicklungen angetrieben (Abbildung 1). Jede Wicklung benötigt zwei PWMs, d. h., es werden vier PWMs benötigt.
Abbildung 1: Ein bipolarer Schrittmotor wird von zwei stromdurchflossenen Wicklungen angetrieben (durch eine rote und eine grüne Spule dargestellt), die jeweils Strom in eine Richtung transportieren. Durch Steuerung von Phase und Dauer des Stromflusses in den Wicklungen können Drehzahl und Position des Motors einfach geregelt werden. (Bildquelle: DigiKey)
Wie in Abbildung 1 gezeigt, müssen die beiden, durch eine rote und eine grüne Spule dargestellten stromdurchflossenen Wicklungen in der richtigen Reihenfolge angesteuert werden, damit der Motor läuft. Die in Abbildung 2 gezeigte Reihenfolge treibt den bipolaren Schrittmotor bei jeder Änderung der Wellenform um einen ganzen Schritt vorwärts.
Abbildung 2: Jede der beiden Spulen eines bipolaren Schrittmotors muss entsprechend dem obigen Diagramm angesteuert werden, damit der Motor bei jeder Änderung der Wellenform um einen vollen Schritt fortschreitet. Der Strom in jeder der Spulen wird zuerst in eine Richtung geschickt, dann ist die Spule im Leerlauf und dann wird der Strom in die andere Richtung geschickt. (Bildquelle: DigiKey)
Bei jedem Übergang der Wellenform beginnt ein neuer Schritt des Motors. Wie Abbildung 2 zeigt, ändert sich die Polarität der Spannung – und damit der Stromfluss durch die Wicklungen – bei jedem Schritt. Phasenverschiebungen eines der PWM-Signale können zu einem Stottern des Motors führen, was wiederum, insbesondere bei niedrigen Drehzahlen, einen Abfall des Drehmoments zur Folge haben kann.
Der Schrittmotor kann mit nur mäßigem Aufwand zur Erhaltung der Synchronizität von einem Mikrocontroller mit einem PWM-Peripheriebaustein gesteuert werden, der nur vier Ausgänge benötigt. Die Situation ist allerdings komplizierter, wenn mit demselben PWM-Peripheriebaustein mehr als eine Last gesteuert wird. Beispielsweise könnten vier PWM-Ausgänge eines PWM-Bausteins mit 16 Ausgängen einem Schrittmotor und die anderen PWM-Ausgänge anderen Lasten wie Gleichstrommotoren oder LEDs zugewiesen werden. Nachdem die Frequenzen und Arbeitszyklen der PWM-Ausgänge mithilfe der entsprechenden Register konfiguriert wurden, wird im Enable/Disable-Register jedes PWM ein Bit gesetzt. In einem Arm®-Mikrocontroller kann die Firmware die entsprechenden Bits per Bit-Banding setzen. Allerdings führt Bit-Banding einen RMW-Zyklus (read/modify/write, Lesen/Ändern/Schreiben) auf dem Zielregister aus. Wenn andere PWM-Ausgaben so programmiert sind, dass sie während des RMW-Vorgangs beginnen oder enden, kann das Ergebnis unvorhersehbar sein, und in manchen Situationen könnte ein PWM entgegen der Firmwaresteuerung aktiviert oder deaktiviert werden.
Maxim Integrated hat dieses Problem mit dem mit 120 Megahertz (MHz) laufenden Cortex®-M4F-Mikrocontroller MAX32650 gelöst. Er verfügt über ein breites Angebot von Peripheriebausteinen, darunter drei Standard-SPI-Schnittstellen, ein Quad-SPI, drei UARTs, zwei I2C-Ports, eine USB 2.0 Hi-Speed-Schnittstelle mit physischer Schicht (PHY), sechs 32-Bit-Timer und eine AES-256-Verschlüsselungseinheit (Abbildung 3).
Abbildung 3: Der MAX32650 von Maxim Integrated basiert auf einem 120 MHz-Arm Cortex-M4F und verfügt über ein komplettes Angebot von Peripheriebausteinen und Speicheroptionen, sodass er sich für Hochleistungs-IoT-Edge-Anwendungen eignet. (Bildquelle: Maxim Integrated)
Mit 3 MB Flash-Speicher und 1 MB SRAM zielt der MAX32650 auf anspruchsvolle IoT-Endpunkte ab, für die Edge-Computing erforderlich ist. Der MAX32650 verfügt ebenfalls über einen Peripheriebaustein für Impulsfolgen mit 16 Ausgängen, der komplizierte PWM-Signale generieren kann. Er kann Rechteckwellen mit konfigurierbarer Frequenz und einem Arbeitszyklus von 50 % sowie Impulsfolgen auf der Grundlage eines programmierbaren, bis zu 32 Bit langen Bitmusters generieren.
Verhindern von Phasenverschiebungen
Der Impulsfolgengenerator kann jeden der 16 PWM-Ausgänge über das 32-Bit-Register PTG_ENABLE einzeln aktivieren oder deaktivieren. Durch das Schreiben einer 1 in irgendeine Bitposition wird die Impulsfolge aktiviert, sodass sie wie konfiguriert arbeitet. Durch das Schreiben einer 0 werden Takt und Logik für die Impulsfolge angehalten und der Ausgang in seinem gegenwärtigen logischen Zustand eingefroren. Für dieses Register gelten dieselben RMW-Einschränkungen wie für die in den meisten Mikrocontrollern vorhandenen Enable/Disable-Register. Bit-Banding ist daher nicht ratsam.
Um die Synchronizität der Phasen verschiedener Wellenformen aufrechtzuerhalten, verfügt der Impulsfolgen-Peripheriebaustein des MAX32650 über einzigartige Features mit der Bezeichnung „Safe Enable“ mit dem 32-Bit-Register PTG_SAFE_EN und „Safe Disable“ mit dem 32-Bit-Register PTG_SAFE_DIS. Die oberen 16 Bit jedes dieser Register werden nicht verwendet und es wird empfohlen, die nicht verwendeten Positionen stets mit Nullen aufzufüllen.
Wenn einer der Ausgänge sicher aktiviert werden soll, schreibt die Firmware eine 1 in die entsprechende Bitposition von PTG_SAFE_EN. Dadurch werden unmittelbar die Bitpositionen für die Ausgänge in PTG_ENABLE gesetzt, wodurch der PWM-Ausgang gestartet wird. Das Schreiben einer 0 in eine beliebige Bitposition von PTG_SAFE_EN hat keine Wirkung auf die Impulsfolgenausgänge.
Wenn einer der Ausgänge sicher deaktiviert werden soll, schreibt die Firmware eine 1 in die entsprechende Bitposition von PTG_SAFE_DIS. Dadurch werden unmittelbar die Bitpositionen für die Ausgänge in PTG_ENABLE gelöscht, wodurch der PWM-Ausgang angehalten wird. Das Schreiben einer 0 in eine beliebige Bitposition von PTG_SAFE_DIS hat keine Wirkung auf die Impulsfolgenausgänge.
Das Schreiben in diese Register bewirkt keinen RMW-Zyklus. Die Funktion „Safe Enable/Disable“ ermöglicht, dass eine oder mehrere Impulsfolgen unmittelbar gestartet oder angehalten werden können, wobei garantiert ist, dass andere Impulsfolgen nicht beeinflusst werden. Bit-Banding wird für die Register PTG_SAFE_EN und PTG_SAFE_DIS nicht unterstützt.
Zurück zum Schrittmotor in Abbildung 1. Die Impulsfolgenausgänge 0 und 1 können für A und B für die grüne Wicklung und die Impulsfolgenausgänge 2 und 3 für C und D für die rote Wicklung verwendet werden. Da sich in den Wellenformen in Abbildung 2 ungenutzte Bereiche befinden, könnte mithilfe der Konfiguration der Impulsfolgenfunktion ein programmiertes Muster beliebig oft ohne Eingriff der Firmware wiederholt werden.
Sobald die Einstellungen erfolgt sind, kann der Motor durch Schreiben von 0000000Fh in das Register PTG_SAFE_EN gestartet werden. Hierdurch werden die Impulsfolgenausgänge 0 bis 3 gleichzeitig gestartet, wodurch der Motor ohne Beeinflussung anderer laufender Impulsfolgenausgaben gestartet wird. Der Motor kann durch Schreiben von 0000000Fh in das Register PTG_SAFE_DIS angehalten werden. Beide Operationen haben keine Auswirkungen auf andere laufende Impulsfolgen.
Wenn weitere der 12 Impulsfolgenausgänge aktiviert oder deaktiviert werden müssen, so können diese sicher mithilfe dieser beiden Register gesteuert werden. Solange in die unteren vier Bits dieser Register keine 1 geschrieben wird, wird der Betrieb des Schrittmotors nicht beeinflusst. Dies ist anders als bei der Verwendung des Standard-Enable-Registers mit einem RMW-Zyklus, die zu einem Stottern des Motors und einer Phasenverschiebung führen kann, die negative Auswirkungen auf das Drehmoment haben kann. Die Funktion „Safe Enable/Disable“ ähnelt einer atomaren Operation und stellt damit sicher, dass der Schrittmotor effizient läuft, dass keine Energie verschwendet wird und dass jederzeit das maximale Drehmoment aufrechterhalten wird.
Die Ausgangs-Pins des Mikrocontrollers verfügen über keine ausreichende Kapazität zum Ansteuern eines Schrittmotors. Es wird ein Motortreiber, eine H-Brücke, benötigt. Der A3909GLYTR-T von Allegro MicroSystems ist ein dualer H-Brücken-Treiber, der Motoren ansteuern kann, die 4 bis 18 V und bis zu 1 A pro Wicklung benötigen (Abbildung 4).
Abbildung 4: Der A3909 von Allegro MicroSystems ist ein dualer H-Brücken-Treiber, der Quellen- und Senkenströme bis zu 1 A für Schrittmotoren liefern kann. (Bildquelle: Allegro MicroSystems)
Der A3909 verfügt über Abschaltung, Überstrom- und Kurzschlussschutz. Jeder Eingang (INx) steuert den entsprechenden Ausgang (OUTx) an. Der PWM-Baustein des MAX32650 kann die Impulsfolgenausgänge 0 und 1 mit den Eingängen IN1 und IN2 (grün) zur Ansteuerung der grünen Spule über OUT1 und OUT2 und die Impulsfolgenausgänge 2 und 3 mit IN3 und IN4 (rot) zur Ansteuerung der roten Spule über OUT3 und OUT4 verbinden. So kann der A3909 den Schrittmotor direkt ansteuern.
Ein nützliches Merkmal des A3909 ist ein hochohmiger Zustand. Wenn beide Eingänge der H-Brücke länger als eine Millisekunde (ms) lang logisch 0 sind, gehen beide Ausgänge in einen hochohmigen Zustand über. Dies ist nützlich, wenn ein Motor auslaufen soll oder wenn für bestimmte Schritte eines Schrittmotors ein hochohmiger Zustand des Ausgangs erforderlich ist. Wie in Abbildung 2 ersichtlich ist, würde jeder inaktive Teil der Wellenform von einem Versetzen in einen hochohmigen Zustand profitieren. Dies steigert die Effizienz, indem es verhindert, dass die Spule den Betrieb des Motors beeinflusst, da dieser von der anderen Spule schrittweise angetrieben wird.
Wenn alle vier Eingänge (beide Paare) länger als 1 ms lang auf LOW gezogen werden, gehen natürlich beide Ausgangspaare wie oben beschrieben in einen hochohmigen Zustand über. Im Datenblatt wird dies als „Sleep Mode“ (Schlafmodus) bezeichnet, da zusätzlich ein Teil der internen Elektronik ausgeschaltet wird.
Fazit
Die Peripheriebausteine üblicher Mikrocontroller bieten häufig PWM-Funktionen, mit denen externe Lasten wie Motoren oder Leistungs-MOSFETs angesteuert werden können. Da Bitmanipulationen mit dem Enable-Register des PWM-Bausteins manchmal zu unvorhersehbaren Ergebnissen führen können, bieten die Hersteller von Mikrocontrollern zur Lösung dieses Problems neue PWM-Peripheriebausteine an, mit deren Funktionen einzelne PWM-Ausgänge sicher aktiviert und deaktiviert werden können, ohne andere PWM-Ausgänge zu beeinflussen, wodurch mögliche Phasenverschiebungen und Synchronizitätsverluste vermieden werden.
Haftungsausschluss: Die Meinungen, Überzeugungen und Standpunkte der verschiedenen Autoren und/oder Forumsteilnehmer dieser Website spiegeln nicht notwendigerweise die Meinungen, Überzeugungen und Standpunkte der DigiKey oder offiziellen Politik der DigiKey wider.

