Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > de.sci.electronics > #344400
| From | stefan <adresse@ist.invalid> |
|---|---|
| Newsgroups | de.sci.electronics |
| Subject | Re: Drehgeber Signale auftrennen, IC dafür? |
| Date | 2023-09-23 16:27 +0200 |
| Message-ID | <uemsk6$gsc0$1@solani.org> (permalink) |
| References | (4 earlier) <slrnugqvkr.6mh.news-1513678000@a-tuin.ms.intern> <uekiib$fp74$6@solani.org> <slrnugrpon.6mh.news-1513678000@a-tuin.ms.intern> <kn6o24F139gU9@mid.individual.net> <slrnugtdkg.3o6.news-1513678000@a-tuin.ms.intern> |
Am 23.09.2023 um 11:57 schrieb Michael Schwingen:
> On 2023-09-22, Hans-Peter Diettrich <DrDiettrich1@aol.com> wrote:
>> Frage: wie schnell darf ein mechanischer Encoder überhaupt drehen, bevor
>> die Kontakte abheben? Die sind doch nur für manuelle Bedienung geeignet,
>> wo selbst eine falsche Zählung von dem korrigiert wird, der dran dreht.
>
> Klar gibt es da Grenzen, und wenn das selten genug passiert, ist das OK.
> Aber: man merkt das (bei Encodern mit mechanischer Rastung) schon recht
> deutlich, wenn Pulse nicht gezählt werden, auch bei schnellerem Drehen.
>
>> Eine Maus wird ja auch so lange verschoben, bis der Zeiger an der
>> richtigen Stelle steht - da dürfen Impulse auch mal verschütt gehen,
>
> Auch dort merkt man dann, daß das ruckelt.
Wenn man es richtig macht, ruckelt da nichts.
Auf jede fallende Flanke muss eine steigende Flanke folgen. Wenn es
jetzt wie auf dem Bild in dem von dir verlinkten Artikel aussieht,
könnte es theoretisch passieren, dass Flanken nicht erfasst werden.
Das ist richtig, und sollte berücksichtigt werden, ist aber trivial.
https://hackaday.com/2022/04/20/a-rotary-encoder-how-hard-can-it-be/
https://i0.wp.com/hackaday.com/wp-content/uploads/2022/04/real-encoder_had.jpg?w=425&h=275&ssl=1
Wenn es also eine fallende Flanke gibt, die einen INT auslöst und noch
während dieser INT verarbeitet wird eine steigende Flanke kommt die dann
keinen INT auslöst weil der Prozessor noch nicht bereit ist und danach
eine weitere fallende Flanke, würde der Zähler einmal zuviel zählen.
Wenn die Zahl der "verschluckten" Flanken geradzahlig ist, passiert das
aber nicht.
Es kommt also drauf an, ob es vor der Flanke eine entgegengesetzte
Flanke gab.
In dem folgenden Beispielcode reagiert der INT auf jede Flanke, also
egal ob fallend oder steigend. Wenn eine Flanke verschluckt wurde, hat
man also zwei gleichartige Flanken nacheinander. Das würde zu einem
Zählfehler führen. Das passiert auch bei jeder ungeradzahligen Anzahl
von verschluckten Flanken.
Wenn man das entsprechend berücksichtigt, gibt es keine Zählfehler.
"Falsche" INT-Aufrufe belasten natürlich den Prozessor. Ob das ein
Problem ist hängt von den Rahmenbedingungen ab.
Das Signal kann man vor der Auswertung natürlich noch verbessern, z.B.
mit einem RC Tiefpass und Schmitt-Trigger.
Hier mal ein Code-Beispiel wo verschluckte Flanken berücksichtig werden:
Man kann das natürlich auch per Timer machen. Da "vernichten" sich die
falschen Flanken dann automatisch.
------------------------------------------------------------------------
int counter; // Zähler
bool SigA; // alter Zustand von Eingang A
bool SigB; // alter Zustand von Eingang B
void Interrupt_A()
// Flankengetriggerter INT, reagiert auf
// steigende und fallende Flanken an Signal A
{ InA = Encodersignal_A(); // Signal in InA speichern
InB = Encodersignal_B();
if (InA != SigA)
{ // nur wenn es einen Signalwechsel gab wird das Bit verarbeitet
if (InA == InB) { counter++; }
else counter--;
SigA = InA; // am Ende den Zustand des Bits speichern
}
}
void Interupt_B()
// Flankengetriggerter INT, reagiert auf
// steigende und fallende Flanken an Signal B
{ InB = Encodersignal_B();
InA = Encodersignal_A();
if (InB != SigB) // InB ist das Eingangsbit von Kanal B
{ // nur wenn es einen Signalwechsel gab wird das Bit verarbeitet
if (InA == InB) { counter--; }
else counter++;
SigB = InB; // am Ende den Zustand des Bits speichern
}
}
----------------------------------------------------------------------
Hier mit Timer, ist sogar noch etwas weniger Code:
-----------------------------------------------------------------------
void Timer_int()
{
InA = Encodersignal_A(); // Bit A einlesen
InB = Encodersignal_B(); // Bit B einlesen
if (InA != SigA) // wenn Flanke an Signal A
{ if (InA == InB) { counter++; }
else counter--;
SigA = InA; // am Ende den Zustand des Bits speichern
}
if (InB != SigB) // wenn Flanke an Signal B
{ if (InA == InB) { counter--; }
else counter++;
SigB = InB; // am Ende den Zustand des Bits speichern
}
}
Back to de.sci.electronics | Previous | Next — Previous in thread | Next in thread | Find similar
Drehgeber Signale auftrennen, IC dafür? Kay Martinen <usenet@martinen.de> - 2023-09-21 19:04 +0200
Re: Drehgeber Signale auftrennen, IC dafür? Gerrit Heitsch <gerrit@laosinh.s.bawue.de> - 2023-09-21 19:37 +0200
Re: Drehgeber Signale auftrennen, IC dafür? Michael Schwingen <news-1513678000@discworld.dascon.de> - 2023-09-21 18:40 +0000
Re: Drehgeber Signale auftrennen, IC dafür? stefan <adresse@ist.invalid> - 2023-09-22 07:22 +0200
Re: Drehgeber Signale auftrennen, IC dafür? Michael Schwingen <news-1513678000@discworld.dascon.de> - 2023-09-22 11:46 +0000
Re: Drehgeber Signale auftrennen, IC dafür? stefan <adresse@ist.invalid> - 2023-09-22 19:23 +0200
Re: Drehgeber Signale auftrennen, IC dafür? Michael Schwingen <news-1513678000@discworld.dascon.de> - 2023-09-22 19:12 +0000
Re: Drehgeber Signale auftrennen, IC dafür? stefan <adresse@ist.invalid> - 2023-09-22 21:27 +0200
Re: Drehgeber Signale auftrennen, IC dafür? Hans-Peter Diettrich <DrDiettrich1@aol.com> - 2023-09-23 01:48 +0200
Re: Drehgeber Signale auftrennen, IC dafür? Michael Schwingen <news-1513678000@discworld.dascon.de> - 2023-09-23 09:57 +0000
Re: Drehgeber Signale auftrennen, IC dafür? stefan <adresse@ist.invalid> - 2023-09-23 16:27 +0200
Re: Drehgeber Signale auftrennen, IC dafür? Helmut Schellong <var@schellong.biz> - 2023-09-23 12:27 +0200
Re: Drehgeber Signale auftrennen, IC dafür? Michael Schwingen <news-1513678000@discworld.dascon.de> - 2023-09-23 13:08 +0000
Re: Drehgeber Signale auftrennen, IC dafür? Helmut Schellong <var@schellong.biz> - 2023-09-23 20:43 +0200
Re: Drehgeber Signale auftrennen, IC dafür? olaf <olaf@criseis.ruhr.de> - 2023-09-23 07:00 +0200
Re: Drehgeber Signale auftrennen, IC dafür? stefan <adresse@ist.invalid> - 2023-09-21 19:42 +0200
Re: Drehgeber Signale auftrennen, IC dafür? Hans-Juergen Schneider <echo@hrz.tu-chemnitz.de> - 2023-09-21 20:54 +0200
Re: Drehgeber Signale auftrennen, IC dafür? Gunther Mannigel <newsgroups@mannigel.net> - 2023-09-22 19:44 +0200
Re: Drehgeber Signale auftrennen, IC dafür? olaf <olaf@criseis.ruhr.de> - 2023-09-23 06:55 +0200
Re: Drehgeber Signale auftrennen, IC dafür? Winfried Bue <w-buechsenschuetz@web.de> - 2023-09-26 04:39 -0700
Re: Drehgeber Signale auftrennen, IC dafür? Michael Wöstenfeld <michael.woestenfeld@gmail.com> - 2023-09-26 08:07 -0700
Re: Drehgeber Signale auftrennen, IC dafür? Michael Wöstenfeld <michael.woestenfeld@gmail.com> - 2023-09-26 08:12 -0700
Re: Drehgeber Signale auftrennen, IC dafür? Michael Schwingen <news-1513678000@discworld.dascon.de> - 2023-09-27 09:49 +0000
Re: Drehgeber Signale auftrennen, IC dafür? Andreas Graebe <andreasgraebe@arcor.de> - 2023-09-30 15:51 +0000
csiph-web