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.
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?
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.
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.
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?
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.
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
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 ...
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" ;-)
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
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.
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?
Dann erzähl mal was von deinem Netzteil und der Motorleistung.
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.
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.
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.
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?
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 ;-)
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.
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.
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.
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. :)
> 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 ...
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.