Suchen

16-Bit-MCU Multitalent für PWM-Motorsteuerungen

| Autor / Redakteur: Herbert Schwarz* / Holger Heller

Viele Mikrocontroller-Anwendungen erfordern die Fähigkeit, präzise analoge Signale zu erzeugen. Gewöhnlich wird dies mit einem D/A-Wandler gelöst. Eine 16-Bit-MCU mit integriertem 16-Bit-Timer bietet eine Alternative, analoge Signale zu generieren und an bestimmten Ports auszugeben. Der D/A-Wandler kann für weitere Aufgaben genutzt werden.

Firmen zum Thema

( Archiv: Vogel Business Media )

Die 16-Bit-MCU MSP430F2619 von Texas Instruments ist u.a. auch für Motorsteuerungen geeignet (Bild 1). Die MSP430F261x-Serie bietet acht Derivate mit bis zu 120 KByte Flash, 4 KByte RAM und reichlich Peripherie: ein A/D- und D/A-Wandler mit jeweils 12 Bit Auflösung, zwei 16-Bit-Timer, 48 I/O-Pins sowie verschiedene Schnittstellen wie UART, SPI, IrDA und I²C. Auch ein DMA-Controller steht zur Verfügung.

Für eine Motorsteuerung sind folgende Module entscheidend: ein präziser 12-Bit-A/D-Wandler mit acht Eingängen, zwei 16-Bit-Timer mit PWM-fähigen Ausgängen und ein flexibles Oszillatorsystem. Eigenschaften wie der weite Spannungsbereich von 1,8 bis 3,6 V und der niedrige Stromverbrauch (im Aktiv-Modus typ. 365 mA bei 1 MHz und 2,2 V und im Standby-Modus 0,9 mA) sind unerlässlich für den mobilen Applikationsbereich.

Bildergalerie

Integrierte 16-Bit-Timer als PWM-Controller zur Lüftersteuerung

In der hier beschriebenen Applikation wird der integrierte 16-Bit-Timer als PWM-Controller zur Lüftersteuerung verwendet und der D/A-Wandler für weitere Aufgaben genutzt. Die MCU regelt verschiedene Lüftermotoren unabhängig voneinander. Drei unterschiedliche Temperaturzonen werden mithilfe eines temperaturabhängigen Widerstandes PT100 erfasst und die entsprechenden Lüftermotoren mit einem PWM-Signal geregelt (Bild 2).

PWM steht für Pulsweitenmodulation: das PWM-Signal ist ein digitales Signal mit einer festen Frequenz und einem regelbaren Tastverhältnis (Duty Cycle). Mit dem Kontrollregister TBCCR0 des Timer_B7 wird die fixe Frequenz festgelegt und mit jedem Update des TBCCRX-(X>1)-Wertes wird das Tastverhältnis geändert. Der Duty Cycle steht im linearen Zusammenhang mit der jeweiligen Zonentemperatur (Bild 3). Zusätzlich wird ein Vorverstärker für die jeweilige Zone eingesetzt, um das Ausgangssignal an die ADC-Eingangstufe zu adaptieren. Der temperaturabhängige Spannungsabfall des PT100 wird mit dem Faktor V = 1 + (R1/R2) verstärkt und an den jeweiligen ADC-Eingang weitergeleitet.

Temperaturinformationen für die Motorsteuerung

Diese Applikation ist so programmiert, dass ein Temperaturregelbereich von 20 bis 70 °C eingehalten wird. Entsprechend der jeweiligen Zonentemperatur wird ein PWM-Signal von der MCU für die Motorsteuerung erzeugt. Die Ausgänge der drei Vorverstärkermodule sind entsprechend mit den ADC-Eingängen A3, A4 und A5 verbunden. Der ADC ist so konfiguriert, dass die analogen Eingangssignale sequenziell konvertiert und die entsprechenden Werte ins ADC-Memory-Register ADC12MEM0, ADC12MEM1, ADC12MEM2 geschrieben werden.

Die sequenzielle Abtastung kann im ADC-Kontrollregister ADC12CTL1 (Bit 1 und Bit 2) vorgenommen werden. Die Anwendung ist so dimensioniert, dass für jeden der drei Eingangskanäle ein äquivalentes Timer-Signal generiert wird. Dazu ist jedes Sensormodul mit einem PT100 ausgestattet und liefert für jede einzelne Zone eine temperaturabhängige Spannung. Der ADC wandelt diese PT100-Spannung und ein kleiner implementierter Software-Algorithmus sorgt für die exakte PWM-Regelung. Temperaturen unter 20 °C lösen keinen Regelwert aus, dagegen erzeugen Temperaturen über diesen Wert eine PWM.

Lüfter temperaturabhängig regeln

Solange die Temperatur die 20°C-Grenze in keiner Temperaturzone übersteigt, wird in den Timer- Kontrollregistern TBCCR1, TBCCR2 und TBCCR3 jeweils der Wert 0 abgelegt. In diesem Fall ist keiner der drei PWM-Portausgänge P4.1, P4.2, P4.3 aktiv und die Motoren M1, M2 und M3 werden dadurch nicht angesteuert. Wenn aber in einer der drei Zonen die Temperatur von mehr als 20 °C erreicht wird, beginnt die jeweilige PWM-Stufe zu regeln. Der gemessene ADC-Wert plus der entsprechende Anpassungsfaktor ergeben einen neuen PWM-Timer-Wert. Der Timer ist so programmiert, dass die PWM Signale an Pin37, Pin38 und Pin39 für die Ansteuerung der Operationsverstärker (IC3 bis IC5) und der FETs T1, T2 und T3 zur Verfügung stehen.

Der Regelkoeffizient beträgt 2% Duty Cycle pro 1 °C. Ändert sich z.B. die Temperatur von 30 auf 50 °C, so stellt sich ein Tastverhältnis von 60% ein. Ab 70 °C läuft der Motor mit voller Geschwindigkeit. Ein großer Vorteil dieser Schaltung ist die unabhängige Temperaturregelung für verschiedene Temperaturzonen mithilfe des integrierten Timer-Moduls. Jeder einzelnen Temperaturzone steht ein eigener Lüftermotor mit einer eigenen Regelung zur Verfügung. Die Dioden LED1 bis LED3 zeigen den aktiven PWM-Status an.

Das Oszillatormodul stellt drei Quellen zur Verfügung

Das flexible Oszillatorsystem verfügt über zwei Oszillatoren (LFXT1 und LFXT2). Außerdem steht noch ein DCO zur Verfügung. LFXT1 kann sowohl als niederfrequenter als auch hochfrequenter Oszillator benutzt werden. Das Oszillatormodul stellt drei Quellen zur Verfügung:

  • Auxiliary Clock (ACLK),
  • Main Clock (MCLK),
  • Sub-Main Clock (SMCLK).

Der Oszillator LFXT1 ist in den Low-Frequency-Modus geschaltet. Dies geschieht durch das Setzen von Bit6 (XTS=0) im Kontrollregister des Basic-Clock-Systems BCSCTL1. Somit kann ein günstiger externer Uhrenquarz mit 32,768 kHz verwendet werden. Die Frequenz des Quarzes stellt sich am Auxiliary Clock (ACLK) ein. Der geteilte Clock (ACLK/2) steht dem ADC- und dem Timer-B7-Modul zur Verfügung. Die Einstellung wird durch Schreiben des Registerwerts 90Hex in das Kontrollregister BCSCTL1 erreicht. Das Oszillator-Blockschaltbild ist im User’s Guide SlAU144 dargestellt.

Die Programmierung des ADC12-Moduls

Der 12-Bit-ADC wird so programmiert, dass die interne Referenzspannung von 2,5 V dem Wandler zur Verfügung steht. In dieser Applikation wird die Sample-&-Hold-Zeit mit 64 ADC12-Zyklen festgelegt. Diese Einstellung wird mit der Assembler-Anweisung (MOV #4Fh,&ADC12CTL0) vorgenommen. Das ADC12-Modul wird vom Auxiliary Clock versorgt. Da ACLK/2 mit 1 geteilt wird, entspricht dieser Takt gleich dem ADC12CLK-Clock.

Der ADC12CLK versorgt die Konvertierungsstufe und den Sample-Timer. Die Selektion der sequenziellen Kanalabtastung wird mit der Assembler-Anweisung (MOV #20h,&ADC12CTL1) realisiert. Außerdem werden nach beliebiger Wahl die Analogkanäle A3, A4 und A5 als Eingänge selektiert. ADC12CTL0 und ADC12CTL1 sind Kontrollregister des 12-Bit-Wandlers. Es ist auch noch notwendig, den letzten Kanal innerhalb einer Sequenz zu kennzeichnen. Dies geschieht mittels der Instruktion des EOS-Bit (End of Sequence). Wird in der Hauptroutine die ADC12-Messung gestartet, so werden die selektierten Analogkanäle der Reihe nach gewandelt und deren Messwerte im jeweiligen ADC-Memory-Register abgelegt.

Timer-B7-Modul mit PWM-fähigen Portausgängen

Das Timer-Modul ist mit einem 16-Bit-Timer/Counter und sieben Capture/Compare-Registern (CCR0 bis CCR6) ausgestattet. Für die Taktversorgung ist der Auxiliary Clock (ACLK/2) verantwortlich. Darüber hinaus verfügt der Timer über PWM-fähige Portausgänge. Mit dem Assemblerbefehl (MOV #114h,&TBCTL) für das Timer-Kontrollregister wird der 16-Bit-Timer in den Up Mode geschaltet. Dies bedeutet, dass der Timer bis zum Capture/Compare-Registerwert (TBCCRX) hochzählt und dann den jeweiligen PWM Ausgang setzt. Drei Capture/Compare-Register TBCCR1, TBCCR2 und TBCCR3 werden als PWM-Ausgänge deklariert.

Mit TBCCR0 wird die feste PWM-Frequenz festgelegt. Die Regelung der Motorgeschwindigkeit erfolgt mit dem ADC-Wert. Die drei Capture/Compare-Register werden mit den ADC-Ergebnissen des jeweiligen Kanals aktualisiert und dementsprechend wird die Pulsweite des PWM-Signals variiert. TBCCR1 wird mit dem ADC-Messwert des analogen Eingangskanals A3 beschrieben und die ADC-Kanäle A4, A5 sind für die Updates der TB-Register CCR2 und CCR3 verantwortlich. Jeder einzelne Update eines Capture/Compare-Registers bedeutet eine unmittelbare Änderung des Tastverhältnisses des jeweiligen PWM-Signals. An Pin37, Pin38 und Pin39 stehen die Ausgangssignale für die Motorsteuerung zur Verfügung.

Der Programmablauf der Beispielapplikation

Im deaktivierten Zustand befindet sich die MCU im LPM0-Modus. Nachdem der Schalter S1 geschlossen wird, kehrt der Controller in den aktiven Mode zurück. Als erster Schritt wird eine Initialisierung durchgeführt. Der Watchdog-Timer wird angehalten und die notwendigen Ports konfiguriert. Eine kleine Softwareroutine (Delay Loop) sorgt für die notwendige Zeitverzögerung bis der LFXT1-Oszillator stabil läuft. Im nächsten Schritt (Programmablaufplan in Bild 4) werden die Module ADC12 und Timer B7 konfiguriert. Ab diesem Zeitpunkt ist das Programm bereit, die ADC-Sequenzmessung zu starten, wenn die erneute Abfrage des Schalterzustandes S1 positiv ist.

Die analogen ADC-Eingangskanäle A3, A4 und A5 werden sequenziell gewandelt und deren Messwerte in die jeweiligen ADC-Memory-Register (MEMX) gespeichert. Das Messergebnis (MEM0) des ADC-Kanals A3 wird ins Capture/Compare-Register TBCCR1 geschoben, um dort das Update für das PWM-Signal 1 an Pin37 vorzunehmen. Dieselbe Vorgehensweise wird mit den ADC-Kanälen A4 und A5 vollzogen. Die Messwerte der ADC-Kanäle A4 und A5 aktualisieren die Capture/Compare-Register TBCCR2 und TBCCR3. Die PWM-Signale die an den Pins 37, 38 und 39 nun anstehen, regeln die Geschwindigkeit der einzelnen Motoren. Nachdem die Messsequenz für alle drei ADC-Kanäle vollzogen ist, wird erneut der Schalter S1 abgefragt, um eine weitere Messung zu starten. Sollte die Schalterabfrage aber negativ sein, so wird die MCU in den Low-Power-Modus (LPM0) gebracht. In diesem Zustand verbraucht der Baustein nur 1 µA Strom.

MCU-Baureihe deckt viele Einsatzgebiet ab

Die MSP430F261x-Baureihe eignet sich mit ihren PWM-fähigen Timer-Ausgängen für Applikationen wie PWM- und Schrittmotorregelung. Das Einsatzgebiet dieser MCU-Baureihe ist groß: es erstreckt sich vom industriellen Anwendungsbereich über den Sensor- und Metering-Bereich bis hin zur mobilen Messtechnik. Der geringe Stromverbrauch, die Vielzahl der implementierten Analogmodule sowie das flexible Oszillatorsystem sind beste Voraussetzungen für ein breites Einsatzgebiet.

*Herbert Schwarz ist Engineering Technician der MSP430 Engineering Group bei Texas Instruments in Freising.

(ID:223393)