Taula de continguts:

Codificador rotatiu: enteneu-lo i utilitzeu-lo (Arduino / un altre controlador Μ): 3 passos
Codificador rotatiu: enteneu-lo i utilitzeu-lo (Arduino / un altre controlador Μ): 3 passos

Vídeo: Codificador rotatiu: enteneu-lo i utilitzeu-lo (Arduino / un altre controlador Μ): 3 passos

Vídeo: Codificador rotatiu: enteneu-lo i utilitzeu-lo (Arduino / un altre controlador Μ): 3 passos
Vídeo: Объяснение прошивки Marlin 2.0.x 2024, Desembre
Anonim
Codificador rotatiu: enteneu-lo i utilitzeu-lo (Arduino / un altre controlador Μ)
Codificador rotatiu: enteneu-lo i utilitzeu-lo (Arduino / un altre controlador Μ)

Un codificador rotatiu és un dispositiu electromecànic que converteix el moviment de rotació en informació digital o analògica. Pot girar en sentit horari o antihorari. Hi ha dos tipus de codificadors rotatius: codificadors absoluts i relatius (incrementals).

Tot i que un codificador absolut genera un valor proporcional a l’angle actual de l’eix, un codificador incremental genera el pas de l’eix i la seva direcció (en aquest cas tenim un codificador incremental)

Els codificadors rotatius són cada vegada més populars perquè podeu utilitzar dues funcions en un mòdul elèctric: un senzill commutador per confirmar les operacions i el codificador rotatiu per navegar, per exemple. mitjançant un menú.

Un codificador rotatiu incremental genera dos senyals de sortida mentre el seu eix gira. Segons la direcció, un dels senyals condueix l’altre. (mirar abaix)

Pas 1: comprensió de les dades de sortida

Comprensió de les dades de sortida
Comprensió de les dades de sortida

Com podeu veure quan l'eix del codificador comença a girar en sentit horari, la sortida A cau primer a BAIX i la sortida B el segueix. En sentit antihorari, l'operació gira contràriament.

Ara només hem d’implementar-ho al nostre µController (he utilitzat un Arduino Nano).

Pas 2: Construeix el circuit

Construeix el circuit
Construeix el circuit
Construeix el circuit
Construeix el circuit

Com he descrit abans, les sortides creen un flanc ALT i BAIX. Per obtenir un HIGH net al pin de dades A i B del µController hem d'afegir resistències Pull-Up. El pin C comú va directe a terra pel flanc BAIX.

Per obtenir informació sobre l’interruptor intern (polsador) utilitzarem els altres dos pins. Un d’ells va a VCC i l’altre a un pin de dades del µController. També hem d’afegir una resistència desplegable al pin de dades per obtenir un BAIX net.

També és possible utilitzar resistències internes Pull-Up i Pull-Down del vostre µController.

En el meu cas, el pinout té el següent aspecte:

  • +3, 3V => +3, 3V (Arduino) (també + 5V possible)
  • GND => GND (Arduino)
  • A => Pin10
  • B =>

    Pin

    11

  • C => GND
  • SW =>

    Pin

    12

Pas 3: escriure el codi

int pinA = 10; // commutador intern A int pinB = 11; // commutador intern B int pinSW = 12; // commuta (codificador premut) int encoderPosCount = 0; // comença a zero, canvia si vols

int positionval;

bool switchval; int mrotateLast; int mrotate;

configuració nul·la () {

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

bucle buit () {readencoder (); if (readswitch () == 1) {Serial.println ("Switch = 1"); }}

int readencoder () {

mrotate = digitalRead (pinA); if (mrotate! = mrotateLast) {// el botó gira if (digitalRead (pinB)! = mrotate) {// el commutador A ha canviat primer -> girant en el sentit del rellotge codificadorPosCount ++; Serial.println ("girat en sentit horari"); } else {// el commutador B ha canviat primer -> girant en sentit antihorari codificadorPosCount--; Serial.println ("girat en sentit antihorari"); }

Serial.print ("Posició del codificador:"); Serial.println (encoderPosCount); Serial.println (""); } mrotateLast = mrotate; retorn encoderPosCount; } bool readswitch () {

si (digitalRead (pinSW)! = 0) {// es prem el commutador

while (digitalRead (pinSW)! = 0) {} // el commutador actualment està premut switchval = 1; } else {switchval = 0;} // el commutador és un switchval no retornat; }

Ara podeu girar el codificador i el variable encoderPosCount comptarà si gireu en sentit horari i compte enrere si gireu en sentit antihorari.

Això és! Simplement i útil.

No dubteu a canviar i executar el codi. Podeu implementar-lo al vostre projecte.

També penjaré un projecte de LED on he utilitzat el codificador per configurar la brillantor dels meus LED.

Recomanat: