Relais_oder_groessere_Verbraucher_am_AVR
(armin77, 31.01.2013, 15:27:27)
Ein Ausgang des AVR bringt bis zu 40mA Ausgangsstrom bei 5V. Möchte man ein Relais oder Motor ein oder aus
schalten ist das aber viel zu wenig.
Man muß einen Transistor dazwischen schalten.
Damit lassen sich dann auch höhere Spannungen als 5V schalten.
Beim Motor darf man die Freilaufdiode nicht vergessen.
Diese muß mindestens für den Motornennstrom dimensioniert sein.
Hier einige Schaltungsbeispiele mit LED, Motor und Relais.
Hier der Anschluß von mehreren LED`s an den Port des AVR.
Zuerst mit 5V Betriebsspannug.
Bei 12V Betriebsspannung für die LED empfiehlt es sich die LED in Reihe zu schalten,
um die Verlustleitung am Widerstand so klein wie möglich zu halten.
Es ist darauf zu achten das alle GND / Masse miteinander verbunden sind
Hier eine Übersicht der Spannungen und des fließenden Stromes.
Habe als Vorwärtsspannung für die LED's 2,5V gewählt. Diesen Wert muß man an die
verwendeten LED's anpassen.
ULN 2803
Möchte man viele Relais, LED`s oder kleine Motoren an den AVR anschließen endet das im "Transistorgrab".
Dafür gibt es den ULN2803. Dieser hat 8 Treiber eingebaut die bis zu 500mA nach GND schalten können.
Zusätzlich ist bei jedem Treiber eine Freilaufdiode eingebaut.
Hier ein Bild des ULN2803
Auf diesem Bild sieht man die einzellne Verstärkerstufe.
Will man die integrieten Freilaufdioden nutzen, muß man den Pin "COMMON" mit der Versorgungsspannung der Verbraucher
verbinden. Diese darf bis zu 50V betragen.
Da die Darlington-Stufe bereits einen Vorwiderstand besitzt können wir sie direkt an unseren AVR oder anderen IC anschließen, der
mit TTL Pegel arbeitet.
Hier mal ein Beispiel für das Ansteuern von mehreren Relais mit einem ATMega8:
Ich habe mir zum Basteln eine Platine mit zwei ULN2803 Treibern gebaut.
Die Ein- und Ausgänge gehen auf Schraubklemmen.
Damit lassen sich sogar kleine Motoren mit dem AVR ein- und ausschalten.
Motortreiber L298
Möchte man einen oder zwei Motoren mit dem AVR steuern bietet sich der L298 an.
Das ist eine sogenannte H-Brücke und kann zwei Motoren mit jeweils 2A Strom steuern.
Hier das Schaltbild des L298.
Genaueres könnt ihr im Artikel des Strippenstrolch nachlesen.
http://www.str...eiber-298.html
Diesen gibt es fertig als Modul für kleines Geld zu kaufen.
Was müssen wir denn nun alles und wo anschließen?
Wie funktioniert der L298?
Die Freigabe-Eingänge sind auf dem Modul schon mit Jumpern auf 5V gelegt.
Da müssen wir nichts mehr tun.Werden sie auf 0V gelegt läuft der Motor aus.
Links und rechts auf der Platine können die Motoren angeschlossen werden.
An den Schraubklemmen vorne wird die Motorspannung angeschlossen.
Dieses Modul hat einen 5V Festspannungregler mit dem man den AVR versorgen kann.
Diese 5V liegt auf der rechten Schraubklemme an.
Die Ansteuerung geschieht mit den Stiftleisten.
Dort sind die Inputs 1-4. Diese werden mit dem AVR so angesteuert wie in der Tabelle beschrieben.
Ich habe mir mir mein Projektboard geschnappt und ein kleines Beispielprogramm geschrieben.
Zufällig war ein ATMega 32 drauf. Aber ein ATMega 8 reicht natürlich auch dicke aus.
Ich lasse in dem Programm den Motor zuerst 8 Sekunden nach rechts laufen.
Dann schalte ich ihn aus und warte eine Sekunde bis er wirlich steht.
Danach läuft er 8 Sekunden im Linkslauf. Dann wird er ebensfalls abgeschaltet und eine
Sekunde gewartet bis er steht und das Programm fängt wieder von vorne an.
An Portd.7 und Portc.0 ist eine LED mit Vorwiderstand angeschlossen die anzeigt
in welche Richtung der Motor gerade läuft.
$regfile = "m32def.dat"
$crystal = 1000000
$hwstack = 40
$swstack = 16
$framesize = 32
Config Portd.7 = Output
Config Portc.0 = Output
Config Portc.1 = Output
Config Portc.2 = Output
Do
Portc.1 = 1
Portc.2 = 0
Portd.7 = 1 'LED Rechtslauf
Wait 8
Portc.1 = 0
Portc.2 = 0
Portd.7 = 0 'LED Rechtslauf
Wait 1
Portc.1 = 0
Portc.2 = 1
Portc.0 = 1 'LED Linkslauf
Wait 8
Portc.1 = 0
Portc.2 = 0
Portc.0 = 0 'LED Linkslauf
Wait 1
Loop
End
$crystal = 1000000
$hwstack = 40
$swstack = 16
$framesize = 32
Config Portd.7 = Output
Config Portc.0 = Output
Config Portc.1 = Output
Config Portc.2 = Output
Do
Portc.1 = 1
Portc.2 = 0
Portd.7 = 1 'LED Rechtslauf
Wait 8
Portc.1 = 0
Portc.2 = 0
Portd.7 = 0 'LED Rechtslauf
Wait 1
Portc.1 = 0
Portc.2 = 1
Portc.0 = 1 'LED Linkslauf
Wait 8
Portc.1 = 0
Portc.2 = 0
Portc.0 = 0 'LED Linkslauf
Wait 1
Loop
End
Hier ein Bild vom Versuchsaufbau: