Hallo, ich taste eine löchrige Metallscheibe mit einen induktiven Näherungssensor ab. Die Anzahl der detektierten Löcher pro Zeit ist ein Maß für die Geschwindigkeit. Diese "Zählergebnisse" werte ich jede Sekunde aus. Dazu nutze ich noch einen CTC Timer Interrupt (16 Bit). Den habe ich jetzt mal im Code weggelassen. In meinen ersten Programm habe ich einfach alle 1ms den Näherungssensor gepollt. Das klappte Prima ohne Probleme ! Jetzt nutze ich den externen Interrupt INT0 und bekomme leider schwankende Werte und mitunter sogar doppelt so hohe Werte. Gleichzeitig nutze ich noch den externen Interrupt INT1. Diese Zählwerte sind o.k. Das Interrupt auslösende Signal stammt allerdings von einen anderen Microcontroller. Beim INT0 vermut ich, dass die Flanken des Näherungssensors unsauber sind, oder sonstige EMV Probleme die Ursache sind? Ich habe die Auslöseart des externen Interrupts auch umgestellt auf "fallende Flanke" und "Pegeländerung". Jeweils mit denselben Ergebnis, dass sehr schwankend gezählt wird. Zum Beispiel müsste ich pro Sekunde 40 Pegeländerungen erfassen. Es werden meistens auch Werte um 40 angezeigt, aber sehr oft Aussreisser, teilweise bis zu 80. Vorsichtshalber hänge ich mal den Code an, ich denke aber es liegt eher am Signal des Induktiven Näherungssensors. Jetzt ist meine Frage, wie man das am geschicktesten repariert? Vielleicht sobald eine steigende Flanke erkannt wird den Interrupt für ein paar µs sperren? Über ein paar Tipps wäre ich sehr dankbar. Grüße Frank
Frank schrieb: > Jetzt nutze ich den externen Interrupt INT0 und bekomme leider > schwankende Werte und mitunter sogar doppelt so hohe Werte. Wenn das eine Art physischer Taster oder Relaikontakt ist: Der prellt. Damit wird der externe Interrupt mehrfach ausgeführt. Entweder legt man das Signal auf einen anderen Pin (z.B. Timer Capture) oder man stellt den externen Interrupt für eine gewisse Zeit tot und macht ihn erst später wieder "scharf".
Timer Capture ist auch nicht besser. Es sei denn, die Prellzeit liegt unter der Reaktionszeit... ;-) Bei so einem Messprogramm ermittelst du doch die Zeit als Änderung des Zählerstands von Counter/Timer-xy. Bei externen Signalen baue ich immer eine Plausibilitätskontrolle ein. Hier wäre es einfach: Wie schnell dreht die Scheibe maximal? Das ergibt die kleinste sinnvolle Änderung des Zählerstands von Counter/Timer-xy zwischen zwei Interrupts. Liegt der Messwert darunter: Ignorieren!
Welchen Wert hat denn Vin an deinem Näherungsschalter? Wahrscheinlich 5V, damit wird der aber nicht arbeiten. 24V? Das wird dem uC nicht gefallen.
Frank schrieb: > Beim INT0 vermut ich, dass die Flanken des Näherungssensors unsauber > sind, oder sonstige EMV Probleme die Ursache sind? > Über ein paar Tipps wäre ich sehr dankbar. Blindes rumrätseln und Maßnahmen mit der Schrotflinte sind nicht die beste Methode für systematische Vorgehensweise. Nimm die einen Logikanalysator (einer für 5€ tut's) und guck dir an, was genau von deinem Sensor kommt.
Frank schrieb: > Jetzt nutze ich den externen Interrupt INT0 und bekomme leider > schwankende Werte und mitunter sogar doppelt so hohe Werte. Wie lang ist die grün hervorgehobene Strippe und wie ist sie genau ausgeführt? > Jetzt ist meine Frage, wie man das am geschicktesten repariert? Wenn diese Leitung länger als wenige cm ist: Die Ursache der Probleme sind dann wahrscheinlich darin eingestreute Störungen. Erste Maßnahme wäre die Verwendung eines geeigneten Kabels, entweder ein verdrilltes Kabelpaar (1x dein Signal, 1x Masse) oder eines geschirmten Kabels (Mittelleiter dein Signal, Schirm auf Masse). Reicht das nicht, muss man filtern: kleiner Kondensator (einige pF..einige nF) direkt vom Eingang des µC nach Masse. R8 und dieser Kondensator bilden dann einen Tiefpass, der (hoffentlich) die Störungen hinreichend unterdrücken kann. Wenn nicht, muss man mit Software nachfiltern. Dazu muss man wissen, wie schnell sich die Drehzahl maximal ändern kann.
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.