Hardwaredesign mit Mikrocontrollern
Stromversorgung
Vorbetrachtungen
- Eingangsspannungsbereich
- Eingangsspannungsbereich des MSP430: 1.8 - 3.6 V
- Aber auch Eingangsspannungsbereich andere Peripherie-Module sind zu beachten!
- Meist wird eine Auftrennung nach 3.3 V und 5 V benötigt.
- Auswahl der Batterietechnologie entsprechend des Stromverbrauchs und der Batterielaufzeit
Batterie- oder Akkumulatortechnologie
Super-Caps
- Ganz schnell wiederaufladbar mit ganz einfacher Ladeschaltung
- Nutzbar für hohe Betriebsströme
- vergleichsweise geringe Kapazität bei großer Bauform
-
Formel zur Abschätzung der Laufzeit:
\[ t = \frac{\Delta U \cdot C}{I} \]
-
Beispiel:
\[ I = 20\,\mu\text{A},\quad \Delta U = 3.6\,\text{V}-1.8\,\text{V} = 1.8\,\text{V},\quad C = 1\,\text{F}\]\[ t = 90000\,\text{s} = 25\,\text{h} \]→ Nur für kurze Überbrückungen der Stromversorgung bei kleinen Verbrauchern geeignet.
- Wichtige Daten aus dem Datenblatt:
- Maximale Ladespannung
- Maximale Betriebsdauer
SuperCaps entladen sich von selbst. Es fließt meist ein Leckstrom von wenigen Mikroampere.
Batterien und Akkumulatoren des AA/AAA-Standard
- Einfach austauschbar, überall erhältlich
- Wiederaufladen der Akkus meist in einen externen Netzteil
- Vergleichsweise geringe Zellspannung, Verwendung mehrere Batterien in Reihe ohne Probleme möglich
- Kapazität einer AA-Batterie meist > 2000 mAh
- Diese Kapazität wird jedoch nur erreicht, wenn die Batterie fast vollständig entladen wird
Lithium-Knopfzellen
- In verschiedenen Baugrößen und Kapazitäten erhältlich
- Auch als Akkumulator erhältlich, Laden meist in einen externen Ladegerät
- Zellspannung beträgt meist 3 V. Bei Akkumulatoren meist sogar bis 4 V!
- Verwenden eines Batteriehalters, der auf die Platine gelötet wird
Lithium-Ionen- oder Lithium-Polymer-Akkumulatoren
- sehr große Energiedichte! (ca. doppelte von AA-Batterien)
- Zellspannung von 3.6 - 4.2 V
- In sehr verschiedenen Größen und Kapazitäten erhältlich
- Größere Bauformen kommen meist in einer Parallel- oder Reihenschaltung
- Reihen- oder Parallelschaltungen nur vom Hersteller vorgenommen werden, Zellen müssen meist einzeln überwacht werden!
- Ladeschaltung muss meist im Produkt verbaut werden
- Folgende Komponenten für Batteriemanagement werden benötigt:
- Ladeschaltung: Ladeschaltung mit constant current / constant voltage-Methode (maximal 4.2 V)
- over discharge protection: Akkus dürfen maximal bis 2.5 V entladen werden.
- short circuit protection: Der Ladestrom muss begrenzt werden.
- Spannungswandler: Anpassen der Batteriespannung auf benötigte Betriebsspannung
Möglichkeiten der Spannungswandlung
- Problem: Batteriespannung meist nicht konstant, Batteriespannung muss reduziert oder erhöht werden, um für die Schaltung passend zu sein.
Verpolungsschutz
- Wenn die Batterie vom Nutzer eingelegt werden muss, sollte die Schaltung einen Verpolungsschutz besitzen.
- Eine invertierte Eingangsspannung sorgt in der Regel für eine Zerstörung der Bauteile
DS-Dioden eines CMOS-Inverters:
- Mögliche Lösung: Einbau einer Diode in den Strompfad
- Idealerweise eine Schottky-Diode auf Grund der geringeren Durchflussspannung
- Achtung: Eingangsspannungsbereich verändert sich, da ein zusätzlicher Spannungsfall von circa \(200\,\text{mV}\) hinzukommt
- Link zum Kompendium zum Verpolungsschutz: http://www.lothar-miller.de/s9y/categories/39-Verpolschutz
Lineare Spannungsregler
- Lineare Spannungsregler liefern bei einer variablen Eingangsspannung eine feste Ausgangsspannung
- Die Ausgangsspannung ist entweder durch den IC festgelegt oder kann durch eine Widerstandskombination frei definiert werden.
- Beispiel:
- Die Ausgangsspannung wird jedoch konstant gehalten, wenn gilt: \(U_E > U_A + U_{\text{Drop}}\), ansonsten fällt die Ausgangsspannung auf \(U_A = U_E-U_{\text{Drop}}\)
- Am Beispiel des LM7805:
\(U_\text{Drop} = 2\,\text{V}\), \(U_\text{Reg} = 5\,\text{V}\)
-
Stromfluss:
\[ I_E = I_A + I_{\text{quiescent}} \]Für den LM7805 gilt: \(I_{\text{quiescent}} = 4.2 \,\text{mA}\)
- Verlustleistung:\[ P_V \approx (U_E-U_A) \cdot I_A \]Je größer die Spannungsdifferenz, desto größer die Verlustleistung
ggf. muss der Spannungsregler mit einen Kühlkörper versorgt werden
- Deutlich besser für den Low-Power-Einsatz geeignet: Low Dropout Regulator (LDO)
- z. B. MCP1700-3302
\(I_{\text{quiescent}} = 1.6 \,\mu\text{A}\), \(U_{\text{Drop}} = 178\,\text{mV}\)
Aber Achtung: \(U_{E, max} = 6\,\text V, I_{A, max} = 250\,\text{mA}\)
Buck-Converter
- schaltender Gleichspannungswandler
- Ziel: kleinere Ausgangsspannung \(U_A\) als Eingangsspannung \(U_E\) bei möglichst großem Wirkungsgrad
- Steuerung des Schalters S durch Regelkreis, entsprechend der Ausgangsspannung
- Erzeugen eines PWM-Signals durch den Schalter
- Spule L und Kondesator C sorgen für einen konstanten Stromfluss / konstante Spannung am Ausgang, auch wenn der Schalter geöffnet ist
→ Deutlich erhöhter Schaltungsaufwand im Vergleich zu LDO
→ Low-Power-Anwendung meist sehr aufwendig erreichbar
→ Eher für große Spannungsdifferenzen und große Ströme gedacht!
Boost-Converter
- schaltender Gleichstromwandler
- Ziel: Erzeugen einer größeren Ausgangsspannung \(U_A\) als Eingangsspannung \(U_E\)
- Nutzen der Selbstinduktionsspannung der Spule zum hochtransformieren der Spannung
- Glätten der Ausgangsspannung durch einen Kondensator
→ Effektiver Weg eines Spannungsaufwärtswandlers auch für große Lasten
→ Anwendung: Betreiben eines Mikrocontrollers mit einer AA-Batterie
→ Geringe Ruheströme meist nur sehr aufwendig erreichbar
- Empfehlenswerte Einführungsvideos von GreatScott:
- Buck Converter: https://www.youtube.com/watch?v=m8rK9gU30v4
- Boost Converter: https://www.youtube.com/watch?v=QnUhjnbZ0T8
- Buck/Boost Converter: https://www.youtube.com/watch?v=ZiD_X-uo_TQ
Ladungspumpen
-
Ziel: Vervielfachen der Eingangsspannung mit Hilfe einer Kondensatorschaltung
\[U_A = 2 \cdot U_E - 2 \cdot U_D\]
→ Einfacher und günstiger Weg eine Spannungsaufwärtswandlung für kleine Lasten
→ z. B. Betreiben eines \(5\,\text V\)-LCD mit einem \(3.3\,\text V\)-Mikrocontroller
- Verwenden eines Mikrocontroller-Pins zum Erzeugen der Rechtecksignals an C1
- Verwenden des ACLK-Ausganges für die Erzeugung des Rechtecksignals
Konfigurieren des P2.0 als ACLK-Ausgang
Fehlerquellen beim der Strommessung bei LPM-Anwendungen
- Problem: Sehr große Dynamik des Stromverbrauchs: z.B. Messbereich \(100\,\text{nA}\) bis \(100\,\text{mA}\)
- Grundprinzip der herkömmlichen Strommessung:
- Verwenden eines Serienwiderstandes (Shunt) zur Wandelung des Stromes in einen kleine Spannungfall
- Bürdenspannung (burden voltage) wird durch den ADC des Multimeters gemessen
- Bürdenspannung bedeutet zusätzlichen Spannungsfall auf dem Messleitung
- Beispiel für die Größe des Shunt-Widerstandes
- Was passiert, wenn der Mikrocontroller den LPM verlässt?
- Vorher: \(I = 1\,\mu\text A\) → \(R_S = 100\,\Omega\) → \(\Delta U = 100\,\Omega \cdot 1\,\mu\text A = 100\,\mu\text V\)
- Mikrocontroller verlässt den LPM und eine zusätzliche Last wird aktiviert, Multimeter kann Messbereich nicht schnell genug wechseln:
\(I = 10\,\text{mA}\) → \(\Delta U = 100\,\Omega \cdot 10\,\text{mA} = 1\,\text V\) - Es kommt für einen kurzes Zeitpunkt zu einen Spannungfall von \(1\,\text V\) über dem Messgerät, die Betriebspannung des MCU bricht zusammen → MCU resetet sich!
- Mögliche Lösungen:
- Verwenden eines größeren Messbereiches → niederohmiger Shunt
- Automatisches Umschalten des Messbereiches vor dem Lastwechsel
- Verwenden eines Vorverstärkers
Möglichkeiten der Datenausgabe
LEDs
Verwenden einzelner LEDs als Statusanzeige
- Typischer Stromverbrauch einer LED: \(1 ... 20\,\text{mA}\)
- Möglichkeiten zur Senkung des Stromverbrauchs:
- LED-Statusanzeige muss durch Interaktion des Nutzers aktiviert werden
- Heart-Beat-Anzeige:
- LED wird immer nur für ein extrem kurzes Zeitintervall aktiviert
- z. B. LED wird für \(1\,\text{ms}\) alle \(2\,\text s\) aktiviert
→ mittlerer Stromverbrauch: \(\overline I = 5\,\text{mA} \cdot \frac{1\,\text{ms}}{2\,\text s} = 2.5\,\mu\text A\)
Möglichkeiten des Multiplexing mehrere LEDs
- LED-Matrix siehe Kapitel 6.3
- Bei einer \(n\times m\)-Matrix werden \(n+m\) Pins benötigt
- LEDs können entweder nur zeilen- oder spaltenweise angesteuert werden
- Verwendung einer LED-Matrix erst ab \(3\times 3\) LEDs sinnvoll:
9 LEDs können mit 6 Pins angesteuert werden - LED-Matrix nur für sehr große LED-Anzahlen sinnvoll
- Verwenden der Charlieplexing-Methode
- Mit \(N\) Pins eines Mikrocontrollers können \(N \cdot (N-1)\) LEDs angesteuert werden
- Entwickler: Charlie Allen von Maxim Integrated
- Beispiel mit \(3\) Pins → \(3 \cdot (3-1) = 6\) LEDs
- Grundprinzip des Ansteuerns der LEDs:
- Pin 1: H-Pegel, Ausgang
- Pin 2: L-Pegel, Ausgang
- Pin 3: Eingang (High-Z)
- Vertauschen der Pins in allen Kombinationen → alle LEDs können angesteuert werden
- Wichtig: Deaktivieren aller LEDs durch alle Pins auf Ausgang, Low
Ansonsten: Floating Pins!
LCD
- Liquid crystal display
- Aufbau:
- Ansteuern von nicht-gemultiplexten LCD (static drive)
- Ansteuern von gemultiplexten LCD
- Verwenden von Mikrocontrollern mit integrierten LCD-Treiber
- Verwenden eines LCD-Driver-IC
→ Ansteuerung über I²C, SPI oder parallele Schnittstelle - Verwenden eines LCD mit integrierten Treiber
z. B. LCD am des Education Systems - Stromverbrach meist \(< 1\,\text{mA}\), aber Hintergrundbeleuchtung \(> 10\,\text{mA}\)
OLED-Displays
- Meist nur als Dot-Matrix-Display erhältlich
- Ansteuerung über SPI, I²C
- Selbstleuchtende Pixel → bessere Kontrast
→ Höherer Stromverbrauch \(>20\,\text{mA}\) - Aber nur angeschaltete Pixel benötigen Strom.
- Organische LEDs → Einbrenneffekte durch organische Reaktionen!
E-Ink-Displays
- Meist sehr hohe Pixeldichte
- Großer Vorteil: kein Stromverbrauch zum Erhalten der Anzeige
- Pixel besitzen einen bistabilen Zustand!
- Sehr langsame Aktualisierungrate (bis 10 sec)
- Meist keine Abstufungen der Intensität möglich (entweder schwarz oder weiß)
USB-UART-Wandler
- Anwendungsbeispiel:
- MSP430 speichert Daten im Flash
- Einmal pro Monat wird das Messsystem über UART an einen Auswerte-PC angeschlossen
- Alle aufgenommenen Daten werden übertragen
-
Typische USB-UART-Wandler:
-
FT232R
- Der USB-UART-Wandler von FTDI (USB-UART-Wandler werden manchmal auch als FTDI-Chips bezeichnet)
- ACHTUNG! Nicht alle FT232R sind Originale! Probleme mit Treiber oder Timing möglich!
-
MCP2221A
- UART, I²C und GPIO-Wandler
- weitere: CH430, CP2104, ...
- Python-Programm
import serial ser = serial.Serial('/dev/ttyUSB0') # oder 'COM1' ser.write('hello') line = ser.readline()
weitere Informationen: https://pyserial.readthedocs.io/
- C# (Visual Studio mit GUI-Designer)
-
Bluetooth-Module
- Verwenden einer Bluetooth-Verbindung zum Übertragen von Daten vom MSP430 zu einen Smartphone (Android App)
- Grundprinzip:
- Daten werden von MSP430 über UART an Bluetooth-Modul übertragen.
- Bluetooth-Modul sendet Daten mit Bluetooth Serial Port Protocol (SPP)
- Bluetooth-Module
- HC-05 / HC-06
- HC-05 / HC-06
- Achtung! Sehr hoher Stromverbrauch bis \(60\,\text{mA}\)
- Bluetooth 4.0 BLE
- Deutlich geringere Stromverbrauch mit Bluetooth Low Energy (ca. \(1\,\text{mA}\))
- Ähnliche Ansteuerung über UART
- Android Programme müssen angepasst werden, da SSP nicht im BLE-Standard existiert
- Typische Controller: Texas Instruments CC2540, CC2640R2F (MSP432 mit Bluetooth-Funktionalität)
Möglichkeiten der Dateneingabe
Taster
-
Verschaltung eines Tasters:
- R1: Pullup-Widerstand
- R2: Schutzwiderstand (wenn P1.0 auf Ausgang, High, Taster wird gedrückt)
- C1: Kondensator zum Entprellen
- Vereinfachter Schaltplan:
- Pullup-Widerstand: Verwenden des internen Pullup-Widerstandes des MSP430
- Schutzwiderstand: P1.0 wird durch die Software nie als Ausgang, High konfiguriert
- Entprell-Kondensator: Software-Entprellen
- Programmierung des internen Pullup/Pulldown-Widerstände:
Programmierung des internen Pullup/Pulldown-Widerstände
- PxREN: Aktivieren des Pullup/Pulldown-Widerstandes
- PxOUT: Im Input-Modus: 0: Pulldown, 1: Pullup
- Stromverbrauch eines Tasters:
- Geöffneter Taster: \(I = 0\)
- Geschlossener Taster: Stromfluss über den Pullup-Widerstand
Datenblatt des MSP430F2274: typische \(R_\text{Pull} = 35\,\text k\Omega\)
→ \(I = \frac{3.3\,\text V}{35\,\text k\Omega} = 94.3\,\mu\text A\) - Taster sollten immer nur einen Bruchteil der Betriebslaufzeit geschlossen sein.
DIP-Schalter
- Funktionsweise:
- mehrere kleine Schalter
- werden an die parallele Schnittstelle angeschlossen
- Kodieren von Einstellungen, meist Adressen
- Ansteuerung ähnlich der Taster
- Problem: konstanter Stromverbrauch von \(\approx 100\,\mu\text A\) durch Pullupwiderstand pro geschlossenen Taster
-
Lösung:
-
Verwenden der internen Pullupwiderstände des MSP430
- Idee: Pullupwiderstände werden nur eingeschaltet, wenn der Schalterzustand ausgelesen werden muss
→ Interrupts können nicht verwendet werden, Polling ist notwendig! - Programmierung
P1DIR &= ~(BIT0 + BIT1 + BIT2 + BIT3); P1REN |= BIT0 + BIT1 + BIT2 + BIT3; while (1) { P1OUT |= BIT0 + BIT1 + BIT2 + BIT3; // Pullups uint8_t dip = P1IN & (BIT0 + BIT1 + BIT2 + BIT3); P1OUT &= ~(BIT0 + BIT1 + BIT2 + BIT3); // Pulldowns // Andere Rechenaufgaben }
→ Kein Stromfluss, wenn Pulldown-Widerstände verwendet werden.
-
Taster-Matrix
- Varianten zum Multiplexen von Tastern
- Verwendung z. B. in Tastaturen oder Keypads
- Hier:
- Immer nur ein Row-Pin wird auf Masse gezogen, die anderen auf High-Z
- Gedrückte Taster der ausgewählte Reihe erscheinen mit LOW-Pegel an den Col-Pins
- Dioden können wegelassen (überbückt) werden, jedoch dann kann das Drücken mehrerer Tasten zu Fehlern kommen
(Taster die nicht gedrückt sind, werden als gedrückt erkannt)
Messen der Batteriespannung
- Verwenden der internen Batteriespannungsmessung des ADC10
- INCH = 0b1011 = 11
- \(V_\text{ref} = 1.5\text{ oder }2.5\,\text V\)
- Es wird die Eingangsspannung des MSP430 gemessen (\(V_{CC}/AV_{CC}\)) !
→ Einsatz mit Spannungswandler nicht möglich, da \(U_\text{Bat} \neq V_{CC}\) - Messbereich:
Bei \(V_\text{ref} = 1.5\,\text V\) → \(1.5\,\text V < V_{CC} < 3.0\,\text V\)
Bei \(V_\text{ref} = 2.5\,\text V\) → \(2.5\,\text V < V_{CC} < 5.0\,\text V\)
- Verwenden eines externen Spannungsteilers zum Anpassen des Messbereichs auf 1,5 V oder 2,5 V
- Durch eine Spannungsteiler fließt ein konstanter Strom von \(I = \frac{U_{Bat}}{R_1+R_2}\)
- Spannungsteiler muss durch einen MOSFET deaktiviert werden.
- MOSFETs besitzen im angeschalteten Zustand ein sehr kleine \(R_{ON} < 1\,\Omega\)
- Für \(R_{ON} << R_1, R_2\) kann der Einfluss des MOSFETs vernachlässigt werden
- MOSFET wird immer nur während der Messung der Batteriespannung aktiviert (VBAT_EN = H)
Besonderheiten der Eingänge des MSP430
Störeinkopplung
- Die Eingänge der parallelen Schnittstelle des MSP430 sind extrem hochohmig.
- Werden keine Pullup- oder Pulldownwiderstände verwendet, so können kleinste Störströme zum Aussteuern des Eingäng folgen
- z. B. Störspannungen durch kapazitive Einkopplung von Quellen mit großen Quellspannungen
(230 V Netzleitung) - Probleme treten auf:
- Bei gestörten Messleitungen am hochohmigen Eingang des MSP430
- Wenn der Störer und der MSP430 die gleiche Masseverbindung aufweisen
- Lösungen:
- Trennen der Masseverbindung (galvanische isolierter Transformator, Batteriebetrieb)
- "Niederohmigerer" Eingang ist zu verwenden:
- Verwenden eines Parallelwiderstandes zum Eingang des MSP430
- Bei starken Störern hilft die Verwendung von Optokopplern für die galvanische Trennung
Floating-Pins
- Eingangspins, die offengelassen werden, nennt man Floating-Pins
- Floating-Pins sorgen für einen erhöhten Stromverbrauch
- durch Pegelwechseln bei Störeinkopplung
- CMOS-Schaltungen benötigten erhöhten Stromverbrauch \(V_{CC}/2\)
Hardwareimplementierung eines MSP430
- Wie kann ein MSP430 auf eine Platine oder Steckbrett gebracht werden?
- Welche Bauteile werden im Minimalfall benötigt?
Programmierung eines MSP430
JTAG
- Joint Test Action Group
- IEEE-Standard, der die Methodik für das Testen und Debuggen intergrierter Schaltungen auf Leiterplatten beschreibt
- Viele Mikrocontroller unterstützen JTAG und werden über JTAG programmiert. (ATmega328P, manche MSP430)
- Signalleitung der JTAG-Schnittstelle:
- TDI: Test Data Imput
- TDO: Test Data Output
- TCK: Test Clock
- TMS: Test Mode Select
- TRST: Reset der Testlogik
- Signalverlauf vergleichbar mit SPI
- Für die Programmierung über JTAG wird ein MSP430-FET benötigt:
Spy-Bi-Wire
- Von TI entwickeltes Protokoll zur Übertragung des JTAG-Protokolls über zwei Datenleitungen.
- Vor allem MSP430 mit geringer Pinanzahl können meist nur über SBW programmiert werden.
- Datenleitungen:
- SBWTDIO: Spy-Bi-Wire Test Data In/Out, meist mit RST-Pin verbunden.
- SBWTCK: Spy-Bi-Wire Test Clock, meist mit TEST-Pin verbunden
- Der MSP430G2553 kann nur über SBW programmiert werden. Das Launchpad MSP-EXP430G2ET kann als SBW-Programmer für eine Vielzahl von weiteren MSP430 verwendet werden.
Minimaler Aufbau MSP430G2553
- R1: Pullup-Widerstand für den Reset-Pin wichtig!!!
- C1: Großer Entkoppelkondensator
- C2: Kleiner Entkoppelkondensator, möglichst nah an DVCC-Pin
- JP1: Programmieranschluss für Spy-Bi-Wire
- Q1: optionaler Uhrenquarz für ACLK, möglichst nahe an XIN und XOUT Pin, symmetrisch
Minimaler Aufbau MSP430F2274
- Im Unterschied zum G2553 besitzt der F2274 getrennte Pins für digitale und analoge Betriebsspannung.
- Zur Rauschunterdrückung sollte AVCC zusätzlich gefiltert werden.
- Der Massesternpunkte sollte nahe des AVSS-Pins aufgebaut werden