Turinys:

„Rotary Encoder“su „Arduino“pamoka: 6 žingsniai
„Rotary Encoder“su „Arduino“pamoka: 6 žingsniai

Video: „Rotary Encoder“su „Arduino“pamoka: 6 žingsniai

Video: „Rotary Encoder“su „Arduino“pamoka: 6 žingsniai
Video: Control Position and Speed of Stepper motor with L298N module using Arduino 2024, Liepa
Anonim
„Rotary Encoder“su „Arduino“pamoka
„Rotary Encoder“su „Arduino“pamoka

Rotacinis kodavimo įrenginys yra elektroninis komponentas, galintis stebėti judėjimą ir padėtį sukantis. Rotaciniame kodavimo įrenginyje naudojami optiniai jutikliai, kurie sukdami impulsus gali generuoti impulsus. Rotacinio kodavimo įrenginio naudojimas paprastai kaip mechaninis arba robotų judesio monitorius taip pat gali būti naudojamas meniu pasirinkimui ekrane. Rotacinis kodavimo įrenginys turi du išėjimus, kad galėtų atskirti neigiamą (CW) ir teigiamą (CCW) sukimąsi, taip pat turi vieną mygtuką.

1 žingsnis: rotacinio kodavimo pulso srautas

Rotacinio kodavimo pulso srautas
Rotacinio kodavimo pulso srautas

Impulso srautas, kurį sukuria šis sukamasis kodavimo įrenginys, yra panašus į paveikslėlį aukščiau.

2 veiksmas: sukamojo kodavimo įrenginio prisegimas

Rotacinio kodavimo įrenginio kontaktas
Rotacinio kodavimo įrenginio kontaktas

Paaiškinimas:

  • GND GND
  • + + 5V
  • Paspaudus sukamojo kodavimo įrenginio SW mygtuką
  • DT duomenys
  • CLK duomenys 2

Vienas iš DT arba CLK kaiščių turi būti prijungtas prie „Arduino Uno“pertraukimo pėdos, arba abu DT ir CLK yra prijungti prie pertraukimo kaiščio.

3 žingsnis: schema

Schema
Schema
  • GND ir GND Arduino Uno
  • + à + 5V „Arduino Uno“
  • SW à PIN 4 „Arduino Uno“
  • DT à PIN 3 „Arduino Uno“
  • CLK ir PIN2 „Arduino Uno“

4 žingsnis: kodas

Kodas
Kodas

Šioje pamokoje, kuri bus naudojama kaip pertrauka, yra „Arduino Uno“2 PIN kodas, o 3 PIN kodas naudojamas tik kaip įprastas įvestis.

#define encoder0PinA 2 #define encoder0PinB 3 #define encoder0Btn 4 int encoder0Pos = 0; void setup () {Serial.begin (9600); pinMode (kodavimo priemonė0PinA, INPUT_PULLUP); pinMode (kodavimo priemonė0PinB, INPUT_PULLUP); pinMode (kodavimo priemonė0Btn, INPUT_PULLUP); attachInterrupt (0, doEncoder, CHANGE); } int valRotary, lastValRotary; void loop () {int btn = digitalRead (encoder0Btn); Serijinis atspaudas (btn); Serial.print (""); Serial.print (valRotary); if (valRotary> lastValRotary) {Serial.print ("CW"); } if (valRotary {

Serial.print („CCW“);

} lastValRotary = valRotary; Serial.println (""); vėlavimas (250); } void doEncoder () {if (digitalRead (encoder0PinA) == digitalRead (encoder0PinB)) {encoder0Pos ++; } else {encoder0Pos--; } valRotary = koderis0Pos/2.5; }

Aukščiau eskizo 10 eilutėje naudojama įjungti 2 kaiščio „Arduino Uno“nutraukimą. Funkcijoje „doEncoder“apskaičiuojama iš sukamojo kodavimo įrenginio. Jei DT ir CLK („Arduino Uno“kaiščio pertraukimas) reikšmė yra ta pati, tada „encoder0Pos“kintamasis bus padidintas / pridėtas, be to, sumažės kintamasis „encoder0Pos“.

5 žingsnis: paaiškinimas

„ValRotary“vertė yra atliktų žingsnių skaičiaus vertė. „ValRotary“vertė gaunama iš sukamojo jutiklio kodavimo įrenginio skaitymo vertės, padalytos iš 2,5. Bandymo metu gaunama 2,5 vertė, nes vienas sukamojo kodavimo žingsnio žingsnis gali viršyti 1, todėl padalinkite jį iš 2,5 pagal jo vertę pagal žingsnį ir taip pat pridėjus skaitymo uždelsimą.

19–25 eilutėse yra programa, skirta nustatyti, ar sukamasis rotacinis kodavimo įrenginys CW, ar CCW. 19–25 eilučių paaiškinimas yra tada, kai dabartinis sukamojo kodavimo įrenginio rodmuo yra didesnis nei ankstesni sukamieji duomenys, tada išreikšti CW. Jei dabartinis rodmuo yra mažesnis nei ankstesnis, jis nurodomas kaip CCW.

6 žingsnis: išvestis

Išvestis
Išvestis

1 = sukamojo paleidimo mygtuko vertė, kai jis nebuvo paspaustas

Rekomenduojamas: