PWM(Pulse
Width Modulation) คืออะไร
PWM คือเทคนิคการส่งสัญญาณแบบสวิตซ์ หรือ ส่งค่าดิจิตอล 0-1 โดยให้สัญญาณความถี่คงที่ การควบคุมระยะเวลาสัญญาณสูงและสัญญาณต่ำ
ที่ต่างกัน ก็จะทำให้ค่าแรงดันเฉลี่ยของสัญญาณสวิตซ์ ต่างกันด้วย
แนวทางการสร้างสัญญาณ
PWM
การสร้างสัญญาณ PWM จะต้องอาศัยตัวนับ (Counter) เป็นตัวนับ
โดยโปรแกรมที่เราจะทำเมื่อกดปุ่มหนึ่งครั้งจะเพื่อ Duty Cycle ของ PWM ครั้งละ 10% เมื่อเพิ่มครบ
100% จะกลับไปเริ่มต้นที่ 0% ใหม่
เมื่อ และสัญญาณ PWM ที่เราต้องการนั้นอยู่ในช่วง 500
Hz – 1kHz โดยเราทราบความถี่ของบอร์ด FPGA อยู่แล้วคือ
50MHz การที่เราจะได้ความถี่1kHz นั้น
เราต้องคำนวณจาก ความถี่CLK ของบอร์ด FPGA หารด้วย ความถี่ที่เราต้องการคือ 1kHz จะได้ Period
ของสัญญาณ PWM จากนั้นเราก็นั้น Period
นั้นไปทำการกำหนดลอจิกของสัญญาณ PWM
Generator
PWM
ทำไมเราต้อง Generate
สัญญาณ การ Generate สัญญาณนั้น
ทำให้เราไม่ต้องยุ่งยากในการสร้างสัญญาณหลายๆครั้ง การ Generate ก็เหมือนกับการวนลูปเพื่อทำอะไรซ้ำๆตามจำนวนครั้งที่เราต้องการ
โดยที่เราไม่ต้องไปสร้างสิ่งเดิมๆ หลายๆรอบ
สร้างสัญญาณ PWM 3ช่อง ขั้นตอนแรกสร้างสัญญาณ PWM 1 ช่องก่อน
รูป RTL ที่ได้
| Code ในส่วนของ Debounce |
การสร้าง
Debounce สร้างเพื่อ แก้ไขส่วนที่เป็น bounce ขณะกดปุ่มจะมีสัญญาณ
bounce เกิดขึ้นทำให้เกิดการผิดพลาด โดยหลักการสร้าง Debounce นั้น
จะใช้การนับค่าจนถึง 500000 ถึงการจะนับเพิ่มขึ้นได้นั้น
ลอจิกของสัญญาณต้องเหมือนกับลอจิกก่อนหน้า ซึ่งถ้านับถึง 500000 สัญญาณที่ได้นั้นจะออกจากช่วงที่เป็น
bounce และนำสัญญาณลอจิก นั้นส่งให้ในส่วนของการนับในขั้นตอนถัดไป
·
Code ในส่วนของ counterDuty
· Code ในส่วนของ countertoPWM
สำหรับปรับความถี่ของสัญญาณ PWM โดยทำงานตามสัญญาณ Clock ขอบขาขึ้น
โดยความถี่จะเริ่มที่ 500Hz เมื่อกดปุ่ม(PB_fq) ความถี่จะเพิ่มขึ้นครั้งละ 100Hz แต่เมื่อความถี่เท่ากับ 1kHz พอกดอีกครั้ง จะกลับมาเริ่มที่500Hz และค่าของตัวแปร frequency จะนำมาคำนวณค่าของ pwm_periode ของสัญญาณ PWM จึงเกิดการเปลี่ยนแปลงความถี่ของสัญญาณ PWM
·
Code ในส่วนของ PWM_display
ส่วนนี้เป็นส่วนของการรวมทั้ง
3 ส่วนเข้าด้วยกัน โดยเริ่มจากให้มีการ Debounce ลอจิกก่อนที่จะส่งค่าเข้าไปให้
counter เป็นตัวนับ และให้ส่วน counter ส่งไปให้ส่วนของการแสดง
สัญญาณ PWM
· Code ในส่วนของ pwm_generic
ส่วนนี้เป็นส่วนของการ Generate ซึ่งจะนำส่วนต่างๆทั้ง
3 ส่วนที่ผ่านมา
เมื่อทำสัญญาณ
PWM 1 ช่องสัญญาณได้แล้ว จึงทำการ Generate PWM 3
ช่องสัญญาณ
จะได้รูป RTL ดังนี้
ผลที่ได้
รูปสัญญาณเริ่มต้น ค่าของ Duty Cycle จะเท่ากับ 0%
เมื่อกดปุ่ม ค่า Duty Cycle จะเพิ่มขึ้นทีหละ10%
เมื่อกดปุ่ม ค่า Duty Cycle จะเพิ่มขึ้นเรื่อยๆ
สังเกตในรูปภาพสัญญาณ ลอจิก 1
จะขยายกว้างขึ้น
เมื่อค่าของ Duty Cycle ถึง 100% สัญญาณจะเป็นดังรูปภาพ
ผลที่ได้
สัญญาณ PWM 3 channel
เมื่อกดปุ่ม PB0 ในบอร์ด FPGA ค่าของ Duty Cycle จะเพิ่มขึ้นที่ละ10%
ของสัญญาณ PWM ในสัญญาณช่องที่ 1
เมื่อกดปุ่ม PB1 ในบอร์ด FPGA ค่าของ Duty Cycle จะเพิ่มขึ้นที่ละ10%
ของสัญญาณ PWM ในสัญญาณช่องที่ 2
เมื่อกดปุ่ม PB2 ในบอร์ด FPGA ค่าของ Duty Cycle จะเพิ่มขึ้นที่ละ10%
ของสัญญาณ PWM ในสัญญาณช่องที่ 3
เมื่อเลื่อน switch SW0 ให้เป็นลอจิก
0 จะ Reset สัญญาณทั้งหมด
PWM signal 3 channel
ความถี่ของสัญญาณ PWM เริ่มที่ 500Hz เมื่อกดปุ่ม PB4
ความถี่จะเพิ่มขึ้นครั้งละ
100Hz พอถึง 1kHz กดปุ่ม PB4 อีกครั้งจะวนกลับมา 500Hz









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