2025 Autor: John Day | [email protected]. Naposledy změněno: 2025-01-13 06:57
Rotační kodér je elektromechanické zařízení, které převádí rotační pohyb na digitální nebo analogovou informaci. Může se otáčet ve směru nebo proti směru hodinových ručiček. Existují dva typy rotačních kodérů: absolutní a relativní (inkrementální) kodéry.
Zatímco absolutní kodér vydává hodnotu úměrnou aktuálnímu úhlu hřídele, inkrementální kodér vydává krok hřídele a jeho směr. (V tomto případě máme inkrementální kodér)
Rotační kodéry jsou stále oblíbenější, protože v jednom elektrickém modulu můžete používat dvě funkce: Jednoduchý přepínač pro potvrzení provozu a rotační kodér pro navigaci, např. prostřednictvím nabídky.
Inkrementální rotační kodér generuje dva výstupní signály, zatímco se jeho hřídel otáčí. Podle směru vede jeden ze signálů druhý. (viz. níže)
Krok 1: Pochopení výstupních dat
Jak vidíte, když se hřídel kodéru začne otáčet ve směru hodinových ručiček, výstup A nejprve klesne na LOW a výstup B ho následuje. Ve směru proti směru hodinových ručiček se operace otočí opačně.
Nyní to musíme implementovat na našem µController (použil jsem Arduino Nano).
Krok 2: Vybudujte obvod
Jak jsem popsal dříve, výstupy vytvářejí VYSOKÝ a NÍZKÝ bok. Abychom získali čistý HIGH na datovém pinu A a B µController, musíme přidat Pull-Up odpory. Společný kolík C jde přímo na zem pro LOW bok.
K získání informací o interním přepínači (tlačítku) použijeme další dva piny. Jeden z nich jde do VCC a druhý na datový pin µController. Abychom získali čistý LOW, musíme také přidat datový kolík.
Je také možné použít interní Pull-Up a Pull-Down rezistory vašeho µController!
V mém případě vypadá pinout takto:
- +3, 3V => +3, 3V (Arduino) (také +5V možné)
- GND => GND (Arduino)
- A => Pin10
-
B =>
Kolík
11
- C => GND
-
SW =>
Kolík
12
Krok 3: Psaní kódu
int pinA = 10; // interní přepínač A int pinB = 11; // interní přepínač B int pinSW = 12; // přepínač (stisknutý kodér) int encoderPosCount = 0; // začíná na nule, změňte, pokud chcete
int positionval;
bool switchval; int mrotateLast; int mrotate;
neplatné nastavení () {
int mrotateLast = digitalRead (pinA); Serial.begin (9600); zpoždění (50); }
void loop () {readencoder (); if (readdswitch () == 1) {Serial.println ("Switch = 1"); }}
int readencoder () {
mrotate = digitalRead (pinA); if (mrotate! = mrotateLast) {// knoflík se otáčí if (digitalRead (pinB)! = mrotate) {// přepnutí A změněno jako první -> otáčení ve směru hodinových ručiček kodérPosCount ++; Serial.println ("otočeno ve směru hodinových ručiček"); } else {// přepínač B změněn jako první-> otáčení proti směru hodinových ručiček kodérPosCount--; Serial.println ("otočeno proti směru hodinových ručiček"); }
Serial.print ("Poloha kodéru:"); Serial.println (encoderPosCount); Serial.println (""); } mrotateLast = mrotate; vrátit kodérPosCount; } bool čtecí spínač () {
pokud je stisknut přepínač (digitalRead (pinSW)! = 0) {//
while (digitalRead (pinSW)! = 0) {} // přepínač je aktuálně stisknutý switchval = 1; } else {switchval = 0;} // switch is unpressed return switchval; }
Nyní můžete kodér otočit a proměnná encoderPosCount se bude odpočítávat, pokud otáčíte ve směru hodinových ručiček, a odpočítávat, pokud otáčíte proti směru hodinových ručiček.
A je to! Jednoduše a užitečně.
Neváhejte změnit a provést kód. Můžete jej implementovat do svého projektu.
Rovněž nahraji projekt LED, kde jsem kodérem nastavil jas svých LED diod.