ESP32-S3 • DOOM • PAL TV • RF • Retro Hardware
ESP32-S3 ยัดคอนโซล DOOM ลงในปลั๊กเสาอากาศทีวีได้อย่างไร
ESP32-S3 ไม่มี Video DAC เร็วแบบที่งาน PAL อยากได้ ไม่มี Generic PLL ให้หยิบมาใช้ตรง ๆ และพื้นที่ในตัวเครื่องก็แทบไม่มี แต่ RayTriangle กลับเอาข้อจำกัดทั้งหมดนี้มารวมกัน แล้วสร้าง Game Console ที่เล่น DOOM ได้ โดยยัด ESP32-S3, แบตเตอรี่, วงจร Video, RF และ PCB ลงในปลั๊กเสาอากาศทีวีขนาดเล็ก
สิ่งที่น่าสนใจไม่ใช่แค่ “DOOM รันบน ESP32” เพราะ Project นี้ไปไกลกว่านั้นมาก: มันสังเคราะห์ PAL Composite Video ด้วย Software, สร้าง DAC จาก Resistor, Modulate ภาพและเสียงขึ้น VHF แล้วส่งตรงเข้า Antenna Input ของทีวีแบบเดียวกับระบบ Analog รุ่นเก่า
และแม้ชื่อ Project จะท้าทายว่าเป็น “world’s smallest game console” ผู้สร้างเองก็เปิดไว้ว่าแนวคิดนี้เป็น Challenge และยังอาจมีคนทำให้เล็กกว่านี้ได้อีก
- Main Controller คือ ESP32-S3
- Input ใช้ Xbox Series X Controller ผ่าน Bluetooth Low Energy
- Final Design ต่อเข้าช่องเสาอากาศทีวี ไม่ใช่ RCA Composite โดยตรง
- สร้าง PAL Composite Signal จาก ESP32-S3 RGB LCD Peripheral
- Prototype แรกใช้ 4-resistor DAC และเล่น DOOM ได้ แต่มีเพียง 16 Voltage Levels
- Final Design เปลี่ยนเป็น 8-bit R-2R DAC
- Pixel Rendering ใช้ Lookup Table ขนาด 8KB เพื่อลดการคำนวณแบบ Real-time
- RF Carrier สร้างจาก I2S MCLK โดยหาร 240MHz ลงมาใกล้ 48MHz
- เสียง FM ถูกสร้างด้วย Bit Pattern ผ่าน I²S แทนการ Output PCM แบบปกติ
- Hardware สุดท้ายใช้ PCB สองแผ่นเชื่อมกันด้วย FPC เพื่อยัดลงในพื้นที่จำกัด
คอนโซลต้องเล็กแค่ไหน ถึงเรียกว่า “เล็กสุด”?
RayTriangle เริ่มจากกำหนดก่อนว่า “Video Game Console” ต้องยังมีองค์ประกอบพื้นฐานพอให้เล่นได้จริง
- ต้องมี Video Output
- ต้องมี Human Input
- ควรมี Sound
- และสำหรับ Project นี้ ต้องเล่น DOOM ได้
ผู้สร้างไม่เลือกแนว Handheld เพราะถ้าย่อทั้งจอและ Controller ไปพร้อมกัน Usability จะกลายเป็นข้อจำกัดทันที
จึงเปลี่ยนโจทย์เป็น: Home Console ขนาดเล็กมากที่เสียบเข้าทีวี และไม่นับขนาดของ Xbox Gamepad เข้าเป็นขนาดตัว Console
ทำไมเลือก ESP32-S3?
RayTriangle เลือก ESP32-S3 เพราะได้หลายอย่างใน Chip เดียว:
- Compute เพียงพอสำหรับ Project
- ขนาดเล็ก
- ต้นทุนไม่สูง
- ใช้พลังงานจากแบตเตอรี่ได้
- มี Bluetooth Low Energy
- มี Wi-Fi
แต่ในเวลาเดียวกัน ESP32-S3 ก็ขาด Peripheral บางอย่าง ที่ถ้าจะทำ Analog TV แบบตรงไปตรงมาแล้วน่าจะสะดวกกว่า เช่น:
- Generic PLL ที่หยิบมาใช้ตามใจ
- Generic DMA-capable Parallel Port
- Fast DAC ที่เหมาะกับ Video Output
จาก RCA Plug ทำไมต้องย้ายไป Antenna Plug?
แนวคิดแรกคือยัด Console ทั้งหมดลงใน: RCA Plug แล้วส่ง Composite Video ตรงเข้าทีวี
แต่เจอปัญหาหลักสองข้อ
1. Power
RCA Video ไม่ได้จ่ายไฟ จึงต้องมีแบตเตอรี่อยู่ใน Plug
ผู้สร้างทดลองพิจารณา Li-ion Cell เส้นผ่านศูนย์กลางราว 8.5 mm แบบที่พบในหูฟังไร้สาย แต่ Cell ขนาดนี้มีทั้ง Capacity ต่ำ และจ่ายกระแสไม่พอสำหรับระบบที่ใน Prototype ใช้ประมาณ: 120 mA เมื่อเปิด BLE
2. Audio
RCA Composite เส้นเดียวส่ง Video แต่ไม่พาเสียงไปด้วย
การเพิ่ม Speaker, Connector เพิ่ม หรือแยก Bluetooth Audio จะทำให้ Project ซับซ้อนขึ้นและกินพื้นที่
ผู้สร้างจึงถอยกลับไปใช้เทคโนโลยีเก่ากว่า: RF Modulation เข้า Antenna Input
ดูของจริง: DOOM เล่นผ่านช่องเสาอากาศทีวี
Video ของผู้สร้างแสดงให้เห็นว่า Console สามารถส่งภาพเกมผ่าน RF เข้า TV Tuner และเล่นด้วย Gamepad ได้จริง
Architecture ของ Console จิ๋วตัวนี้
ส่ง Input ผ่าน Bluetooth Low Energy
รันเกม + สร้าง Video Timing + Audio/RF Data
Scan Video Data ออกสู่ Resistor DAC
แปลง Digital Levels เป็น Analog Composite
Modulate Composite ไปบน Carrier ใกล้ PAL B/G Channel 2
ทีวีรับสัญญาณเหมือนระบบ Analog VHF
ESP32-S3 ไม่มี Video DAC เร็วพอ แล้วสร้าง PAL Composite ได้ยังไง?
PAL Composite ไม่ได้มีแค่ “ค่าความสว่างของ Pixel” แต่ต้องประกอบด้วยหลายส่วน เช่น:
- Horizontal Synchronization
- Blanking / Porch
- Luma หรือความสว่าง
- Chroma หรือข้อมูลสี
- Color Burst
- PAL Phase Alternation ระหว่างบรรทัด
Source ระบุว่าการสร้าง PAL Color ต้องมี Bandwidth ราว: 6 MHz เป็นอย่างน้อยในบริบทของระบบนี้
ESP32-S3 ไม่มี Fast Analog DAC ที่เหมาะกับการส่ง Waveform นี้โดยตรง ผู้สร้างจึงใช้: RGB LCD Output Peripheral
แม้ Peripheral นี้ถูกสร้างมาเพื่อขับ Display แต่สามารถใช้เป็น Parallel Digital Stream แล้วให้ DMA ส่งข้อมูลต่อเนื่องออกตาม Timing ที่ผู้สร้างจัดไว้เอง
4-resistor DAC: Prototype ที่เล่น DOOM ได้จริง
Prototype แรกพยายามลดจำนวน Component ให้มากที่สุด จึงใช้ Resistor เพียง 4 ตัว โดยแต่ละตัวมีค่าต่างกัน แทนที่จะใช้ R-2R Ladder แบบมาตรฐาน
เป้าหมายของ Calculation คือให้ Output มีช่วงประมาณ: 1V เมื่อเจอ: 75Ω Termination
| Bit | Target Voltage Contribution | Calculated Resistance |
|---|---|---|
| U0 | 0.066V | 2587.5Ω |
| U1 | 0.133V | 1293.75Ω |
| U2 | 0.266V | 646.875Ω |
| U3 | 0.533V | 323.4375Ω |
Output Impedance ที่คำนวณได้ประมาณ: 172.5Ω ซึ่งห่างจาก 75Ω ที่ต้องการพอสมควร
ถึงอย่างนั้น Topology นี้ก็: สร้างภาพที่เล่น DOOM ได้จริง
ปัญหาคือ 4-bit Output มีเพียง: 16 Voltage Levels ทำให้ Color Resolution ต่ำ และผู้สร้างสังเกตเห็น Color Distortion
ทำไม Final Design เปลี่ยนเป็น 8-bit R-2R?
ใน Final PCB ผู้สร้างเปลี่ยนไปใช้: 8-bit R-2R DAC
เหตุผลหลักคือ:
- หา Precision Resistor ในค่าทั่วไปได้ง่ายกว่า
- พื้นที่บน Final PCB ยังเพียงพอ
- Bit ที่เพิ่มช่วยให้ Calibration Non-linearity ของ RF Mixer ได้ละเอียดขึ้น
ผู้สร้างใช้:
- SDR
- TinySA
วัด RF Output แล้วนำผลไปปรับ Calibration Lookup Table เพื่อชดเชย Non-linearity ของ Analog Output Chain
PAL Color ถูกสร้างจาก Lookup Table ยังไง?
การสร้าง PAL แบบ Real-time ด้วย MCU เล็ก ๆ จะหนักมาก ถ้าต้องคำนวณ Luma, Chroma, Phase และ Waveform ทุก Pixel ใหม่ทั้งหมด
Trick ของ Project คือ: Precompute Waveform ไว้ก่อน
Source ระบุว่า:
- เก็บ 4 Samples ต่อหนึ่ง Chroma Cycle ต่อ Color
- มี Line-dependent Variant 4 แบบจาก PAL Phase Alternation
- ใช้ 2 Luma Pixels ต่อหนึ่ง Chroma Cycle / Pixel ในระบบนี้
- Luma + Chroma ผ่าน Calibration Curve ก่อนออก DAC
เพื่อไม่ต้องทำ Double Memory Lookup ผู้สร้างรวมข้อมูลทั้งหมดเป็น Table เดียว ขนาด: 8KB
Index ของ Table อิงจาก:
- Color Index
- Line Counter Variant
- Luma Value
หลังได้ข้อมูลของทั้ง Line ระบบจะเขียนลง Buffer แล้วให้ DMA Scan ออกตาม Timing ผ่าน LCD Peripheral
จาก Composite สู่ VHF RF Carrier
Composite Video อย่างเดียว ยังเสียบเข้าช่อง Antenna ของทีวีไม่ได้ จึงต้องถูก Modulate ขึ้น Carrier Frequency
ESP32-S3 ไม่มี Generic PLL ที่ว่างสำหรับงานนี้ ผู้สร้างจึงหยิบ: I2S MCLK มาใช้เป็น Clock Output แทน
System Clock: 240 MHz
หารด้วย: 5
ได้ Carrier ใกล้: 48 MHz
ซึ่งอยู่ใกล้กับ: 48.25 MHz ของ PAL B/G Channel 2 ตาม Source
Mixer สอง Transistor: ภาพนิ่งขึ้น แต่ทำไมมืดลง?
ผู้สร้างทดลอง Mixer แบบง่ายหลายแบบ รวมถึง Single-diode Design ซึ่งใช้งานกับ Receiver ได้ แต่มีความไวต่อการจัดวางบน Protoboard
Final Design จึงขยับมาใช้: Two-transistor Mixer พร้อม Filtering
ผลที่ได้ตาม Source:
- Color ดีขึ้น
- ภาพ Stable ขึ้น
- Linearity ดีขึ้น
แต่แลกกับ:
- Modulation Depth ลดลง
- Contrast ต่ำลง
- ภาพออกมาค่อนข้างมืด
เนื่องจาก PAL-B ใช้ Negative Modulation ซึ่งความสัมพันธ์ระหว่าง Carrier Amplitude กับ Brightness แตกต่างจากการตีความแบบตรงไปตรงมา
เสียง FM ถูกสร้างด้วย I²S ยังไง?
จุดที่น่าสนใจคือ I²S ใน Project นี้ ไม่ได้ถูกใช้ส่ง PCM Audio ตามปกติ
ผู้สร้างใช้มันยิง: Bit Pattern ที่มี Average Switching Frequency ตาม Frequency ที่ต้องการ
แนวคิดคล้าย Video: Precompute Bit Sequence ไว้ใน Lookup Table ตาม:
- Frequency
- Phase Offset
แล้ว Track Phase ต่อเนื่อง ระหว่าง Sequence เพื่อให้สัญญาณต่อกัน
Xbox Controller คุยกับ ESP32-S3 ยังไง?
Input ใช้: Xbox Series X Controller
เชื่อมผ่าน: Bluetooth Low Energy
Source ย้ำว่า ESP32-S3 มี BLE แต่ไม่มี Classic Bluetooth ในบริบทของ Project นี้
ผู้สร้างยังต้องออกแบบ Antenna ให้พอดีกับพื้นที่เล็กมาก และ Enclosure ที่ต้อง Shield RF ส่วนอื่น
หลังทดลองหลายแบบ Wire Antenna ที่ทำเองกลับทำงานดีกว่า PCB Antenna ขนาดเล็กที่ทดลองใน Prototype
Final Build ต้องการ BLE Range เพียง: ไม่กี่เมตร สำหรับ Gamepad
Wi-Fi ยังมีประโยชน์อีกด้าน เพราะผู้สร้างกล่าวถึง Bootloader ที่สามารถ Download Game Image แบบ OTA ได้
ยัดทุกอย่างด้วย PCB Sandwich + FPC
ถ้าใช้ PCB แผ่นเดียว รูปทรงภายใน Plug จะใช้พื้นที่ได้ไม่เต็มที่ ผู้สร้างจึงวาง Hardware เป็น:
PCB สองแผ่น + FPC Interconnect
แนวคิด Single-piece Rigid-flex เคยถูกพิจารณา แต่ Source ระบุว่าต้นทุนสูงกว่า จึงใช้ Separate Boards แล้วเชื่อมด้วย Flex แทน
แต่ Flex Board กลายเป็นงานยากที่สุดส่วนหนึ่ง
นี่เป็นครั้งแรกที่ผู้สร้างออกแบบ Flex Board และพบปัญหา:
- Trace ฉีกหลายครั้งระหว่าง Assembly
- Power Trace หนากว่า Signal Trace มาก ทำให้ Copper Area ไม่สมดุล
- Hand-solder Board-to-board ทำได้ยาก
สิ่งที่ผู้สร้างมองย้อนกลับไปว่า น่าจะช่วยได้คือ:
- ทำ Trace Width ให้สมดุลขึ้น
- เพิ่ม Via เพื่อช่วยถ่าย Heat ระหว่าง Hand Solder
Project นี้สอนอะไรเรื่อง Miniaturization?
ถ้ามองผิวเผิน Project นี้เหมือนการแข่งขันว่า “ใครยัด DOOM ลงของเล็กกว่า” แต่รายละเอียดข้างในกลับสะท้อน Engineering หลายเรื่อง
1. Peripheral ไม่จำเป็นต้องใช้ตามชื่อเสมอ
LCD Peripheral ถูกใช้สร้าง Analog TV Data, I²S ถูกใช้ทั้งเป็น Clock Source และสร้าง Pattern สำหรับเสียง
2. Lookup Table แลก Memory กับ Compute
แทนคำนวณ PAL Waveform ทุก Pixel ผู้สร้างใช้ Precomputed Data เพื่อให้ Timing อยู่ในขอบเขตที่ MCU จัดการได้
3. Prototype ที่ “ใช้ได้” ไม่จำเป็นต้องเป็น Final Architecture
4-resistor DAC เล่น DOOM ได้ แต่ Final Design ยังต้องเปลี่ยนเป็น R-2R เพื่อปรับคุณภาพและ Calibration
4. การย่อ Hardware เป็นปัญหา Mechanical ด้วย
Flex Trace ที่ขาด และความยากตอน Solder แสดงให้เห็นว่า Miniaturization ไม่ได้จบที่ลดจำนวน Component บน Schematic
5. Analog ยังไม่หายไปไหน
แม้ Compute ทั้งหมดเป็น MCU สมัยใหม่ แต่สุดท้าย Project ยังต้องกลับไปจัดการ:
- Impedance
- DAC Linearity
- Mixing
- Filtering
- Modulation
- RF Leakage
RF และ Battery Safety
โปรเจกต์นี้มีหลายขั้น แนะนำอ่านต้นฉบับควบคู่กัน
รายละเอียดของ Project ครอบคลุมทั้ง PAL Timing, Resistor DAC, RF Mixer, FM Audio, BLE, Antenna Design, PCB/FPC และ Mechanical Assembly จึงควรอ่านบทความต้นฉบับของ RayTriangle หากต้องการตามแนวคิดของผู้สร้างแบบเต็ม
FAQ: คำถามที่พบบ่อย
1. Project นี้คืออะไร?
เป็น Game Console ขนาดเล็กมาก ที่ใช้ ESP32-S3 และยัด Hardware ลงในปลั๊กเสาอากาศทีวี โดยมีเป้าหมายให้ยังเล่น DOOM ได้จริง
2. ใช้ MCU รุ่นไหน?
ESP32-S3
3. เล่น DOOM ได้จริงไหม?
ได้ Source และ Video ของผู้สร้าง แสดงการเล่น DOOM ผ่านทีวีจริง
4. ทำไมไม่ใช้ RCA Composite ตรง ๆ?
แนวคิด RCA มีปัญหาทั้งเรื่อง Power และการส่ง Audio จึงเปลี่ยนไปใช้ Antenna Plug พร้อม RF Modulation
5. ทำไมเลือกปลั๊กเสาอากาศ?
มีพื้นที่เพียงพอสำหรับ PCB และ Battery และสามารถส่งภาพกับเสียง ผ่าน RF เข้า TV Tuner ได้ใน Connector เดียว
6. Controller ใช้อะไร?
Xbox Series X Controller ผ่าน Bluetooth Low Energy
7. ESP32-S3 ใช้ Bluetooth Classic หรือไม่?
Source ระบุว่า ESP32-S3 มี Bluetooth Low Energy และไม่มี Regular Bluetooth ในบริบทของ Project นี้
8. Video เป็น HDMI หรือไม่?
ไม่ Final Project ใช้ PAL Analog TV และ Modulate ขึ้น RF สำหรับช่อง Antenna ของทีวี
9. ใช้มาตรฐาน PAL แบบไหน?
Source อ้างถึง PAL B/G และ Channel 2 ที่ 48.25 MHz ในส่วนของ RF Carrier
10. 4-resistor DAC ใช้ได้จริงไหม?
ใช้ได้ใน Prototype และผู้สร้างระบุว่าสามารถเล่น DOOM ได้ แต่มีเพียง 16 Voltage Levels และมี Color Distortion
11. ทำไม Final เปลี่ยนเป็น 8-bit R-2R?
เพราะหา Precision Resistor Value ได้ง่ายกว่า และ Bit ที่เพิ่มช่วยให้ Calibration Non-linearity ของ Mixer ละเอียดขึ้น
12. Lookup Table มีขนาดเท่าไร?
Source ระบุ 8KB สำหรับ Combined Pixel Rendering Lookup
13. RF Carrier สร้างจากอะไร?
ผู้สร้างใช้ I2S MCLK จาก ESP32-S3 เป็น Clock Source
14. ทำไม Carrier อยู่ราว 48MHz?
Source ใช้ 240MHz System Clock หาร 5 ได้ประมาณ 48MHz ซึ่งใกล้ PAL B/G Channel 2 ที่ 48.25MHz
15. เสียงถูกสร้างยังไง?
ใช้ I²S ส่ง Bit Pattern ที่มี Average Switching Frequency ตามที่ต้องการ พร้อม Lookup Table สำหรับ Frequency และ Phase Offset
16. เสียงคุณภาพดีไหม?
ไม่มากนัก ผู้สร้างระบุว่า Audio ค่อนข้าง Noisy และยัง Leak เข้า Video แม้มี Filtering
17. Hardware ทั้งหมดอยู่ใน Plug ได้ยังไง?
Final Design ใช้ PCB สองแผ่น เชื่อมด้วย FPC เพื่อใช้ Volume ภายใน Plug ให้คุ้มที่สุด
18. Battery อยู่ได้นานแค่ไหน?
Source ไม่ได้ระบุ Final Battery Runtime
19. รองรับ NTSC ไหม?
Build ที่ Source ยืนยันใช้ PAL ส่วน Hackaday เพียงเสนอเชิงคาดการณ์ ว่าแนวคิดอาจดัดแปลงไป NTSC ได้ จึงไม่ควรถือว่า NTSC รองรับแล้ว
20. ใช้ UHF ได้ไหม?
Final Build ที่ Source อธิบายใช้ VHF และ Hackaday เพียงคาดการณ์ว่า UHF อาจดัดแปลงได้ Source ไม่ได้ยืนยัน UHF Build
References / แหล่งข้อมูลต้นฉบับ
ของเล็กไม่ได้แปลว่าวงจรง่าย
Console ตัวนี้อาจมีขนาดแค่ปลั๊กเสาอากาศ แต่ข้างในต้องแก้โจทย์ตั้งแต่ ESP32-S3, Analog Video, DAC, RF, BLE, PCB, Flex Interconnect ไปจนถึง Mechanical Packaging
หากกำลังทำ ESP32, Embedded Hardware, Wireless หรือ Maker Project สามารถสอบถามทีม Globalbyte เรื่อง Development Board, Module และอุปกรณ์ที่เหมาะกับ Project ได้