Indholdsfortegnelse:

Rotary Encoder - Forstå og brug det (Arduino/anden ΜController): 3 trin
Rotary Encoder - Forstå og brug det (Arduino/anden ΜController): 3 trin

Video: Rotary Encoder - Forstå og brug det (Arduino/anden ΜController): 3 trin

Video: Rotary Encoder - Forstå og brug det (Arduino/anden ΜController): 3 trin
Video: Lesson 97: Controlling Servo Motor using Rotary Encoder and Display Angle On LCD 2024, November
Anonim
Rotary Encoder - Forstå og brug det (Arduino/anden ΜController)
Rotary Encoder - Forstå og brug det (Arduino/anden ΜController)

En roterende encoder er en elektromekanisk enhed, der konverterer rotationsbevægelse til digital eller analog information. Den kan dreje med eller mod uret. Der er to typer roterende encodere: Absolutte og relative (inkrementelle) encodere.

Mens en absolut encoder udsender en værdi, der er proportional med den aktuelle akselvinkel, sender en inkrementel encoder trin af akslen og dens retning. (I dette tilfælde har vi en inkrementel encoder)

Rotary encoders bliver mere og mere populært, fordi du er i stand til at bruge to funktioner i et elektrisk modul: En enkel switch til bekræftelse af drift og den roterende encoder til at navigere, f.eks. gennem en menu.

En inkrementel roterende encoder genererer to udgangssignaler, mens akslen roterer. Afhængigt af retningen fører det ene af signalerne det andet. (se nedenunder)

Trin 1: Forstå outputdata

Forstå outputdata
Forstå outputdata

Som du kan se, når encoderakslen begynder at rotere med uret, falder Output A først til LOW og Output B følger den. I retning mod uret vender operationen modsat.

Nu skal vi bare implementere dette på vores µController (jeg brugte en Arduino Nano).

Trin 2: Byg kredsløbet

Byg kredsløbet
Byg kredsløbet
Byg kredsløbet
Byg kredsløbet

Som jeg beskrev før, skaber output en HIGH og en LOW flanke. For at få en ren HIGH ved datapinden A og B på µController skal vi tilføje Pull-Up modstande. Den almindelige Pin C går lige til jorden for den LAVE flanke.

For at få oplysninger om den interne switch (trykknap) bruger vi de to andre ben. En af dem går til VCC og den anden til en datapind på µController. Vi skal også tilføje en pull-down-modstand til datapinden for at få en ren LOW.

Det er også muligt at bruge interne Pull-Up og Pull-Down modstande på din µController!

I mit tilfælde ser pinout ud:

  • +3, 3V => +3, 3V (Arduino) (også +5V mulig)
  • GND => GND (Arduino)
  • A => Pin10
  • B =>

    Pin

    11

  • C => GND
  • SW =>

    Pin

    12

Trin 3: Skrivning af koden

int pinA = 10; // intern switch A int pinB = 11; // intern switch B int pinSW = 12; // switch (trykket Encoder) int encoderPosCount = 0; // starter ved nul, skift hvis du vil

int positionval;

bool switchval; int mrotateLast; int mrotate;

ugyldig opsætning () {

int mrotateLast = digitalRead (pinA); Serial.begin (9600); forsinkelse (50); }

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

int readencoder () {

mrotate = digitalRead (pinA); hvis (mrotate! = mrotateLast) {// knap roterer hvis (digitalRead (pinB)! = mrotate) {// switch A først ændret -> roterer med uret encoderPosCount ++; Serial.println ("roteret med uret"); } ellers {// switch B ændret først-> rotere mod uret encoderPosCount--; Serial.println ("drejet mod uret"); }

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

hvis der trykkes på (digitalRead (pinSW)! = 0) {// switch

mens (digitalRead (pinSW)! = 0) {} // switch er trykket på switchval = 1; } ellers {switchval = 0;} // switch er upresset return switchval; }

Nu kan du dreje encoderen, og variablen encoderPosCount tæller op, hvis du roterer med uret og tæller ned, hvis du roterer mod uret.

Det er det! Simpelthen og nyttigt.

Du er velkommen til at ændre og udføre koden. Du kan implementere det i dit projekt.

Jeg vil også uploade et LED -projekt, hvor jeg brugte encoderen til at indstille lysstyrken på mine LED'er.

Anbefalede: