Drehimpulsgeber-Signale auswerten

Gast #361669
Lesenswert?

ich habe ein kleines problem beim auswerten der signale eines
drehimpulsgebers (ich hoffe das heißt überhaupt so. es werden
jedenfalls 2 impulse abgegeben, abhängig von der drehrichtung kommt
entweder der eine oder der andere zuerst).
ein impuls hängt am INT0-pin eines atmega32, der 2. an einem anderen
pin (PD1).
in der interrupt routine frage ich einfach ab ob PD1 high oder low ist.
sofern ich das prinzip verstanden habe, sollte das eigentlich genügen um
die drehrichtung zu erkennen. tja, tut es aber nicht ganz :)
eine drehung in richtung 1 wird immer als solche "erkannt". richtung
2 hingegen wird nur manchmal als solche erkannt und das ist davon
abhängig wie schnell ich drehe. naja das problem scheint hier recht
klar zu sein. der 2. impuls lässt wohl machmal zu lange auf sich
warten.
hat jemand eine idee wie ich dieses problem umgehen kann ohne einen 2.
externen interrupt-pin zu verwenden?

danke im vorraus, mfg philipp
Gast #361672
Lesenswert?

Es geht aber auch wunderbar mit Interrupts:

SIGNAL(SIG_INTERRUPT0)
{
  if (((INKREM1)&&(INKREM2))||((INKREM1==0)&&(INKREM2==0)))
    inkrement--;
  else
    inkrement++;
}

Der Interrupt wird bei beiden Flanken ausgelöst, INKREM1 und INKREM
zwei sind die Pins an dem der Inkrementalgeber angeschlossen ist.

Einzige Vorraussetzung damit es geht: Das Ding darf nicht prellen.
Gast #361674
Lesenswert?

>...geht also nur theoretisch...
Nö, einfach ein RC Glied zwischen Inkrementalgeber und uC und das ganze
läuft wunderbar. Das verwende ich schon seit Jahren in verschiedensten
Schaltungen ohne Probleme.
Je nachdem ob der Inkrementalgeber ein oder zwei Impulse pro Schritt
erzeugt, kann es sein, dass man den Interrupt auf ein oder zwei Flanken
stellen muss.
Gast #361679
Lesenswert?

Ein RC kann gegen beides (ESD/EMV) helfen. In der Beschaltung unten ist
der ESD Schutz höher.
-----
Bei der elektrostatischen Entladung wird eine gewisse Kapazität (je
nach Modell bzw. in der Realität je nach Umgebung) von ein paar
100pF@XkV über den Kontakt mit dem Device entladen.

Pin   __ 1k
  ---|____|---------  uC
               |
              ---  47nF
              ---
               |
  -------------------  MASSE

Der Mensch fasst jetzt mit z.B. 8kV geladen und einer Kapazität von
100pF und einem Innenwiderstand von 1.5kOhm an den Pin an. Der R wirkt
jetzt als Strombegrenzung für die Ausgleichströme und reduziert die
Anstiegszeiten. Der Kondensator teilt die Spannung gemaess 100pF/47nF
auf, also auf 1/470. Die verbleibende Spannung (17V) wird ohne Probleme
von den in den uC integrierten ESD Schutzstrukturen abgeleitet.

-> ESD Puls sorgt für einen Puls am Eingangspin des uC, uC überlebt

Die Bauteile müssen natürlich die ESD Belastung abkönnen, z.B. darf das
R nicht so ein kleines SMD Teil sein, dass es direkt einen
Spannungsüberschlag gibt. Abhilfe ist z.B. mehrere in Reihe schalten.

Die SW sollte robust gegen diese ESD Pulse programmiert sein....

ESD:
http://de.wikipedia.org/wiki/Electrostatic_Discharge
EMC/EMV:
http://de.wikipedia.org/wiki/Elektromagnetische_Vertr%C3%A4glichkeit
#361680
Lesenswert?

@SuperUser

"Der Mensch fasst jetzt mit z.B. 8kV geladen und einer Kapazität von
100pF und einem Innenwiderstand von 1.5kOhm an den Pin an."


Offene Bauweise oder wie ?

Der Mensch faßt am Knopf oder am Gehäuse an und nicht an irgendwelchen
internen Drähten.

Und Deine Aufgabe (als Entwickler) ist es, daß nirgends direkt was
berührt werden kann (auch Ausgänge können ESD aufschnappen).

Üblich ist ja heutzutage, Kunststoffgehäuse innen zu beschichten und ne
Druckfeder an GND dagegen drücken zu lassen.

Früher hat man einfach Metallgehäuse genommen (ist robuster und sieht
edler aus), aber Geiz ist ja GGGeil !!!


Peter
Gast #361682
Lesenswert?

Hallo Peter,

leider geht die vollständige galvanische Trennung nicht immer...

Mobiltelefone haben Ladebuchsen, mein Drehencoder eine Metallachse,
dann braucht man Lüftungslöcher zur Wärmeabfuhr, es gibt USB/RS232
Anschlüsse, Mikrophone brauchen Schalleingangsöffnungen, Schallwandler
soll man hören etc. etc. Dabei soll alles schnukelig klein sein...

ESD braucht nun mal keinen direkten Kontakt sondern nur einen
Luftspalt.

Ich habe noch kein Gerät gebaut, dass man vollständig isolieren konnte
(o.k. ich arbeite im Consumer Bereich und nicht der rauhen Industrie).


In der Industrie - oder wenn es sehr klein werden soll - wird man auch
verstärkt bidirectionale suppressor dioden einsetzen, für USB und
andere schnelle Interfaces gibt es spezielle Schutz-IC's etc.  Ob ein
RC reicht muss man halt selber prüfen.
Angehängte Dateien:
Gast #361683
Lesenswert?

>Üblich ist ja heutzutage, Kunststoffgehäuse innen zu beschichten und
ne
>Druckfeder an GND dagegen drücken zu lassen.

Das ist natürlich eine gute Sache, zumindest für nicht so hohe
Stückzahlen und im Privatbereich. Dazu habe ich auch noch ein nettes
Bildchen gefunden. Fazit daraus ist, mehrere Ground Kontakte sind
besser als einer....
Angehängte Dateien:

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren