Forum: Mikrocontroller und Digitale Elektronik AVR Externer Interrupt + induktiver Näherungssensor


von Frank (Gast)


Angehängte Dateien:

Lesenswert?

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

von Jim M. (turboj)


Lesenswert?

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".

von Jacko (Gast)


Lesenswert?

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!

von Voolker (Gast)


Lesenswert?

Welchen Wert hat denn Vin an deinem Näherungsschalter? Wahrscheinlich 
5V, damit wird der aber nicht arbeiten. 24V? Das wird dem uC nicht 
gefallen.

von Wolfgang (Gast)


Lesenswert?

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.

von c-hater (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.