
ทำไม ?
บทความนี้จะเป็นการอธิบายและตัวอย่างสำหรับการการใช้งานคำสั่ง สามารถใช้งานได้กับไมโครคอนโทรลเลอร์ได้หลายๆ ตัวแต่ ณ ที่นี้จะแนะนำเป็นไมโครคอนโทรลเลอร์ Arduino uno เป็นบอร์ดไมโครคอนโทรลเลอร์ที่ได้รับความนิยมอย่างมากในงานอิเล็กทรอนิกส์และการพัฒนาโปรเจกต์ต่างๆ ด้วยความง่ายในการเขียนโปรแกรมและการเชื่อมต่อกับเซ็นเซอร์หรืออุปกรณ์ควบคุมอื่นๆ หนึ่งในฟีเจอร์สำคัญของ Arduino คือการสร้างสัญญาณ PWM (Pulse Width Modulation) ซึ่งสามารถนำมาใช้ในงานควบคุมมอเตอร์ ความสว่างของ LED และระบบอื่นๆ ที่ต้องการควบคุมพลังงานหรือแรงดันไฟฟ้าได้อย่างละเอียด
บทความนี้อธิบายการทำงานของ Duty Cycle และ PWM รวมถึงวิธีการใช้งานกับ Arduino พร้อมตัวอย่างและคำอธิบายพืันฐานไม่ซับซ้อนที่เข้าใจง่ายให้กับผู้เริ่มต้นได้ทำความเข้าใจ
PWM (Pulse Width Modulation) คืออะไร ?
PWM หรือ Pulse Width Modulation เป็นเทคนิคการควบคุมพลังงานที่ส่งไปยังอุปกรณ์ต่างๆ โดยการเปลี่ยนแปลงอัตราส่วนของเวลาที่สัญญาณอยู่ในสถานะ “เปิด” (ON) และ “ปิด” (OFF) ในรอบหนึ่งๆ ของคลื่นสี่เหลี่ยม เพื่อให้ได้สัญญาณ output เสมือนว่าเป็นสัญญาณ analog ออกมานั้นเองหลักการทำงานนี้มักพบในไมโครคอนโทรลเลอร์ระดับต่ำที่มีความสามารถไม่ได้สูงมากนักหรือไม่มี DAC ในตัวเอง ดังนั้นเราจึงหลีกหนีการใช้งาน PWM ไม่ได้ การใช้งาน PWM นั้นต้องมีความเข้าใจเรื่องการแบ่งสัดส่วนของสัญญาณก่อน เราเรียกการแบ่งหรือการกำหนดความกว้างความยาวเหล่านี้ว่า duty cycle จะกล่าวในลำดับถัดไป.
ตัวอย่างการใช้งาน PWM:
- ควบคุมความเร็วรอบมอเตอร์ไฟฟ้า
- ควบคุมความสว่างของหลอด LED
- ควบคุมแรงดันไฟฟ้าสำหรับวงจรต่างๆ
- การเข้ารหัสสัญญาณเพื่อส่งข้อมูล
Duty Cycle คืออะไร?
Duty Cycle หมายถึงสัดส่วนของเวลาที่สัญญาณอยู่ในสถานะ ON เมื่อเทียบกับรอบเวลาทั้งหมด โดยมีหน่วยเป็นเปอร์เซ็นต์ เช่น
- Duty Cycle 100%: สัญญาณอยู่ในสถานะ ON ตลอดเวลา
- Duty Cycle 50%: สัญญาณอยู่ในสถานะ ON ครึ่งหนึ่งและ OFF อีกครึ่งหนึ่ง
- Duty Cycle 0%: สัญญาณอยู่ในสถานะ OFF ตลอดเวลา


สูตรคำนวณ Duty Cycle:
Duty Cycle (%) = (Time_ON / (Time_ON + Time_OFF)) * 100
ตัวอย่าง: หาก Time_ON = 2ms และ Time_OFF = 3ms
Duty Cycle = (2 / (2 + 3)) * 100 = 40%
การสร้าง PWM บน Arduino
Arduino สามารถสร้างสัญญาณ PWM ได้อย่างง่ายดายผ่านฟังก์ชัน analogWrite()
ซึ่งรองรับพินบางพินที่มีความสามารถในการสร้าง PWM
พินที่รองรับ PWM บน Arduino UNO:
3, 5, 6, 9, 10, 11
ตัวอย่างการใช้งาน PWM ควบคุม LED

อุปกรณ์ที่ต้องใช้:
- Arduino UNO
- หลอด LED
- ตัวต้านทาน 220 โอห์ม
- สาย Jumper
- Breadboard
การต่อวงจร:
- ต่อขา Anode (+) ของ LED เข้ากับพิน 3 ของ Arduino ผ่านตัวต้านทาน
- ต่อขา Cathode (-) ของ LED เข้ากับ GND
โค้ดตัวอย่าง:
int ledPin = 9; // กำหนดพิน 9 สำหรับ LED void setup() { pinMode(ledPin, OUTPUT); // ตั้งพินเป็น OUTPUT } void loop() { for (int brightness = 0; brightness <= 255; brightness++) { analogWrite(ledPin, brightness); // เพิ่มความสว่าง delay(10); // หน่วงเวลา } for (int brightness = 255; brightness >= 0; brightness--) { analogWrite(ledPin, brightness); // ลดความสว่าง delay(10); // หน่วงเวลา } }
สรุป
PWM และ Duty Cycle เป็นเครื่องมือที่สำคัญในงานควบคุมอุปกรณ์อิเล็กทรอนิกส์ โดยสามารถปรับความเร็วมอเตอร์หรือความสว่างของ LED ได้อย่างแม่นยำผ่านฟังก์ชัน analogWrite()
ของ Arduino นอกจากนี้ หากต้องการปรับความถี่ของ PWM ยังสามารถทำได้โดยการตั้งค่า Timer ภายในของ Arduino
การเรียนรู้ PWM จะช่วยให้คุณสามารถพัฒนาโปรเจกต์ที่มีความซับซ้อนมากขึ้น เช่น หุ่นยนต์ ระบบควบคุมแสง หรือแม้กระทั่งการสื่อสารผ่านคลื่นความถี่
การต่อยอด
- มือใหม่ให้เริ่มต้นด้วยการทดลองกับ LED ก่อนเพราะหากเกิดความผิดพลาดใดๆจะได้ไม่เกิดความเสียหายมากนัก
- เมื่อคุ้นเคยแล้วจึงขยับไปทดลองกับมอเตอร์หรืออุปกรณ์ที่ซับซ้อนกว่า อาจจะเป็นการจ่ายสัญญาณ PWM ไปขับวงจรไดร์ เพื่อดูผลลัพธ์ว่าการทำงานนั้นเป็นไปตามข้อกำหนดหรือไม่
- ศึกษาข้อมูลเพิ่มเติมเกี่ยวกับ Timer และ Prescaler สำหรับโปรเจกต์ที่มีความซับซ้อน และต้องการความถี่เฉพาะ