วันจันทร์ที่ 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
ภาพวงจรโดยรวม


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


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

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

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

วิธีการทดลอง
ออกแบบวงจรดิจิลัทโดยใช้ภาษา VHDL สำหรับนำไปสร้างเป็นวงจรในชิป FPGA โดยวงจรดิจิทัลมี I/O ดังนี้
- CLK (input) มีความถี่ 50MHz ใช้สำหรับกำหนดจังหวะการทำงานของวงจรทั้งหมด (เป็นการออกแบบวงจรดิจิทัลแบบ Synchronous Design)
- RST_B (input) เป็นอินพุตสำหรับใช้รีเซตแบบ Asynchronous สำหรับการทำงานของวงจรโดยรวม (ทำงานแบบ Active-Low) ซึ่งได้จากวงจรปุ่มกด (Push Button)
- PB[2:0] (input) เป็นอินพุตจากปุ่มกด 3 ปุ่ม ทำงานแบบ Active-low เพื่อใช้ในการเปลี่ยนค่า Duty Cycle โดยเพิ่มทีละ 10 ในช่วง 0 ถึง 100 สำหรับสัญญาณ PWM(2:0) ที่มี 3 ช่องสัญญาณ
- PWM[2:0] (output) เป็นเอาต์พุตสำหรับนำไปควบคุมการทำงานของ RGB LED จำนวน 1 ดวง
วงจรดิจิทัลพฤติกรรมการทำงานเป็นดังนี้
- เมื่อเริ่มต้นหรือกดปุ่มรีเซต RST_B ค่า PWM[2:0] จะเป็นลอจิก 0 ทั้ง 3 ช่องสัญญาณ และมีค่า Duty Cycle สำหรับสัญญาณ PWM[i], i=0,1,2 เป็น 0
- เมื่อกดปุ่มใดๆ PB[i], i=0,1,2, แล้วปล่อยในแต่ละครั้ง จะเพิ่มค่า Duty Cycle ของสัญญาณ PWM สำหรับช่องสัญญาณ i ทีละ 10 แต่ถ้าถึง 100 จะกลับไปเริ่มต้นที 0 ใหม่
- สัญญาณ PWM แต่ละช่อง ต้องมีความถี่เท่ากันและคงที่ และสามารถเลือกใช้ความถี่ได้ในช่วง 500Hz ถึง 1kHz
แนวทางการออกแบบและทดสอบ
- ออกแบบวงจรโดยใช้ภาษา VHDL
- เขียน VHDL Testbench เพื่อทดสอบการทำงาน และจำลองการทำงาน
- ทดสอบการทำงานในบอร์ด FPGA แล้ววัดสัญญาณโดยใช้ออสซิลโลสโคป
- บันทึกผลและเขียนรายงานการทดลอง

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

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

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


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

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

โค้ด Testbench ภาษา VHDL 

ผลการทดลอง

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


ผลการจำลองการทำงานด้วย Modelsim
หมายเหตุ – ในการจำลองใช้ค่าการหน่วงปุ่มกด PB[2:0] เท่ากับ 1,000

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


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

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

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

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

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

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