Sisällysluettelo:

Täydellinen Arduino -pyörivä ratkaisu: 5 vaihetta
Täydellinen Arduino -pyörivä ratkaisu: 5 vaihetta

Video: Täydellinen Arduino -pyörivä ratkaisu: 5 vaihetta

Video: Täydellinen Arduino -pyörivä ratkaisu: 5 vaihetta
Video: How to use up to 10 push button switch with 1 Arduino input pin ANPB-V1 2024, Marraskuu
Anonim
Täydellinen Arduino -pyörivä ratkaisu
Täydellinen Arduino -pyörivä ratkaisu

Pyörivät anturit ovat käännettäviä säätönuppeja elektronisiin projekteihin, joita käytetään usein Arduino -perheen mikro -ohjaimien kanssa. Niiden avulla voidaan hienosäätää parametreja, navigoida valikoissa, siirtää kohteita näytöllä, asettaa kaikenlaisia arvoja. Ne ovat yleisiä potentiometrien korvikkeita, koska niitä voidaan kiertää tarkemmin ja loputtomasti, ne lisäävät tai pienentävät yhtä erillistä arvoa kerrallaan ja usein integroituna työntävään valitsimeen. Niitä on kaikissa muodoissa ja kooissa, mutta alinta hintaluokkaa on vaikea yhdistää, kuten alla selitetään.

On olemassa lukemattomia artikkeleita Rotary -enkooderien työskentelytiedoista ja käyttötavoista sekä lukuisia näytekoodeja ja kirjastoja niiden käytöstä. Ainoa ongelma on, että yksikään niistä ei toimi 100% tarkasti alimman hintaluokan kiinalaisilla pyörivillä moduuleilla.

Vaihe 1: Pyörivät enkooderit sisällä

Kiertokooderit sisällä
Kiertokooderit sisällä
Kiertokooderit sisällä
Kiertokooderit sisällä
Kiertokooderit sisällä
Kiertokooderit sisällä

Anturin pyörivässä osassa on kolme nastaa (ja kaksi lisävarusteena saatavaa kytkinosaa varten). Yksi on yhteinen (musta GND), kaksi muuta on suunnan määrittämiseksi, kun nuppia käännetään (niitä kutsutaan usein siniseksi CLK: ksi ja punaiseksi DT: ksi). Molemmat on liitetty mikrokontrollerin PULLUP -tulotappiin, jolloin taso HIGH on oletusarvo. Kun nuppia käännetään eteenpäin (tai myötäpäivään), sininen CLK putoaa ensin LOW -tasolle ja sitten punainen DT. Kääntämällä edelleen, sininen CLK nousee takaisin HIGH: iin, ja kun yhteinen GND -laastari jättää molemmat liitäntätapit, punainen DT nousee myös takaisin HIGH: iin. Täytä yksi täysi rasti FWD (tai myötäpäivään). Sama pätee toiseen suuntaan BWD (tai vastapäivään), mutta nyt punainen putoaa ensin ja sininen nousee takaisin viimeisenä, kuten on esitetty kahden tason kuvissa.

Vaihe 2: Kurjuus, joka aiheuttaa todellista kipua monille

Kurjuus, joka aiheuttaa todellista kipua monille
Kurjuus, joka aiheuttaa todellista kipua monille
Kurjuus, joka aiheuttaa todellista kipua monille
Kurjuus, joka aiheuttaa todellista kipua monille
Kurjuus, joka aiheuttaa todellista kipua monille
Kurjuus, joka aiheuttaa todellista kipua monille

Yleinen ongelma Arduinon harrastajille, että halvat pyörivät anturimoduulit tuovat ylimääräisiä muutoksia lähtötasoihin aiheuttaen ylimääräisiä ja vääriä suunnan lukemia. Tämä estää virheettömän laskennan ja tekee mahdottomaksi integroida nämä moduulit tarkkoihin pyöriviin projekteihin. Nämä ylimääräiset pomppimukset johtuvat laastarien mekaanisista liikkeistä liitäntätappien päällä, eikä edes ylimääräisten kondensaattoreiden käyttö voi poistaa niitä kokonaan. Pudotukset voivat näkyä missä tahansa täyden rastijakson aikana, ja niitä havainnollistaa kuvien tosielämän skenaariot.

Vaihe 3: Finite State Machine (FSM) -ratkaisu

Finite State Machine (FSM) -ratkaisu
Finite State Machine (FSM) -ratkaisu

Kuvassa näkyvät kahden tilan kaikki mahdolliset tasomuutokset (sininen CLK ja punainen DT). Tämän tilakoneen perusteella voidaan ohjelmoida täydellinen ratkaisu, joka toimii aina 100% tarkasti. Koska suodatusviiveitä ei tarvita tässä ratkaisussa, se on myös nopein mahdollinen. Toinen etu nastojen tila -tilan erottamisesta työskentelytilasta on se, että voidaan käyttää sekä pollaus- että keskeytystiloja oman maun mukaan. Pollaus tai keskeytykset voivat havaita nastojen tasomuutokset, ja erillinen rutiini laskee uuden tilan nykyisen tilan ja tasomuutosten todellisten tapahtumien perusteella.

Vaihe 4: Arduino -koodi

Arduino -koodi
Arduino -koodi

Alla oleva koodi laskee sarjamonitorin FWD- ja BWD -punkit ja sisältää myös valinnaisen kytkintoiminnon.

// Peter Csurgay 10.4.2019

// Pyörivän nastat Arduinon portteihin

#define SW 21 #define CLK 22 #define DT 23

// Kiertosäätimellä viritetyn laskurin nykyinen ja edellinen arvo

int curVal = 0; int prevVal = 0;

// Seitsemän FSM -tilaa (äärellinen tilakone)

#define IDLE_11 0 #define SCLK_01 1 #define SCLK_00 2 #define SCLK_10 3 #define SDT_10 4 #define SDT_00 5 #define SDT_01 6 int state = IDLE_11;

void setup () {

Sarja.alku (250000); Serial.println ("Aloita…"); // Taso HIGH on oletusarvo kaikille nastoille pinMode (SW, INPUT_PULLUP); pinMode (CLK, INPUT_PULLUP); pinMode (DT, INPUT_PULLUP); // Sekä CLK että DT laukaisevat keskeytykset kaikille tason muutoksille attachInterrupt (digitalPinToInterrupt (CLK), rotaryCLK, CHANGE); attachInterrupt (digitalPinToInterrupt (DT), rotaryDT, CHANGE); }

void loop () {

// Joihinkin kiertokoodereihin integroidun valinnaisen kytkimen käsittely, jos (digitalRead (SW) == LOW) {Serial.println ("Pressed"); while (! digitalRead (SW)); } // Kaikki laskurin arvon muutokset näytetään Serial Monitorissa, jos (curVal! = PrevVal) {Serial.println (curVal); prevVal = curVal; }}

// Tilakoneen siirtymät CLK -tason muutoksille

void rotaryCLK () {if (digitalRead (CLK) == LOW) {if (state == IDLE_11) state = SCLK_01; else if (tila == SCLK_10) tila = SCLK_00; else if (tila == SDT_10) tila = SDT_00; } else {if (state == SCLK_01) state = IDLE_11; else if (tila == SCLK_00) tila = SCLK_10; else if (tila == SDT_00) tila = SDT_10; muuten jos (tila == SDT_01) {tila = IDLE_11; käyrä--; }}}

// Tilakoneen siirtymät DT -tason muutoksille

void rotaryDT () {if (digitalRead (DT) == LOW) {if (state == IDLE_11) state = SDT_10; else if (tila == SDT_01) tila = SDT_00; else if (tila == SCLK_01) tila = SCLK_00; } else {if (state == SDT_10) state = IDLE_11; else if (tila == SDT_00) tila = SDT_01; else if (tila == SCLK_00) tila = SCLK_01; muuten jos (tila == SCLK_10) {tila = IDLE_11; käyrä ++; }}}

Vaihe 5: Virheetön integrointi

Voit tarkistaa liitteenä olevalta videolta, että FSM -ratkaisu toimii tarkasti ja nopeasti myös pienen kantaman pyörivillä antureilla, joilla on erilaisia satunnaisia pomppivaikutuksia.

Suositeltava: