Sisällysluettelo:
2025 Kirjoittaja: John Day | [email protected]. Viimeksi muokattu: 2025-01-13 06:57
Kiertokooderi on sähkömekaaninen laite, joka muuntaa pyörimisliikkeen digitaaliseksi tai analogiseksi tiedoksi. Se voi kääntyä myötä- tai vastapäivään. Pyörivää anturia on kahdenlaisia: absoluuttinen ja suhteellinen (inkrementaalinen) anturi.
Vaikka absoluuttianturi antaa arvon, joka on verrannollinen akselin nykyiseen kulmaan, inkrementaalianturi antaa akselin askeleen ja sen suunnan (tässä tapauksessa meillä on inkrementaalianturi)
Pyörivät anturit ovat yhä suositumpia, koska voit käyttää kahta toimintoa yhdessä sähkömoduulissa: Yksinkertainen kytkin toimintojen vahvistamiseen ja kiertokooderi navigointiin, esim. valikon kautta.
Inkrementaalinen pyörivä anturi tuottaa kaksi lähtösignaalia akselin pyöriessä. Suunnasta riippuen yksi signaaleista johtaa toista. (Katso alempaa)
Vaihe 1: Tulostustietojen ymmärtäminen
Kuten näet, kun anturin akseli alkaa pyöriä myötäpäivään, lähtö A putoaa ensin LOW -asentoon ja lähtö B seuraa sitä. Toimintaa käännetään vastapäivään.
Nyt meidän on vain otettava tämä käyttöön µControllerissamme (käytin Arduino Nano).
Vaihe 2: Rakenna piiri
Kuten edellä kuvattiin, lähdöt luovat HIGH- ja LOW -kyljen. Jotta saisimme puhtaan HIGH: n µControllerin datanastat A ja B, meidän on lisättävä Pull-Up-vastukset. Yhteinen tappi C menee suoraan maahan LOW -kylkeä varten.
Saadaksesi tietoa sisäisestä kytkimestä (painike) käytämme kahta muuta nastaa. Toinen niistä menee VCC: hen ja toinen µControllerin datatappiin. Meidän on myös lisättävä alasvetovastus datanappiin saadaksemme puhtaan LOW.
On myös mahdollista käyttää µControllerin sisäisiä ylös- ja alasvetovastauksia!
Minun tapauksessani pinout näyttää tältä:
- +3, 3V => +3, 3V (Arduino) (myös +5V mahdollista)
- GND => GND (Arduino)
- A => Pin10
-
B =>
Kiinnitä
11
- C => GND
-
SW =>
Kiinnitä
12
Vaihe 3: Koodin kirjoittaminen
int pinA = 10; // sisäinen kytkin A int pinB = 11; // sisäinen kytkin B int pinSW = 12; // kytkin (painettu Encoder) int encoderPosCount = 0; // alkaa nollasta, muuta jos haluat
int positionval;
bool -kytkin; int mrotateLast; int mrotate;
void setup () {
int mrotateLast = digitalRead (pinA); Sarja.alku (9600); viive (50); }
tyhjä silmukka () {lukukooderi (); if (readswitch () == 1) {Serial.println ("Kytkin = 1"); }}
int readencoder () {
mrotate = digitalRead (pinA); if (mrotate! = mrotateLast) {// nuppi pyörii jos (digitalRead (pinB)! = mrotate) {// kytkin A muutettiin ensin -> pyörivä myötäpäivään encoderPosCount ++; Serial.println ("kierretty myötäpäivään"); } else {// kytkin B vaihdettu ensin-> pyörivä vastapäivään anturiPosCount--; Serial.println ("käännetty vastapäivään"); }
Serial.print ("Encoder Position:"); Serial.println (encoderPosCount); Serial.println (""); } mrotateLast = mrotate; palauta kooderiPosCount; } bool lukukytkin () {
if (digitalRead (pinSW)! = 0) {// -kytkintä painetaan
while (digitalRead (pinSW)! = 0) {} // kytkintä painetaan parhaillaan switchval = 1; } else {switchval = 0;} // kytkin on painamaton paluu switchval; }
Nyt voit kääntää anturia ja muuttuja encoderPosCount laskee ylöspäin, jos käännät myötäpäivään, ja laskee alas, jos kierrät vastapäivään.
Se siitä! Yksinkertaisesti ja hyödyllisesti.
Voit vapaasti muuttaa ja suorittaa koodin. Voit toteuttaa sen projektissasi.
Lähetän myös LED -projektin, jossa käytin enkooderia LED -valojen kirkkauden säätämiseen.