0ULN2803A Buffer
Angelegt Montag 06 Mai 2024
Wie man einen Buffer Chip nutzen kann um die Ausgänge eines Raspberry Pi zu schützen. Der Buffer verhindert eine Überlastung des Raspbbery Pi durch zu hohe Ausgangsströme.
Am Ausgang des Buffer Chips können Lasten bis je 500 mA und 50V geschaltet werden. Für induktive Lasten ist eine Freilaufdiode eingebaut. Diese führt überschüssige Spannung an den COM Port ab.
Für noch größere Lasten, können die bis zu 8 Ports parallel geschaltet werden. Alle Eingänge (1..8) befinden sich auf einer Seite des Chips und alle Ausgänge (18..11) auf der gegenüberliegenden Seite.
In der Schaltung unten ist nur eine kleine Last in Form eine roten LED angeschaltet. Es müsste daher der COM Port nicht mit VCC verbunden werden. Dies ist nur bei induktiven Lasten wie z.B. einer Relais-Spule oder einem Motor erforderlich.
Der ULN2803A wirkt wie ein Schalter nach GND. Wenn an Pin 1 ein Signal (High) anliegt, dann wird der Port 18 auf GND gezogen. Die Kathode der LED ist mit Pin 18 verbunden und die Anode (+) mit dem 330 Ohm Widerstand, welcher zu VCC verbindet.
Das längere Beinchen der LED ist immer die Anode (+). Eselsbrücke: Das Pluszeichen "+" steht für den Anschluss der Versorgungsspannung (VCC) und für "längeres Beinchen"
Der Vorwiderstand R=330 Ohm begrenzt den maximalen Strom durch die Diode auf U / R = 5V / 330 Ohm = 15 mA.
Die pinctrl¹ - Befehle sprechen die GPIO Ports an. Daher muss in der Tabelle rechts oben (J8:) nachgesehen werden, welcher Pin (in Klammern) zu welchem GPIO Port gehört. Um wie im Beispiel den GPIO Port 4 ein- und auszuschalten wird am Raspberry Pi der physische Pin 7 auf der linken Seite benötigt. Ungerade Pins (1,3,5,7,...) sind hier links und gerade Pins (2,4,6,8,...) rechts. Der Pin 7 ist daher der 4te Pin von oben links. Er ist die Steuerleitung, die den ULN Port Pin1 ansteuert.
Der Befehl der die rote LED einschaltet lautet: pinctrl set (gpio) 4 (als output) op (mit digital high) dh. Ausschalten geht dann mit set 4 op (digital low) dl.
(Texte in (..) Klammern sind nur als Kommentar gedacht.
Der ULN-Chip kann 8 solche Signale vom Raspberry Pi verarbeiten und damit 8 Dinge (LEDs, Relais, Motoren, Greifarme,...) unabhängig voneinander ein- und ausschalten. Damit die Signalleitungen vom Raspberry Pi, welche in den INPUT des ULN gehen keine zu großen Ströme aufweisen, sondern nur gerade soviel, wie zum ansteuern notwendig ist, besitzt der ULN auf der Eingangsseite interne Vorwiderstände (2.7 k Ohm). Man brauch diese daher nicht selbst hinzuzufügen. Diese begrenzen den Strom auf 1 mA ( 3.7V / 2700 Ohm).
Beispiel einer Schrittmotorsteuerung mit ULN-Chip in bash-Skript:
# stepper motor driver in bash script
# stepper.sh
# check parameter
if $# -eq 1
then
exit 1
# calculate number of steps
count=1
num1=$angle
num2=1.422
product=$(echo "scale=4; 0.5 + $num1 * $num2" | bc)
max=${product%.*}
# move the motor
while [ $count -le $max ]
do
pinctrl -p set 3 op dh
pinctrl -p set 11 op dl
pinctrl -p set 5 op dh
pinctrl -p set 3 op dl
pinctrl -p set 7 op dh
pinctrl -p set 5 op dl
pinctrl -p set 11 op dh
pinctrl -p set 7 op dl
count=$((count+1))
# switch off all pins after move
pinctrl -p set 3 op dl
pinctrl -p set 5 op dl
pinctrl -p set 7 op dl
pinctrl -p set 11 op dl
Der Schrittmotor ist mit den Pins 3,5,7 und 11 des Raspberry Pi Zero verbunden. Die Option "-p" sorgt dafür, dass der "physikalische" Pin angesprochen wird und nicht der logische GPIO Pin.
Voraussetzung für das Skript ist der binäre calculator "bc" (sudo apt install bc).exit
Soll der Motor um 90 Grad nach rechts bewegt werden: ./stepper.sh 90
¹ '/usr/bin/pinctrl' ist ein Befehl der zum Linux-kernel (GPIO Subsystem) gehört und als ELF 32-bit LSB executable direkt im Terminal oder einem bash-skript ausgeführt werden kann.
WARNING! pinctrl set writes directly to the GPIO control registers
ignoring whatever else may be using them (such as Linux drivers) -
it is designed as a debug tool, only use it if you know what you
are doing and at your own risk!