ในบทช่วยสอนนี้เราจะเชื่อมต่อตัวเข้ารหัสแบบหมุนกับไมโครคอนโทรลเลอร์ ATmega8 ATmega8 เป็นชุดไมโครคอนโทรลเลอร์ของ atmel ที่ออกแบบมาสำหรับแอพพลิเคชั่นฝังตัว เครื่องเข้ารหัสแบบหมุน ใช้เพื่อทราบตำแหน่งการเคลื่อนที่และการเคลื่อนที่เชิงมุมของมอเตอร์หรือแกน โดยปกติแล้วจะเป็นอุปกรณ์ปลายทางสามเครื่องที่มีไฟและพินกราวด์นับเป็นห้า โมดูลตัวเข้ารหัสแบบหมุนแสดงอยู่ด้านล่าง
หมุดของตัวเข้ารหัสแบบหมุนคือ:
- พื้น.
- บวกเชื่อมต่อกับ + 5V
- สัญญาณขาออก A พิน
- ขาสัญญาณขาออก B
- เข็มนาฬิกาหรือหมุดทั่วไป
ENCODER จัดเตรียมพัลส์ที่แสดงถึงการเปลี่ยนแปลงตำแหน่งเพลาเพื่อให้ระบบเข้าใจ พิจารณาว่า ROTATORY ENCODER เปิดขึ้นและเพลาเคลื่อน
ดังที่แสดงในตารางด้านบนให้พิจารณาว่าเพลาถูกย้ายนาฬิกาอย่างชาญฉลาด ด้วยสิ่งนี้จะมี Falling Edge ที่ขั้ว A จากนั้นที่ขั้ว B
พิจารณาเพลาถูกเคลื่อนย้ายนาฬิกาป้องกันอย่างชาญฉลาด ด้วยสิ่งนี้จะมี Falling Edge ที่ขั้ว B จากนั้นที่ขั้ว A
ขอบนี้จะเกิดขึ้นหนึ่งครั้งสำหรับ 360/20 = 18 องศา (สำหรับ Encoder ที่มีตำแหน่ง 20 ตำแหน่งการเปลี่ยนแปลงจากประเภทเป็นประเภทการนับที่สูงขึ้นความแม่นยำยิ่งขึ้น)
ด้วยเงื่อนไขทั้งสองข้างต้นเราสามารถรับทิศทางและองศาการหมุนได้ ดังนั้นเราจึงได้รับพารามิเตอร์ที่จำเป็นสำหรับการรับตำแหน่งของเพลา
ส่วนประกอบ
ฮาร์ดแวร์: ATMEGA8, พินเชื่อมต่อ, AVR-ISP PROGRAMMER, ตัวต้านทาน220Ω, LED (แปดชิ้น), ตัวต้านทาน1KΩ, ตัวต้านทาน220Ω (2 ชิ้น), ตัวเก็บประจุ 100nF (2 ชิ้น), บอร์ดขนมปัง
ซอฟต์แวร์: Atmel studio 6.1, progisp หรือ flash magic
แผนภาพวงจรและคำอธิบายการทำงาน
ตัวเก็บประจุที่นี่มีไว้สำหรับปรับเอฟเฟกต์การตีกลับหน้าสัมผัสใน ENCODER หากไม่มีตัวเก็บประจุเหล่านั้นจะมีปัญหาร้ายแรงในการอ่านตำแหน่ง
เมื่อเพลาถูกเคลื่อนย้ายจะมีความแตกต่างของเวลาระหว่างเอาต์พุตพินเอาต์พุตสองตัว ATMEGA8 จะรับรู้ความแตกต่างของเวลานี้สำหรับการหมุนตามเข็มนาฬิกาของ Anti clock wise
หากการหมุนเป็นไปตามเข็มนาฬิกาจำนวนไบนารีจะเพิ่มขึ้นทีละหนึ่งและจำนวนนี้จะแสดงในพอร์ต LED ดังแสดงในรูป
หากการหมุนเป็น Anti clock อย่างชาญฉลาดการนับไบนารีจะลดลงทีละหนึ่งและจำนวนไบนารีจะแสดงที่ไบต์ LED
จำไว้ที่นี่เราไม่ได้ตั้งค่าบิตฟิวส์ของ atmega8 ดังนั้นคอนโทรลเลอร์จะทำงานบนคริสตัลภายในเริ่มต้น 1Mhz
การทำงานของการเชื่อมต่อตัวเข้ารหัสแบบหมุนกับไมโครคอนโทรลเลอร์ ATmega8 อธิบายไว้ในโค้ดด้านล่าง