Forum: Mikrocontroller und Digitale Elektronik Relays enablen


von mega-hz (Gast)


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.

von Roland F. (rhf)


Lesenswert?

Hallo,
mega-hz schrieb:
> Ich möchte die Relays per ULN2803A ansteuern, jedoch muss es eine
> Möglichkeit geben, diese komplett zu deaktivieren.

Der 74HC595 hat doch einen OE-Eingang, kannst du den nicht nutzen?

rhf

von Wolfgang (Gast)


Lesenswert?

mega-hz schrieb:
> Die Frage ist, wie kann man die Relays gemeinsam disablen?
Indem du ihnen die Versorgungsspannung nicht einschaltest.

von Bauform B. (bauformb)


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.

von Michael B. (laberkopp)


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.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


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.

: Bearbeitet durch Moderator
von dudinator (Gast)


Lesenswert?

Ich tu's auch nicht knowen, wollte aber mal'n reply angesichts des 
sharpen denglish leaven o/

von mega-hz (Gast)


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?

von mega-hz (Gast)


Lesenswert?

was haltet Ihr von einem NE567 der bei anliegender Frequenz auf HI 
schaltet?

von Wolfgang (Gast)


Lesenswert?

mega-hz schrieb:
> was haltet Ihr von einem NE567 der bei anliegender Frequenz auf HI
> schaltet?
Man kann es auch übertreiben.
Wie wäre es mit einem nachtriggerbaren Monoflop (74HC123, 74HC423 o.ä.)?

von mega-hz (Gast)


Lesenswert?

stimmt, der 123 eignet sich auch gut dafür!

von mega-hz (Gast)


Lesenswert?

mega-hz schrieb:
> stimmt, der 123 eignet sich auch gut dafür!

aber hat der einen definierten Zustand beim Einschalten?

von Bauform B. (bauformb)


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

: Bearbeitet durch User
von mega-hz (Gast)


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.

von mega-hz (Gast)


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.

von Wolfgang (Gast)


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.

von Stefan F. (Gast)


Lesenswert?

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

Ja schon, aber nicht auf 8 Kanälen gleichzeitig. Und wenn wir von nur 
einem einzelnen Kanal reden, dann kann das der TPIC6B595 auch. Gucke mal 
in die Absolute Maximum Ratings.

von Dietrich L. (dietrichl)


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!

von georg (Gast)


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

von Bauform B. (bauformb)


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.

von mega-hz (Gast)


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?

von Stefan F. (Gast)


Lesenswert?

mega-hz schrieb:
> mit dem OE wären die Ausgänge deaktiviert, ein Bitmuster reinschieben
> geht aber trotzdem?

Ja, OE bedeutet schließlich "Output Enable", nicht "Chip Enable".

von Dirk (Gast)


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.

von MaWin (Gast)


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.

von MaWin (Gast)


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.

von Alexander K. (Gast)


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

von Stefan F. (Gast)


Lesenswert?

Alexander K. schrieb:
> Wieso setzt du kein Port-Expander ein via i2c. ?

In welcher Hinsicht wäre das gegenüber dem TPIC6B595 von Vorteil?

von Alexander K. (Gast)


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

von Stefan F. (Gast)


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.

von Bauform B. (bauformb)


Angehängte Dateien:

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.

: Bearbeitet durch User
von Alexander K. (Gast)


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

von Bauform B. (bauformb)


Lesenswert?

Alexander K. schrieb:
> Private Sub ic_Write(pin As UInt,pinstate As Boolean)

Die Sub sieht doch immer gleich aus, egal, ob die Pins per I2C, SPI oder 
Deep Space Network angebunden sind?

Außerdem gibt es wichtigere Argumente für oder gegen bestimmte Chips...

von Karl B. (gustav)


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

von Stefan F. (Gast)


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.

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.