ตอนที่ 4 : “ไฟที่คิดเองได้ — ควบคุม WS2812 ด้วย STM32”
ซีรีส์: From Blink to DMX — เส้นทางไฟกระพริบสู่ป้ายไฟ STM32
เปิดด้วยภาพ LED หลายดวงที่เปลี่ยนสีต่างกัน แม้ใช้สายเส้นเดียว
ถามผู้เรียนว่า
“ใครสั่งให้หลอดที่ 1 สีแดง แต่หลอดที่ 2 สีฟ้า ทั้งที่ใช้สายข้อมูลเส้นเดียว?”
คำตอบคือ — แต่ละหลอดมีไมโครคอนโทรลเลอร์เล็ก ๆ อยู่ข้างใน
WS2812 = LED + ไมโครคอนโทรลเลอร์ในตัว
สื่อสารด้วยสัญญาณดิจิทัลที่มีความแม่นยำระดับไมโครวินาที
ทุกดวง “รับข้อมูล” → “ตัดเอาของตัวเอง” → “ส่งต่อส่วนที่เหลือ”
กล่าวอีกอย่างคือ “ทุกหลอดรู้หน้าที่ของตัวเองในสายเดียวกัน”
3 LED (R, G, B) + 1 ไมโครคอนโทรลเลอร์ + 1 shift register
ขาสำคัญ:
VDD (5V)
GND
DIN (ข้อมูลเข้า)
DOUT (ส่งข้อมูลต่อ)
ข้อมูลเป็น สัญญาณความถี่สูง (800 kHz)
1 ดวง = 24 บิต (8 บิตต่อสี RGB)
สัญญาณ High/Low ใช้ความกว้างพัลส์แทน “1” และ “0”
T1H ≈ 0.8 µs
T0H ≈ 0.4 µs
หลังส่งครบ ต้องมี reset > 50 µs
ภาพแสดง “Timing Diagram” ของ WS2812
ลักษณะ PWM ปกติ WS2812 Signal
จุดประสงค์ ควบคุมความสว่าง ส่งข้อมูลดิจิทัล
ความถี่ 1–20 kHz 800 kHz
Duty Cycle สัมพันธ์กับแสง สัมพันธ์กับบิตข้อมูล
Output ต่อ LED ตรง ต่อเข้า WS2812
การ Sync ไม่จำเป็น ต้องแม่นยำระดับไมโครวินาที
นี่คือเหตุผลที่ WS2812 ต้องใช้ Timer + DMA ในการส่งสัญญาณ
เพราะ CPU ทำเองไม่ทัน
ใช้ “Timer Output Compare + DMA” เพื่อสร้างรูปคลื่นสัญญาณที่แม่นยำ
กำหนดค่า Timer ให้ 1 รอบ = 1.25 µs (800 kHz)
ในแต่ละรอบใช้ค่า compare ต่างกันระหว่าง 0 และ 1
High 0.8 µs = “1”
High 0.4 µs = “0”
เตรียม buffer ขนาด 24 × N (จำนวนหลอด)
DMA ส่งค่า duty cycle ไปยัง CCRx ทีละบิต
Timer ทำหน้าที่ “ยิงสัญญาณ” ออกไปโดยอัตโนมัติ
ภาพ flow:
Memory (RGB Data)
↓
DMA
↓
Timer PWM
↓
Data Line
↓
WS2812 LEDs
ดวงที่ ข้อมูล (24-bit) ค่า (RGB)
1 11111111 00000000 00000000 แดง
2 00000000 11111111 00000000 เขียว
3 00000000 00000000 11111111 น้ำเงิน
เรียงต่อกันเป็น stream
LED ตัวแรกจะอ่านของตัวเอง แล้วส่งต่อส่วนที่เหลือ
Pattern ไม่ใช่แค่ “เปิด–ปิด” อีกต่อไป แต่คือ “การสั่งสีและจังหวะ”
Chase RGB: สีไล่ตามตำแหน่ง
Rainbow Flow: ใช้ค่า hue เปลี่ยนต่อเนื่อง
Breathing Effect: ใช้ sine waveform บวก PWM
DMX Mapping: Channel 1–3 = RGB ของดวงที่ 1
ที่นี่เรากำลังขับ “Pixel LED” เหมือนในป้าย LED Billboard
STM32 (เช่น F103, F401, G0, F4 series)
WS2812 หรือ SK6812
Level Shifter 3.3V → 5V (เช่น 74AHCT125)
Power Supply 5V (คำนวณกระแส 60mA × จำนวนหลอด)
Capacitor 1000 µF / 6.3V ที่ขาไฟเพื่อกันสัญญาณกระชาก
แนวคิด การประยุกต์
Pattern + Timing เอฟเฟกต์ไฟไล่แสง
PWM + DMA ควบคุมสีแบบลื่นไหล
WS2812 ระบบไฟพิกเซล
DMX Mapping เชื่อมกับคอนโทรลเลอร์ภายนอก
Art-Net / WiFi ควบคุมผ่านเครือข่าย
“Rainbow Wave” → สีวิ่งวนรอบสายไฟ
“Knight Rider RGB” → แสงวิ่งไปกลับ
“Breathing Color” → ค่อย ๆ เปลี่ยนโทนสีไปเรื่อย ๆ
“วันนี้เราไม่ได้แค่ควบคุมไฟ — เรากำลังควบคุมข้อมูลที่กลายเป็นแสง”
และนี่คือจุดเริ่มต้นของระบบ DMX Pixel, Art-Net, และ LED Display ที่ใช้หลักเดียวกัน
ตอนหน้า เราจะเชื่อม “ข้อมูลแสง” เข้ากับ DMX512
เพื่อควบคุมไฟจากภายนอก — และทำให้ STM32 ของเรากลายเป็น DMX Controller ตัวจริง!
หัวข้อ สิ่งที่ได้เรียนรู้
WS2812 Structure เข้าใจหลักการไฟดิจิทัล
Data Timing การส่งสัญญาณระดับไมโครวินาที
DMA + Timer พื้นฐานระบบส่งข้อมูลความเร็วสูง
RGB Pattern ออกแบบเอฟเฟกต์ไฟ
Next Step เชื่อมกับ DMX512 / Art-Net