Drehimpulsgeber KY-040: Unterschied zwischen den Versionen

Aus HSHL Mechatronik
Zur Navigation springen Zur Suche springen
Weiterleitung auf Drehimpulsgeber Ky-040 entfernt
Markierung: Weiterleitung entfernt
 
(20 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
[[Kategorie:Arduino]]
[[Kategorie:Arduino]]
[[Kategorie:Sensoren]]
[[Kategorie:Sensoren]]
[[Datei:KY-040-Rotary-Encoder-top.png|thumb|rigth|300px|Abb. 1:[https://funduinoshop.com/elektronische-module/keypads-und-buttons/rotary-encoder/ky-040-drehimpulsgeber-rotary-encoder Drehimpulsgeber Funduino 31.03.2025] ]]
[[Datei:KY-040-Rotary-Encoder-top.png|thumb|rigth|300px|Abb. 1: Drehimpulsgeber KY-040]]
'''Autoren:''' [[Benutzer:Marc Ebmeyer| Marc Ebmeyer]], [[Benutzer:Ulrich_Schneider| Prof. Dr.-Ing. Schneider]]  
'''Autoren:''' [[Benutzer:Marc Ebmeyer| Marc Ebmeyer]], [[Benutzer:Ulrich_Schneider| Prof. Dr.-Ing. Schneider]]  


== Einleitung ==
= Einleitung =
Analoge Einstellräder sind ein wichtiges haptisches Benutzer Interface, sie ermöglichen schnelle intuitive Bedingung von Geräten. Dieses wurde früher mit Ein- und Mehrgangs-Potentiometern gelöst, welche aber einem Verschleiß unterliegen und nur eine (in Ausnahme fällen bis zu 10) Umdrehungen zulassen, zudem sind sie kostenintensiv in der Herstellung.
Der KY-040 ist ein inkrementaler Drehimpulsgeber (Engl. rotary encoder), der Drehbewegungen in digitale Signale umwandelt. Er dient zur Erfassung von Drehwinkel, Drehrichtung und Anzahl der Umdrehungen und wird häufig in Mikrocontroller-Projekten (z. B. mit Arduino oder Raspberry Pi) eingesetzt.


Um diese Probleme zu umgehen, wurden digitale Drehimpulsgeber entwickelt. Diese sind kostengünstig in der Fertigung und bieten unendliche Umdrehungen.
Der KY-040 besteht aus:
Dieses wurde erst möglich durch die Einführung kostengünstiger Mikrocontroller, welche die Aufgabe der anfallenden Software Auswertung übernehmen.
* Mechanischem Encoder mit Rastungen (20 Schritte pro Umdrehung)
Bei der Drehimpulsmessung gibt es verschiedene verfahren, am häufigsten sind optische, magnetische und mechanische Verfahren.
* Taster (SW) – durch Drücken der Achse betätigt
Das Grundprinzip sind aber immer eine oder mehre runde Lochscheiben, wobei die Löcher der einzelnen Scheiben gegeneinander versetzt angeordnet sind.
 
Dreht sich die Scheibe so, triff das Licht (beim optischen Verfahren), welches durch die erste Scheibe abwechselnd durchgelassen und geblockt wird auf einen Sensor, der den Lichtwechsel detektiert und in ein elektrisches Signal umwandelt.
Beim Drehen der Achse erzeugen die Signale CLK und DT eine quadraturkodierte Folge (A und B um 90° phasenverschoben).
Dadurch kann man bei Verwendung nur einer Scheibe, schon mal die Drehzahl und den Drehwinkel detektieren unter dem wissen der Anzahl an Schlitzen in der Lochscheibe.
* Drehrichtung: Bestimmt durch die Phasenlage von A und B
Da man die Anzahl an Unterbrechungen messen kann und die Zeitspanne in der sie ausgeführt wurden.
* Drehschritte: Jeder Signalwechsel entspricht einer Rasterposition
Durch hinzufügen einer weiteren Scheibe deren Löcher leicht versetzt zu ersten Scheibe sind, lässt sich nun auch die Drehrichtung der Achse erkennen.
 
Fügt man eine weitere Scheibe ein, bekommt man die Möglichkeit absolute Positionen zu bekommen. Dieses kann durch einen einzelnen Schlitz sein, der bei jeder Umdrehung die absolute Position bestätigt, oder auch mehrere mit unterschiedlichen Breiten, sodass man mehrere Referenz Positionen bekommt.
In Mikrocontroller- oder Simulink-Anwendungen kann der KY-040 zur:
Der hier verwendete Drehimpulsgeber ist ein einfacher mechanischer, bei ihm finden kleine Phasen versetzte Micro Schleifkontakte ihre Anwendung (siehe Abb.3) , welche über eine leitfähige Lochscheibe schleifen und so zwei Phasen versetzte Signale erzeugen, als wenn man zwei Lochscheiben hätte (siehe Abb.2).
* Menü-Navigation (Drehgeber als Eingabegerät)
* Positions- oder Geschwindigkeitsmessung
* Einstellwertregelung (z. B. Sollwert-Drehknopf)


== Technische Übersicht ==
== Technische Übersicht ==
Zeile 23: Zeile 25:
! style="font-weight: bold;" | Daten
! style="font-weight: bold;" | Daten
|-
|-
| Spannungsversorgung<br/> || 3thinsp;V -5&thinsp;V DC
| Spannungsversorgung || 3thinsp;V -5&thinsp;V DC
|-
| Schritte pro Umdrehung|| 20&thinsp;
|-
| Signalart|| Digital, quadraturkodiert
|-
|-
| Rastungen<br/> || 20&thinsp;<br/>
| Abmessungen || (30x18x30)&thinsp;mm
|-
|-
| Abmessungen<br/> || 32*20*30&thinsp;mm<br/>
| Gewicht<br/> || 8&thinsp;g
|-
|-
| Gewicht<br/> || 8&thinsp;g<br/>
| Schalterbelastung || max. 5&thinsp;V / 10&thinsp;mA
|-
| Betriebstemperaturbereich || -40&thinsp;°C bis 85&thinsp;°C
|-
| Ausgabe|| 2-Bit Gray-Code
|}
|}


== Pinbelegung ==
== Pinbelegung ==
Dies ist die Pinbelegung zum in Abb. 1 dargestellten Sensor.
{| class="wikitable"
{| class="wikitable"
! style="font-weight: bold;" | Pin
|+ style = "text-align: left"|Tabelle 1: Pinbelegung des Drehimpulsgebers KY-040 (vgl. Abb 1.)
! style="font-weight: bold;" | Belegung
! style="font-weight: bold;" | Benennung
! style="font-weight: bold;" | Signal
! style="font-weight: bold;" |Anschluss am Arduino
|-
|-
| 1 ||Masse|| GND  ||  0&thinsp;V ||
! # !! Pin !! Funktion !! Beschreibung
|-
|-
| 2 || Betriebsspannung ||Vcc || 3-5&thinsp;V||
| 1 || CLK|| Signal A || Erster Ausgang (Quadratimpuls)
|-
|-
| 3 || Taster Ausgang ||SW || 0 oder VCC &thinsp;V||Wird intern auf Masse gezogen beim betätigen des Tasters siehe Abb.4. Anschluss an z.B. D4
| 2 || DT || Signal B || Zweiter Ausgang, phasenverschoben
|-
|-
| 4 || Signalausgang_B ||DT || 0 oder VCC &thinsp;V||An einem Interrupt fähigem Pin des Arduino Uno anschließen z.B. D2
| || SW || Schalter || Kontakt beim Drücken der Achse
|-
|-
| 5 || Signalausgang_A ||CLK || 0 oder VCC &thinsp;V ||An einem Interrupt fähigem Pin des Arduino Uno anschließen z.B. D3
| || + || Versorgung (3,3&thinsp;V – 5&thinsp;V)
|-
| 5  || GND || Masse || Bezugspotential
|}
|}


== Prinziperklärung ==
= Messverfahren =
Die unter der Platine befindlichen drei Widerstände (siehe Abb.6) sind Pullup Widerstände für die zwei Encoder und den Taster.
Die unter der Platine befindlichen drei Widerstände (siehe Abb.6) sind Pullup Widerstände für die zwei Encoder und den Taster.
Der KY-040 ist ein Inkrementalgeber.
Der KY-040 ist ein Inkrementalgeber.
Zeile 84: Zeile 91:
|}
|}


= Messschaltung =


*[https://de.wikipedia.org/wiki/Inkrementalgeber wikipedia]
[[Datei:KY-040Aufbau der Platine .png|thumb|left||600px|Abb. 4: KY-040 Aufbau der Platine]]
*[https://www.elektronik-kompendium.de/sites/praxis/bauteil_ky040-drehschalter.htm elektronik-kompendium]
 
*[https://www.youtube.com/watch?v=QK5zKGSheug Video Erklärung]
[[Datei:Screenshot 2025-10-27 141555.png|thumb|center||300px|Abb. 5: Anschlussplan für den Drehimpulsgeber KY-040]]


== Messung==
<!--
= Messung=
[[Datei:Screenshot 2025-10-24 113152.png|left|thumb|300px|Abb. 4 Messung]]
[[Datei:Screenshot 2025-10-24 113152.png|left|thumb|300px|Abb. 4 Messung]]


[[Datei:Screenshot 2025-10-31 155624.png|center|thumb|600px|Abb. 5 Messung]]
[[Datei:Screenshot 2025-10-31 155624.png|center|thumb|600px|Abb. 5 Messung]]
-->


== Demo ==
= Demos =
Die beiden Demos basieren auf den oben genanten Prinzip.
Die beiden Demos basieren auf den oben genanten Prinzip.
Drückt man den Taster (Achsentaster), dann wird der Nullpunkt neu gesetzt, diese Änderung wird dann aber erst beim weiterdrehen angezeigt.
Drückt man den Taster (Achsentaster), dann wird der Nullpunkt neu gesetzt, diese Änderung wird dann aber erst beim weiterdrehen angezeigt.
 
* [https://svn.hshl.de/svn/Informatikpraktikum_1/trunk/Arduino/ArduinoLibOrdner/ArduinoUnoR3/examples/DemoDrehencoderKY_040/DemoDrehencoderKY_040.ino Arduino IDE: Demo ohne Interrupt]
[https://svn.hshl.de/svn/Informatikpraktikum_1/trunk/Arduino/ArduinoLibOrdner/ArduinoUnoR3/examples/DemoDrehencoderKY_040/DemoDrehencoderKY_040.ino SVN ohne Interrupt]
* [https://svn.hshl.de/svn/Informatikpraktikum_1/trunk/Arduino/ArduinoLibOrdner/ArduinoUnoR3/examples/DemoDrehencoderKY_040_interrupt/DemoDrehencoderKY_040_interrupt.ino Demo mit Interrupt]
 
{| role="presentation" class="wikitable mw-collapsible mw-collapsed"
[https://svn.hshl.de/svn/Informatikpraktikum_1/trunk/Arduino/ArduinoLibOrdner/ArduinoUnoR3/examples/DemoDrehencoderKY_040_interrupt/DemoDrehencoderKY_040_interrupt.ino SVN mit Interrupt]
| <strong><code>DemoDrehencoderKY_040_interrupt.ino</code>&thinsp;</strong>
 
|-
 
|<syntaxhighlight lang="c" style="background-color: #EFF1C1; font-size:larger">
 
 
 
 
 
 
 
Demo-Quelltext [https://svn.hshl.de/svn/Informatikpraktikum_1/trunk/Arduino/ArduinoLibOrdner/ArduinoUnoR3/examples/DemoDrehencoderKY_040_interrupt/DemoSwitchCase.ino <code>DemoDrehencoderKY_040_interrupt.ino</code>]
<syntaxhighlight lang="c" style="background-color: #EFF1C1; font-size:larger">
 
//---------------------------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------------------------
//Drehencoder KY040 auslesen (20 Rastungen 40 Positionen / Umdrehung)
//
//  Anschlüsse:
 
//  Drehencoder  |  Arduino
//  ----------------------------------
//      GND      |    GND
//      +      |    +5V
//      SW      |    D4
//      DT      |    D2
//      CLK      |    D3
//
// Ausgabe der Position und der Drehrichtung und Winkel
//
//
//
//
//
//
// https://wiki.hshl.de/wiki/index.php/Ky-040-Drehimpulsgeber#Pinbelegung
//
//31.10.2025 Marc Ebmeyer
//
//---------------------------------------------------------------------------------------------------------
 
//---------------------------------------------------------------------------------------------------------
const byte SW_u8 = 4; // Pin zum Messen vom Schalter   
const byte SW_u8 = 4; // Pin zum Messen vom Schalter   
const byte DT_u8 = 2; // Pin zum Messen Interrupt PIN
const byte DT_u8 = 2; // Pin zum Messen Interrupt PIN
Zeile 246: Zeile 218:
     CLK_pos_alt_s16 = CLK_pos_neu_s16;  //neuer Messwert wird u altem Messwert für den nächsten Durchlauf
     CLK_pos_alt_s16 = CLK_pos_neu_s16;  //neuer Messwert wird u altem Messwert für den nächsten Durchlauf
   }
   }
</syntaxhighlight>
</syntaxhighlight>
|-
|-
|}
|}
----
==Hardwareaufbau==
[[Datei:KY-040Aufbau der Platine .png|thumb|left||600px|Abb. 6: Ky-040 Aufbau der Platine]]
[[Datei:Screenshot 2025-10-27 141555.png|thumb|center||300px|Abb. 7: Verkabelung mit Arduino]]


= Datenblätter =
= Datenblätter =
*[[Medium:SE055.pdf|Datasheet Rotary Encode Module (SE055) (EN)]]
*[[Medium:AZ165 B 23-7 DE B07TKK4QQD 50558e37-862d-4316-bfa6-01137cab327c.pdf|AZ-Delivery: KY-040 Drehgebermodul (DE)]]
 
*[[Medium:COM-KY040RE Anleitung 2024-05-07.pdf|joy-it: COM-KY040RE (DE)]]
 
*[[Medium:SE055.pdf|Iduino: Datasheet Rotary Encode Module (SE055) (EN)]]
==Literatur==


== Weiterführende Artikel ==
=Weiterführende Artikel =
* [https://funduino.de/nr-32-der-rotary-encoder-ky-040 Funduino: Rotary Encoder KY-040]
* [https://funduino.de/nr-32-der-rotary-encoder-ky-040 Funduino: Rotary Encoder KY-040]
 
*[https://de.wikipedia.org/wiki/Inkrementalgeber wikipedia]
*[https://www.elektronik-kompendium.de/sites/praxis/bauteil_ky040-drehschalter.htm elektronik-kompendium]
*[https://www.youtube.com/watch?v=QK5zKGSheug Video Erklärung]




----
----
→ zurück zum Hauptartikel: [[HSHL-Mechatronik-Baukasten]]
→ zurück zum Hauptartikel: [[HSHL-Mechatronik-Baukasten]]

Aktuelle Version vom 12. November 2025, 17:05 Uhr

Abb. 1: Drehimpulsgeber KY-040

Autoren: Marc Ebmeyer, Prof. Dr.-Ing. Schneider

Einleitung

Der KY-040 ist ein inkrementaler Drehimpulsgeber (Engl. rotary encoder), der Drehbewegungen in digitale Signale umwandelt. Er dient zur Erfassung von Drehwinkel, Drehrichtung und Anzahl der Umdrehungen und wird häufig in Mikrocontroller-Projekten (z. B. mit Arduino oder Raspberry Pi) eingesetzt.

Der KY-040 besteht aus:

  • Mechanischem Encoder mit Rastungen (20 Schritte pro Umdrehung)
  • Taster (SW) – durch Drücken der Achse betätigt

Beim Drehen der Achse erzeugen die Signale CLK und DT eine quadraturkodierte Folge (A und B um 90° phasenverschoben).

  • Drehrichtung: Bestimmt durch die Phasenlage von A und B
  • Drehschritte: Jeder Signalwechsel entspricht einer Rasterposition

In Mikrocontroller- oder Simulink-Anwendungen kann der KY-040 zur:

  • Menü-Navigation (Drehgeber als Eingabegerät)
  • Positions- oder Geschwindigkeitsmessung
  • Einstellwertregelung (z. B. Sollwert-Drehknopf)

Technische Übersicht

Eigenschaft Daten
Spannungsversorgung 3thinsp;V -5 V DC
Schritte pro Umdrehung 20 
Signalart Digital, quadraturkodiert
Abmessungen (30x18x30) mm
Gewicht
8 g
Schalterbelastung max. 5 V / 10 mA
Betriebstemperaturbereich -40 °C bis 85 °C
Ausgabe 2-Bit Gray-Code

Pinbelegung

Tabelle 1: Pinbelegung des Drehimpulsgebers KY-040 (vgl. Abb 1.)
# Pin Funktion Beschreibung
1 CLK Signal A Erster Ausgang (Quadratimpuls)
2 DT Signal B Zweiter Ausgang, phasenverschoben
3 SW Schalter Kontakt beim Drücken der Achse
4 + Versorgung (3,3 V – 5 V)
5 GND Masse Bezugspotential

Messverfahren

Die unter der Platine befindlichen drei Widerstände (siehe Abb.6) sind Pullup Widerstände für die zwei Encoder und den Taster. Der KY-040 ist ein Inkrementalgeber. Je nach dem ob man rechts oder links herum dreht, wird erst der Pin A oder der Pin B high, da beide versetzt auf der Drehencoderscheibe sitzen (siehe Abb.3). Damit bekommt man einen Gray-Code am Ausgang vom Signalausgang A und B. Gray-code ähneld dem Binär-Code nur wird bei ihm bei jedem Sprung nach oben oder unten jeweils nur ein Wert verändert. Damit bekommen wir die Drehrichtung, den Drehwinkel und die Drehgeschwindigkeit.

Geht zum Beispiel erst CLK auf high und dann DT, dann drehen wir rechts rum. Geht erst der DT Pin auf high und dann der CLK Pin, dann drehen wir links rum.

Teilen wir die Anzahl an CLK durch die vorhandene Inkremente und durch die Zeitspanne der Messung, bekommen wir die Drehzahl.

Abb. 2: Blick in den offenen Drehencoder, hier ein Modell mit 15 Teilungen und 30 Rastungen
Abb. 3: Blick auf die Phasenverschobenen Signalabnehmer

Bezug zur Prinzipskizze?

Zahlenwert Binär-Code Gray-Code
0 00 00
1 01 01
2 10 11
3 11 10

Messschaltung

Abb. 4: KY-040 Aufbau der Platine
Abb. 5: Anschlussplan für den Drehimpulsgeber KY-040


Demos

Die beiden Demos basieren auf den oben genanten Prinzip. Drückt man den Taster (Achsentaster), dann wird der Nullpunkt neu gesetzt, diese Änderung wird dann aber erst beim weiterdrehen angezeigt.

Datenblätter

Weiterführende Artikel



→ zurück zum Hauptartikel: HSHL-Mechatronik-Baukasten