Der PIC16F684 von Microchip kann dank seiner erweiterten Peripheriefunktionen kleine bürstenlose DC-Motoren steuern.

Der PIC16F684 von Microchip kann dank seiner erweiterten Peripheriefunktionen kleine bürstenlose DC-Motoren steuern.Microchip

Selbst ein 8-Bit Mikrocontroller kann bidirektionale bürstenlose DC-Motoren (BDC) steuern, wenn die MCU über die nötigen Zusatzfunktionen verfügt. Ein Beispiel dafür ist der PIC16F684 von Microchip mit seinen ECCP-Peripheriefunktionen (Enhanced CCP). Das ECCP erweitert die Technologie des CCP-Moduls (Capture, Compare, PWM) zum Beispiel um vier PWM-Kanäle für eine bidirektionale hardwaregestützte Motorsteuerung über eine Vollbrückenkonfiguration.

Berechnungen

Wer den ECCP im PWM-Modus nutzt, muss zunächst die PWM-Frequenz, das Tastverhältnis und die erforderliche Auflösung berechnen. Die Wahl der PWM-Frequenz für die Motorsteuerungsanwendung hat Auswirkungen auf das Motorlaufgeräusch und die Schaltgeschwindigkeit des Leistungstransistors. Das menschliche Ohr kann Frequenzen zwischen 20 Hz und 20 kHz wahrnehmen. Im vorliegenden Beispiel arbeitet die PWM-Motorsteuerung bei einer Frequenz von 4 kHz, was einem geringeren Geräuschpegel entspricht als bei noch niedrigeren PWM-Frequenzen wie etwa 1 kHz. Kann die Bandbreite der Applikation höhere Frequenzen unterstützen, vor allem solche oberhalb des typischen Bereichs des vom Menschen hörbaren Frequenzspektrums, so wird der Motor weniger hörbare Geräusche erzeugen. Ist zu viel Lärm zu hören, sollte man die PWM-Frequenz erhöhen.

Eckdaten

Ein 8-Bit-Mikrocontroller genügt, um kostengünstige, bidirektionale bürstenlose DC-Motoren zu steuern. Microchip hat dazu seine ECCP-Peripherie integriert (Signalerfassung, Steuerung und PWM). Der Beitrag erklärt, welche Register man wie setzen muss und wie die externe Beschaltung auszusehen hat, um eine sensorlose Steuerung mit einer Vollbrückenschaltung zu realisieren.

Eine Änderung des PWM-Tastverhältnisses verändert die über dem Motor abfallende durchschnittliche Spannung; damit ändert sich auch die Motordrehzahl. Die Auflösung des PWM-Tastverhältnisses bestimmt die Genauigkeit, mit der sich das Tastverhältnis ändern lässt. So ermöglicht beispielsweise eine 10-Bit-Auflösung 1024 diskrete Werte für das Tastverhältnis, während eine 8-Bit-Auflösung nur 256 Stufen ermöglicht. Einfluss auf die Auflösung haben auch die PWM-Frequenz, die Mikrocontrollertaktfrequenz und der Vorteiler (Prescaler) von Timer2. Die maximale Auflösung beträgt 10 Bit.

Bild 1: Vollbrücken-Stromflussdiagramm für Vorwärtsbetrieb. Der Programmierer muss im PIC16F684 dazu das Register CCP1CON passend setzen.

Bild 1: Vollbrücken-Stromflussdiagramm für Vorwärtsbetrieb. Der Programmierer muss im PIC16F684 dazu das Register CCP1CON passend setzen.Microchip

Register

Als nächstes sind vier Register zu initialisieren. Das Register PR2 beeinflusst PWM-Frequenz und -Periode. Die volle Auflösung für das PWM-Tastverhältnis beträgt 10 Bit; da aber alle Register auf dem Mikrocontroller nur 8 Bit breit sind, werden die 10 Bit über zwei Register verteilt. CCPR1L enthält dabei die oberen 8 Bit und CCP1CON<5:4> die unteren beiden Bit. Mit CCP1CON<3:0> lässt sich ECCP im PWM-Modus konfigurieren und mit den Bits CCP1CON<7:6> die Motorlaufrichtung ändern.

Für die Einrichtung des ECCP im PWM-Modus gibt es vier mögliche Konfigurationen zur Ansteuerung von H-Brücken mit MOSFETs: Aktiv-High, Aktiv-Low und eine Kombination aus beiden. In welche Richtung der Motor dreht legt die Hardware anhand der beiden Bits CCP1CON<7:6> fest: 01 steht für Vorwärtslauf (Bild 1) und 11 für rückwärts (Bild 2).

Bild 2: Vollbrücken-Stromflussdiagramm für Rückwärtsbetrieb. Es genügt, im Unterschied zu Bild 1 das Bit 7 von CCP1CON auf 1 zu setzen, um die Richtung zu ändern.

Bild 2: Vollbrücken-Stromflussdiagramm für Rückwärtsbetrieb. Es genügt, im Unterschied zu Bild 1 das Bit 7 von CCP1CON auf 1 zu setzen, um die Richtung zu ändern.Microchip

Die ECCP-Hardware schaltet auch die Kanäle zur Aktivierung und Modellierung der MOSFET-Treiber in der H-Brücke. Mit Register T2CON lässt sich der Prescaler von Timer2 einstellen und Timer2 aktivieren. Die Steuerung für den Timer2-Prescaler ist in T2CON<1:0> definiert. Hier legt der Entwickler die PWM-Frequenz, das Tastverhältnis und die Auflösung fest. Vor Anlaufen des PWM-Signals muss er noch Timer2 einschalten, indem er das Bit T2CON<2> setzt.

Sensorlose Motorsteuerung

An einem BDC-Motor kann der Mikrocontroller die Drehzahl kostengünstig über eine Messung der Gegen-EMK-Spannung erfassen (Bild 3): Die Drehzahl ist direkt proportional zur Gegenspannung. Da sich ein BDC-Motor als induktive Last modellieren lässt, entspricht die über den Motor abfallende Spannung dem Produkt der Induktivität multipliziert mit dem dI/dt-Wert.

Bild 3: Vollbrücken-Stromflussdiagramm für Vorwärtsbetrieb mit Messung der Gegen-EMK-Spannung. Damit ermittelt der Mikrocontroller die Drehzahl des Motors.

Bild 3: Vollbrücken-Stromflussdiagramm für Vorwärtsbetrieb mit Messung der Gegen-EMK-Spannung. Damit ermittelt der Mikrocontroller die Drehzahl des Motors.Microchip

In der vorliegenden Anwendung kommt ein BDC-Motor für 12 V und maximal 9600 U/min zum Einsatz. Für eine Messung der Gegen-EMK muss der modulierte FET abgeschaltet sein, dann fließt der Strom in die entgegengesetzte Richtung. Nach der Abschaltung muss sich noch der dI/dt-Wert stabilisieren, bevor die Messung beginnt. Um den A/D-Wandler des Mikrocontrollers nutzen zu können, muss die zu messende Spannung zwischen 0 V und VDD liegen. Da die Gegenspannung aber einen Wert zwischen 0 und 12 V einnehmen kann, skaliert man sie über eine Spannungsteilerschaltung auf einen Wert zwischen 0 V und VDD herunter. Zur Pufferung der herunterskalierten Spannung eignet sich Microchips PGA-Baustein (Programmable-Gain-Verstärker) MSP6S26 mit einem Verstärkungsfaktor von 1.

Sparsam messen

Bild 4: Vollbrücken-Stromflussdiagramm für Vorwärtsbetrieb mit Stromsensor-Widerstand.

Bild 4: Vollbrücken-Stromflussdiagramm für Vorwärtsbetrieb mit Stromsensor-Widerstand.Microchip

Kostengünstige Strommessungen lassen sich mithilfe eines Stromsensorwiderstands zwischen den MOSFETs und Masse bewerkstelligen (siehe Bild 4). Der passende Wert für den Widerstand ergibt sich anhand des maximal zulässigen Stroms durch den Widerstand und der maximal zu erwartenden Verlustleistung. In der vorliegenden Anwendung kommt ein Stromsensorwiderstand mit 0,1 Ω und 1 W zum Einsatz; der Maximalstrom beträgt dabei 3 A. Wenn 3 A durch den Widerstand fließen, dann beträgt die ideale Verlustleistung im Widerstand 0,9 W und der Spannungsabfall beträgt 0,3 V.

Um die maximale Auflösung aus dem 10-Bit-A/D-Wandler zu nutzen, muss man den Spannungsabfall über dem Widerstand bei 3 A so verstärken, dass er so nah wie möglich an der VDD-Versorgungsspannung des PIC16F684 liegt, die in dieser Anwendung 5 V beträgt. Mit einem MSP6S26-PGA und einem Verstärkungsfaktor von 16 ergeben sich im Idealfall 4,8 V beim maximal spezifizierten Strom von 3 A. Bei diesem Verstärkungswert beträgt die A/D-Wandlerauflösung für die Strommessung 9,94 Bit.

Da der BDC-Motor mit einem Pulsbreitenmodulationssignal angesteuert wird, zieht die H-Brückenschaltung nur über die Dauer des High-Pulses in der PWM-Periode Strom. Zur Strommessung erfasst man den Spannungsabfall über dem Stromsensor-Widerstand während einer PWM-Periode.

Bild 5: Das Blockdiagramm der Beispielsanwendung zeigt, dass der PIC16F684 den Regelkreis schließt und selbst von einem Windows-GUI gesteuert wird.

Bild 5: Das Blockdiagramm der Beispielsanwendung zeigt, dass der PIC16F684 den Regelkreis schließt und selbst von einem Windows-GUI gesteuert wird.Microchip

Die Anwendung

Bild 5 zeigt ein kostengünstiges BDC-Motorsteuersystem, das den ECCP in einer Konfiguration für einen Vollbrücken-PWM-Betrieb nutzt. Über die Bedieneroberfläche am Windows-PC kann der Benutzer einen BDC-Motor mit dem PIC16F684 konfigurieren, die PWM-Frequenz und das -Tastverhältnis einstellen, die interne Taktfrequenz des PIC16F684 in Echtzeit verändern und Drehzahl- sowie Strommessungen anzeigen. Den Quellcode für die Anwendung hat der Autor mit einem HI-Tech C Compiler, der MPLab-IDE sowie der Entwicklungsplattform Microsoft Visual C++ 6.0 erstellt.

Die Firmware übernimmt die Initialisierung des PIC16F684 und übermittelt die SPI-Befehle an den PGA; dazu emuliert die Software einen RS232-USART mit einer Übertragungsrate von 9600 Bit/s. Außerdem nimmt die Firmware Befehle vom PC entgegen, ändert PWM-Frequenz und -Tastverhältnis sowie die Motorlaufrichtung, passt die interne Oszillator-Taktfrequenz an und kümmert sich um die A/D-Wandlermessungen für Drehzahl und Strom.

Die Hardware besteht aus drei Hauptabschnitten – der Leistungsstufe für die Motorsteuerung, der Datenschnittstelle für RS232 und den Messschaltungen für Drehzahl und Strom. Die Leistungsstufe besteht aus einer H-Vollbrücke für die bidirektionale BDC-Motorsteuerung. Der Mikrocontroller nutzt die Anschlüsse RC2 bis RC5 als die vier ECCP-Pins, an die die H-Vollbrückenschaltung angeschlossen wird. Die Datenschnittstelle umfasst eine RS232-Konfiguration für serielle Datenübertragung. Der Mikrocontroller nutzt sein Pin RA5 zum Senden und Empfangen von RS232-Daten.

Der Messtechnik-Schaltungsabschnitt besteht aus dem MSC6S26-Mehrkanal-PGA und einer Spannungsteilerschaltung zur Skalierung der Gegen-EMK-Spannung. Der Mikrocontroller kommuniziert mit dem PGA über eine drei Leitungen umfassende, Software-emulierte SPI-Schnittstelle. Das CS-Pin ist mit RA1, das SCK-Pin mit RA2, das SI-Pin mit RC0, und das Vref-Pin mit Masse verbunden. Das RA0 dient als Analogeingang zur Messung von Drehzahl und Strom, und ist mit dem Vout-Pin des PGA verbunden. Kanal 0 am PGA wird für Drehzahl-Messungen verwendet, Kanal 1 für Strommessungen.

Einfach mehr

Das Beispiel zeigt, wie einfach sich die ECCP-Parameter im PIC16F684 in PWM-Betriebsart berechnen lassen. Mit diesen Werten kann man die erforderlichen ECCP-Register initialisieren und den ECCP zur Steuerung eines bidirektionalen BDC-Motors sowie zur Implementierung von sensorlosen Drehzahl- und Strommessungen nutzen.