Cuprins:

Codificator rotativ - Înțelegeți și utilizați-l (Arduino / alt controler Μ): 3 pași
Codificator rotativ - Înțelegeți și utilizați-l (Arduino / alt controler Μ): 3 pași

Video: Codificator rotativ - Înțelegeți și utilizați-l (Arduino / alt controler Μ): 3 pași

Video: Codificator rotativ - Înțelegeți și utilizați-l (Arduino / alt controler Μ): 3 pași
Video: PARTEA URÂTĂ A TEHNOLOGIEI. DISTRUGEREA IMAGINAȚIEI ȘI CREATIVITĂȚII - Dumitru Borțun - #IGDLCC 165 2024, Decembrie
Anonim
Codificator rotativ - Înțelegeți-l și utilizați-l (Arduino / alt controler Μ)
Codificator rotativ - Înțelegeți-l și utilizați-l (Arduino / alt controler Μ)

Un codificator rotativ este un dispozitiv electromecanic care convertește mișcarea de rotație în informații digitale sau analogice. Se poate roti în sensul acelor de ceasornic sau invers. Există două tipuri de codificatoare rotative: codificatoare absolute și relative (incrementale).

În timp ce un codificator absolut generează o valoare proporțională cu unghiul curent al arborelui, un codificator incremental generează pasul arborelui și direcția acestuia (în acest caz avem un codificator incremental)

Codificatoarele rotative devin din ce în ce mai populare, deoarece puteți utiliza două funcții într-un singur modul electric: Un comutator simplu pentru confirmarea operațiilor și codificatorul rotativ pentru a naviga, de ex. printr-un meniu.

Un codificator rotativ incremental generează două semnale de ieșire în timp ce arborele său se rotește. În funcție de direcție, unul dintre semnale îl conduce pe celălalt. (Vezi mai jos)

Pasul 1: Înțelegerea datelor de ieșire

Înțelegerea datelor de ieșire
Înțelegerea datelor de ieșire

După cum puteți vedea când arborele codificatorului începe să se rotească în sensul acelor de ceasornic, ieșirea A cade mai întâi la LOW și ieșirea B îl urmează. În sens invers acelor de ceasornic, operația se opune.

Acum trebuie doar să implementăm acest lucru pe µController (am folosit un Arduino Nano).

Pasul 2: Construiți circuitul

Construiește circuitul
Construiește circuitul
Construiește circuitul
Construiește circuitul

După cum am descris înainte, ieșirile creează un flanc HIGH și LOW. Pentru a obține un HIGH curat la pinul de date A și B al µController trebuie să adăugăm rezistențe Pull-Up. Pinul comun C merge direct la sol pentru flancul LOW.

Pentru a obține informații despre comutatorul intern (buton) vom folosi ceilalți doi pini. Una dintre ele merge la VCC și cealaltă la un Pin de date al µController. De asemenea, trebuie să adăugăm un rezistor pull-down la pinul de date pentru a obține un LOW curat.

De asemenea, este posibil să utilizați rezistențe interne Pull-Up și Pull-Down ale controlerului dvs. µ!

În cazul meu, pinout-ul arată ca:

  • +3, 3V => +3, 3V (Arduino) (de asemenea + 5V posibil)
  • GND => GND (Arduino)
  • A => Pin10
  • B =>

    Pin

    11

  • C => GND
  • SW =>

    Pin

    12

Pasul 3: Scrierea codului

int pinA = 10; // comutator intern A int pinB = 11; // comutator intern B int pinSW = 12; // comutați (Encoder apăsat) int encoderPosCount = 0; // începe de la zero, schimbă dacă vrei

int positionval;

bool switchval; int mrotateLast; int mrotate;

configurare nulă () {

int mrotateLast = digitalRead (pinA); Serial.begin (9600); întârziere (50); }

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

int readencoder () {

mrotate = digitalRead (pinA); if (mrotate! = mrotateLast) {// butonul se rotește if (digitalRead (pinB)! = mrotate) {// comutatorul A s-a schimbat mai întâi -> rotire în sensul acelor de ceasornic encoderPosCount ++; Serial.println ("rotit în sensul acelor de ceasornic"); } else {// comutatorul B s-a schimbat mai întâi -> rotire în sens invers acelor de ceasornic encoderPosCount--; Serial.println („rotit în sens invers acelor de ceasornic”); }

Serial.print ("Poziția codificatorului"); Serial.println (encoderPosCount); Serial.println (""); } mrotateLast = mrotate; returnează codificatorulPosCount; } bool readswitch () {

dacă (digitalRead (pinSW)! = 0) {// comutatorul este apăsat

while (digitalRead (pinSW)! = 0) {} // comutatorul este apăsat în prezent switchval = 1; } else {switchval = 0;} // switch-ul este returnat switchval presat; }

Acum puteți roti codificatorul, iar codificatorul variabil PoCount va conta în sus dacă rotiți în sensul acelor de ceasornic și numărați în jos dacă rotiți în sens invers acelor de ceasornic.

Asta e! Simplu și util.

Simțiți-vă liber să modificați și să efectuați codul. Îl puteți implementa în proiectul dvs.

De asemenea, voi încărca un proiect LED în care am folosit codificatorul pentru a seta luminozitatea LED-urilor mele.

Recomandat: