Hallo Internet, ich verwende das LM 393 basierte IR-Modul zur Drehzahlmessung (max <100Umin). Den Ausgang des Moduls überwache ich mit dem externen Interrupt INT0 des Atmega328. Ich habe das Problem, dass bei einem Interrupt der Interrupt mehrfach ausgelöst wird. Daraufhin habe ich den Pin mit einem externen PullUP versehen. Das hilft nicht. Ich habe dann den Pin gegen GND mit einem 100nF verbunden. Das hilft aber auch nicht. Hat jemand einen Tipp für mich. Vielen Dank im Voraus. WT
Du hast im Datenblatt gelesen, daß der Level-Interrupt auslöst, so lange der entsprechende Level anliegt? Ansonsten laß uns hier nicht lange herumrätseln, was du machst und zeig dein Programm!
Werner T. schrieb: > ich verwende das LM 393 basierte IR-Modul WELCHES ¡¡ Die Welt besteht nicht nur ais deinem Bastelzimmer allein. Es gibt üblen Schrott, wie das oben gezeigte ohne Hysterese aber mit Bremskondensator über dem Phototransistor. Das ist so Scheisse, das sollte man eigentlich zurückschicken. Der Umbau auf eine Hysterese ist möglich aber sieht dann aus wie Pfusch
Werner T. schrieb: > Hat jemand einen Tipp für mich. Miss mit einem Oszi, was am uC-Pin ankommt und poste einrn Screenshot davon. Dann wird das nicht so eine tragische Ratestunde.
Ein LM393 ist ein Komparator. Vielleicht solltest du dir erst mal klar machen wie dein IR-Modul wirklich aufgebaut ist. Und vielleicht mal den Ausgang des Moduls mit einem Oszilloskop beobachten.
Werner T. schrieb: > ich verwende das LM 393 basierte IR-Modul > ... > Daraufhin habe ich den Pin mit einem externen PullUP versehen. Der LM393 besitzt einen Open Kollektor Ausgang. Ohne PullUp KANN der nicht funktionieren. Ohne die Schaltung von deinem Modul zu kennen, ist schwierig zu sagen, wie die Schaltung von deinem Modul aussieht und ob zusätzlich noch ein PullUp erforderlich ist.
Guten Tag, Zunächst einmal vielen Dank für die zahlreichen Rückmeldungen von gestern Abend. Das verwendete Modul ist ein China-Modul von ebay (s. Bild) basierend auf den LM393_NXN9G4. Der Hinweis mit dem Oszilloskop hat enthüllt, dass das Modul bei fallenden und steigenden Flanken sehr viele Prellungen aufweist (s. Bild). Allerdings verstehe ich nicht, warum weder der PullUP noch der 100nF etwas daran ändern. In meinem Code habe ich die Interrupts (INT0 & INT1) auf fallende Flanke konfiguriert. Bei einem Interrupt möchte ich exakt einmal inkrementieren und den Wert später in main nutzen (s. Code). Allerdings beobachte ich mit dem Atmel-ICE Debugger, dass die Variable bei einem von mir verursachten Interrupt mehrmals inkrementiert wird (in der Ordnung +-70 Mal). Das Modul ist also für mein Vorhaben als Interruptquelle nicht geeignet. Dennoch wage ich zu fragen, ob es eine Hardware- oder Software-Lösung gibt, um die Stabilität des Moduls zu verbessern. Vielen Dank und viele Grüße. WT
Werner T. schrieb: > dass das Modul bei fallenden und steigenden Flanken sehr viele > Prellungen aufweist (s. Bild). Allerdings verstehe ich nicht, warum > weder der PullUP noch der 100nF etwas daran ändern. Es ist eben trotz dieser Bauteile ein Mistdesign, das wohl ein unbegabter Praktikant in der Chinabastelbude gemacht und das alle anderen Chinesen ohne einen Funken Mitdenken nachgebaut haben. > Das Modul ist also für mein Vorhaben als Interruptquelle nicht geeignet. > Dennoch wage ich zu fragen, ob es eine Hardware- oder Software-Lösung > gibt, um die Stabilität des Moduls zu verbessern. Wie schon gesagt: bau eine Hysterese ein. 1. tausche die Pins 2 + 3 (Pin anheben und 2x Fädeldraht zum Kreuzen) 2. baue einen Hysteresewiderstand zwischen Pin 1 + 3 ein
:
Bearbeitet durch Moderator
Werner T. schrieb: > Das Modul ist also für mein Vorhaben als Interruptquelle nicht geeignet. Grob hin geschaut sieht das nach ungefähr 200µs instabilem Zustand aus. Eine (sehr) schmutzige Lösung wäre, in der ISR einfach 250µs Zeit zu vergeuden und anschließend - vor dem Verlassen - eventuelle Flags zu bereinigen. Da du ja eh nur 100Hz messen möchtest, sollte das passen.
Werner T. schrieb: > Der Hinweis mit dem Oszilloskop hat enthüllt, dass das Modul bei > fallenden und steigenden Flanken sehr viele Prellungen aufweist (s. > Bild). Allerdings verstehe i Ja, für diese Art Unstabilität ist der LM393 bekannt. Hysteresis einbauen ist Pflicht!
Werner T. schrieb: > ein China-Modul von ebay (s. Bild) Ein Link wäre auch nicht schlecht. Evtl. ist da ein Schaltplan dabei... Mark S. schrieb: > Ja, für diese Art Unstabilität ist der LM393 bekannt. Mir scheint auch der Blockkondensator für den Chip arg ungünstig platziert. Das macht die Sache nicht besser.
Nein, das Modul funktioniert bei mir ausgezeichnet. Es ist nur etwas frickelig, das Poti richtig einzustellen. Deswegen habe ich mir ein 10Gang-Teil eingebaut. Damit kann man den Schaltpunkt wunderbar einstellen. Und hier ein Auszug meines Programms, das die Umdrehungen meines Gaszählers zählt.
1 | void sensor_setup() { |
2 | |
3 | attachInterrupt(digitalPinToInterrupt(countPin),countIrq,FALLING); |
4 | count=0; |
5 | count_flag=0; |
6 | measure_starttime=millis(); |
7 | }
|
8 | |
9 | // this are irq handler for interrupts, have to return void and take no arguments
|
10 | void ICACHE_RAM_ATTR countIrq() { |
11 | |
12 | count_flag=1; |
13 | }
|
Und im Loop wird das count_flag ausgewertet und evtl. rückgesetzt.
Werner T. schrieb: > Allerdings verstehe ich nicht, warum weder der PullUP noch der 100nF > etwas daran ändern. Hmm, dann solltest du was zum Thema Hysterese bei Komparatoren lesen. https://www.analog.com/en/analog-dialogue/articles/curing-comparator-instability-with-hysteresis.html Helmut -. schrieb: > Nein, das Modul funktioniert bei mir ausgezeichnet. Du bist unser Held aus dem Märchen.
:
Bearbeitet durch User
Für solche Anwendungszwecke sind externe Interrupts eigentlich nicht vorgesehen. Die benutzt man, wenn der Prozessor aus dem Schlafzustand geweckt werden soll, oder bei sehr kurzen und flüchtigen Impulsen ... also wenn du zum Beispiel die Prellflanken zählen wolltest :) Für deinen Zweck (100 Umdrehungen pro Sekunde? Oder pro Minute?) ist ein regelmäßiger Timerinterrupt, z.B. jede Millisekunde, völlig ausreichend, der dann der Hauptschleife eine Zustandsänderung erst nach mehreren gleichen Pinzuständen übermittelt, und/oder eine Totzeit implementiert. Siehe auch die Artikel und Forenbeiträge zum Thema "entprellen". LG, Sebastian
:
Bearbeitet durch User
Sebastian W. schrieb: > Für solche Anwendungszwecke sind externe Interrupts eigentlich nicht > vorgesehen Na ja. Für prellende Signale taugen sie nicht. Zur Drehzahlerfassung hingegen taugen sie sehr wohl.
Michael B. schrieb: > Du bist unser Held aus dem Märchen. Soll ich dir ein Video drehen, wie das Ding zählt? Der eine kanns halt, der andere eben nicht! Du gehörst möglicherweise zu den anderen.
Helmut -. schrieb: > Soll ich dir ein Video drehen, wie das Ding zählt? Nee, du könntest ein Video darüber drehen, dass du nicht verstanden hast, was eine Hysterese bringt.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.