- Rotary Encoder og dens typer
- KY-040 Rotary Encoder Pinout og beskrivelse
- Hvordan Rotary Encoder fungerer
- Komponenter kreves
- PIC16F877A Roterende kodingsgrensesnittdiagram
- Kode Forklaring
En Rotary encoder er en inngangsenhet som hjelper brukeren til å samhandle med et system. Det ser mer ut som et radiopotensiometer, men det sender ut et pulstog som gjør applikasjonen unik. Når knappen på koderen roteres, roterer den i form av små trinn som hjelper den til å brukes til trinn- / servomotorstyring, navigerer gjennom en sekvens av menyen og øker / reduserer verdien til et tall og mye mer.
I denne artikkelen vil vi lære om de forskjellige typene av roterende kodere og hvordan det fungerer. Vi vil også grensesnitt det med PIC Microcontroller PIC16F877A og kontrollere verdien av et heltall ved å rotere koderen og vise verdien på en 16 * 2 LCD-skjerm. På slutten av denne opplæringen vil du være komfortabel med å bruke en Rotary Encoder for prosjektene dine. Så la oss komme i gang…
Rotary Encoder og dens typer
Roterende koder kalles ofte en akselkoder. Det er en elektromekanisk svinger, som betyr at den konverterer mekaniske bevegelser til elektroniske pulser, eller med andre ord den konverterer vinkelposisjon eller bevegelse eller akselposisjon til et digitalt eller analogt signal. Den består av en knott som når den roterer vil bevege seg trinn for trinn og produsere en sekvens av pulstog med forhåndsdefinert bredde for hvert trinn.
Det er mange typer roterende kodere i markedet, designeren kan velge en i henhold til applikasjonen. De vanligste typene er oppført nedenfor
- Incremental Encoder
- Absolutt koder
- Magnetisk koder
- Optisk koder
- Laserkoder
Disse koderne er klassifisert basert på utgangssignalet og sensing-teknologien, Incremental Encoder og Absolute Encoders er klassifisert basert på Output-signalet, og den magnetiske, optiske og laserkoderen er klassifisert basert på Sensing Technology. Den Encoder brukt her er en trinnvis typen Encoder.
Absolutt koder lagrer posisjonsinformasjonen selv etter at strømmen er fjernet, og posisjonsinformasjonen vil være tilgjengelig når vi igjen bruker strøm til den.
Den andre grunnleggende typen, Incremental encoder, gir data når koderen endrer posisjon. Den kunne ikke lagre posisjonsinformasjonen.
KY-040 Rotary Encoder Pinout og beskrivelse
Pinoutene til KY-040 roterende koderen for inkrementell type er vist nedenfor. I dette prosjektet vil vi grensesnitt denne Rotary Encoder med den populære mikrokontrolleren PIC16F877A fra mikrochip.
De to første pinnene (bakken og Vcc) brukes til å drive koderen, vanligvis brukes + 5V forsyning. Bortsett fra å dreie knotten i retning mot og mot klokka, har koderen også en bryter (Aktiv lav) som kan trykkes ved å trykke på knappen inn. Signalet fra denne bryteren oppnås gjennom pinnen 3 (SW). Endelig har den to utgangspinnene (DT og CLK) som produserer bølgeformene som allerede diskutert nedenfor. Vi har koblet denne Rotary Encoder tidligere med Arduino.
Hvordan Rotary Encoder fungerer
Utgangen avhenger helt av de interne kobberputene som gir forbindelsen til GND og VCC med akselen.
Det er to deler av Rotary Encoder. Akselhjul som er koblet til akselen og roterer med eller mot urviseren avhengig av akselens rotasjon, og basen der den elektriske tilkoblingen gjøres. Basen har porter eller punkter som er koblet til DT eller CLK på en slik måte at når akselhjulet roterer, vil det koble bunnpunktene og gi firkantbølge på både DT- og CLK-porten.
Utgangen vil være som når akselen roterer-
To porter gir firkantbølgen, men det er liten forskjell i timingen. På grunn av dette, hvis vi aksepterer utgangen som 1 og 0, kan det bare være fire tilstand, 0 0, 1 0, 1 1, 0 1. Sekvensen til den binære utgangen bestemmer medurs sving eller mot urviseren. Som for eksempel hvis Rotary Encoder gir 1 0 i inaktiv tilstand og gir 1 1 etter det, betyr det at koderen endrer posisjonen et enkelt trinn mot urviseren, men hvis den gir 0 0 etter tomgang 1 0, betyr at skaftet endres i retning mot urviseren med ett trinn.
Komponenter kreves
Det er på tide å identifisere hva vi trenger for å grensesnitt Rotary Encoder med PIC Microcontroller,
- PIC16F877A
- 4,7 k motstand
- 1k motstand
- 10k pott
- 33pF keramisk skivekondensator - 2 stk
- 20Mhz krystall
- 16x2 skjerm
- Rotary Encoder
- 5V adapter.
- Brødtavle
- Tilkoblingskabler.
PIC16F877A Roterende kodingsgrensesnittdiagram
Nedenfor er bildet av det endelige oppsettet etter tilkobling av komponentene i henhold til kretsdiagram:
Vi har brukt en enkelt 1K motstand for LCD-kontrasten i stedet for å bruke et potensiometer. Sjekk også hele arbeidsvideoen gitt på slutten.
Kode Forklaring
Komplett PIC-kode er gitt på slutten av dette prosjektet med en demonstrasjonsvideo, her forklarer vi noen viktige deler av koden. Hvis du er ny med PIC Microcontroller, så følg våre PIC-opplæringer fra begynnelsen.
Som vi diskuterte tidligere, må vi sjekke utdataene og differensiere binærutgangen for både DT og CLK, så vi opprettet en hvis-annet- del for operasjonen.
hvis (Encoder_CLK! = posisjon) { hvis (Encoder_DT! = posisjon) { // lcd_com (0x01); teller ++; // Øk telleren som skal skrives ut på lcd lcd_com (0xC0); lcd_puts (""); lcd_com (0xC0); lcd_bcd (1, teller); } annet { // lcd_com (0x01); lcd_com (0xC0); disk--; // redusere telleren lcd_puts (""); lcd_com (0xC0); lcd_bcd (1, teller); // lcd_puts ("Venstre"); } }
Vi må også lagre posisjonen på hvert trinn. For å gjøre dette brukte vi en variabel “posisjon” som lagrer den nåværende posisjonen.
posisjon = Encoder_CLK; // Det er å lagre kodingens klokkeposisjon på variabelen. Kan være 0 eller 1.
Annet enn dette er det et alternativ for å varsle om brytertrykk på LCD-skjermen.
hvis (Encoder_SW == 0) { sw_delayms (20); // avvisningsforsinkelse hvis (Encoder_SW == 0) { // lcd_com (1); // lcd_com (0xC0); lcd_puts ("bryteren er trykket"); // itoa (teller, verdi, 10); // lcd_puts (verdi);
Den system_init funksjon brukes til å initialisere tappen I / O operasjon, LCD og for å lagre Pulsgiver stilling.
ugyldig system_inngang () { TRISB = 0x00; // PORT B som utgang, Denne porten brukes til LCD TRISDbits.TRISD2 = 1; TRISDbits.TRISD3 = 1; TRISCbits.TRISC4 = 1; lcd_init (); // Dette vil initialisere LCD- posisjonen = Encoder_CLK; // Sotred CLK-posisjonen på systeminit, før mens sløyfen starter. }
LCD-funksjonen er skrevet på lcd.c og lcd.h biblioteket der lcd_puts (), lcd_cmd () er erklært.
For fullstendig erklæring, konfigurasjonsbiter og andre kodebiter, vennligst finn hele koden nedenfor.