ตอนที่ 4 วงจรไฟกระพริบ (Stm32)

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

Related Articles

Free Joomla templates by Ltheme