Relais summt (Atmega32)

Gast #900515
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
Gast #900546
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...
Gast #900707
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.
#900714
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
Gast #900721
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.
Gast #900722
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...
#900727
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
Gast #900728
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.
Gast #900736
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.
#900763
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
Gast #901344
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!
#901348
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.
Gast #901710
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
Gast #901731
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?
#901750
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren