PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Verriegelungsschaltung (Latch-Circuit) mit D-FlipFlop macht Probleme



SturmGhost
28.12.2020, 20:32
Ich habe hier einen 74HC74, welcher von einem Taster ein Taktsignal bekommt und damit einen MOSFET (über einen Vorschalttransistor) ansteuern soll.

Leider ist es bei mir wohl so, dass die Schaltung auf Ewig verriegelt... Beim ersten Drücken des Tasters schaltet der MOSFET wie gewünscht durch, beim erneuten drücken passiert jedoch nichts mehr (der MOSFET sollte eig. wieder abgeschaltet bzw. hochohmig werden). :confused:

Ich bin mit jetzt nicht sicher, ob es mit dem Entprellen des Tasters zu tun hat (wie muss das aussehen?), fehlenden Kondensatoren zur Spannungsglättung, fehlender Pullup- oder Pulldown-Widerstände oder einfach einer falschen Verschaltung des D-FlipFlops. Vielleicht kann ja jemand helfen.

Was ist auch noch nicht begriffen habe, wie verhält sich der D-FlipFlop im Moment des Einschaltens bzw. bei Spannungszufuhr. Welche Zustände herrschen an den Ausgängen? Da keine positive Taktflanke vorliegt im Moment des Einschaltens soll ja laut Theorie der alte Zustand beibehalten werden, aber welcher ist das denn beim Einschalten? Dazu finde ich keine passende Wahrheitstabelle im Datenblatt, oder verstehe es noch nicht so ganz...

Verschaltung des D-FlipFlops:

35383

Das Signal kommt von einem Taster, mit ca. 12 Volt Spannung wenn dieser gedrückt wird. Toggle geht zum Vorschalttransistor für den MOSFET.

Bin über jede Hilfe dankbar.

Moppi
29.12.2020, 06:46
Hallo SturmGhost,



Bei R5 = 100k und R3 = 68k ist der Pegel am CLK für HIGH besser definiert, auf 4.86V.


Wie es aussieht, sind die Zustände an den Ausgängen undefiniert, beim Einschalten.


Der Reset muss beim Einschalten für einen definierten Ausgangspegel sorgen.


Das Flip-Flop sollte sich am nicht invertierten Ausgang (Pin 5) auf LOW einstellen. Deshalb für RESET eine Einschaltverzögerung vom HIGH-Pegel vorsehen (Wechsel von LOW auf HIGH nach Zeit x). Und SET dauerhaft an HIGH.


Für die Einschaltverzögerung gäbe es wohl verschiedene Möglichkeiten. Eine wäre diskret möglich, mit Elko (für den Impuls), NPN-Transistor + Vorwiderstand. Wobei beim Transistor Collector als Ausgang für RESET und von dort einen Widerstand (bspw. 100k) gegen Vcc. Transistor Emitter gegen GND.


MfG

- - - Aktualisiert - - -

Habe mal nach der Zeitkonstante geschaut und daher R mit 470 Ohm und C mit 100µF oder 220µF angesetzt.

Hinweise zur Schaltung:

Die 1000 Ohm für den Pullup, am Reset: da fehlt eine Null, das sollen eher 10kOhm sein.

Variationen:

Die 100 oder 200µF sind sehr großzügig. Wenn kleinere Werte vorhanden sind (ab 1µF) sollten die auch funktionieren. Wenn ich das richtig sehe, sind wir mit 470 Ohm und 1µF schon im Millisekundenbereich, das sollte dicke ausreichend sein, für ein Flip-Flop (die Schaltfrequenz ist dort um einiges höher).
Der Vorwiderstand am Transistor sollte auch weggelassen werden können.


theoretisches Schaltungsbeispiel:

https://www.roboternetz.de/community/attachment.php?attachmentid=35384&d=1609220732

PS: Ich kann die Schaltung erst später aufbauen. Dann melde ich mich evtl. noch mal dazu.

SturmGhost
29.12.2020, 08:36
Hallo Moppi,

danke erstmal für einen Vorschlag.


Das Flip-Flop sollte sich am nicht invertierten Ausgang (Pin 5) auf LOW einstellen. Deshalb für RESET eine Einschaltverzögerung vom HIGH-Pegel vorsehen (Wechsel von LOW auf HIGH nach Zeit x). Und SET dauerhaft an HIGH.


Hast du dich ggf. verschrieben? Ich verstehe im ersten Satz ein Wechsel von HIGH auf LOW aber im nächsten Satz soll es dann LOW auf HIGH sein? :confused:

Gemäß der Wahrheitstabelle:

35385

und deinem Vorschlag, wäre doch Reset im Einschaltmoment HIGH und wird dann LOW sobald der Transistor durchschaltet bzw. der Kondensator ausreichend geladen ist. Aber eig. bräuchten wir doch die Umgekehrte Funktion, erst LOW dann HIGH, oder? Wenn ich die Schaltung so wie von dir vorgeschlagen aufbaue, leuchtet meine LED an Q nach dem Einschalten direkt. Die sollte aber erst leuchten, wenn ich ein CLK-Signal gebe bzw. den Taster drücke.

Moppi
29.12.2020, 09:47
Ich habe das gerade mal aufgebaut und mir ist das was komisch vorgekommen. Deswegen habe ich das anders zusammengesteckt. Und so funktioniert es auch:

https://www.roboternetz.de/community/attachment.php?attachmentid=35386&d=1609229230

Ich habe dort, zum Probieren, einen 1000µF Elko eingesetzt, das gibt ~5s Verzögerung.

Ich glaube nicht ich habe mich verschrieben.

Ich schaue noch mal drüber und korrigiere evtl.

Ich habe die Wahrheitstabelle angesehen und selbst das aufgezeichnet. So konnte ich sehen, dass Deine Beschaltung i.O. ist, bis auf den Reset-Pin beim Einschalten.

MfG

- - - Aktualisiert - - -

Laut Wahrheitstabelle:


gegeben:


Set = HIGH (Vcc)


dann:


Reset = LOW beim Einschalten und Set = HIGH ergibt Q = LOW und Qinv = HIGH


dann, wenn Reset auf HIGH geht:


Reset = HIGH und Set = HIGH: Ausgänge sollten unverändert bleiben (wie oben), bis Takt = HIGH


dann bei Takt = HIGH wird von Qinv das HIGH von D übernommen und Qinv ist dann LOW, aber Q = HIGH (eingeschaltet).


beim nächsten Takt wird das LOW von Qinv an D übernommen und ergibt an Q = LOW (ausgeschaltet).

- - - Aktualisiert - - -

was ich noch ändern würde:

statt R=1500, R=470
statt R=4700, R=2200
C=1µF

Die Verzögerung beträgt dann voraussichtlich ~3ms.

statt R=1500, R=470
statt R=4700, R=2200
statt C = 1µF, C=100nF

Die Verzögerung beträgt dann voraussichtlich ~250µs.

- - - Aktualisiert - - -

Zum MOSFET kann man nicht viel sagen, weil Du dafür keinen Plan zeigst. Vielleicht kannst Du das ja noch machen? - Es kann sein, das Du beim MOSFET, am Gate, noch einen Widerstand gegen GND brauchst (10k z.B.), zusätzlich zu der Transistoransteuerung.

Gruß

SturmGhost
29.12.2020, 09:53
Hallo Moppi,

das scheint schonmal zu funktionieren, zumindest soweit ich das beurteilen kann, danke!

Ich habe noch Probleme ein vernünftiges CLK-Signal mit einem Taster zu generieren, vermutlich weil ich nicht richtig entprellt habe... In der finalen Schaltung wird von außerhalb ein (entprelltes) 12V Signal kommen, auf dem Breadboard möchte ich das Signal mit einem Taster simulieren. Voraussetzung ist aber auch, das beim halten des Tasters die Schaltung nicht anfängt zu oszillieren.

Wie kann diese Entprellung aussehen? Könnte ich das in meinem Fall so machen:

35387

White_Fox
29.12.2020, 10:06
Ich hab jetzt kein DB zur Hand (und bin zu faul zum Suchen), aber: Leg doch mal den CLR-Eingang mit auf den negierten Ausgang. Wenn CLR Vorrang vor D hat kann sich da nix mehr ändern.

Entprellen kannst du, indem du noch einen Kondensator (aus dem Bauch heraus - ich hab es jetzt nicht berechnent - 1nF oder weniger) parallel zu R3 legst.

Edit:
Das in deinem Bild funktioniert auch.

Moppi
29.12.2020, 10:19
Wegen dem Entprellen, der 100nF am Ende, rechts, lädt sich nur langsam auf, durch den Vorwiderstand 10 bis 33k).
Wie White_Fox schon schreibt, der C muss direkt an den Taster dran. Allerdings wäre der ganz rechts überflüssig.

White_Fox
29.12.2020, 10:25
Er kann auch einfach R4 in seinem zweiten Bild kleiner machen. Oder hat es einen Grund daß das alles so hochohmig ist?

Moppi
29.12.2020, 10:36
Das C muss vor R4 sitzen, das ist alles. Der R4 soll wohl zum Schutz für den nachfolgenden Digitaleingang sein. Ich denke, der R4 kann ganz weg. Wenn es dann mit dem Entprellen noch nicht hin haut den C größer machen.

Nachtrag:

Guck mal, der Taster geht doch nur an 3.3V. Ein nachfolgender GPIO wird doch wahrscheinlich (Glaskugel) mindestens mit 3V - Pegel als HIGH arbeiten.
R4: weg.

SturmGhost
29.12.2020, 11:22
Hallo zusammen,

Zeit mich mal zu erklären - wozu das ganze eig. dienen soll. :)

Ziel ist ein primitives "Steuergerät" zu bauen, um die Sitzheizung anzusteuern. Leider sind die originalen Steuergeräte in den Matten integriert und einzeln nicht zu bekommen. Komplett mit Matten lässt man sich natürlich fürstlich bezahlen. Deshalb muss eine eigene Lösung her. Zu allem Überfluss funktioniert die Ansteuerung der Matte für den Fahrer über einen einfachen Schalter, wo am Ausgang dann immer HIGH anliegt, wenn die Sitzheizung eingeschaltet sein soll, für den Beifahrer ist es jedoch ein Taster - der gibt nur einen kurzen HIGH-Pegel raus (SIGNAL in meiner Schaltung). Zusätzlich gibt es für beide Schalter eine einfache Feedback-LED welche nur mit 12 V versorgt werden muss, wenn die Matte eingeschaltet ist (FEEDBACK in meiner Schaltung).

Die Feedback- und Signalleitung möchte ich noch mit einer Diode "absichern". Als generellen Überspannungsschutz ist eine Bidirektionale 15V Diode (TPSMA6L15A-LF) vorgesehen. Ich habe mich dafür unter diesem Link (https://mk4-wiki.denkdose.de/artikel/kfz-bordnetz/start) etwas belesen, um da kein unnötiges Risiko einzugehen. Natürlich ist die komplette Versorgungsleitung für Steuergerät und Heizmatte nochmal über normale Sicherungen im KFZ abgesichert...

Mein Steuergerät hat demnach fünf Anschlüsse: Batteriespannung (~14 Volt bei laufendem Motor), Ground, Ausgang für die Heizmatte und LED-Feedback, Eingang für Signal.

Jetzt also meine komplette Schaltung (für den Fall Taster, für den Schalter kann ich mir die 5V-Versorgung und den FlipFlop ja sparen - Platine wird also so ausgelegt das beide Varianten auf der Platine bestückt werden können).

35389

Kann man glaube ich schlecht lesen, hier nochmal an anderer Stelle hochgeladen: https://abload.de/img/3lqkt9.jpg

-------

Zum Entprellen: Ich habe das mal so umgesetzt wie von White_Fox vorgeschlagen. Funktioniert auch fast perfekt allerdings oszilliert die Schaltung hin und wieder doch mal beim Drücken des Tasters (also an-aus direkt hintereinander). Wie kann ich das noch verbessern?

Moppi
29.12.2020, 12:42
Ich blicke das nicht richtig.
Du hattest doch erst eine Variante mit Schalter an 3.3V, als Signalgeber. Jetzt in dem Plan hast Du ein "Signal" und lt. Rechnung daneben, sind das wohl 15V? Durch den Spannungsteiler erzeugst Du 4.8V, aus den 15V, mit den 4.8V triggerst Du das FF, richtig?

Warum ist dieses 15V-Signal so instabil?

SturmGhost
29.12.2020, 12:52
Sorry, das Beispielbild zum Entprellen habe ich schnell aus dem Netz entnommen. Die 3,3 Volt habe ich da ignoriert - hat also nix mit meiner Schaltung zu tun, ging nur um die prinzipielle Entprellung.

Moppi
29.12.2020, 13:01
Was hast Du nun jetzt für ein Signal? 15V?

SturmGhost
29.12.2020, 13:11
Exakt kann ich dir das aktuell nicht sagen, da müsste ich im Fahrzeug erstmal die Mittelkonsole zerlegen und nachmessen. Das will ich aber erst im Sommer machen - und schon die fertige Schaltung parat haben. :D Ich weiß aber aus anderer Quelle von jemanden der das mit mehreren Relais gelöst hat, das es auf jeden Fall um die 12 Volt sind. Da die Schaltung ja auf max 15 Volt ausgelegt sein sollte, sollte auch bei 15 Volt nichts abrauchen - also der Eingang vom FlipFlop nicht übersteuert werden. Ich gehe mal davon aus, es wird Boardspannung um die 13,5-14 Volt anliegen.

White_Fox
29.12.2020, 14:31
Zum Entprellen: Ich habe das mal so umgesetzt wie von White_Fox vorgeschlagen. Funktioniert auch fast perfekt allerdings oszilliert die Schaltung hin und wieder doch mal beim Drücken des Tasters (also an-aus direkt hintereinander). Wie kann ich das noch verbessern?

RC-Schaltungen können nicht oszilieren. Bei deinen Widerstandswerten kriegst du auch nix zum Schwingen, selbst wenn du es wolltest. Schau mal ins Datenblatt, wo die Pegel definiert sind, ich vermute du hälst dich zu lange im "Verbotenen Bereich" auf.
Oder: Ersetze den R3(?) durch eine 3,3V Z-Diode und R5 durch 10kΩ.

Moppi
29.12.2020, 14:48
Noch als letztes von mir, wegen der Entprellung, etwas gefrickeltes. Basiert auf der Verzögerung.

https://www.roboternetz.de/community/attachment.php?attachmentid=35390&d=1609247857

Das zeigt jetzt nur die "Entprellung", nicht die Einschaltverzögerung wegen dem LOW und HIGH für den Reset-Pin (aus Übersichtsgründen weggelassen).

Wie soll es funktionieren:

Der Ausgang ist über 47k auf LOW und damit der CLK-Eingang. Wenn der Schalter geschlossen wird bzw. oben 12 bis 15V ankommen, dann lädt der C sich auf und der Transistor leitet LOW an den Ausgang (das vorher über die 47k schon anlag). Wenn der C geladen ist, sperrt der und der Transistor sperrt auch, damit liegt am Ausgang ein HIGH-Pegel von >3.2V an, wenn das Signal am Eingang noch anliegt. Sollte das Eingangssignal nicht ausreichend lang anliegen, kommt am Ausgang auch kein HIGH an. Wenn am Ausgang HIGH an lag und das Eingangssignal fällt weg, dann fällt auch die Versorgung der Verzögerungsschaltung weg, aber der C entlädt sich noch (wie lange, kann ich nicht sagen, reicht aber evtl. zum Entprellen). Der Kondensator kann auch größer sein, aber je größer, desto länger muss das Signal am Eingang oben anliegen, bevor am Ausgang HIGH erscheint.

Ich habe das nicht ausprobiert. Ist nur so eine Idee, abgeleitet aus der Einschaltverzögerung.

MfG

- - - Aktualisiert - - -

Das ist alles etwas kritisch, mit er Signalspannung. Beim KFZ kann die auch mal einbrechen und wieder zur Instabilität führen. Deshalb bin ich dafür, den Eingangsspannungsteiler, wo das Signal ankommt, weg zu lassen und dafür einen LDO-Regler für eine stabile Spannung einzusetzen. Diese Regler machen aus bis zu etwa 30V eine stabile Ausgangsspannung von 5V. Das ist sicherer und so ein LDO-Regler nicht größer, als ein Transistor. Bloß vor dem C muss dann noch ein Widerstand zur Strombegrenzung rein, so ein Regler liefert nicht so viel Strom, wie der C beim Einschalten ziehen kann. Die Strombegrenzung findet jetzt über die 2k am Signaleingang statt, die würde dann fehlen. Also wenn Spannungsregler, dann vor dem C wieder die 470 Ohm einsetzen. Das mit LDO-regler könnte sogar weitaus besser funktionieren.

SturmGhost
29.12.2020, 15:04
Schau mal ins Datenblatt, wo die Pegel definiert sind, ich vermute du hälst dich zu lange im "Verbotenen Bereich" auf.
Oder: Ersetze den R3(?) durch eine 3,3V Z-Diode und R5 durch 10kΩ.

Was meinst du denn mit "verbotenem Bereich"?

Habe leider keine 3,3 V Z-Diode zum testen da...


Noch als letztes von mir, wegen der Entprellung, etwas gefrickeltes. Basiert auf der Verzögerung.

Danke, vielleicht ist es tatsächlich einfacher einen µC aka. Arduino oder so zu nehmen und das in Software zu gießen - werden ja doch immer mehr Teile für diese "einfache" Funktion. :confused:

Moppi
29.12.2020, 15:40
Das Problem hier ist Deine KFZ-Spannung. Die musst Du auf jeden Fall, wenn Du sie zum Steuern nutzt, stabilisieren. Deshalb würde ich auf jeden Fall dafür einen LDO-Regler einsetzen. Noch ein einfaches Siebglied dahinter zur Sicherheit, mit 100 Ohm und 220µF bspw.

Wenn Du noch mehr Funktion benötigtst, ist ein µC vielleicht eine Idee, ja.

Gruß

White_Fox
29.12.2020, 17:46
Was meinst du denn mit "verbotenem Bereich"?

Digitaleingänge haben üblicherweise drei Spannungsbereiche: einen unteren, in dem ein garantiert ein Low-Pegel erkannt wird, und einen oberen, in dem garantiert ein High-Pegel erkannt wird. Und dann einen mittleren Bereich, in dem man nicht so genau weiß wann da was passiert, da ist dann auch ein ständiges zappeln möglich, und diesen Bereich will man möglichst rasch durchfahren. (Zu rasch durchfahren ist auch problematisch, aber das ist ein anderes Thema.)

Von einem Arduino würde ich dir aber abraten. Nicht daß es nicht gehen würde, aber es ist ein traurige Lösung. Und wenn du kein Material zum Testen dahast, tobe dich doch einfach in LT Spice oder Micro Cap aus.

Ach ja...da es um KfZ-Boardnetz geht, würde ich dir noch zu einem Varistor oder einer TVS-Diode an der Spannungsversorgung raten.

Moppi
29.12.2020, 18:35
Mal etwas Lektüre. Tastenentprellung für schnelle Digitalschaltungen: https://www.elektronik-kompendium.de/sites/dig/0210223.htm

Moppi
30.12.2020, 12:21
Es war noch das Problem des CLK-Eingangs, wegen einem entprellten Signal. Ich habe nach einer einfacheren, aber auch effektiveren Lösung gesucht. Im Datenblatt des 74HC74 las ich, dass der CLK mit Schmitt-Trigger ausgestattet ist, wegen langsamen Wechseln der Signalpegel. Deshalb habe ich nochmal hier eine Zeichnung gemacht, was Du noch probieren könntest.

https://www.roboternetz.de/community/attachment.php?attachmentid=35391&d=1609326452

Der erste Widerstand (kleiner links) ist zur Strombegrenzung für den C, beim Laden. Der Rechte Widerstand ist zum Entladen des C. In dieser Schaltung kann Strom nur vom C weg zum Ausgang fließen, weil am Eingang ein Taster eingezeichnet ist. Falls der Taster durch Spannungsteiler ersetzt wird oder nach dem Taster noch ein Spannungsteiler eingebaut wird, würde ich vor oder nach dem 47/100Ohm-Widerstand eine Diode rein setzen, mit Flußrichtung zum Ausgang.

In der Schaltung soll sich der C möglichst schnell auf- aber viel langsamer entladen. Deshalb die 2 Widerstände. Auf der rechten Seite vom C sind jeweils 2 Werte angegeben (Alternativen). Ich würde zunächst die 10kOhm und die 47µF versuchen (und links die 100Ohm). Wenn der linke R kleiner gewählt wird, fleßt mehr Ladestrom zum C und der lädt schneller. Bei Vergrößerung der Werte rechts verlängert sich die Zeit, bis der C wieder entladen ist. Der C entlädt sich nicht schlagartig, so dass es keine steilen Singnalflanken gibt. Der/die Schmitt-Trigger im 74HC74 sollten das Problem entschärfen.


MfG

SturmGhost
30.12.2020, 12:30
Ach ja...da es um KfZ-Boardnetz geht, würde ich dir noch zu einem Varistor oder einer TVS-Diode an der Spannungsversorgung raten.

Jup, eine TVS-Diode (TPSMA6L15A) war ja schon eingebaut in meiner Schaltung.


Es war noch das Problem des CLK-Eingangs, wegen einem entprellten Signal.

Danke für den Vorschlag, werde ich ausprobieren sobald ich wieder Zeit zum basteln habe.