Forum: Mikrocontroller und Digitale Elektronik Relais summt (Atmega32)


von Anja (Gast)


Lesenswert?

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

von juppi (Gast)


Lesenswert?

5V-U messen /welligkeit

Mfg

von holger (Gast)


Lesenswert?

Da fehlt:

a) ein fetter Kondensator
b) ein Netzteil was genug Strom liefert

von Der Dude (Gast)


Lesenswert?

warum braucht man für 48 Relais 48 ULN2803????

hängen die alle am gleichen Portpin???

von Besserwisser (Gast)


Lesenswert?

@ 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.

von Anja (Gast)


Lesenswert?

Oh das hab ich verwechselt!
Es sind 8 ULNs und 48 Relais---

von Anja (Gast)


Lesenswert?

mit je 6 Pins belegt > 6 Relais!

von Der Dude (Gast)


Lesenswert?

Scheint so.

Ein 2803 hat 8 Bit. Wenn ich 48 Relais schalten will, brauche ich also 6 
ULNs und nicht 48.

Comprende?

von Besserwisser (Gast)


Lesenswert?

@ Dude
Aha. Danke.

von Der Dude (Gast)


Lesenswert?

Bitte. Gerne geschehen.

von Anja (Gast)


Lesenswert?

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...

von Der Dude (Gast)


Lesenswert?

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.

von Peter D. (peda)


Lesenswert?

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

von TheMason (Gast)


Lesenswert?

@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.

von Anja (Gast)


Lesenswert?

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...

von Peter D. (peda)


Lesenswert?

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:
1
  i = PINA & (1<<0|1<<3);

Peter

von Ein (Gast)


Lesenswert?

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.

von TheMason (Gast)


Lesenswert?

@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.

von Thomas (kosmos)


Lesenswert?

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

von Anja (Gast)


Lesenswert?

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!

von Andreas K. (a-k)


Lesenswert?

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.

von Andreas K. (a-k)


Lesenswert?

Thomas O. wrote:

> Hast du jeder Magnetwicklung eine Diode in Sperrichtung spendiert?

Die steckt in den ULNs drin.

von Steve (Gast)


Lesenswert?

@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

von Steve (Gast)


Lesenswert?

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?

von Peter D. (peda)


Lesenswert?

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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.