Satura rādītājs:

Rotācijas kodētāja apmācība ar Arduino: 6 soļi
Rotācijas kodētāja apmācība ar Arduino: 6 soļi

Video: Rotācijas kodētāja apmācība ar Arduino: 6 soļi

Video: Rotācijas kodētāja apmācība ar Arduino: 6 soļi
Video: Как управлять приводом с помощью Arduino - Robojax 2024, Jūlijs
Anonim
Rotācijas kodētāja apmācība ar Arduino
Rotācijas kodētāja apmācība ar Arduino

Rotējošais kodētājs ir elektroniska sastāvdaļa, kas spēj kontrolēt kustību un stāvokli rotācijas laikā. Rotācijas kodētājs izmanto optiskos sensorus, kas var ģenerēt impulsus, kad rotējošais kodētājs griežas. Rotācijas kodētāja pielietojumu parasti kā mehānisku vai robotu kustības monitoru var izmantot arī izvēlnes izvēlei displejā. Rotācijas kodētājam ir divas izejas, lai tas varētu atšķirt negatīvo (CW) un pozitīvo (CCW) rotāciju, un tam ir arī viena poga.

1. darbība. Rotācijas kodētāja impulsa plūsma

Rotējošā kodētāja impulsa plūsma
Rotējošā kodētāja impulsa plūsma

Impulsu plūsma, ko rada šāds rotējošais kodētājs, ir līdzīga iepriekš redzamajai.

2. darbība. Rotācijas kodētāja piespraušana

Rotācijas kodētāja piespraude
Rotācijas kodētāja piespraude

Paskaidrojums:

  • GND GND
  • + + 5V
  • Rotācijas kodētāja SW poga, nospiežot
  • DT dati
  • CLK dati 2

Vienai no DT vai CLK tapām jābūt savienotai ar Arduino Uno pārtraukšanas pēdu, vai arī abi DT un CLK ir savienoti ar pārtraukšanas tapu.

3. darbība. Shēma

Shematisks
Shematisks
  • GND un GND Arduino Uno
  • + à + 5V Arduino Uno
  • SW à PIN 4 Arduino Uno
  • DT à PIN 3 Arduino Uno
  • CLK à PIN2 Arduino Uno

4. solis: kods

Kods
Kods

Turpmākajā apmācībā, kas tiks izmantota kā pārtraukums, ir Arduino Uno PIN 2, savukārt PIN 3 tiek izmantots tikai kā parasta ievade.

#define encoder0PinA 2 #define encoder0PinB 3 #define encoder0Btn 4 int encoder0Pos = 0; void setup () {Serial.begin (9600); pinMode (kodētājs0PinA, INPUT_PULLUP); pinMode (kodētājs0PinB, INPUT_PULLUP); pinMode (kodētājs0Btn, INPUT_PULLUP); attachInterrupt (0, doEncoder, CHANGE); } int valRotary, lastValRotary; void loop () {int btn = digitalRead (encoder0Btn); Sērijas nospiedums (btn); Serial.print (""); Serial.print (valRotary); if (valRotary> lastValRotary) {Serial.print ("CW"); } ja (valRotary {

Serial.print ("CCW");

} lastValRotary = valRotary; Serial.println (""); kavēšanās (250); } void doEncoder () {if (digitalRead (encoder0PinA) == digitalRead (encoder0PinB)) {encoder0Pos ++; } else {encoder0Pos--; } valRotary = kodētājs0Pos/2.5; }

Iepriekšējās skices 10. rindā tiek izmantota, lai iespējotu Arduino Uno tapas 2 pārtraukšanu. Funkcijā "doEncoder" tiek aprēķināta no rotējošā kodētāja. Ja DT un CLK (Arduino Uno pin pārtraukums) vērtība ir vienāda, mainīgais "encoder0Pos" tiks palielināts / pievienots, papildus šim nosacījumam mainīgais "encoder0Pos" tiks samazināts.

5. solis: skaidrojums

ValRotary vērtība ir veikto soļu skaita vērtība. ValRotary vērtību iegūst no rotējošā sensora kodētāja nolasījuma vērtības, kas dalīta ar 2,5. Pārbaudes laikā tiek iegūta vērtība 2,5, jo viens rotējošā kodētāja solis var pārsniegt 1, tāpēc daliet ar 2,5 tā vērtībai atbilstoši darbībai un lasīšanas aizkaves pievienošanai.

Atrodoties 19. - 25. rindā, ir programma, lai noteiktu, vai rotējošais rotācijas kodētājs CW vai CCW. 19. - 25. rindas skaidrojums ir tad, ja pašreizējais rotējošā kodētāja rādījums ir lielāks nekā iepriekšējie rotācijas dati, kas pēc tam izteikti kā CW. Tā kā, ja pašreizējais rādījums ir mazāks nekā iepriekšējais, tas tiek norādīts kā CCW.

6. darbība: izvade

Izeja
Izeja

1 = rotācijas pogas starta vērtība, ja tā nav nospiesta

Ieteicams: