TigerJython4Kids | HomeTurtlegrafikRobotikDatenbanken |
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.
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:
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
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 |
|
ZUSATZSTOFF: WEIT VERBREITETE TREIBERSCHALTUNGEN |
In klassischen Treiberschaltungen verwendet man für Gleichspannungslasten bipolare Transistoren, MOSFETs oder Darlington-Arrays. Hier drei typische, weit verbreitete Anwendungsbeispiele: |