Hallo!
Ich habe 48x 5V-Relais über je einen UlN2803 (also 48 ULN2803)mit dem
Microcontroller verbunden.
Die ULNs werden mit der gleichen Spannung versorgt wie die Relais (5V).
d.h. Pluspol und Minuspol vom 5V-Netzteil gehen an die ULNs und das
Ausgangssignal des ULN und die Phase des Netzteils an das Relais.
Bei einem Relais hat dies alles fein geklappt, aber bei 48 Relais summen
die Relais nur. Woran kann das liegen? Liegt zu wenig Spannung an? Oder
ist was nicht richtig verlötet? Bedeutet das Summen des Relais ein
schnelles OFF und On schalten im Loop? Es ist ein Schließer-Relais und
bekommt vom Microcontroller ein On-Signal zum Schließen, dann soll es
eine Weile warten (weiterhin on)und dann durch ein Off-Signal wieder
öffnen. Aber genau in diesem Zeitraum summt es nur. Ich vermisse das
einfache Klicken, dass ich beim Versuch mit einem einzigen Relais hatte.
Woran mag das liegen? Kann mir jemand helfen?
Gruß Anja
@ Dude
>warum braucht man für 48 Relais 48 ULN2803????>hängen die alle am gleichen Portpin???
Habe ich gerade einen Hänger? Wahrscheinlich weil die gerade nicht an
einem einzigen Portpin hängen.
ja ich weiß, dass es 8 Ausgänge gibt, aber das ist schon alles so
geplant, wäre zu kompliziert zum Erläutern! also es geht ja auch via
Multiplexer und Latches, sonst könnte ich ja nie 48Relais mit einem
Mikrocontroller schalten.. Deswegen habe ich das für das Forum
vereinfachen wollen-
Dazu kommt noch andere Frage: wenn ich 2Pins des Porta als Eingangspins
nutzen will, und nur 6Pins als Ausgang > wie programmier ich das am
geschicktesten? Ich wollte schon komplette Bytes an den Port anlegen,
bzw. Zahlen wie 255 für alle Pins auf on. Aber gleichzeitig wollte ich
an den ersten beiden Pins, also Porta.0 und Porta.1 etwas einlesen? Gibt
es da eine Lösung? Portc ist für die Multiplexer besetzt...
Auweh. Do feits vom Boa weg, wie wir in Bayern sagen.
Lies doch mal das Tutorial, das ist sehr gut geschrieben und vermittelt
das Grundwissen, das man braucht, um z. B. Ports zu programmieren.
Anja wrote:
> ja ich weiß, dass es 8 Ausgänge gibt, aber das ist schon alles so> geplant, wäre zu kompliziert zum Erläutern! also es geht ja auch via> Multiplexer und Latches, sonst könnte ich ja nie 48Relais mit einem> Mikrocontroller schalten..
Für 48 Relais gibts ne Standardlösung. Am Microcontroller braucht man 3
Ausgangspins dafür:
http://www.mikrocontroller.net/articles/AVR-Tutorial:_Schieberegister
Und in nem TPIC6B595 hat man die Treiberstufen gleich mit drin.
Peter
@anja
was bei 48 relais am wichtigsten ist ist die spannungsversorgung (UND
deren glättung)
ohne ausreichende glättung (rechne spasseshalber mal nach wieviel strom
48 relais im angezogenen zustand ziehen) macht dein mikrocontroller
alles außer dem was du machen willst ...
und das die relais summen dürfte/könnte auch daran liegen. such vllt.
mal an der stelle.
DUDE!
Bitte nicht falsch verstehen! Ich weiß ja wie man Ports programmiert.
Aber mir geht es um Tricks...Klar kann ich jedes Pin einzeln deklarieren
und 1 oder 0 angeben... aber ich wollte mit dem ganzen Port auf einmal
arbeiten, um dann z.b. mit Incr die Bytezahl (1-8) zu erhöhen und dann
die Adresspins des Multiplexers anzusprechen...aber dann wird ja
automatisch für die ersten 6 Bytes (wenn jedes Byte ein Pin mehr
aktivieren soll) bei Porta.0 und Porta.1 eine 0 zugewiesen (bei Byte 7
und 8 würde je Porta.1 und Porta.2 auf 1 gehen) Was ist wenn am Eingang
aber 5V reinkommen > dann haut das ja nicht hin. Dann überschneiden sich
ja die (Byte)belegung des Porta + die Ablesung des Inputs von Porta...
Anja wrote:
> und 8 würde je Porta.1 und Porta.2 auf 1 gehen) Was ist wenn am Eingang> aber 5V reinkommen > dann haut das ja nicht hin. Dann überschneiden sich> ja die (Byte)belegung des Porta + die Ablesung des Inputs von Porta...
Alles kein Problem, dazu sind die logischen Operatoren da (AND, OR
usw.).
Z.B. Du willst PINA.0 und PINA.3 einlesen:
Ach daher, die Ansteuerung ist multiplex, dann sollte min jedes Relais
einen Stützkondensator bekommen, wenn es überhaupt weg zu bekommen
ist..Welche Quarzfreuenz? Je höher je besser!!
Besser ist es aber mit Latch zu arbeiten.
@anja
weiß jetzt nicht ob ich mich in die nesseln setze (da ich nicht den
kompletten beitrag und deren links gelesen habe), aber :
eine multiplex (ohne nachgeschaltete flipflops/latches) ansteuerung
würde ich eher nicht machen, da du immer das problem hast das nur zu
einem x'tel (x ist die anzahl der ports) der spannung an den relais
anliegt. und das kann dann u.u dazu führen das im mittel die spannung an
den uln nicht ausreicht das relais durchzuschalten.
würde empfehlen vor den uln ein 74595 schieberegister zu setzen.
dieses hat ein load-signal mit dem der aktuelle zustand an eine 2.
"reihe" flip-flops übergeben wird und diesen bis zum nächsten load hält.
somit kommen auch an deinem uln immer nur "komplette" einsen und nullen
an und eben nicht zeitmultiplext was einer pwm entspricht -> keine 5V am
uln sondern im mittel eben nur 5v/x.
wieviel Ohm hat eigentlich die Magnetwicklung eines Relais? Wie stark
ist dein Netzteil das den Strom für die ULN2803s liefert? Hast du jeder
Magnetwicklung eine Diode in Sperrichtung spendiert?
Angenommen eine Relaiswicklung hat 100 Ohm
5 V /100 Ohm = 50 mA pro Relais
50 mA * 48 = 2,4 Ampere Dauerstrom werden benötigt im Einschaltmoment
einiges mehr also ausreichend Elkos einplanen, sonst bricht die Spannung
ein. Der Störimpuls bestimmt 100V könnte noch sein übriges dazutun also
umbedingt Dioden verbauen, falls das Relais keine integriert hat
http://www.mikrocontroller.net/articles/Bild:Relais_npn.png
Vielen Dank Peter!
Die Relais summen jetzt nicht mehr. Hab nun die Latches mit der Spannung
des Microcontrollerkreislaufes versorgt und die ULNS mit dem, der
Relais.. Also getrennte Kreisläufe...So funktioniert es. jetzt mal
gerade laufen!
In solchen Fällen kann es sich als sinnvoller erweisen, die Relais mit
12V zu betreiben und dem Controller einen eigenen Regler zu verpassen.
Dann verpesten die Relais nur die 12V-Versorgung und nicht auch die des
Controllers. Und die 12V-Schiene muss nicht einmal geregelt sein,
12V-Relais sind flexibel.
@Peter
Z.B. Du willst PINA.0 und PINA.3 einlesen:
i = PINA & (1<<0|1<<3);
>>> wie soll das denn genau funktionieren? in BASIC geht das auch?
kannst du das ein wenig mehr erläuten? ist so abstrakt. danke
hab das ja so verstanden, dass anja ein pin mit 0 deklarieren will/muss
und gleichzeitig ja auch an dem pin einlesen mag.
wenn das pin als input-pin konfiguriert ist, funktioniert da überhaupt
eine wertzuweisung im programm oder reagiert es prinzipiell nur auf
außen und ignoriert die wertzuweisung? liest es nur das ab was reinkommt
mittels getadc?
Steve wrote:
> @Peter>> Z.B. Du willst PINA.0 und PINA.3 einlesen:>> i = PINA & (1<<0|1<<3);>>>>>> wie soll das denn genau funktionieren? in BASIC geht das auch?> kannst du das ein wenig mehr erläuten? ist so abstrakt. danke
Der Klammerausdruck erzeugt eine Bitmaske mit ner 1 an 0. und 3. Stelle,
also 0x09.
Damit wird der Eingang verundet und damit sind alle anderen Bits in i
immer 0.
i kann also nur die Werte 0x00, 0x01, 0x08, 0x09 annehmen, völlig egal,
wie die anderen Portbits stehen.
Peter