ตอนที่ 3 : “แสงที่มีชีวิต — การหรี่ไฟ (PWM) และจังหวะแสงด้วย DMA”
ซีรีส์: From Blink to DMX — เส้นทางไฟกระพริบสู่ป้ายไฟ STM32
จากตอนที่ 1: “ไฟกระพริบคือสัญญาณเวลา”
ตอนที่ 2: “ไฟวิ่งคือการควบคุมลำดับ”
ตอนนี้: “ไฟที่หรี่ขึ้นลงได้ คือการควบคุมระดับพลังงาน”
ถ้าเข้าใจตอนนี้ได้ — คุณจะสามารถ “ออกแบบอารมณ์ของแสง” ได้ทุกแบบ ไม่ว่าจะเป็นไฟวิ่ง, fade, หรือไฟระเบิด

1. บทนำ — “จากจังหวะ...สู่ความนุ่มนวล”
เปิดด้วยภาพไฟค่อย ๆ สว่างขึ้นและค่อย ๆ ดับลง (fade in/out)
ถามผู้เรียนว่า
“ทำไมไฟนี้ดูนุ่มกว่าไฟที่แค่เปิด–ปิด?”
คำตอบ: เพราะเราควบคุม “ปริมาณพลังงานเฉลี่ย” ที่ส่งให้ LED ด้วย PWM

2. หลักการของ PWM — Pulse Width Modulation
PWM = การเปิด–ปิดสัญญาณความเร็วสูง เพื่อสร้างค่าเฉลี่ยของพลังงาน

2.1 ภาพกราฟพื้นฐาน
Duty Cycle 100% = สว่างเต็ม
ความถี่ของ PWM จะสูงจนตาเรามองไม่เห็นการกระพริบ (โดยทั่วไป > 1kHz)

2.2 PWM ไม่ได้เปลี่ยนแรงดัน แต่เปลี่ยน “เวลาที่เปิด”
MCU ไม่สามารถ “ปรับแรงดันได้โดยตรง” แต่ปรับ “ช่วงเวลาที่เปิดขา” แทน
ภาพอธิบาย:
MCU → Timer → PWM Generator → MOSFET → LED

3. PWM ใน STM32 — แสงที่ MCU ขับเองได้
STM32 มี Timer ที่สร้างสัญญาณ PWM ได้โดยไม่ต้องใช้ CPU

3.1 โครงสร้างของ Timer PWM
Timer Count → Compare → Output toggle
Duty cycle = (CCR / ARR) × 100%
ภาพแสดงโครงสร้าง TIMx_CHx
PWM คือผลของการ “จับจังหวะ” ระหว่าง Counter และ Compare

3.2 การเชื่อมต่อ
STM32 → ขา TIMx_CHx → LED / Driver
ใช้ hardware timer เพื่อสร้างสัญญาณไฟฟ้า
ปรับ CCRx เพื่อควบคุมความสว่าง

4. จาก PWM → แสงเคลื่อนไหว (Fade / Wave)
เมื่อเราเปลี่ยน Duty Cycle ตามเวลา — เราได้แสงที่เคลื่อนไหว

4.1 แนวคิด Fade
CCR เพิ่มจาก 0 → MAX → 0 (แบบ sine หรือ linear)
ใช้ Timer interrupt หรือ DMA เพื่อปรับค่าอัตโนมัติ

4.2 การสร้างรูปคลื่นของแสง
รูปคลื่น ความรู้สึก
Sine wave นุ่มนวล มีชีวิต
Triangle เป็นจังหวะ
Square ดุดัน เร็วแรง
Random อิสระ
ภาพเปรียบเทียบ waveform → light pattern

5. การใช้ DMA — ทำให้แสง “เคลื่อนไหวเอง”
DMA = Direct Memory Access = “ระบบส่งค่าความสว่างอัตโนมัติไปยัง Timer โดยไม่ใช้ CPU”

5.1 หลักการ
เตรียม array ของค่า PWM (duty cycle) เช่น [0, 10, 20, 30, …]
DMA จะส่งค่าเหล่านี้ไปยัง CCRx ทุกครั้งที่ Timer ถึงจังหวะ
แสงจึงเปลี่ยนความสว่างอัตโนมัติ

5.2 ผลลัพธ์
CPU ว่างไปทำงานอื่น (เช่น สื่อสาร หรือ DMX)
สามารถสร้าง “pattern ของแสงแบบ wave” ได้
ภาพแสดง flow:
Memory → DMA → Timer Compare → PWM Output

6. การผสมผสาน PWM หลายช่อง
ระบบไฟจริงมีหลายสี หลายช่อง (RGB, RGBW)

6.1 RGB PWM Concept
R, G, B แต่ละช่องมี PWM แยก
การรวมค่า duty cycle = การผสมสี
R=255, G=255, B=0 → เหลือง
ภาพ: Cube RGB ที่เปลี่ยนสีแบบ smooth

6.2 การซิงค์หลายช่องด้วย DMA
Timer หลัก sync PWM ทุก channel
DMA ควบคุม duty cycle ของแต่ละสีพร้อมกัน
ทำให้เกิด “animation ของสี” ที่นุ่มนวล

7. จากแสง 1 ดวง สู่ไฟ RGB หลายร้อยดวง
นี่คือพื้นฐานของการสร้างไฟ DMX fixture
ไฟ RGB 100 ดวง = 300 PWM (ในระบบจริงใช้ driver IC หรือ WS2812)
ถ้าเข้าใจ PWM + DMA → คุณเข้าใจ “หัวใจของ WS2812 และ DMX” แล้ว

8. แนวคิดต่อยอด
แนวคิด การประยุกต์
PWM Linear หรี่ไฟธรรมดา
PWM Sine เอฟเฟกต์นุ่มนวล
DMA Waveform Motion Lighting
RGB PWM ระบบสี
DMA Matrix LED Display / DMX Pixel

9. Workshop (แนวคิดไม่ลงโค้ด)
แสงหรี่ขึ้นลงเอง (fade in/out)
ไฟ RGB ค่อย ๆ เปลี่ยนสีเป็นสีรุ้ง
สร้าง waveform ด้วย DMA แล้วปล่อยให้ MCU ทำงานอัตโนมัติ
ใช้เพียง 1 Timer + 1 DMA ก็สามารถสร้างแสงที่ดูเหมือน “มีชีวิต” ได้
“วันนี้เราไม่ได้แค่เปิดไฟ — เราสร้างชีวิตให้แสง”
ตอนหน้า…เราจะนำพลังของ PWM และ DMA ไปขับ LED ดิจิทัล (WS2812) เพื่อให้ไฟแต่ละดวงมีสมองของมันเอง — และนี่คือจุดเริ่มต้นของ “Smart Lighting”

สรุป Key Learning
หัวข้อ สิ่งที่เข้าใจ
PWM Concept การหรี่แสงด้วยการควบคุมเวลา
STM32 Timer เครื่องมือสร้างจังหวะไฟ
DMA ทำให้แสงเคลื่อนไหวอัตโนมัติ
RGB Mixing พื้นฐานของไฟสี
ต่อยอด DMX, WS2812, LED Panel