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

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

โจทย์ข้อที่ 1

1) จงออกแบบวงจรดิจิลัทโดยใช้ภาษา VHDL สำหรับนำไปสร้างเป็นวงจรในชิป FPGA โดยใช้บอร์ดที่     มีอยู่ในห้องแล็ป
     1.1) วงจรดิจิทัลมี 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 ดวง
     1.2) พฤติกรรมการทำงานเป็นดังนี้
          - เมื่อเริ่มต้นหรือกดปุ่มรีเซต 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
     1.3) แนวทางการออกแบบและทดสอบ
          - ออกแบบวงจรโดยใช้ภาษา VHDL
          - เขียน VHDL Testbench เพื่อทดสอบการทำงาน และจำลองการทำงาน
          - ทดสอบการทำงานในบอร์ด FPGA แล้ววัดสัญญาณโดยใช้ออสซิลโลสโคป
            (ไม่ต้องต่อวงจร RGB LED จริง)
          - บันทึกผลและเขียนรายงานการทดลอง



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




ซอฟท์แวร์ที่ใช้
1. Altera Quartus II 13.1 (64-bit) Web Edition- ModelSim 
2. Altera 10.1d (Quartus II 13.1)



แนวคิดในการออกแบบ
เนื่องจาก CLK (input) มีความถี่ 50MHz ต้องการให้ PWM[2:0] (output) มีความถี่ 500Hz และ Duty Cycle เพิ่มทีละ 10 ในช่วง 0 ถึง 100 ทำให้ต้องใช้ความถี่ 100,000 (50M/500)Hz  แทน Duty Cycle  100%  หรือ การกดปุ่ม 10 ครั้ง จะได้ว่าการกดปุ่ม 1 ครั้งจะได้  PWM[2:0]  เพิ่มขึ้น 10,000 Hz หรือ Duty Cycle  10%   สุดท้ายเอาต์พุตที่ออกมา จะเปรียบกันระหว่าง PWM  input กับ PWM คาบ ถ้า PWM  input  มากกว่า  PWM ของ คาบ จะเป็น 1 ถ้าน้อยกว่าจะเป็น 0



โค้ด VHDL





โค้ด VHDL testbench





ผลการสังเคราห์วงจร





ผลการจำลองการทำงานด้วย Modelsim






Pin Planer



ขา I/O ของวงจรมีดังนี้

Clk            ต่อกับขา หมายเลข 22  เป็น input clock
PB[2]        ต่อกับขา หมายเลข 90  เป็น input ปุ่มกดสีน้ำเงิน
PB[1]        ต่อกับขา หมายเลข 89 เป็น input ปุ่มกดสีเขียว
PB[0]        ต่อกับขา หมายเลข 88 เป็น input ปุ่มกดสีแดง
PWM[2]    ต่อกับขา หมายเลข 77 เป็น output pwm สีน้ำเงิน
PWM[1]    ต่อกับขา หมายเลข 75 เป็น output pwm สีเขียว
PWM[0]    ต่อกับขา หมายเลข 73 เป็น output pwm สีแดง
RST_B      ต่อกับขา หมายเลข 91 เป็น input ปุ่มกด restsrt




ขั้นตอนการทดลองและผลการทำงาน
     รูปภาพการทดลอง





วัด output pwm สีแดง






วัด output pwm สีเขียว





วัด output pwm สีน้ำเงิน






รูปคลื่นสัญญาณ(กดคร้ังที่ 1 ถึง ครั้งที่ 10)

กดคร้ังที่ 1 
Duty Cycle 9.9 % ,ความถี่ 495 Hz





กดคร้ังที่ 2 
Duty Cycle 19.8 % ,ความถี่ 495 Hz





กดคร้ังที่ 10
Duty Cycle 99 % ,ความถี่ 492.6 Hz





กด reset
Duty Cycle 0 % ,ความถี่ 0 Hz




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

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