Alle Digitalports können als digitale Ausgänge definiert werden. Man ist außerdem in der Lage, zur Laufzeit eines Programms einen oder mehrere Digitalports als Ein- und Ausgang im Wechsel zu betreiben. Im Gegensatz zu den Eingängen werden die digitalen Ausgänge sehr niederohmig. Verbindet man versehentlich einen aktiven Ausgang mit Masse, fließt durch diesen ein relativ hoher Strom, der den Digitalport oder gar den ganzen Mikrocontroller zerstören kann. Der MSP430 kann nur bestimmte Ausgangspannungspegel mit bestimmten Maximalströmen bereitstellen. Die Pegel sind in Tabelle 2.3 aufgelistet.
Pegel | Stromfluss | Minimale | Maximale |
1-Pegel | 6mA | V CC - 0.6V | V CC |
0-Pegel | -6mA | V SS | V SS + 0.6V |
Der Gesamtstrom aller Ausgänge sollte dabei nicht mehr als ±48mA (beim MSP430x161x) betragen. Um den Strom zu begrenzen, verwendet man geeignet dimensionierte Vorwiderstände.
Um einen I/O-Port zu einem digitalen Ausgang umzufunktionieren, muss das für den jeweiligen Pin reservierte Bit im Direction-Register des Byteports gesetzt werden. Mit Hilfe des Output-Registers kann man dann die Ausgangspegel des digitalen Ausgangs einstellen.
Im Listing 2.8 werden die Pins 0 bis 7 des Byteports 1 (also P1.0 bis P1.7) als digitaler Ausgang genutzt. Die äußere WHILE-Schleife ist eine Endlosschleife. Innerhalb der WHILE-Schleife wird der Pegel des Ausgangs bei jedem Durchlauf invertiert (”toggle”). Durch eine nachfolgende FOR-Schleife (eingefügt durch das define) entsteht im Programm eine kleine Pause. Schließt man nun eine LED an einen Pin von PORT 1 an, so wird diese mit einer Frequenz von etwa einem Herz blinken.
Kleine Lasten, die mit einigen hundert μA bis wenigen mA betrieben werden können, lassen sich mit entsprechendem Vorwiderstand direkt an einen Digitalport anschließen. Eine Low-Current-LED benötigt einen Strom von etwa ID = 2mA. Dabei fällt an der Diode je nach Farbe eine Spannung von ca. UD = 1.9V bis 2.1V ab. Der benötigte Vorwiderstand berechnet sich damit zu:
| (2.1) |
Die Beschaltung des Mikrocontrollers beim Betreiben kleiner Lasten ist damit denkbar einfach. Abbildung 2.4 zeigt den Anschluss einer Low-Current-LED an einen Digitalen I/O-Port. Aus der E24-Widerstandsreihe wählen wir für den Vorwiderstand den nächstgrößeren Wert von 860 Ω.
In den seltensten Fällen wird man jedoch mit dem MSP430 direkt echte Lasten treiben. Entweder man nutzt die Digitalports des MSP430 als Kommunikationsschnittstellen zu digitalen Peripheriebausteinen oder man schließt an die digitalen Ausgänge eine Treiberstufe an, wie wir sie im nächsten Abschnitt kennenlernen.
Einfache Leistungsausgänge lassen sich durch Bipolar- oder Unipolartransistoren realisieren. Bei niederfrequenten Anwendungen sind Unipolartransistoren (z.B. MOSFETs oder SFETs) den Bipolartransistoren meist vorzuziehen, da sie eine fast perfekte galvanische Trennung zwischen Steuer- und Lastkreis ermöglichen. Der Strom durch den digitalen Ausgang wird dann vernachlässigbar klein.
Der Widerstand RB sollte so bemessen sein, dass der Strom IB durch den steuernden Digitalport nicht den Maximalwert von etwa 6mA überschreitet. Der maximale Laststrom IC berechnet sich nach:
| (2.2) |
Bei einem Stromverstärkungsfaktor von B = 100 ergibt sich damit ein maximaler Laststrom (IB = 4mA ... 5mA) von etwa 400mA bis 500mA. An der Basis-Emitter-Strecke des Bipolartransistors fällt eine nahezu konstante Spannung von etwa UBE = 0,6V ab. Bei einem Steuerstrom von 4mA ergibt sich für den Vorwiderstand RB der Wert:
| (2.3) |
Bei der Verwendung von Kleinsignaltransistoren wie z.B. des BC107 ist allerdings zu berücksichtigen, dass deren Gehäuse (SOT18) im Allgemeinen nicht für solche Leistungen ausgelegt ist. Der maximale Strom solcher Transistoren ist dadurch auf etwa 100mA limitiert. Für größere Ströme sollte dann lieber auf Leistungsbauteile zurückgegriffen werden, die im Folgenden beschrieben werden.
Die Gate-Source-Kapazität bei gewöhnlichen Unipolartransistoren ist einige hundert Picofarad groß. Damit fließt in das Gate bei niederfrequenten Signalen fast kein Strom. Der Widerstand RG ist jedoch für höherfrequente Signale, wo sich Gate und Source wie eine Kapazität verhalten, erforderlich. Einfache Schaltvorgänge im Bereich einiger Hertz bis Kilohertz kommen jedoch auch ohne einen Gate-Vorwiderstand aus. Der Laststrom ID berechnet sich im Abschnürbereich des Transistors nach der Gleichung:
| (2.4) |
Dabei ist K eine bauteilabhängige Größe. Uth ist die Schwellspannung, die zwischen Gate- und Source-Kontakt mindestens anliegen muss, damit sich im Transistor ein leitender Kanal bildet. Bei niederfrequenten Signalen entspricht UGS je nach Ausgangspegel des digitalen Ausgangs 0V oder 3.3V. Mit einem Spannungsteiler wäre es möglich auch andere Spannungen für UGS bereitzustellen, um einen anderen Strom ID einzuprägen. Für Kleinsignalanwendungen können beispielsweise die Typen BF 256 oder BSS 123, in Leistungsanwendungen der BUZ 71 eingesetzt werden.
Um eine höhere Stromverstärkung bei Bipolartransistoren zu erreichen, kann man auf die Darlington-Schaltung (Abbildung 2.6) zurückgreifen. Für gebräuchliche Bipolartransistoren ergibt sich die Gesamtstromverstärkung der Schaltung zu:
| (2.5) |
Normalerweise wird man jedoch eine solche Darlington-Treiberstufe nicht diskret aufbauen, sondern
bereits integrierte Typen, wie z.B. einen BC517 verwenden.
Sollen Lasten mit großer Leistung geschaltet werden, ist die Verwendung eines Relais eine gute Alternative. Speziell wenn dies mit einer galvanischen Trennung von Schaltkreis und Lastkreis verbunden werden soll (z.B. bei Schalten von Netzspannung). Übliche Schaltkreisspannungen liegen dafür bei 6 V, 12 V oder 24 V. Verbunden mit einer typischen Stromaufnahme zwischen 10 mA und 100 mA wird klar, dass man ein Relais nicht direkt aus dem Digitalport schalten kann, sondern eine entsprechende Vorschaltstufe notwendig ist. Bild 2.7 zeigt eine Realisierung einer solchen Ansteuerung:
Wichtig ist in diesem Zusammenhang die Freilaufdiode D1 (zum Beispiel eine Diode vom Typ 1N4004) parallel zur Relaisspule, die im Allgemeinen immer bei induktiven Lasten verwendet werden sollte. Schaltet der Transistor ab, muss die in der Spule gespeicherte Energie abfließen können. Sieht man dort keine Freilaufdiode vor, entstehen große negative Spannungen (UL = L⋅dI∕dt), die den Transistor zerstören können. Ist die Diode hingegen vorhanden, kann die Energie der Spule über diese abfließen und die Spannung über der Last wird auf die Dioden-Durchlassspannung begrenzt. Primäres Auswahlkriterium für die Diode ist deren maximaler Strom, der sich abhängig von UL,max und dem parasitären Gleichstromwiderstand der Relaisspule ergibt.
Um die notwendige Beschaltung auf ein Minimum zu reduzieren, gibt es eine Vielzahl integrierter Treiberbausteine für Digitalports. Ein Beispiel sind die ICs ULN2001 bis ULN2005, die jeweils sieben Darlington-Treiberstufen enthalten und bis zu 500mA Strom pro Kanal liefern können. Der ULN2003 ist speziell so ausgelegt, dass er direkt an 5V-Logikpegeln betrieben werden kann. Er funktioniert aber auch mit 3.3V. Die IC-Reihe 2801 bis 2805 stellt die gleiche Funktion jedoch für acht Portleitungen zur Verfügung.