- Enkoder obrotowy i jego typy
- Pinout i opis enkodera obrotowego KY-040
- Jak działa enkoder obrotowy
- Wymagane składniki
- PIC16F877A Schemat obwodu sprzęgania enkodera obrotowego
- Objaśnienie kodu
Pokrętło jest urządzeniem wejściowym, który pozwala użytkownikowi na interakcję z systemem. Wygląda bardziej jak potencjometr radiowy, ale generuje ciąg impulsów, co czyni jego zastosowanie wyjątkowym. Kiedy pokrętło Enkodera jest obracane, obraca się w postaci małych kroków, co pomaga w użyciu go do sterowania silnikiem krokowym / serwomotorem, poruszania się po sekwencji menu oraz zwiększania / zmniejszania wartości liczby i wielu innych.
W tym artykule dowiemy się o różnych typach enkoderów obrotowych i jak to działa. Połączymy go również z mikrokontrolerem PIC PIC16F877A i będziemy kontrolować wartość liczby całkowitej, obracając Enkoder i wyświetlając jej wartość na ekranie LCD 16 * 2. Pod koniec tego samouczka będziesz mógł swobodnie korzystać z enkodera obrotowego w swoich projektach. Więc zacznijmy…
Enkoder obrotowy i jego typy
Enkoder obrotowy często nazywany enkoderem wału. Jest to przetwornik elektromechaniczny, co oznacza, że konwertuje ruchy mechaniczne na impulsy elektroniczne lub innymi słowy, przekształca położenie kątowe, ruch lub położenie wału na sygnał cyfrowy lub analogowy. Składa się z pokrętła, które podczas obracania będzie przesuwać się krok po kroku i wytwarzać sekwencję ciągów impulsów o wstępnie zdefiniowanej szerokości dla każdego kroku.
Na rynku dostępnych jest wiele typów enkoderów obrotowych, które projektant może wybrać zgodnie z jego zastosowaniem. Najpopularniejsze typy są wymienione poniżej
- Enkoder przyrostowy
- Absolute Encoder
- Enkoder magnetyczny
- Enkoder optyczny
- Enkoder laserowy
Te enkodery są klasyfikowane w oparciu o sygnał wyjściowy i technologię wykrywania, enkoder inkrementalny i enkoder absolutny są klasyfikowane na podstawie sygnału wyjściowego, a enkoder magnetyczny, optyczny i laserowy są klasyfikowane na podstawie technologii wykrywania. Enkodera stosowane tutaj jest typ enkodera przyrostowe.
Enkoder absolutny przechowuje informacje o położeniu nawet po odłączeniu zasilania, a informacje o położeniu będą dostępne, gdy ponownie włączymy do niego zasilanie.
Drugi typ podstawowy, enkoder inkrementalny, dostarcza dane, gdy enkoder zmienia swoją pozycję. Nie mógł zapisać informacji o pozycji.
Pinout i opis enkodera obrotowego KY-040
W pinoutem z KY-040 Incremental Obrotowe koder poniżej. W tym projekcie połączymy ten enkoder obrotowy z popularnym mikrokontrolerem PIC16F877A firmy microchip.
Pierwsze dwa piny (masa i Vcc) są używane do zasilania enkodera, zwykle używane jest zasilanie + 5V. Enkoder oprócz obracania pokrętła w kierunku zgodnym i przeciwnym do ruchu wskazówek zegara posiada również przełącznik (Aktywny niski), który można wcisnąć wciskając pokrętło wewnątrz. Sygnał z tego przełącznika jest uzyskiwany poprzez pin 3 (SW). Wreszcie ma dwa piny wyjściowe (DT i CLK), które wytwarzają przebiegi, jak już omówiono poniżej. Wcześniej połączyliśmy ten enkoder obrotowy z Arduino.
Jak działa enkoder obrotowy
Wyjście całkowicie zależy od wewnętrznych podkładek miedzianych, które zapewniają połączenie z GND i VCC z wałem.
Istnieją dwie części enkodera obrotowego. Koło wału, które jest połączone z wałem i obraca się zgodnie z ruchem wskazówek zegara lub przeciwnie do ruchu wskazówek zegara, w zależności od obrotu wału oraz podstawy, na której wykonuje się połączenie elektryczne. Baza ma porty lub punkty, które są połączone z DT lub CLK w taki sposób, że gdy koło wału obraca się, połączy punkty bazowe i zapewni falę prostokątną zarówno na porcie DT, jak i CLK.
Wynik będzie taki, jak podczas obracania się wału-
Dwa porty zapewniają falę prostokątną, ale istnieje niewielka różnica w taktowaniu. W związku z tym, jeśli przyjmiemy wyjście jako 1 i 0, to mogą być tylko cztery stany, 0 0, 1 0, 1 1, 0 1. Kolejność wyjścia binarnego określa obrót w prawo lub w lewo. Na przykład, jeśli enkoder obrotowy zapewnia 1 0 w stanie spoczynku i zapewnia 1 1 po tym, oznacza to, że enkoder zmienia swoją pozycję o jeden krok w kierunku zgodnym z ruchem wskazówek zegara, ale jeśli podaje 0 0 po biegu jałowym 1 0, oznacza, że wał zmienia swoje położenie w kierunku przeciwnym do ruchu wskazówek zegara o jeden krok.
Wymagane składniki
Nadszedł czas, aby zidentyfikować, czego potrzebujemy, aby połączyć enkoder obrotowy z mikrokontrolerem PIC,
- PIC16F877A
- Rezystor 4,7 k
- Rezystor 1k
- Pula 10k
- Kondensator ceramiczny tarczowy 33pF - 2szt
- Kryształ 20 Mhz
- Wyświetlacz 16x2
- Enkoder obrotowy
- Adapter 5V.
- Deska do chleba
- Przewody podłączeniowe.
PIC16F877A Schemat obwodu sprzęgania enkodera obrotowego
Poniżej znajduje się zdjęcie końcowej konfiguracji po podłączeniu komponentów zgodnie ze schematem obwodu:
Zamiast potencjometru użyliśmy pojedynczego rezystora 1K do kontrastu wyświetlacza LCD. Sprawdź również cały film roboczy podany na końcu.
Objaśnienie kodu
Kompletny kod PIC jest podany na końcu tego projektu wraz z filmem demonstracyjnym, tutaj wyjaśniamy kilka ważnych części kodu. Jeśli jesteś nowy z mikrokontrolerem PIC, postępuj zgodnie z naszymi samouczkami PIC od początku.
Jak omówiliśmy wcześniej, musimy sprawdzić dane wyjściowe i rozróżnić wyjście binarne zarówno dla DT, jak i CLK, więc utworzyliśmy część if-else dla operacji.
if (Encoder_CLK! = pozycja) { if (Encoder_DT! = pozycja) { // lcd_com (0x01); licznik ++; // Zwiększ licznik, który będzie drukowany na lcd lcd_com (0xC0); lcd_puts („”); lcd_com (0xC0); lcd_bcd (1, licznik); } else { // lcd_com (0x01); lcd_com (0xC0); licznik--; // zmniejsz licznik lcd_puts (""); lcd_com (0xC0); lcd_bcd (1, licznik); // lcd_puts ("Left"); } }
Musimy również zapisać pozycję na każdym kroku. Aby to zrobić, użyliśmy zmiennej „position”, która przechowuje aktualną pozycję.
pozycja = Encoder_CLK; // Służy do przechowywania pozycji zegara enkodera w zmiennej. Może mieć wartość 0 lub 1.
Poza tym dostępna jest opcja powiadamiania o naciśnięciu przycisku na wyświetlaczu LCD.
if (Encoder_SW == 0) { sw_delayms (20); // opóźnienie odbicia if (Encoder_SW == 0) { // lcd_com (1); // lcd_com (0xC0); lcd_puts ("przełącznik wciśnięty"); // itoa (licznik, wartość, 10); // lcd_puts (wartość);
System_init funkcja służy do inicjowania stykowego operacji we / wy, LCD i zapisać położenie pokrętła.
void system_init () { TRISB = 0x00; // PORT B jako wyjście, ten port jest używany dla LCD TRISDbits.TRISD2 = 1; TRISDbits.TRISD3 = 1; TRISCbits.TRISC4 = 1; lcd_init (); // Spowoduje to zainicjowanie pozycji LCD = Encoder_CLK; // Sotred pozycję CLK podczas inicjalizacji systemu, przed rozpoczęciem pętli while. }
Funkcja LCD jest zapisywana w bibliotece lcd.c i lcd.h, w której zadeklarowano lcd_puts (), lcd_cmd ().
Pełen kod znajdziesz poniżej, aby zapoznać się z deklaracją zmiennej, bitami konfiguracji i innymi fragmentami kodu.