Relays enablen

Gast #6240584
Lesenswert?

Moin,

ich habe eine Schiebergister Platine mit 4x 74HC595 die 32 Relays 
ansteuern soll.
nun ist es so, daß die Relays in einem Schaltschrank kommen und 
Stromstoßschalter schalten sollen.

Ich möchte die Relays per ULN2803A ansteuern, jedoch muss es eine 
Möglichkeit geben, diese komplett zu deaktivieren.

Im Falle eines Stromausfalls würden an den Schieberegistern beim 
erneuten einschalten der Betriebsspannung wilde Werte anstehen.
Nun wäre es fatal, wenn dann die Relays schon schalten.
Daher sollte ein Timer mit ca. 3-5sek. die Relays disablen.
In dieser Zeit wird der µC dann ein definiertes Bitmuster von lauter 
Nullen reinschieben.

Die Frage ist, wie kann man die Relays gemeinsam disablen?

Eine etwas aufwendige Idee wäre, 4x 74245 vor die ULNs zu setzen, da 
diese ja einen Enable Eingang haben...

habt Ihr noch einen einfachere Idee?

Gruß,
Wolfram.
#6240607
Lesenswert?

mega-hz schrieb:
> Daher sollte ein Timer mit ca. 3-5sek. die Relays disablen.

Das darf kein Timer sein, das muss der uC selber machen. Was wäre, wenn 
der uC nicht startet oder neue Firmware bekommt? Außerdem gilt für so 
einen Timer ja das gleiche wie für die Schieberegister -- wie verhält 
sich der nach einem Stromausfall?

Unabhängig davon: kann man die Stromstoßrelais nicht direkt ansteuern? 
Ein disable braucht man natürlich trotzdem, aber 32 Relais weniger fände 
ich schon attraktiv.
#6240610
Lesenswert?

mega-hz schrieb:
> Die Frage ist, wie kann man die Relays gemeinsam disablen?

Wozu hat der 74HC595 wohl einen Eingang MR/SRCLR, für Master Reset ?

Der kommt zusammen mit RCLK an den Power-On-Reset und alles ist gut. Da 
RCLK auch bedient werden soll, muss dort ein UND-Gatter dazwischen.

Wahlweise wird bei Power-On-Reset ein FlipFlop gesetzt, dasss OE 
abschaltet und erst durch den uC wieder eingeschaltet wird.

Die Kombination 74HC595 + ULN2803 ist natürlich aus der Steinzeit, man 
nimmt eher TPIC6B595.
Moderator (Firma: Titel) Persönliche Seite #6240621
Lesenswert?

mega-hz schrieb:
> ich habe eine Schiebergister Platine mit 4x 74HC595 die 32 Relays
> ansteuern soll.
Was für "Relays" denn?
Meinst du tatsächlich elektromechanische Relais, die einen 
Treibertransistor brauchen?

> nun ist es so, daß die Relays in einem Schaltschrank kommen und
> Stromstoßschalter schalten sollen.
Warum steuerst du mit den 595 Ausgängen nicht einfach eine 
Transistorstufe an, die die Stromstoßschalter direkt ansteuert? So ganz 
ohne zusätzliche Relays dazwischen?

mega-hz schrieb:
> habt Ihr noch einen einfachere Idee?
Zeichne mal in einem Schaltplan vom Schieberegister-Ausgang bis zum 
Stromstoßschalter auf, was dir so vorschwebt. Mit Versorgungspotentialen 
und  weiteren brauchbaren Informationen wie  Bauteilbezeichnungen und 
-bestellbezeichnungen (besonders interessant ist hier z.B. der nicht 
näher definierte Stromstoßschalter). Dann findet sich sicher ganz 
schnell eine Lösung.
Gast #6240758
Lesenswert?

Michael B. schrieb:
> Die Kombination 74HC595 + ULN2803 ist natürlich aus der Steinzeit, man
> nimmt eher TPIC6B595.

Der reicht leider nicht, da die Relays 5V/250mA pro Stück ziehen.
Am Relays Typ kann ich nix ändern, ist so vorgegeben.

Die Stromstoßschalter direkt anzusteuern fällt aus diesem Grund auch 
weg.

Der einfachste Weg ist wohl tatsächlich die Betriebsspannung der Relays
mittels MOSFET zu trennen, diesen und dem CLR vom 595 mit einem 
Watch-Dog IC bei ankommenden Takt vom µC (NEO-PI) dann auf HIGH zu 
ziehen.
Dieser Watch-Dog sollte solange LOW ausgeben, bis der Keep-Alive-Takt 
kommt.

Welcher WD eignet sich dafür gut?
#6240903
Lesenswert?

mega-hz schrieb:
> Michael B. schrieb:
>> Die Kombination 74HC595 + ULN2803 ist natürlich aus der Steinzeit, man
>> nimmt eher TPIC6B595.
>
> Der reicht leider nicht, da die Relays 5V/250mA pro Stück ziehen.

Dann reicht der ULN2803 auch nicht. Damit bekommen die Relais dank 
Darlington nur 75% ihrer Nennspannung. Schalten die damit sicher ein? 
Brauchen die vielleicht nur 25.0 mA? Für 250 mA und 5 V gibt es fast 
keine 8-fach Treiber. Der TLE8108EM würde es schaffen, hat aber ein 
SPI-Interface.

mega-hz schrieb:
> Dieser Watch-Dog sollte solange LOW ausgeben, bis der Keep-Alive-Takt
> kommt.

Lohnt sich das? Der Watch-Dog kann ja die Stromstoßrelais nicht 
abschalten, also bewirkt er eigentlich garnichts. Für den Zweck sollte 
doch auch der uC-interne Watch-Dog reichen. Ein GPIO wird als 
Reset-Ausgang benutzt und bekommt einen externen Widerstand. Solange der 
GPIO hochohmig ist, ist draußen Reset. Das Programm schaltet den Ausgang 
ein und der interne Watchdog schaltet ihn im Zweifelsfall wieder 
hochohmig.

Wenn es externe Hardware sein soll, würde ich eher die 5 und die 24 Volt 
überwachen und daraus einen Reset abzuleiten, z.B. mit dem TPS3701 
(Ausgang OUTB).
Gast #6240956
Lesenswert?

der ULN2803A kann laut TI Datenblatt 500mA / Kanal!

Der Spannungsabfall von 0.7V ist allerdings bei 5V Relays
tatsächlich viel zu hoch.
Dann wohl doch besser jedem Relays einen kleinen MOSFET verpassen...
(oder denjenigen überreden, doch 24V Relays zu verwenden)

Ich habe gerade mal etwas rumexperimentiert:

Ein 74xx123 hat nie einen definierten Zusatnd beim Einschalten, mal so, 
mal so..
Ein NE567 ist immer LOW beim einschalten, es sei denn, die eingestellte 
Frequenz (hier beim testen 1000Hz) liegt am Eingang an.
Denke der wird es wohl werden.
Gast #6242265
Lesenswert?

So,
die Relays werden durch 24V Typen getauscht, d.h. der ULN2803A
kann problemlos benutzt werden.

der gemeinsame GND Anschluss der Relays wird per MOSFET vom GND 
getrennt.

bei aktivem PWM Ausgang vom NEO-PI wird der 567 Tondecoder,der auf 9khz
eingestellt ist, aktiv, steuert über ein R-C Glied einen 74HCT14 
Schmitt-Trigger an, welcher das Signal etwas verzögert und invertiert.

Dieses invertiertes Signal ist bei aktivem PWM nun HIGH und geht zum 
einem auf den SRCLR Eingang der 595 und zum anderen zu dem MOSFET, der 
die Relays-Betriebsspannung unterbricht.

Das sollte eigentlich reichen an Sicherheit gegen undefinierte 
Zustände...

Danke für Eure Tips und Anregungen...

Bleibt gesund!

Gruß,
Wolfram.
Gast #6242278
Lesenswert?

mega-hz schrieb:
> aber hat der einen definierten Zustand beim Einschalten?
Wenn man den Reset-Anschluss sinnvoll beschaltet, schon.
Hänge einen Kondensator zwischen Reset (\RD) und Gnd, sowie einen 
Widerstand von \RD und VDD.

mega-hz schrieb:
> Ich habe gerade mal etwas rumexperimentiert:
>
> Ein 74xx123 hat nie einen definierten Zusatnd beim Einschalten, mal so,
> mal so..
falsches Experiment. CMOS-Eingänge dürfen nicht in der Luft hängen.
#6242429
Lesenswert?

mega-hz schrieb:
> die Relays werden durch 24V Typen getauscht, d.h. der ULN2803A
> kann problemlos benutzt werden.
>
> der gemeinsame GND Anschluss der Relays wird per MOSFET vom GND
> getrennt.

Das geht so nicht.
Der gemeinsame GND der Relais ist der GND des ULN2803A. Wenn du den 
abschaltest, speist das Relais rückwärts über eine Diode in den Eingang 
des ULN2803A = Ausgang des 74HC595 und zerstört ihn.
Siehe 8.2 FunctionalBlockDiagram 
http://www.ti.com/lit/ds/symlink/uln2803a.pdf?ts=1588095291067

Du musst also die +24V schalten!
Gast #6242739
Lesenswert?

mega-hz schrieb:
> geht zum
> einem auf den SRCLR Eingang der 595

Das ist nutzlos, weil der 595 keinen echten Clr-Eingang hat - der Pin, 
der so bezeichnet ist, setzt die Ausgänge erst nach einem zusätzlichen 
Taktimpuls zurück.

Das ist eine bekannte Designschwäche des 595, zum direkten Abschalten 
kann man nur den OE-Eingang benutzen in Verbidung mit passenden 
Pullup/Downs.

Georg
#6242749
Lesenswert?

mega-hz schrieb:
> die Relays werden durch 24V Typen getauscht, d.h. der ULN2803A
> kann problemlos benutzt werden.

fast richtig, das heißt, der TPIC6B595 kann problemlos benutzt werden. 
Der hat auch keinen richtigen Reset-Eingang (ist ja ein 595), aber beim 
TPIC kann man den Output Enable ohne weiteres benutzen, weil er direkt 
die Relais treibt. Deshalb muss man die 24 Volt nicht unbedingt 
abschalten.
Gast #6243109
Lesenswert?

> Das ist nutzlos, weil der 595 keinen echten Clr-Eingang hat - der Pin,
> der so bezeichnet ist, setzt die Ausgänge erst nach einem zusätzlichen
> Taktimpuls zurück.
>
> Das ist eine bekannte Designschwäche des 595, zum direkten Abschalten
> kann man nur den OE-Eingang benutzen in Verbidung mit passenden
> Pullup/Downs.
>
> Georg

ohh, das wusste ich nicht, ist ja blöd...
mit dem OE wären die Ausgänge deaktiviert, ein Bitmuster reinschieben 
geht aber trotzdem?
Dann könnte die Startroutine ja erst eine Reihe Nullen reinschieben,
dann den PWM starten und damit den OE runterziehen?
Gast #6244545
Lesenswert?

>Wenn man den Reset-Anschluss sinnvoll beschaltet, schon.
>Hänge einen Kondensator zwischen Reset (\RD) und Gnd, sowie einen
>Widerstand von \RD und VDD.

So kenne ich es auch beim 74HC595. Einfach eine RC Zeit definieren am 
Reset Pin und im Microcontroller als erstes per SPI den Zustand senden.
Gast #6244587
Lesenswert?

mega-hz schrieb:
> der ULN2803A kann laut TI Datenblatt 500mA / Kanal!

Der TPIC6B59 auch.

Nur halt nicht auf allen Kanälen.

Beim TPIC6B595 sind 150mA erlaubt wenn alle 8 dauerhaft an sind.

Beim ULN2803 sind es, oh Überraschung, dasselbe Gehäuse, 150mA bei 70 
GradC Umgebungstemp, 187mA bei 50 GradC Umgebungstemp

Das sagt aber nur das Datenblatt von Allegro

https://pdf1.alldatasheet.com/datasheet-pdf/view/120807/ALLEGRO/ULN2803A.html

bei TI muss man mit der Verlustleistung selber rechnen, die verstecken 
die Angabe lieber.

Auch der TPL7407L kann nicht zaubern. Auch die 250mA dauerhaft aus 8 
Kanälen beim TPIC6273 klappen nur bei 25 GradC. Real schafft er eher 
187mA.

Wer 8 x 500mA direkt schalten will, nimmt besser SOT23 Einzel-MOSFETs 
wie IRLML2502, die dann leider keine eingebaute Freilaufdiode mehr 
haben.

Oder er guckt ins Datenblatt des Relais, das oftmals eine 
Haltspannungsreduktion erlaubt, und betreibt einen Kanl nach der 
Einschaltzeit nur noch mit PWM für die verringerte Leistung, und damit 
uhc Verlustleistung. Abe Achtung: Der über die Freilaufdiode fliessende 
Strom geht mit in die Verlustleistung ein.
Gast #6244589
Lesenswert?

georg schrieb:
> Das ist nutzlos, weil der 595 keinen echten Clr-Eingang hat - der Pin,
> der so bezeichnet ist, setzt die Ausgänge erst nach einem zusätzlichen
> Taktimpuls zurück.

Daher verbindet man nicht nur RESET mit Power-On-Reset, sondern auch 
LATCH CLOCK welches dann direkt am Ende des Power-On-Reset die Daten 
übernimmt.
(Und weil man LATCH CLOCK auch nach dem reset braucht, verknüpft man 
Power-On-Reset und LATCH CLOCK mit einem Gatter)

Die Design-Schwäche liegt eher beim georg.
Gast #6244598
Lesenswert?

Ich bin mal neugierig.

Wieso setzt du kein Port-Expander ein via i2c. ?

Und notfalls eine Stützbatterie mit Spannungsüberwachung. Bei ein 
Stromausfall einfach den letzten Wert in eine Speicherstelle schreiben 
und diese bei einen Neustart auslesen.

Gruß

   Pucki
Gast #6245328
Lesenswert?

Stefan ⛄ F. schrieb:
> Alexander K. schrieb:
>> Wieso setzt du kein Port-Expander ein via i2c. ?
>
> In welcher Hinsicht wäre das gegenüber dem TPIC6B595 von Vorteil?

Ich kenne den  TPIC6B595  nicht. Aber ich mag keine Schieberegister. 
Besonders dann nicht, wenn ich nur EIN/AUS Schalten will.

Das ist mein Liebling. 
https://www.mikrocontroller.net/articles/Port-Expander_PCF8574  Es gibt 
aber auch 16 Bit Teile.

Die Ansteuerung geht einfacher, ich muss keine Register überwachen etc. 
. Einfach den Bitstring schicken und das war's. Und ich brauche nur 4 
Drähte. Was allein ein Vorteil ist.

Du könntest diesen String speichern, und bei einen "Neustart" einfach 
wieder senden.

So würde ich das halt machen. Aber wie schon erwähnt, war das eher eine 
Frage als ein Vorschlag.

Gruß

   Pucki
Gast #6245340
Lesenswert?

Alexander K. schrieb:
> Die Ansteuerung geht einfacher

Das sehe ich aber anders. Auch dieses IC wird über serielle Bitfolgen 
angesteuert. Zusätzlich kommt noch die Adressierung hinzu. Außerdem 
brauchst du auch bei diesem IC zusätzliche externe Transistoren?

Schön ist allerdings, dass der Chip intern einen Power-On Reset macht.
#6245415
Lesenswert?

Stefan ⛄ F. schrieb:
> Schön ist allerdings, dass der Chip [PCF8574]
> intern einen Power-On Reset macht.

Macht er nicht, jedenfalls nicht zuverlässig. Der interne Reset 
funktioniert nur, wenn VDD lange genug aus bleibt. Meistens ist das kein 
Problem, wenn man sich an die alte Bauernregel hält "aus, 10 Sekunden 
warten, ein". Aber nicht mal das ist sicher, weil die Abblock-Cs unter 
0.7 Volt kaum noch weiter entladen werden (außer, es gibt eine echte 
Widerstandslast).

Beim PCF8574 steht im Datenblatt, dass er ab 1.2 Volt richtig 
funktioniert. Zwei Zeilen darunter heißt es, dass der interne Reset 
zwischen evt. erst kommt, wenn die Spannung unter 0.8 Volt sinkt. Bei 
einem kurzen Netzausfall kann die Spannung auf 1 Volt sinken und wieder 
stabil werden. Ergebnis: die internen Zustände sind undefiniert, aber es 
gibt keinen Reset.

Es gibt jede Menge ähnliche I2C-Expander, und alle¹ haben dieses 
Problem. Bei den neueren Typen stehen nicht so viele Zahlen im 
Datenblatt, da heißt es einfach "VDD muss unter 0.2 Volt fallen". Das 
Ergebnis ist das gleiche.

Man sollte also einen Typ mit Reset-Eingang verwenden, auf jeden Fall, 
wenn man solche Pläne hat:

mega-hz schrieb:
> Dieser Watch-Dog sollte solange LOW ausgeben,
> bis der Keep-Alive-Takt kommt.


1) von 24- bis 64-Port Chips weiß ich es nur nicht.
Angehängte Dateien:
Gast #6245440
Lesenswert?

Stefan ⛄ F. schrieb:
> Alexander K. schrieb:
>> Die Ansteuerung geht einfacher
>
> Das sehe ich aber anders. Auch dieses IC wird über serielle Bitfolgen
> angesteuert. Zusätzlich kommt noch die Adressierung hinzu. Außerdem
> brauchst du auch bei diesem IC zusätzliche externe Transistoren?
>
> Schön ist allerdings, dass der Chip intern einen Power-On Reset macht.

Naja ich halte es deshalb für einfacher, weil ich in B4R nur 2 Befehle 
brauche um den Status eines x-beliebigen Pin zu ändern. Hier meine Sub 
zum schalten dazu.

Private Sub ic_Write(pin As UInt,pinstate As Boolean)

  Dim result() As Byte = ic.RequestFrom(0x24, 1)
  If pinstate =True Then
    Bit.Clear(result(0),pin)
    ic.WriteTo(0x24, Array As Byte(0x00,result(0)))
  Else
    Bit.Set(result(0),pin)
    ic.WriteTo(0x24, Array As Byte(0x00,result(0)))
  End If
end sub

Deshalb finde ich das einfach. Aber das ist vielleicht auch nur 
Geschmackssache.

Gruß

   Pucki
#6245483
Lesenswert?

mega-hz schrieb:
> Ein 74xx123 hat nie einen definierten Zusatnd beim Einschalten, mal so,
> mal so..

Nö,
läuft bei mir einwandfrei. Nur die R/C-Zeitkonstante hat gewisses heute 
obsoletes Toleranzfeld.
Für Deinen Anwendungszweck aber vernachlässigbar.
Wolfgang schrieb:
> Wenn man den Reset-Anschluss sinnvoll beschaltet, schon.
> Hänge einen Kondensator zwischen Reset (\RD) und Gnd, sowie einen
> Widerstand von \RD und VDD.
Die schon gezeigte Resetbeschaltung kriegt bei mir noch eine Diode 
spendiert.

ciao
gustav
Gast #6245712
Lesenswert?

Alexander K. schrieb:
> ic.WriteTo(0x24, Array As Byte(0x00,result(0)))

> Deshalb finde ich das einfach. Aber das ist vielleicht auch nur
> Geschmackssache.

So eine Funktion implementiere ich für das Schieberegister in 20 
Minuten, dann ist das genau so einfach zu benutzen. Es läuft dann sogar 
mehr als 10x so schnell.

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