Forum: Mikrocontroller und Digitale Elektronik Arduino UNO unerklärliche Interrupts


von Wolfgang (Gast)


Lesenswert?

Guten Abend,

ich bräuchte einen guten Tipp bei emeiner Fehlersuche, da mich mein UNO 
ans Ende meines Lateins gebracht hat und ich auch im Netz keine Lösung 
gefunden habe.

Ich habe mir in ein bestehendes Teile-Fördergerät mit 24VDC Motor 
(welcher über eine PWM + Sanftanlauf-Platine geregelt werden kann) einen 
UNO, eine IR-Reflexlichtschranke und eine Step-Down Platine (24VDC-7VDC) 
zur Versorgung der zusätzlich verbauten Messtechnik eingebaut.

Der UNO soll mir die Teile, die das Grundgerät ausspuckt über den Sensor 
zählen - was auch perfekt funktioniert.
Um etwaig flatterig vorbeifallende Teile nicht mehrfach zu zählen und 
den Code prioritätsbezogen auszulegen, habe ich das 5V-Digitalsignal vom 
Sensor über eine Schmitt-Schaltung mit RC-Glied gelegt und das 
ergebende, saubere Rechteckrignal dem UNO auf PIN3 entsprechend mit 
Interrupt 1 aufgelegt.

Wie gesagt, zählt mein Aufbau perfekt und für sich alleine sehr robust.
Wenn ich nun allerdings den Kippschalter zur PWM Schaltung für den 24V 
Motor einschalte, zählt der UNO zufallsbedingt 1-5 Impulse/Stück hoch.
Selbiges passiert, wenn der Motor betriebsbedingt belastet wird (die PWM 
Schaltung belastet wird).
Auch kann der Motor für sich ausgeschlossen werden, da auch die PWM 
Platine für sich ohne angeschlossenen Motor am Ausgang das Phänomen 
verursacht.

Codebedingt KANN das Hochzählen nur innerhalb der ISR passieren, d.h. 
der Arduino triggert offenbar den Interrupt.
Nun habe ich bereits mit einem Oszi das Triggersignal (vom Schmitt 
perfekt aufbereitet), auch die Massepegel zueinander und die Versorgung 
des UNO kontrolliert. Leider keine Auffälligkeiten - Alles so sauber, 
wie man es sich nur wünschen kann. (Massen der 7V Schiene vom Ardu-24VDC 
Geräteversorgung zueinander perfekt, auch das aufbereitete Sensorsignal 
ist erwartungsgemäß ein perfektes Rechtecksignal ohne Störungen, 
Verschleifungen oder Fehlersignale).
Wenn ich entweder den Eingangspin abziehe oder den Eingang entsprechend 
umlege, ist der Effekt weg. -> es muss also vom Signal verursacht sein, 
obwohl ich dort wie gesagt zum Zeitpunkt der Fehltriggerungen eine 
Nulllinie am Oszi sehe.
Auch die Pegel vom fertig aufbereiteten Triggersignal passen zur 
Ardu-Versorgung (0V und gute 5V).


Ich frage daher das geballte Wissen hier im Forum, ob es irgend eine 
Möglichkeit gibt, wie mein Interrupt auslösen kann, ohne dass sich am 
Zuleitungspin signaltechnisch etwas regt.

DANKE.

von Nick M. (Gast)


Lesenswert?

5 V sauber entstört?

von Veit D. (devil-elec)


Lesenswert?

Hallo,

auch wenn du das vielleicht nicht messen kannst, tippe auf Störungen der 
Spannungsversorgung die irgendwie einstreuen. Kannst du testweise alles 
ohne den StepDown DC-DC Wandler versorgen? Mit zwei "Labor" DC 
Netzteilen?

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Wolfgang schrieb:
> zählt der UNO zufallsbedingt 1-5 Impulse/Stück hoch.

Da gibt es viele Möglichkeiten. Du kannst solche Effekte durch robustes 
Software Design minimieren. Z.B. ist es evtl. sinnvoll, in der ISR noch 
einmal zu prüfen, ob der Pin den Pegel hat, den er nach auslösen der ISR 
haben soll.
Dann kann man einen Pin auch per Timer Polling abfragen, so ähnlich wie 
eine prellende Taste. Und schliesslich kann man auch auch mal diese 'PWM 
Platine' fotografieren und hier posten, damit wir mal was vom Aufbau 
sehen.
Wenn da dicke Elkos drauf sind, kann der Ladestrom schon einiges stören.

von Thomas S. (thomas_s152)


Lesenswert?

Wolfgang schrieb:
> Wenn ich entweder den Eingangspin abziehe oder den Eingang entsprechend
> umlege, ist der Effekt weg. -> es muss also vom Signal verursacht sein,

Da wäre ich mir nicht so sicher. Es könnte auch eine Kombination von 
Störung im Signal und in der Versorgungsspannung sein.

Einige Ideen, um den Fehler einzukreisen:

- Den Arduino UNO an Batterie betreiben, um Störungen durch die 
Versorgung auszuschließen.

- wie viele Teile kommen pro Sekunde maximal vorbei - in anderen Worten: 
Was ist die maximale Interrupt-Frequenz? Entsprechend dieser Frequenz 
einen R-C Tiefpass vor den Interrupt schalten. Runde Kanten des Impulses 
sind erstmal egal - der Schwellwert ist entscheidend.

- Werden die Störungen in deine Arduino-Platine oder die 
Sensorik-Platine eingestreut? Mal beide Platinen mittels 
Verlängerungskabel von der PWM-Steuerung und dem Motor entfernen

- Motor mit Kondensatoren entstören.

von Wolfgang (Gast)


Lesenswert?

Wolfgang schrieb:
> Codebedingt KANN das Hochzählen nur innerhalb der ISR passieren, d.h.
> der Arduino triggert offenbar den Interrupt.

Dann guck doch mal mit einem Oszi nach, wie das Signal aussieht, das am 
Interrupteingang ankommt. Und wie lange dauert deine ISR?

von Wolfgang (Gast)


Lesenswert?

Matthias S. schrieb:

> Da gibt es viele Möglichkeiten. Du kannst solche Effekte durch robustes
> Software Design minimieren. Z.B. ist es evtl. sinnvoll, in der ISR noch
> einmal zu prüfen, ob der Pin den Pegel hat, den er nach auslösen der ISR
> haben soll.
> Und schliesslich kann man auch auch mal diese 'PWM
> Platine' fotografieren und hier posten, damit wir mal was vom Aufbau
> sehen.
> Wenn da dicke Elkos drauf sind, kann der Ladestrom schon einiges stören.


Der erste Tipp mit dem Workaround über einen zusätzlichen digitalRead 
klingt gut, das werd ich bei nächster Gelegenheit gleich testen.
Wenn Ladeströme von ElKos auf der originalen PWM Schaltung Schuld sein 
könnten - wäre es dann überhaupt plausibel, da ja wie erwähnt auch 
falsch getriggert wird, wenn der Motor bereits läuft und dieser nur 
zusätzlich belastet wird? (kenne mich da in der Materie leider zu wenig 
aus)




Thomas S. schrieb:
> - Den Arduino UNO an Batterie betreiben, um Störungen durch die
> Versorgung auszuschließen.

An einem Labornetzgerät hatte ich meinen Aufbau bereits getestet. Das 
hat die Fehltrigger nur weniger werden lassen, aber sie traten dennoch 
weiterhin auf.

> - wie viele Teile kommen pro Sekunde maximal vorbei - in anderen Worten:
> Was ist die maximale Interrupt-Frequenz? Entsprechend dieser Frequenz
> einen R-C Tiefpass vor den Interrupt schalten. Runde Kanten des Impulses
> sind erstmal egal - der Schwellwert ist entscheidend.

Die Stückzahl ist für den UNO unwichtig, da ich das Triggersignal vom 
Sensor kommend bereits mit einem RC Glied, einem Schmitt-Trigger und 
einem Pull-Down Widerstand sauber aufbereitet habe und dies mit dem Oszi 
auch kontrolliert wurde. (sauberes Rechteck pro Impuls, keine 
Verschleifungen, keine Einstreuungen)

> - Werden die Störungen in deine Arduino-Platine oder die
> Sensorik-Platine eingestreut? Mal beide Platinen mittels
> Verlängerungskabel von der PWM-Steuerung und dem Motor entfernen
>
> - Motor mit Kondensatoren entstören.

Laut Messungen habe ich am Ardu weder in der Versorgung noch am 
Interrupt-Pin unerklärliche Signale. Das ist ja gerade das unerklärliche 
an meiner Situation. Die ISR wird aufgerufen, ohne dass ich erkennen 
könnte wieso.
Da also weder das Signal noch der Bezug seitens der Versorgung auffällig 
sind und bei der Fehlersuche auch der Motor vom PWM Platinen-Ausgang 
abgeklemmt wurde, muss rein von der Logik die Platine Richtung UNO 
streuen oder den Pegel bis über den Step-Down rüber beeinflussen (was 
ich ja leider trotz Oszi nicht nachweisen kann).

WENN es Einstreuungen über den Luftweg sind, kann ich dem Problem nur 
mit einem Workaround beikommen (siehe ganz oben in diesem Text z.B.), da 
sowohl die PWM- und auch die Ardu Platine im originalen Gehäuse 
untergebracht werden sollen und dort ohnehin schon maximal 
auseinandergerückt angebracht sind.

von Peter D. (peda)


Lesenswert?

Wolfgang schrieb:
> habe ich das 5V-Digitalsignal vom
> Sensor über eine Schmitt-Schaltung mit RC-Glied gelegt und das
> ergebende, saubere Rechteckrignal dem UNO auf PIN3 entsprechend mit
> Interrupt 1 aufgelegt.

Die Frage ist, wie weit ist diese Schaltung vom MC entfernt und wie ist 
deren GND angebunden? Die Leitung zum MC kann bequem als Antenne wirken 
und die Interrupt-HW latcht extrem schnell (<50ns).

Ein Bild des Aufbaus wäre extrem hilfreich.

Ich vermute mal, die Teile werden nicht wahnsinnig schnell bewegt. Da 
bietet sich statt der Schaltung eine Entprellung mit 4-fach Abtastung im 
Timerinterrupt (z.B. 10ms) an. D.h. nur bei 4-mal unterbrochen wird ein 
Teil gezählt und 4-mal Licht wird als Lücke erkannt.

Interrupteingänge nimmt man nur für wirklich eilige Sachen oder zum 
Aufwachen.

: Bearbeitet durch User
von Einer K. (Gast)


Lesenswert?

Wolfgang schrieb:
> Codebedingt KANN das Hochzählen nur innerhalb der ISR passieren, d.h.
> der Arduino triggert offenbar den Interrupt.

Das ist eine Annahme, Behauptung, These, oder was auch immer.
Da ich das nicht überprüfen darf/kann, halte ich diese und alle darauf 
aufsetzenden Annahmen für potentiell falsch.

Dieses bestätigt mich in der "falsch" Annahme:
Wolfgang schrieb:
> Laut Messungen habe ich am Ardu weder in der Versorgung noch am
> Interrupt-Pin unerklärliche Signale.

Also nein, ich weiß nicht, welche Magie da bei dir dort aktiv ist, aber 
auslösende Hardware Interrupts, ohne Signal auf den Leitungen, sind mir 
noch nicht unter gekommen.




Tipp:
Etwas weniger Prosa, und mehr Fakten.
z.B.:
Code, Schaltplan, Foto vom Aufbau ...

von m.n. (Gast)


Lesenswert?

Wolfgang schrieb:
> Die Stückzahl ist für den UNO unwichtig, da ich das Triggersignal vom
> Sensor kommend bereits mit einem RC Glied, einem Schmitt-Trigger und
> einem Pull-Down Widerstand sauber aufbereitet habe und dies mit dem Oszi
> auch kontrolliert wurde. (sauberes Rechteck pro Impuls, keine
> Verschleifungen, keine Einstreuungen)

Die Masse vom Oszi kann das Ergebnis verfälschen. Da die AVRs schon 
Schmitttrigger an ihren Eingängen haben, würde ein RC-Glied (10k, 10nF 
als Hausnummer) direkt davor mit hoher Sicherheit alle hochfrequenten 
Störungen ausschließen.

Mangels Schaltung/Programm kann man allerdings nicht sehen, was sonst 
noch so abgeht. Ich denke, Du willst uns "schützen" ;-)

von Wolfgang (Gast)


Lesenswert?

m.n. schrieb:
> Mangels Schaltung/Programm kann man allerdings nicht sehen, was sonst
> noch so abgeht. Ich denke, Du willst uns "schützen" ;-)

Das auch :)
Hauptsächlich aber, weil ich nur am Wochenende bei der Schaltung bin.
Ich habe euch aber über Umwege Bilder besorgt und aus dem Kopf einen 
Schaltplan gezeichnet (ihr wolltet es ja so ;D).
Werte, an die ich mich nicht erinnern konnte, habe ich extra nicht 
geraten und auch nicht beschriftet.

Übersichtsbild (nicht allzu viel zu erkennen):
https://abload.de/img/uebersicht4sjky.png

Die originale PWM Platine, die wohl der Übeltäter ist (Motor 
abgeklemmt):
https://abload.de/img/pwm_platine5jky4.png

stümperhafter Schaltplan:
https://abload.de/img/schaltplan4yjal.png

von Wolfgang (Gast)


Lesenswert?

Sorry für den Schaltplan - die PWM Platine wird natürlich über den 
Kippschalter auf dem Übersichtsbild eingeschaltet und hat einen 
integrierten Sanftanlauf.
Wie gesagt, tritt mein Phänomen jeweils beim Einschalten der PWM Platine 
(auch ohne Motor) als auch bei jeglichem mechanischen Bremsen des 
angeschlossenen und laufenden Motors auf.

von my2ct (Gast)


Angehängte Dateien:

Lesenswert?

Wolfgang schrieb:
> Übersichtsbild (nicht allzu viel zu erkennen):
> https://abload.de/img/uebersicht4sjky.png
> ...

Gibt es einen besonderen Grund, die Bilder nicht hier im Thread zu 
zeigen und so kryptisch zu benennen?

von Nick M. (Gast)


Lesenswert?

Dann erzähl mal was von deinem Netzteil und der Motorleistung.

von m.n. (Gast)


Lesenswert?

Wolfgang schrieb:
> Sorry für den Schaltplan

Schmitttrigger IC: Pin12-Pin13 sind verbunden. Der Rest hängt in der 
Luft? Lasss das Teil einfach einmal weg und verbinde Pin12 mit Pin13. 
Den 6k8 muß man ganz weglassen.
Tiefpass: wie groß ist die Zeitkonstante? Ich sehe 1 µF oder 10 µF, was 
sehr groß ist.

von Wolfgang (Gast)


Lesenswert?

my2ct schrieb:
> Gibt es einen besonderen Grund, die Bilder nicht hier im Thread zu
> zeigen und so kryptisch zu benennen?
Weil ich die Upload-Funktion nicht beachtet habe und das so von anderen 
Foren gewohnt bin. Die Dateibenennung erfolgt durch den Hoster.
Ist doch kein Beinbruch, oder? :)

Nick M. schrieb:
> Dann erzähl mal was von deinem Netzteil und der Motorleistung.
Laut Aufdruck liefert es 24V/1A, den Motor habe ich bei unüblicher 
mechanischer Belastung mit knapp 300mA gemessen. Die Spannung ist dabei 
stabil geblieben.

m.n. schrieb:
> Schmitttrigger IC: Pin12-Pin13 sind verbunden. Der Rest hängt in der
> Luft? Lasss das Teil einfach einmal weg und verbinde Pin12 mit Pin13.
> Den 6k8 muß man ganz weglassen.
> Tiefpass: wie groß ist die Zeitkonstante? Ich sehe 1 µF oder 10 µF, was
> sehr groß ist.
der Schmitt ist (nicht eingezeichnet) ebenfalls von den 7V versorgt.
Die Zeitkonstante habe ich mit ~0.2s angenommen, da ich mit einem max. 
Durchsatz von 4 Stück/Sekunde rechne und Toleranz lassen wollte.
Grundsätzlich geht es mir bei der Schmitt-Entprellschaltung um die 
Vermeidung von Doppelsignalen, wenn ein Teil nicht im Surrzflug an den 
Fotodioden vorbeifällt, sondern alle Nase lang mal Eines dabei ist, das 
im Fall eher "vorbeiklappert". Ohne Entprellung hatte ich so öfters 
Doppelzählungen dabei.

von Wolfgang (Gast)


Lesenswert?

Achja: der Entprell-Elko ist mit 100uF dimensioniert.

von Peter D. (peda)


Lesenswert?

Wolfgang schrieb:
> der Schmitt ist (nicht eingezeichnet) ebenfalls von den 7V versorgt.

Ganz schlechte Idee, die IOs des MCs dürfen nur max VCC (5V oder 3,3V) 
sehen. Die VCC wird so auf 6,3V durch die interne Schutzdiode angehoben. 
Auch müssen alle unbenutzten Eingänge des Schmitt-Triggers beschaltet 
werden.

Hau das ganze Glump raus und machs in SW mit einem Timerinterrupt.
Achte darauf, daß am IO-Pin max VCC anliegt. Der Arduino hat bestimmt 
einen VCC-Anschluß rausgeführt.

von Nick M. (Gast)


Lesenswert?

Was für Werte haben denn die Rs im Filter? Wie sieht denn das Signal 
vorm Schmitt-Trigger aus? Was ist das für ein Schmitt-Trigger der mit 7 
V läuft? Gibt es einen Kondensator nach dem DC-DC-Wandler?

von m.n. (Gast)


Lesenswert?

Wolfgang schrieb:
> der Schmitt ist (nicht eingezeichnet) ebenfalls von den 7V versorgt.
> Die Zeitkonstante habe ich mit ~0.2s angenommen, da ich mit einem max.
> Durchsatz von 4 Stück/Sekunde rechne und Toleranz lassen wollte.

Bei so langsamen Änderungen wäre ein Tiefpass mit 100k und 100nF doch 
als Schutz vor Überspannung und Störung ausreichend. Da kann man doch 
garnichts falsch machen.
Was aus Schaltplan und Fotos nicht ersichtlich ist, ob sich nicht zu 
lange Leitungen von GND die Störungen einfangen.

Peter D. schrieb:
> Hau das ganze Glump raus und machs in SW mit einem Timerinterrupt.

Wenn man das Pogramm hätte, könnte man die Änderung gleich dazutippen 
;-)

von Wolfgang (Gast)


Angehängte Dateien:

Lesenswert?

Peter D. schrieb:
> Ganz schlechte Idee, die IOs des MCs dürfen nur max VCC (5V oder 3,3V)
> sehen. Die VCC wird so auf 6,3V durch die interne Schutzdiode angehoben.
> Auch müssen alle unbenutzten Eingänge des Schmitt-Triggers beschaltet
> werden.
Der Eingangspin bekommt eh nur 0/5V, die der Sensor vom Arduino kommend 
durchschaltet.
Die nachgefragte Versordung vom Schmitt (TI CD40106B) liegt an 7V, was 
laut angehängtem Datenblatt perfekt passen sollte.

von m.n. (Gast)


Lesenswert?

Wolfgang schrieb:
> Die nachgefragte Versordung vom Schmitt (TI CD40106B) liegt an 7V, was
> laut angehängtem Datenblatt perfekt passen sollte.

CMOS-Schmitttrigger sind allseits bekannt und dieser ist zwar 
überflüssig, wird aber eher nicht das Problem sein. Ich denke, mit 
Deinen selektiven Antworten kommen wir nicht weiter.

von Dietrich L. (dietrichl)


Lesenswert?

Wolfgang schrieb:
> Die nachgefragte Versordung vom Schmitt (TI CD40106B) liegt an 7V, was
> laut angehängtem Datenblatt perfekt passen sollte.

Und die zu hohe Spannung am Ausgang, die direkt auf den Arduino-Eingang 
geht, ignorierst du einfach?

Siehe hier:
Peter D. schrieb:
> Ganz schlechte Idee, die IOs des MCs dürfen nur max VCC (5V oder 3,3V)
> sehen.

von Wolfgang (Gast)


Lesenswert?

Dietrich L. schrieb:
> Und die zu hohe Spannung am Ausgang, die direkt auf den Arduino-Eingang
> geht, ignorierst du einfach?
Wieso ignorieren? Ich habe doch oben geschrieben, dass ich mit dem Oszi 
auch dieses Signal bereits kontrolliert habe und neben der perfekten 
Rechteckcharakteristik ohne Störungen auch die Pegel für den MC passen 
(5.2V gegen MC GND bei HIGH Signal).

m.n. schrieb:
> Ich denke, mit
> Deinen selektiven Antworten kommen wir nicht weiter.
Worauf soll ich denn antworten, wenn nicht auf eure Detailfragen?
Was kann ich noch beitragen? Ich bin offen für sachdienliche Hinweise. 
:)

von foobar (Gast)


Lesenswert?

> die Pegel für den MC passen (5.2V gegen MC GND bei HIGH Signal).

Wohl, weil die Schutzdioden am MC-Eingang den Schmitttrigger-Ausgang in 
die Knie zwingen ...

von Dietrich L. (dietrichl)


Lesenswert?

Wolfgang schrieb:
> die Pegel für den MC passen (5.2V gegen MC GND bei HIGH Signal).

foobar schrieb:
> Wohl, weil die Schutzdioden am MC-Eingang den Schmitttrigger-Ausgang in
> die Knie zwingen ...

Richtig.
Und wie groß der Strom durch die Dioden dann ist und was er eventuell 
böses anrichtet kann man nur spekulieren. Das kann durchaus eine Ursache 
für unkontrolliertes Verhalten sein.

von Nick M. (Gast)


Lesenswert?

Wolfgang schrieb:
> Die nachgefragte Versordung vom Schmitt (TI CD40106B) liegt an 7V, was
> laut angehängtem Datenblatt perfekt passen sollte.

Was du da zeigst ist "Absolute Maximum Ratings", das hat absolut nichts 
mit regulären Betrieb zu tun.

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.