Duty Cycle และ PWM บน Arduino

duty cycle และ PWM ใน arduino uno
การทำงานของ Duty Cycle และ PWM บน Arduino

ทำไม ?

บทความนี้จะเป็นการอธิบายและตัวอย่างสำหรับการการใช้งานคำสั่ง สามารถใช้งานได้กับไมโครคอนโทรลเลอร์ได้หลายๆ ตัวแต่ ณ ที่นี้จะแนะนำเป็นไมโครคอนโทรลเลอร์ 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 และ PWM ใน arduino uno
duty cycle และ PWM ใน arduino uno

สูตรคำนวณ 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

การต่อวงจร:

  1. ต่อขา Anode (+) ของ LED เข้ากับพิน 3 ของ Arduino ผ่านตัวต้านทาน
  2. ต่อขา 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 สำหรับโปรเจกต์ที่มีความซับซ้อน และต้องการความถี่เฉพาะ

Leave Comment

อีเมลของคุณจะไม่แสดงให้คนอื่นเห็น ช่องข้อมูลจำเป็นถูกทำเครื่องหมาย *