treiber

17. TREIBERSCHALTUNGEN

 

 

DU LERNST HIER...

 

wie du programmgesteuert Geräte mit Strömen bis zu einigen Ampere und Spannungen weit über der Versorgungsspannung des Mikrocontrollers ein- und ausschaltest.

 

 

MUSTERBEISPIELE

 

Der ESP32-Mikrocontroller ist so ausgelegt, dass er auf GPIO-Ports bei 3.3V Gleichspannung bis maximal 40 mA Strom liefern kann (sowohl im Zustand LOW wie HIGHT). Damit kannst du beispielsweise LEDs problemlos direkt über einen Vorwiderstand betreiben. Möchtest du aber Geräte mit höheren Strömen oder mit externen Spannungen schalten. so ist ein Treiber oder eine galvanische Trennung nötig, z.B. mit einem Relay.

Mit kleinem Aufwand kannst du bis zu 16 digitale Signale über die I2C-Schnittstelle mit dem Port Expander PCF8575 schalten. Dies hat auch den Vorteil, dass bei Schaltungsfehlern nicht die Oxocard beschädigt wird.

Alle 16 IO-Ports des Bausteins lassen sich sowohl als Input oder Output konfigurieren. Am besten verwendest du ein Breakout-Board (Bezugsquelle: eBay) und lötest ein I2C-Kabel mit einem Grove-Stecker, sowie zwei 8 polige Stift- oder Sockelreihen ein.

 

 

Beim Einschalten sind alle Ports als Input mit einem internen Pullup von etwa 50 kOhm definiert. Etwas speziell ist die Eigenschaft, dass die Ports als Output nur nach GND (und nicht nach VCC) schalten können (man spricht von einem "Open-Kollektor"-Ausgang). Du definierst im Unterschied zu vielen anderen GPIOs einen Port softwaremässig nicht explizit als Input oder Output. Schreibst du eine 0 auf den Port, so wirkt er als Output  (mit maximalem Strom von 50 mA), schreibst du eine 1, so ist der Port hochohmig und du kannst ihn nachher als Inputport lesen.

Im nachfolgenden Aufbau verwendest du ein übliches Steckboard mit Jumperkabel und eine externe Spannungsquelle von 5 V, z.B. eine PowerBank mit einem speziell konfektionierten Verbindungskabel (siehe Kapitel NeoPixel).  Der hier eingebaute Belastungswiderstand von 100 Ohm verhindert, dass die PowerBank  automatisch abschaltet. Mit den Ports P00 bis P07 schaltest du acht LEDs oder einen LED-Array. Wie üblich musst du Vorwiderstände von einigen hundert Ohm verwenden

Das Treiber-Modul pcf857x stellt dir folgende Methoden zur Verfügung:

 read_digital(port)  gibt den Wert am Port zurück (int 0, 1)
 read_all()  gibt den Wert aller Ports zurück (int 0..65535)
 read_all_inv()  gibt den inversen Wert aller Ports zurück (int 0..65535)
 write_digital(port, value)  setzt den Ausganswert (value = 0, 1, für 1 ist Input)
 write_all(value)  setzt alle Ausgangswerte (value = 0..65535)
 write_all_inv(value)  setzt alle Ausgangswerte invers (value = 0..65535)
 set_all()  setzt alle Ports auf 1
 clear_all()  setzt alle Ports auf 0
 toggle(port)  wechselt den Wert des Ports: 0->1, 1->0

Mit dem folgenden Programm baust du einen binären Zähler. Da eine LED leuchtet, wenn auf den Port eine 0 geschrieben wird, musst du v bitweise invertieren oder write_all_inv() verwenden. Die Ausgangswerte bleiben erhalten, solange sie nicht verändert werden (output latch).

Programm:

from pcf857x import PCF8575
from time import sleep

pcf = PCF8575()
v = 0
while True:
    pcf.write_all(~v)
    sleep(0.1)
    v += 1
    if v == 256:
        v = 0
► In Zwischenablage kopieren


Um einen Port als Eingang zu verwenden, schreibst du zuerst mit write_digital(port, 1)  eine 1 auf den Port. Nachher kannst du den von aussen angelegten Wert mit read_digital(port) einlesen. Beim ersten Einschalten des Chips sind automatisch alle Ports als Eingänge (mit einem Pullup von rund 50 kOhm) definiert.

 

 

MERKE DIR...

 

Mit dem Port Expander PCF8575 kannst du bis zu 16 digitale Ein- oder Ausgänge über I2C schalten. Um einen Port als Eingang zu verwenden, schreibst du zuerst eine 1 in den Port. Als Ausgang kann jeder Port maximal 50 mA nach GND schalten. Die Ausgänge sind mit einer Schutzdiode für induktive Lasten geschützt.

 

 

ZUM SELBST LÖSEN

 

 

1.

Schliesse am Port Expander eine LED an und erzeuge ein Blinken mit einer Einschaltzeit von 50 ms und einer Ausschaltzeit von 500 ms.

2.

Du willst in einer typischen Anwendung eine Wechselspannung von ungefähr 20 V bei einem Strom von bis zu 1A schalten, beispielsweise in einer Modelleisenbahnanlage. Du verwendest dazu ein Relais. Die Relaisspule darfst du aber nie direkt am GPIO-Port der Oxocard anschliessen, da das Relais zum Schalten mit 3.3 V eine Strom von mehreren hundert Milliampere zieht und zudem beim Ausschalten induktive Spannungsspitzen entstehen, die den Mikrocontroller zerstören können. Am einfachsten ist es, wenn du ein Relais verwendest, das auf einem Breakout-Board eingebaut ist, da diese meist einen eigenen Treiber für die Relaisspule haben. Zum Schalten wird dabei eine externe Spannung, z.B. 5 V von einer PowerBank verwendet. Der Schalteingang zieht nur einen sehr kleinen Strom und hat keine induktiven Spannungsspitzen. Das Relais-Board kann also direkt am GPIO-Port der Oxocard angeschlossen werden.

Breakout-Board mit Relay (Seed)

Obschon das Relais bis 250V/10 A spezifiziert ist, solltest du zu deiner eigenen Sicherheit nie Spannungen über 30 V verwenden!

 

 


 

ZUSATZSTOFF: WEIT VERBREITETE TREIBERSCHALTUNGEN

 

In klassischen Treiberschaltungen verwendet man für Gleichspannungslasten bipolare Transistoren, MOSFETs oder Darlington-Arrays. Hier drei typische, weit verbreitete Anwendungsbeispiele: