โมดูล 1/5 · สัปดาห์ 1–3 · 27 ชม.

สถาปัตยกรรม MCU

UAT 204 ไมโครคอนโทรลเลอร์และระบบสมองกลฝังตัว

เวลาเรียนประมาณ 80 นาทีร่าง รอตรวจปรับปรุงล่าสุด 27 กันยายน 2569

บทเรียน

เมื่อเรียนจบโมดูลนี้ ผู้เรียนจะสามารถ

  1. อธิบายส่วนประกอบของไมโครคอนโทรลเลอร์ ได้แก่ CPU หน่วยความจำ บัส และอุปกรณ์รอบข้าง
  2. เปรียบเทียบไมโครคอนโทรลเลอร์ในตัวควบคุมการบิน Pixhawk 6X กับบอร์ด Pico 2 และ ESP32-S3
  3. คำนวณความละเอียดของ ADC และแปลงค่าดิจิทัลกลับเป็นแรงดัน
  4. ออกแบบวงจรแบ่งแรงดันเพื่อวัดแรงดันแบตเตอรี่ด้วย ADC

ความรู้พื้นฐานที่ควรมี: UAT 103 (ไฟฟ้าและอิเล็กทรอนิกส์) และ UAT 104 (การเขียนโปรแกรม)

ทำไมต้องรู้

ในโดรนหนึ่งลำมีคอมพิวเตอร์ขนาดเล็กอยู่หลายตัว ตัวควบคุมการบิน ESC ทุกตัว GPS และแม้แต่แบตเตอรี่อัจฉริยะบางรุ่นก็มี ไมโครคอนโทรลเลอร์ (MCU) ของตัวเอง MCU คือคอมพิวเตอร์ทั้งเครื่องที่ย่ออยู่ในชิปเดียว ทั้ง CPU หน่วยความจำ และวงจรเชื่อมต่ออุปกรณ์ ถูกออกแบบให้ทำงานเฉพาะอย่างได้แน่นอนตามเวลา ใช้ไฟน้อย และราคาถูก ต่างจากคอมพิวเตอร์ทั่วไปที่ทำได้หลายอย่างแต่ไม่รับประกันเวลา

ทั้งวิชาใช้กรณีสมมติเดียว: สร้างโมดูลเซนเซอร์เสริมสำหรับโดรน บนบอร์ด Raspberry Pi Pico 2 ที่อ่านเซนเซอร์ วัดแรงดัน สั่ง servo และส่งข้อมูลให้ตัวควบคุมการบิน โค้ด Python ของทุกโมดูลดาวน์โหลดได้ที่ /downloads/uat-204/

ภายในไมโครคอนโทรลเลอร์

กรอบชิปไมโครคอนโทรลเลอร์ ด้านซ้ายมีแกน CPU Cortex-M, Flash และ SRAM ต่อเข้าบัสตรงกลาง บัสต่อไปยังอุปกรณ์รอบข้างหกกลุ่ม GPIO, Timer และ PWM, ADC, UART I2C SPI, CAN และ DMA กับ interrupt
ภาพที่ 1 ส่วนประกอบภายในไมโครคอนโทรลเลอร์
  • แกน CPU ประมวลผลคำสั่ง MCU ในงานโดรนส่วนมากใช้แกนตระกูล Arm Cortex-M
  • Flash เก็บโปรแกรมและค่าคงที่ ข้อมูลไม่หายเมื่อปิดไฟ
  • SRAM เก็บตัวแปรระหว่างทำงาน หายเมื่อปิดไฟ
  • บัส เส้นทางข้อมูลเชื่อมทุกส่วน
  • อุปกรณ์รอบข้าง (peripheral) วงจรในชิปที่ทำงานเฉพาะ เช่น GPIO (ขาเข้าออกดิจิทัล) timer ADC (แปลงแอนะล็อกเป็นดิจิทัล) และวงจรสื่อสาร ทำงานไปพร้อมกับ CPU ได้

MCU ในงานโดรน

ตัวประมวลผลหลัก FMU STM32H753 Cortex-M7 480 MHz flash 2 MB RAM 1 MB เชื่อมสองทางกับตัวประมวลผล IO STM32F100 24 MHz ตัวประมวลผลหลักต่อกับ IMU บารอมิเตอร์ เข็มทิศ ผ่าน SPI I2C และ GPS telemetry ผ่าน UART และ DroneCAN ผ่าน CAN ตัวประมวลผล IO ต่อกับเอาต์พุต PWM และอินพุตวิทยุบังคับ
ภาพที่ 2 ตัวประมวลผลสองตัวใน Pixhawk 6X
บอร์ดMCUจุดเด่น
Pixhawk 6X (ตัวควบคุมการบิน)STM32H753 Cortex-M7 480 MHz, flash 2 MB, RAM 1 MB และตัวประมวลผล IO STM32F100แยกงานเอาต์พุตไปตัวประมวลผลที่สอง
Raspberry Pi Pico 2 (ห้องปฏิบัติการ)RP2350 Cortex-M33 สองแกน (หรือ RISC-V) 150 MHz, SRAM 520 KBราคาถูก ADC 12 บิต PWM 16 ช่อง
ESP32-S3Xtensa LX7 สองแกน 240 MHz, SRAM 512 KBมี Wi-Fi และ Bluetooth ในตัว

ตัวเลขทั้งหมดมาจากเอกสารของ PX4 Raspberry Pi และ Espressif ตัวควบคุมการบินใช้ MCU ที่เร็วกว่าและมีหน่วยความจำมากกว่า เพราะต้องประมาณสถานะและควบคุมท่าทางหลายร้อยครั้งต่อวินาที

ADC: จากแรงดันเป็นตัวเลข

ADC (analog-to-digital converter) แปลงแรงดันเป็นจำนวนเต็ม ADC ขนาด บิตแบ่งช่วง 0 ถึง เป็น ขั้น แต่ละขั้นเรียกว่า LSB RP2350 มี ADC 12 บิต จึงมี 4,096 ขั้น

ขา ADC รับแรงดันได้ไม่เกินแรงดันอ้างอิงของชิป (ประมาณ 3.3 V) แต่แบตเตอรี่ 6S มีแรงดันถึง 25.2 V จึงต้องลดแรงดันด้วย วงจรแบ่งแรงดัน ก่อน

ตัวอย่างที่ 1 วัดแรงดันแบตเตอรี่ 6S ด้วย ADC 12 บิต

ตัวต้านทาน kΩ และ kΩ แรงดันอ้างอิง 3.3 V

vref, bits = 3.3, 12
lsb = vref / 2 ** bits
r1, r2 = 100_000, 10_000
ratio = r2 / (r1 + r2)
print(f"LSB = {lsb * 1000:.3f} mV at the pin = {lsb / ratio * 1000:.2f} mV of battery voltage")
for v_batt in (25.2, 22.2, 19.8):
    v_pin = v_batt * ratio
    code = round(v_pin / lsb)
    print(f"battery {v_batt:5.1f} V -> pin {v_pin:.3f} V -> code {code:4d} -> read back {code * lsb / ratio:.3f} V")
LSB = 0.806 mV at the pin = 8.86 mV of battery voltage
battery  25.2 V -> pin 2.291 V -> code 2844 -> read back 25.204 V
battery  22.2 V -> pin 2.018 V -> code 2505 -> read back 22.200 V
battery  19.8 V -> pin 1.800 V -> code 2234 -> read back 19.798 V

แบตเตอรี่เต็ม 25.2 V ทำให้ขาได้ประมาณ 2.29 V ต่ำกว่า 3.3 V จึงปลอดภัย แต่ละขั้นของ ADC เท่ากับประมาณ 8.9 mV ของแรงดันแบตเตอรี่ ความแม่นยำจริงยังขึ้นกับความคลาดเคลื่อนของตัวต้านทาน สัญญาณรบกวน และความแม่นยำของแรงดันอ้างอิง จึงต้องสอบเทียบกับมัลติมิเตอร์เหมือนใน UAT 321

ปฏิบัติการประจำโมดูล

ปฏิบัติการ: รู้จักบอร์ด Pico 2

  1. อ่าน pinout ของ Pico 2 ระบุขา GPIO ขา ADC ขาไฟ 3.3 V และกราวด์
  2. ติดตั้งเครื่องมือเขียนโปรแกรม (MicroPython หรือ C/C++ SDK ตามที่อาจารย์กำหนด) แล้วเขียนโปรแกรมกะพริบ LED
  3. ต่อวงจรแบ่งแรงดันบนเบรดบอร์ด ใช้แหล่งจ่ายปรับได้แทนแบตเตอรี่ (ไม่เกินค่าที่คำนวณว่าปลอดภัย) อ่านค่า ADC ที่แรงดันสามค่า
  4. เทียบค่าที่อ่านกับโค้ดตัวอย่างที่ 1 และกับมัลติมิเตอร์ หาค่าคูณสอบเทียบ
  5. เปิดหน้า Pixhawk 6X ในเอกสาร PX4 ระบุว่าเซนเซอร์และพอร์ตแต่ละชนิดต่อกับตัวประมวลผลใด

ข้อผิดพลาดที่พบบ่อย

ระวัง

  • ต่อแรงดันเกิน 3.3 V เข้าขา ADC หรือ GPIO ชิปอาจเสียทันที
  • ลืมต่อกราวด์ร่วม ระหว่างวงจรวัดกับ MCU
  • เชื่อค่า ADC โดยไม่สอบเทียบ
  • เลือก MCU จากความเร็ว CPU อย่างเดียว โดยไม่ดูอุปกรณ์รอบข้างที่ต้องใช้
  • คิดว่าข้อมูลใน SRAM ยังอยู่หลังปิดไฟ

สรุป

  • MCU รวม CPU หน่วยความจำ บัส และอุปกรณ์รอบข้างไว้ในชิปเดียว ทำงานเฉพาะอย่างได้แน่นอนตามเวลา
  • Pixhawk 6X ใช้ STM32H753 เป็นตัวประมวลผลหลักและ STM32F100 เป็นตัวประมวลผล IO
  • ADC บิตแบ่งช่วงแรงดันเป็น ขั้น
  • วัดแรงดันสูงด้วยวงจรแบ่งแรงดัน และต้องสอบเทียบ

แบบฝึกตรวจความเข้าใจ

  1. ADC 10 บิต แรงดันอ้างอิง 3.3 V มีความละเอียดกี่ mV
  2. วงจรแบ่งแรงดัน kΩ, kΩ แรงดันเข้า 16.8 V ขาได้กี่ V
  3. ADC 12 บิตอ่านได้ 2048 แรงดันอ้างอิง 3.3 V แรงดันที่ขาเท่าใด
  4. ข้อมูลใดหายเมื่อปิดไฟ ระหว่าง Flash กับ SRAM
  5. ตัวประมวลผลหลักของ Pixhawk 6X ใช้ MCU รุ่นใด
เฉลย
  1. mV
  2. V
  3. V
  4. SRAM
  5. STM32H753 (Cortex-M7 480 MHz)

สรุปสูตรสำคัญ

ความละเอียดของ ADC
วงจรแบ่งแรงดัน

แหล่งอ้างอิงหลัก

  1. White, E. (2024). Making embedded systems: Design patterns for great software (2nd ed.). O'Reilly Media.
  2. PX4 Autopilot. Holybro Pixhawk 6X. PX4 user guide. link
  3. Raspberry Pi Ltd. Raspberry Pi Pico 2. link
  4. Raspberry Pi Ltd. RP2350 datasheet. link
  5. Espressif Systems. ESP32-S3. link

อ่านเพิ่มเติม

ศึกษาหน่วยความรู้ที่กำหนดล่วงหน้า ดูสื่อประกอบ และทำ quiz ประจำโมดูล

ในชั้นเรียน / ภาคสนาม

ปฏิบัติการในห้องแล็บหรือภาคสนามตามใบงาน พร้อม checklist ความปลอดภัย

หลักฐานการเรียนรู้: ใบงานที่ผ่านการตรวจและผล quiz

แบบทดสอบประจำโมดูล

แบบทดสอบนี้ใช้ตรวจความเข้าใจ (formative) ไม่ใช่การสอบเก็บคะแนน

โดเมนความรู้: เซนเซอร์และระบบสมองกลฝังตัว