Innehållsförteckning:

Rotary Encoder - Förstå och använd den (Arduino/annan ΜController): 3 steg
Rotary Encoder - Förstå och använd den (Arduino/annan ΜController): 3 steg

Video: Rotary Encoder - Förstå och använd den (Arduino/annan ΜController): 3 steg

Video: Rotary Encoder - Förstå och använd den (Arduino/annan ΜController): 3 steg
Video: Output DC or AC Voltage using MCP4725 DAC with LCD and PWM to Voltage Converter with Arduino 2024, November
Anonim
Rotary Encoder - Förstå och använd det (Arduino/annan Μkontroller)
Rotary Encoder - Förstå och använd det (Arduino/annan Μkontroller)

En roterande kodare är en elektromekanisk anordning som omvandlar rotationsrörelse till digital eller analog information. Den kan vridas medurs eller moturs. Det finns två typer av roterande kodare: Absoluta och relativa (inkrementella) kodare.

Medan en absolut givare matar ut ett värde som är proportionellt mot den aktuella axelvinkeln, matar en inkrementell givare ut axelns steg och dess riktning. (I det här fallet har vi en inkrementell kodare)

Rotary encoders blir allt mer populärt eftersom du kan använda två funktioner i en elektrisk modul: En enkel switch för att bekräfta drift och roterande encoder att navigera, t.ex. genom en meny.

En inkrementell roterande kodare genererar två utsignaler medan dess axel roterar. Beroende på riktning leder en av signalerna den andra. (se nedan)

Steg 1: Förstå utdata

Förstå utdata
Förstå utdata

Som du kan se när givaraxeln börjar rotera medurs, faller utgång A till LÅG först och utgång B följer den. I motsatt riktning vänder operationen motsatt.

Nu måste vi bara implementera detta på vår µController (jag använde en Arduino Nano).

Steg 2: Bygg kretsen

Bygg kretsen
Bygg kretsen
Bygg kretsen
Bygg kretsen

Som jag beskrev tidigare skapar utgångarna en HÖG och en LÅG flank. För att få en ren HIGH vid datapinnen A och B på µController måste vi lägga till Pull-Up-motstånd. Den gemensamma stift C går rakt på marken för den LÅGA flanken.

För att få information om den interna omkopplaren (tryckknapp) använder vi de andra två stiften. En av dem går till VCC och den andra till en datapinne på µController. Vi måste också lägga till en Pull-Down Resistor till datapinnen för att få en ren LOW.

Det är också möjligt att använda interna Pull-Up- och Pull-Down-motstånd på din µController!

I mitt fall ser pinout ut så här:

  • +3, 3V => +3, 3V (Arduino) (även +5V möjligt)
  • GND => GND (Arduino)
  • A => Pin10
  • B =>

    Stift

    11

  • C => GND
  • SW =>

    Stift

    12

Steg 3: Skriva koden

int pinA = 10; // intern switch A int pinB = 11; // intern switch B int pinSW = 12; // switch (tryckt Encoder) int encoderPosCount = 0; // börjar på noll, ändra om du vill

int positionval;

bool switchval; int mrotateLast; int mrotate;

void setup () {

int mrotateLast = digitalRead (pinA); Serial.begin (9600); fördröjning (50); }

void loop () {readencoder (); if (readwitch () == 1) {Serial.println ("Switch = 1"); }}

int readencoder () {

mrotate = digitalRead (pinA); if (mrotate! = mrotateLast) {// ratten roterar om (digitalRead (pinB)! = mrotate) {// switch A ändrades först -> roterar medurs encoderPosCount ++; Serial.println ("roterat medurs"); } annat {// switch B ändrades först-> roterar moturs encoderPosCount--; Serial.println ("roterat moturs"); }

Serial.print ("Encoder Position:"); Serial.println (encoderPosCount); Serial.println (""); } mrotateLast = mrotate; return encoderPosCount; } bool läskontakt () {

om (digitalRead (pinSW)! = 0) {// -knappen trycks in

medan (digitalRead (pinSW)! = 0) {} // switch är för närvarande nedtryckt switchval = 1; } annars {switchval = 0;} // switch är otryckt retur switchval; }

Nu kan du vrida pulsgivaren och variabeln encoderPosCount räknar upp om du roterar medsols och räknar nedåt om du roterar moturs.

Det är allt! Enkelt och användbart.

Ändra gärna och utför koden. Du kan implementera det i ditt projekt.

Jag kommer också att ladda upp ett LED -projekt där jag använde kodaren för att ställa in ljusstyrkan på mina lysdioder.

Rekommenderad: