ตอนที่ 3 : “แสงที่มีชีวิต — การหรี่ไฟ (PWM) และจังหวะแสงด้วย DMA”
ซีรีส์: From Blink to DMX — เส้นทางไฟกระพริบสู่ป้ายไฟ STM32
จากตอนที่ 1: “ไฟกระพริบคือสัญญาณเวลา”
ตอนที่ 2: “ไฟวิ่งคือการควบคุมลำดับ”
ตอนนี้: “ไฟที่หรี่ขึ้นลงได้ คือการควบคุมระดับพลังงาน”
ถ้าเข้าใจตอนนี้ได้ — คุณจะสามารถ “ออกแบบอารมณ์ของแสง” ได้ทุกแบบ ไม่ว่าจะเป็นไฟวิ่ง, fade, หรือไฟระเบิด
เปิดด้วยภาพไฟค่อย ๆ สว่างขึ้นและค่อย ๆ ดับลง (fade in/out)
ถามผู้เรียนว่า
“ทำไมไฟนี้ดูนุ่มกว่าไฟที่แค่เปิด–ปิด?”
คำตอบ: เพราะเราควบคุม “ปริมาณพลังงานเฉลี่ย” ที่ส่งให้ LED ด้วย PWM
PWM = การเปิด–ปิดสัญญาณความเร็วสูง เพื่อสร้างค่าเฉลี่ยของพลังงาน
Duty Cycle 25% = หรี่
Duty Cycle 50% = กลาง
Duty Cycle 100% = สว่างเต็ม
ความถี่ของ PWM จะสูงจนตาเรามองไม่เห็นการกระพริบ (โดยทั่วไป > 1kHz)
MCU ไม่สามารถ “ปรับแรงดันได้โดยตรง” แต่ปรับ “ช่วงเวลาที่เปิดขา” แทน
ภาพอธิบาย:
MCU → Timer → PWM Generator → MOSFET → LED
STM32 มี Timer ที่สร้างสัญญาณ PWM ได้โดยไม่ต้องใช้ CPU
Timer Count → Compare → Output toggle
Duty cycle = (CCR / ARR) × 100%
ภาพแสดงโครงสร้าง TIMx_CHx
PWM คือผลของการ “จับจังหวะ” ระหว่าง Counter และ Compare
STM32 → ขา TIMx_CHx → LED / Driver
ใช้ hardware timer เพื่อสร้างสัญญาณไฟฟ้า
ปรับ CCRx เพื่อควบคุมความสว่าง
เมื่อเราเปลี่ยน Duty Cycle ตามเวลา — เราได้แสงที่เคลื่อนไหว
CCR เพิ่มจาก 0 → MAX → 0 (แบบ sine หรือ linear)
ใช้ Timer interrupt หรือ DMA เพื่อปรับค่าอัตโนมัติ
รูปคลื่น ความรู้สึก
Sine wave นุ่มนวล มีชีวิต
Triangle เป็นจังหวะ
Square ดุดัน เร็วแรง
Random อิสระ
ภาพเปรียบเทียบ waveform → light pattern
DMA = Direct Memory Access = “ระบบส่งค่าความสว่างอัตโนมัติไปยัง Timer โดยไม่ใช้ CPU”
เตรียม array ของค่า PWM (duty cycle) เช่น [0, 10, 20, 30, …]
DMA จะส่งค่าเหล่านี้ไปยัง CCRx ทุกครั้งที่ Timer ถึงจังหวะ
แสงจึงเปลี่ยนความสว่างอัตโนมัติ
Fade ลื่นไหล
CPU ว่างไปทำงานอื่น (เช่น สื่อสาร หรือ DMX)
สามารถสร้าง “pattern ของแสงแบบ wave” ได้
ภาพแสดง flow:
Memory → DMA → Timer Compare → PWM Output
ระบบไฟจริงมีหลายสี หลายช่อง (RGB, RGBW)
R, G, B แต่ละช่องมี PWM แยก
การรวมค่า duty cycle = การผสมสี
R=255, G=0, B=0 → สีแดง
R=255, G=255, B=0 → เหลือง
R=128, G=0, B=255 → ม่วง
ภาพ: Cube RGB ที่เปลี่ยนสีแบบ smooth
Timer หลัก sync PWM ทุก channel
DMA ควบคุม duty cycle ของแต่ละสีพร้อมกัน
ทำให้เกิด “animation ของสี” ที่นุ่มนวล
นี่คือพื้นฐานของการสร้างไฟ DMX fixture
ไฟ RGB 1 ดวง = 3 PWM
ไฟ RGB 100 ดวง = 300 PWM (ในระบบจริงใช้ driver IC หรือ WS2812)
ถ้าเข้าใจ PWM + DMA → คุณเข้าใจ “หัวใจของ WS2812 และ DMX” แล้ว
แนวคิด การประยุกต์
PWM Linear หรี่ไฟธรรมดา
PWM Sine เอฟเฟกต์นุ่มนวล
DMA Waveform Motion Lighting
RGB PWM ระบบสี
DMA Matrix LED Display / DMX Pixel
แสงหรี่ขึ้นลงเอง (fade in/out)
ไฟ RGB ค่อย ๆ เปลี่ยนสีเป็นสีรุ้ง
สร้าง waveform ด้วย DMA แล้วปล่อยให้ MCU ทำงานอัตโนมัติ
ใช้เพียง 1 Timer + 1 DMA ก็สามารถสร้างแสงที่ดูเหมือน “มีชีวิต” ได้
“วันนี้เราไม่ได้แค่เปิดไฟ — เราสร้างชีวิตให้แสง”
ตอนหน้า…เราจะนำพลังของ PWM และ DMA ไปขับ LED ดิจิทัล (WS2812) เพื่อให้ไฟแต่ละดวงมีสมองของมันเอง — และนี่คือจุดเริ่มต้นของ “Smart Lighting”
หัวข้อ สิ่งที่เข้าใจ
PWM Concept การหรี่แสงด้วยการควบคุมเวลา
STM32 Timer เครื่องมือสร้างจังหวะไฟ
DMA ทำให้แสงเคลื่อนไหวอัตโนมัติ
RGB Mixing พื้นฐานของไฟสี
ต่อยอด DMX, WS2812, LED Panel