วันจันทร์ที่ 2 กุมภาพันธ์ พ.ศ. 2558

การทดลองที่ 2 ออกแบบวงจรดิจิทัลสร้างสัญญาณ PWM ควบคุมการทำงานของ WS2812 RGB LED โดยใช้ภาษา VHDL

การทดลองที่
ออกแบบวงจรดิจิทัลสร้างสัญญาณ PWM ควบคุมการทำงานของ WS2812 RGB LED โดยใช้ภาษา VHDL

รายการอุปกรณ์
1. บอร์ด Altera FPGA (WARRIOR CYCLONE3 DEV) ชิปหมายเลข EP3C10E144C8    1 บอร์ด
2. สายดาวน์โหลด ByteBlaster II Cable หรือ สายดาวน์โหลดUSB Blaster Cab                 1 ชุด
3. เครื่องคอมพิวเตอร์                                                                                                          1 ชุด
4. ออสซิลโลสโคป                                                                                                              1 เครื่อง
5. สายวัด Logic Analyzer                                                                                                   1 เส้น
6. WS2812 RGB LED                                                                                                        1 ดวง
ศึกษา Data Sheet ของ WS2812 ได้ ที่นี่

วิธีการทดลอง
จงออกแบบวงจรดิจิลัทโดยใช้ภาษา VHDL สำหรับนำไปสร้างเป็นวงจรในชิป FPGA โดยใช้บอร์ดที่มีอยู่ในห้องแล็ป
วงจรดิจิทัลมี I/O ดังนี้
- CLK (input) มีความถี่ 50MHz ใช้สำหรับกำหนดจังหวะการทำงานของวงจรทั้งหมด (เป็นการออกแบบวงจรดิจิทัลแบบ Synchronous Design)
- RST_B (input) เป็นอินพุตสำหรับใช้รีเซตแบบ Asynchronous สำหรับการทำงานของวงจรโดยรวม (ทำงานแบบ Active-Low) ซึ่งได้จากวงจรปุ่มกด (Push Button)
- PB (input) เป็นอินพุตจากปุ่มกด 1 ปุ่ม ทำงานแบบ Active-low เพื่อใช้ในการเปลี่ยนสีของ WS2812 RGB LED จำนวน 1 ดวง
- DATA (output) เป็นเอาต์พุตสำหรับนำไปควบคุมการทำงานของ WS2812 RGB LED เพียง 1 ดวง ซึ่งเป็นสัญญาณตามข้อกำหนดของชิป WS2812 เพื่อส่งข้อมูลจำนวน 24 บิต
    พฤติกรรมการทำงานเป็นดังนี้
- เมื่อเริ่มต้นหรือกดปุ่มรีเซต (RST_B) จะทำให้ค่าสีเป็น 0x000000 (24 บิต) และส่งออกไปยัง WS2812 RGB LED หนึ่งครั้ง
- เมื่อมีการกดปุ่ม PB แล้วปล่อยในแต่ละครั้ง จะมีการเปลี่ยนค่าสี 24 บิต แล้วส่งออกไปยัง RGB LED ใหม่หนึ่งครั้ง ตามลำดับดังนี้
0x000000 -> 0x0000FF -> 0x00FF00 -> 0xFF0000 แล้ววนซ้ำ
แนวทางการออกแบบและทดสอบ
   - ออกแบบวงจรโดยใช้ภาษา VHDL
   - เขียน VHDL Testbench เพื่อทดสอบการทำงาน และจำลองการทำงาน
   - ทดสอบการทำงานในบอร์ด FPGA แล้ววัดสัญญาณโดยใช้ออสซิลโลสโคป(ยังไม่ต้องต่อวงจร RGB LED จริง)
   - ทดสอบการทำงานในบอร์ด FPGA แล้ววัดสัญญาณโดยต่อวงจร RGB LED จริง

แนวทางการออกแบบ

รูปแผนภาพ Finite State Machine ออกแบบวงจรปุ่มกด

รูปแผนภาพ Finite State Machine ออกแบบวงจรสร้างสัญญาณ PWM

รูปแผนภาพ Block Diagram การทำงานของวงจร

โค้ดวงจรดิจิทัลที่ได้จากการออกแบบ

โค้ดวงจรดิจิทัลภาษา VHDL

โค้ด Testbench ภาษา VHDL

ผลการทดลอง

ผลการสังเคราะห์VHDL เป็นวงจรในชิปและการใช้ทรัพยากรของบอร์ด FPGA

ผลการจำลองการทำงานด้วย Modelsim
ลักษณะสัญญาณลอจิก 0

ลักษณะสัญญาณลอจิก 1

ลักษณะสัญญาณ x“000000”

ลักษณะสัญญาณ x“0000FF”

ลักษณะสัญญาณ x“00FF00”

ลักษณะสัญญาณ x“FF0000”

การเปลี่ยนแปลงลักษณะสัญญาณเมื่อกดปุ่ม PB

การเปลี่ยนแปลงลักษณะสัญญาณเมื่อกดปุ่ม RST_B
หมายเหตุ – ในการจำลองใช้ค่าการหน่วงปุ่มกด PB เท่ากับ 1,000

ผลการทำงานบนบอร์ด FPGA
ภาพโดยรวมของวงจร

เมื่อยังไม่ทำการกดปุ่มหรือกดปุ่มรีเซต LED จะไม่ติด

สัญญาณที่วัดได้จาก Function Generator เป็นสัญญาณ x“000000”

เมื่อกดปุ่ม PB ครั้งแรก LED จะติดเป็นสีน้ำเงิน

สัญญาณที่วัดได้จาก Function Generator เป็นสัญญาณ x“0000FF”


เมื่อกดปุ่ม PB ครั้งแรก LED จะติดเป็นสีแดง

สัญญาณที่วัดได้จาก Function Generator เป็นสัญญาณ x“00FF00”

เมื่อกดปุ่ม PB ครั้งแรก LED จะติดเป็นสีเขียว

สัญญาณที่วัดได้จาก Function Generator เป็นสัญญาณ x“FF0000”

วิดีโอผลการทดลอง

ทดลองเปลี่ยนอินพุตจากวงจรปุ่มกดเป็นสัญญาณจาก Function Generator
ภาพวงจรโดยรวม


วิดีโอผลการทดลอง


ไม่มีความคิดเห็น:

แสดงความคิดเห็น