Innholdsfortegnelse:

Rotary Encoder - Forstå og bruk den (Arduino/annen Μkontroller): 3 trinn
Rotary Encoder - Forstå og bruk den (Arduino/annen Μkontroller): 3 trinn

Video: Rotary Encoder - Forstå og bruk den (Arduino/annen Μkontroller): 3 trinn

Video: Rotary Encoder - Forstå og bruk den (Arduino/annen Μkontroller): 3 trinn
Video: LDmicro 11: Последовательный контроллер температуры с ЖК-дисплеем (лестничное программирование ПЛК микроконтроллера с помощью LDmicro) 2024, November
Anonim
Rotary Encoder - Forstå og bruk den (Arduino/annen Μkontroller)
Rotary Encoder - Forstå og bruk den (Arduino/annen Μkontroller)

En roterende encoder er en elektro-mekanisk enhet som konverterer rotasjonsbevegelse til digital eller analog informasjon. Den kan snu med eller mot klokken. Det er to typer roterende encoders: Absolutte og relative (inkrementelle) encoders.

Mens en absolutt encoder sender ut en verdi som er proporsjonal med gjeldende akselvinkel, sender en inkrementell encoder trinnet til akselen og dens retning. (I dette tilfellet har vi en inkrementell encoder)

Rotary encoders blir stadig mer populært fordi du kan bruke to funksjoner i en elektrisk modul: En enkel switch for bekreftelse av operasjoner og roterende encoder for å navigere, f.eks. gjennom en meny.

En inkrementell roterende encoder genererer to utgangssignaler mens akselen roterer. Avhengig av retningen leder det ene signalet det andre. (se nedenfor)

Trinn 1: Forstå utdataene

Forstå utdataene
Forstå utdataene

Som du kan se når kodeakselen begynner å rotere med klokken, faller utgang A til LAV først og utgang B følger den. I retning mot klokken vender operasjonen motsatt.

Nå må vi bare implementere dette på vår µController (jeg brukte en Arduino Nano).

Trinn 2: Bygg kretsen

Bygg kretsen
Bygg kretsen
Bygg kretsen
Bygg kretsen

Som jeg beskrev før, lager utgangene en HØY og en LAV flanke. For å få en ren HIGH ved datapinnen A og B på µController må vi legge til Pull-Up-motstander. Den vanlige Pin C går rett til bakken for den LAVE flanken.

For å få informasjon om den interne bryteren (trykknapp) bruker vi de to andre pinnene. En av dem går til VCC og den andre til en datapinne på µController. Vi må også legge til en Pull-Down Resistor i datapinnen for å få en ren LOW.

Det er også mulig å bruke interne Pull-Up og Pull-Down motstander på µController!

I mitt tilfelle ser pinout slik ut:

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

    Pin

    11

  • C => GND
  • SW =>

    Pin

    12

Trinn 3: Skrive koden

int pinA = 10; // intern bryter A int pinB = 11; // intern bryter B int pinSW = 12; // switch (presset Encoder) int encoderPosCount = 0; // starter på null, endre hvis du vil

int posisjonval;

bool switchvalval; int mrotateLast; int mrotate;

ugyldig oppsett () {

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

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

int readencoder () {

mrotate = digitalRead (pinA); hvis (mrotate! = mrotateLast) {// knotten roterer hvis (digitalRead (pinB)! = mrotate) {// switch A endret først -> roterer med klokken encoderPosCount ++; Serial.println ("rotert med klokken"); } annet {// bryter B endret først-> roterer encoderPosCount mot klokken; Serial.println ("rotert mot klokken"); }

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

hvis (digitalRead (pinSW)! = 0) {// bryteren er trykket

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

Nå kan du snu encoder og variabelen encoderPosCount teller opp hvis du roterer med klokken og teller ned hvis du roterer mot klokken.

Det er det! Enkelt og nyttig.

Du er velkommen til å endre og utføre koden. Du kan implementere det i prosjektet ditt.

Jeg vil også laste opp et LED -prosjekt der jeg brukte koderen for å angi lysstyrken på lysdiodene mine.

Anbefalt: