สารบัญ:

Rotary Encoder - ทำความเข้าใจและใช้งาน (Arduino/other ΜController): 3 ขั้นตอน
Rotary Encoder - ทำความเข้าใจและใช้งาน (Arduino/other ΜController): 3 ขั้นตอน

วีดีโอ: Rotary Encoder - ทำความเข้าใจและใช้งาน (Arduino/other ΜController): 3 ขั้นตอน

วีดีโอ: Rotary Encoder - ทำความเข้าใจและใช้งาน (Arduino/other ΜController): 3 ขั้นตอน
วีดีโอ: Rotary Encoder Incremental rotary Encoder How to use it with Arduino 2024, พฤศจิกายน
Anonim
Rotary Encoder - ทำความเข้าใจและใช้งาน (Arduino/other ΜController)
Rotary Encoder - ทำความเข้าใจและใช้งาน (Arduino/other ΜController)

เครื่องเข้ารหัสแบบโรตารี่เป็นอุปกรณ์เครื่องกลไฟฟ้าที่แปลงการเคลื่อนที่แบบหมุนเป็นข้อมูลดิจิทัลหรืออนาล็อก สามารถหมุนตามเข็มนาฬิกาหรือทวนเข็มนาฬิกาได้ ตัวเข้ารหัสแบบโรตารี่มีสองประเภท: ตัวเข้ารหัสแบบสัมบูรณ์และแบบสัมพัทธ์ (ส่วนเพิ่ม)

ในขณะที่ตัวเข้ารหัสแบบสัมบูรณ์จะให้ค่าตามสัดส่วนกับมุมของเพลาปัจจุบัน ตัวเข้ารหัสแบบเพิ่มส่วนเพิ่มจะส่งออกขั้นตอนของเพลาและทิศทางของมัน (ในกรณีนี้ เรามีตัวเข้ารหัสแบบเพิ่มหน่วย)

เครื่องเข้ารหัสแบบโรตารี่กำลังเป็นที่นิยมมากขึ้น เนื่องจากคุณสามารถใช้สองฟังก์ชันในโมดูลไฟฟ้าเดียว: สวิตช์แบบง่ายสำหรับยืนยันการทำงาน และตัวเข้ารหัสแบบหมุนเพื่อนำทาง เช่น ผ่านเมนู

ตัวเข้ารหัสแบบหมุนที่เพิ่มขึ้นจะสร้างสัญญาณเอาท์พุตสองสัญญาณในขณะที่เพลากำลังหมุน สัญญาณหนึ่งนำไปสู่อีกสัญญาณหนึ่งขึ้นอยู่กับทิศทาง (ดูด้านล่าง)

ขั้นตอนที่ 1: ทำความเข้าใจกับข้อมูลผลลัพธ์

การทำความเข้าใจข้อมูลผลลัพธ์
การทำความเข้าใจข้อมูลผลลัพธ์

ดังที่คุณเห็นเมื่อเพลาตัวเข้ารหัสเริ่มหมุนตามเข็มนาฬิกา เอาต์พุต A จะตกไปที่ LOW ก่อน และเอาต์พุต B จะตามมา ในทิศทางทวนเข็มนาฬิกาการทำงานจะหันไปทางตรงข้าม

ตอนนี้เราแค่ต้องใช้สิ่งนี้กับ µController ของเรา (ฉันใช้ Arduino Nano)

ขั้นตอนที่ 2: สร้างวงจร

สร้างวงจร
สร้างวงจร
สร้างวงจร
สร้างวงจร

ดังที่ฉันอธิบายไว้ก่อนหน้าผลลัพธ์จะสร้างปีกสูงและต่ำ เพื่อให้ได้ค่า HIGH ที่ data pin A และ B ของ µController เราต้องเพิ่มตัวต้านทานแบบดึงขึ้น พิน C ทั่วไปตรงไปที่พื้นสำหรับปีก LOW

ในการรับข้อมูลเกี่ยวกับสวิตช์ภายใน (ปุ่มกด) เราจะใช้อีกสองพินที่เหลือ หนึ่งในนั้นไปที่ VCC และอีกอันหนึ่งไปที่ data Pin ของ µController นอกจากนี้เรายังต้องเพิ่ม Pull-Down Resistor ให้กับดาต้าพินเพื่อให้ได้ค่า LOW ที่สะอาด

คุณยังสามารถใช้ตัวต้านทานแบบดึงขึ้นและแบบดึงลงภายในของ µController ของคุณได้!

ในกรณีของฉัน pinout ดูเหมือนว่า:

  • +3, 3V => +3, 3V (Arduino)(+5V เป็นไปได้ด้วย)
  • GND => GND (อาร์ดูอิโน)
  • A => Pin10
  • บ =>

    เข็มหมุด

    11

  • C => GND
  • SW =>

    เข็มหมุด

    12

ขั้นตอนที่ 3: การเขียนโค้ด

int pinA = 10; // สวิตช์ภายใน A int pinB = 11; // สวิตช์ภายใน B int pinSW = 12; //switch (กด Encoder) int encoderPosCount = 0; // เริ่มต้นที่ศูนย์ เปลี่ยนถ้าคุณต้องการ

ตำแหน่ง int;

สวิตช์บูล; int mrotateLast; int mrotate;

การตั้งค่าเป็นโมฆะ () {

int mrotateLast = digitalRead (pinA); Serial.begin (9600); ล่าช้า (50); }

วงเป็นโมฆะ () { readencoder (); if(readswitch() == 1){ Serial.println("สวิตช์ = 1"); } }

ตัวอ่านโค้ด int (){

mrotate = digitalRead (pinA); if (mrotate != mrotateLast){ //ลูกบิดกำลังหมุน ถ้า (digitalRead(pinB) != mrotate) { //เปลี่ยน A ก่อน -> หมุนตามเข็มนาฬิกา encoderPosCount ++; Serial.println ("หมุนตามเข็มนาฬิกา"); } อื่น {// สวิตช์ B เปลี่ยนก่อน -> หมุนทวนเข็มนาฬิกา encoderPosCount--; Serial.println ("หมุนทวนเข็มนาฬิกา"); }

Serial.print("ตำแหน่งตัวเข้ารหัส: "); Serial.println (ตัวเข้ารหัสPosCount); Serial.println(""); } mrotateLast = mrotate; ส่งคืน encoderPosCount; } บูล readswitch(){

if(digitalRead(pinSW)!=0){ // สวิตช์ถูกกด

while(digitalRead(pinSW)!=0){} //switch ถูกกด switchval = 1; } else{switchval = 0;} //switch ไม่ได้กด return switchval; }

ตอนนี้คุณสามารถหมุนตัวเข้ารหัสและตัวแปร encoderPosCount จะนับขึ้นหากคุณหมุนตามเข็มนาฬิกาและนับถอยหลังหากคุณหมุนทวนเข็มนาฬิกา

แค่นั้นแหละ! เรียบง่ายและมีประโยชน์

อย่าลังเลที่จะเปลี่ยนและดำเนินการรหัส คุณสามารถนำไปใช้ในโครงการของคุณ

ฉันจะอัปโหลดโปรเจ็กต์ LED ที่ฉันใช้ตัวเข้ารหัสเพื่อตั้งค่าความสว่างของไฟ LED ของฉันด้วย

แนะนำ: