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.
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
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.
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.
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.
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?
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.ä.)?
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).
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.
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.
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.
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.
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!
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
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.
> 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?
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".
>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.
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.
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.
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
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
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.
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.
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
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...
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
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.