01076051Lecture 01

Introduction to Embedded Systems

บทที่ 1: แนะนำระบบฝังตัว (Embedded Systems)

รอบตัวเราเต็มไปด้วยคอมพิวเตอร์ที่เรา “มองไม่เห็น” ซ่อนอยู่ในหม้อหุงข้าว เครื่องซักผ้า รถยนต์ และนาฬิกาอัจฉริยะ. บทนี้พาไปรู้จักว่า “ระบบฝังตัว” คืออะไร ต่างจากคอมพิวเตอร์ทั่วไปอย่างไร และทำไมหัวใจของมันคือ microcontroller.

ผลการเรียนรู้ (Learning Outcomes)

  • อธิบายความหมาย microprocessor / microcontroller / embedded system และความต่าง
  • อธิบายหลักการทำงานระบบฝังตัว (dedicated purpose, hidden computer, input→process→output)
  • แยก open-loop vs closed-loop control พร้อมตัวอย่าง
  • อธิบายภาพรวมกระบวนการพัฒนา (C → compile → machine code → download ลง flash)
  • ระบุองค์ประกอบบอร์ด NUCLEO-F767ZI และเครื่องมือพัฒนา (CubeMX/CubeIDE)

§1.1 ระบบฝังตัวคืออะไร

ระบบฝังตัว (Embedded System) คืออุปกรณ์ที่มีคอมพิวเตอร์ซ่อนอยู่ข้างในเพื่อควบคุมการทำงาน แต่ไม่ได้ถูกสร้างมาเพื่อเป็นคอมพิวเตอร์ที่ใช้ประมวลผลงานทั่วไปอย่างเครื่องตั้งโต๊ะหรือโน้ตบุ๊ก.

ระบบฝังตัวมีลักษณะเด่น 3 อย่าง. หนึ่ง คือทำงานเฉพาะทาง (dedicated purpose) ออกแบบมาเพื่อทำงานหนึ่งอย่างให้ดี เช่น หม้อหุงข้าวก็หุงข้าว ไม่ได้เอาไว้เล่นเกม. สอง คืออยู่รอบตัวเราไปหมดแต่มองไม่เห็น (ubiquitous / invisible) เราใช้มันทุกวันโดยไม่รู้ตัว. สาม คือมีคอมพิวเตอร์ซ่อนอยู่ภายใน (hidden computer inside) ตัวประมวลผลถูกฝังไว้ในอุปกรณ์จนเรานึกไม่ถึง.

ลองเทียบของใช้รุ่นธรรมดากับรุ่นที่มีคอมพิวเตอร์ฝังตัว. รุ่นธรรมดาใช้กลไกล้วน ๆ เช่น สวิตช์เปิดปิด, timer แบบลานหมุน, หรือ thermostat แบบแผ่นโลหะงอตามอุณหภูมิ. รุ่นที่มีระบบฝังตัวทำได้มากกว่านั้นมาก เช่น ตั้งเวลาล่วงหน้า, มีเมนูให้เลือก, มีจอแสดงผล, และต่อกับแอปบนมือถือได้.

ตัวอย่างระบบฝังตัวในชีวิตจริง: กล่องควบคุมเครื่องยนต์รถยนต์ (ECU), นาฬิกาอัจฉริยะ (smart watch), เครื่องถ่ายเอกสาร, และตู้ขายของอัตโนมัติ (เช่น ตู้เต่าบิน หรือตู้กาแฟ ปตท.).

VIZ-1เครื่องใช้รุ่นธรรมดา vs รุ่นมีคอมพิวเตอร์ฝังตัว
เครื่องซักผ้า (รุ่นพื้นฐาน)
ลาน timer กลไก / สวิตช์
  • เปิด/ปิด และเลือกโหมดพื้นฐาน
  • ตั้งเวลาเริ่มทำงานล่วงหน้า (ไม่มีในรุ่นธรรมดา)
  • เมนูโปรแกรมซักหลายแบบ (ไม่มีในรุ่นธรรมดา)
  • จอแสดงสถานะ (ไม่มีในรุ่นธรรมดา)
  • เชื่อมต่อแอปบนมือถือ (ไม่มีในรุ่นธรรมดา)

รุ่นฝังตัวมี MCU ซ่อนอยู่ภายใน (hidden computer) ทำให้มีฟังก์ชันเพิ่ม เช่น ตั้งเวลา เมนู จอ และต่อแอป.

§1.2 ประวัติระบบฝังตัว

จุดที่น่าสังเกตคือปี 1971 เกิดชิปสำคัญขึ้นพร้อมกันสองตัวที่คิดกันคนละแนวคิด: Intel 4004 ซึ่งเป็น microprocessor และ TI TMS1000 ซึ่งเป็น microcontroller. สองคำนี้ต่างกันอย่างไรจะอธิบายในหัวข้อถัดไป.

ปีเหตุการณ์ความสำคัญ
1961Apollo Guidance Computer (Draper, MIT)ระบบฝังตัวยุคแรก, รายแรกที่ใช้ IC
1965Autonetics D-17Bembedded ผลิตจำนวนมากรายแรก (นำวิถีขีปนาวุธ)
1968VW 1600ยานยนต์รายแรกฝัง embedded (EFI)
1971TI TMS1000microcontroller ตัวแรก (4-bit, ROM+RAM, ~$2, ขาย 1974)
1971Intel 4004microprocessor 4-bit (เครื่องคิดเลข)
1972Intel 80808-bit
1978Intel 808616-bit, เริ่ม x86
1987VxWorks (Wind River)RTOS สำหรับ embedded ตัวแรก
1996Windows Embedded CEOS ฝังตัวจาก Microsoft
ปลาย 1990sEmbedded LinuxLinux สำหรับงานฝังตัว
ไทม์ไลน์เหตุการณ์สำคัญของระบบฝังตัว
VIZ-2ไทม์ไลน์ประวัติระบบฝังตัว
1961Apollo Guidance ComputerMilestone

ระบบฝังตัวยุคแรก, รายแรกที่ใช้ IC

คลิกหมุดเพื่อดูรายละเอียด; ใช้ตัวกรองเพื่อแยก MP / MCU / milestone. สังเกตปี 1971 เกิดทั้ง 4004 และ TMS1000.

§1.3 Microprocessor vs Microcontroller

Microprocessor (ไมโครโปรเซสเซอร์ หรือ MP) คือชิปที่มีเฉพาะหน่วยประมวลผลกลาง (CPU) ซึ่งข้างในมี ALU สำหรับคิดเลข แต่ไม่มีหน่วยความจำและไม่มีพอร์ต I/O ในตัว. ถ้าจะใช้งานจริงจึงต้องต่อหน่วยความจำและชิป I/O ภายนอกเพิ่ม.

ตัวอย่างระบบที่ใช้ microprocessor คือบอร์ด RC2014 ซึ่งใช้ซีพียู Z80 แล้วต้องต่อชิปอื่นมาประกอบ ได้แก่ 62256 เป็น SRAM (หน่วยความจำชั่วคราว), 27C512 เป็น EPROM (เก็บโปรแกรม), และ MC68B50 เป็นชิป UART (สื่อสารอนุกรม). จะเห็นว่าต้องใช้หลายชิปมาต่อกันจึงจะทำงานได้.

Microcontroller (ไมโครคอนโทรลเลอร์ หรือ MCU) คือคอมพิวเตอร์ที่รวมทุกอย่างไว้ในชิปเดียว คือมีทั้งแกนประมวลผล (processor core), หน่วยความจำ (memory), และพอร์ต I/O อยู่ในชิปเดียวกัน. ตัวอย่างเช่น 8051, PIC, ARM7TDMI, ตระกูล Cortex, บอร์ด Arduino และ STM32.

การคิดเลขเกิดที่ ALU ซึ่งทำงานทางคณิตศาสตร์และตรรกะทีละคำสั่ง (instruction). ส่วนโปรแกรมก็คือลำดับของคำสั่งเหล่านี้ที่ CPU ทำตามทีละขั้น.

หัวข้อMicroprocessorMicrocontroller
ในชิปCPU/ALU เท่านั้นCPU+Memory+I/O
หน่วยความจำต่อภายนอกมีในตัว (Flash+RAM)
I/Oต่อ IC เพิ่มมีในตัว (GPIO/ADC/UART)
จำนวน IC บนบอร์ดหลายตัวน้อย (ชิปเดียวพอ)
เหมาะกับงานประมวลผลทั่วไปงานฝังตัวเฉพาะทาง
ตัวอย่างZ80, 4004/80868051, PIC, STM32, Arduino
VIZ-3Microprocessor vs Microcontroller

Microprocessor (RC2014 / Z80)

Z80 CPU
ในชิป
62256 SRAM
ชิปภายนอก
27C512 EPROM
ชิปภายนอก
MC68B50 UART
ชิปภายนอก

CPU 1 ตัว + ชิปภายนอก 3 ตัว บนบอร์ดเดียว

Microcontroller (STM32F767ZI)

ชิปเดียว
Core (CPU/ALU)
Flash
SRAM
GPIO / ADC / UART

CPU + Memory + I/O รวมในชิปเดียว ลดจำนวน IC บนบอร์ด

MP ต้องต่อชิปภายนอกหลายตัว; MCU รวมทุกส่วนไว้ในชิปเดียว. ลองสลับไฮไลต์ และ hover ที่บล็อกเพื่อดูรายละเอียด.

§1.4 Open Loop vs Closed Loop

ระบบควบคุมแบบ open loop (วงเปิด) คือระบบที่ไม่มี feedback หรือไม่มีการวัดค่าผลลัพธ์จริงกลับมาเทียบ. มันอาศัยการ calibrate (ตั้งเทียบ) เซนเซอร์ไว้ล่วงหน้า เช่น การคุมความเร็วมอเตอร์ DC ด้วยการจ่ายแรงดันตามที่คำนวณไว้. ข้อดีคือสร้างง่ายกว่า.

ระบบควบคุมแบบ closed loop (วงปิด) คือระบบที่ใช้เซนเซอร์วัดค่าจริง แล้วนำค่าที่วัดได้ (actual) มาเทียบกับค่าที่ต้องการ (setpoint) เพื่อปรับชดเชยให้เข้าเป้า เช่น การคุมอุณหภูมิเตาอบ. ข้อดีคือแม่นยำกว่า แต่ต้องใช้ MCU ที่แรงกว่าเพราะต้องคำนวณตลอดเวลา.

ลองนึกถึง Segway เป็นตัวอย่าง closed loop: เซนเซอร์ gyroscope แบบ MEMS วัดว่าตัวรถเอียงไปเท่าไร แล้ว MCU ก็สั่งมอเตอร์ให้ชดเชยเพื่อทรงตัวตลอดเวลา. ในสายงานนี้ เซนเซอร์ทำหน้าที่เป็น input ส่วนมอเตอร์ทำหน้าที่เป็น actuator หรือ output.

หัวข้อOpenClosed
Feedbackไม่มีมี
เปรียบเทียบไม่มีsetpoint vs actual
ตัวอย่างมอเตอร์ตามแรงดันอุณหภูมิเตาอบ
ความซับซ้อนง่ายกว่าซับซ้อนกว่า
ความแม่นยำน้อยกว่ามากกว่า
VIZ-4Open Loop vs Closed Loop (อุปมา Segway)
Controller (MCU)→Actuator (มอเตอร์)→Plant (ตัวรถ)
feedback: เซนเซอร์ (gyroscope) → วัดค่าจริง → ย้อนกลับไป controller
setpoint
50
ค่าจริง (actual)
50
ความคลาดเคลื่อน
0

เลื่อน slider เพื่อเพิ่ม 'สิ่งรบกวน'. Closed loop ใช้ feedback จากเซนเซอร์ชดเชยให้กลับเข้าใกล้ setpoint; Open loop ไม่มี feedback จึงเบี่ยงเบนตามสิ่งรบกวน.

§1.5 กระบวนการพัฒนา

โปรแกรมเริ่มจากภาษาระดับสูง (high-level language) เช่น C หรือ C++ ซึ่งเราเขียนแบบ bare-metal (คุมฮาร์ดแวร์ตรง) หรือใช้ไลบรารี HAL ก็ได้. จากนั้นจะถูกแปลงเป็นขั้น ๆ ดังนี้.

ลำดับการแปลง: ภาษา C ถูก compile เป็น Assembly (ไฟล์ .s) → ถูก assemble เป็น machine code ในรูป binary หรือ object file → ถูก link รวมกันเป็นไฟล์ที่รันได้ (executable เช่น .bin/.hex/.elf) → แล้วจึง download ลงไปเก็บใน Flash ของชิป.

คำว่า bare-metal หมายถึงเขียนโปรแกรมคุมฮาร์ดแวร์ตรง ๆ โดยไม่มีระบบปฏิบัติการ (OS). ส่วน HAL (Hardware Abstraction Layer) คือไลบรารีของ ST ที่ห่อการเข้าถึง register ไว้ให้ใช้ง่ายขึ้น เช่นฟังก์ชัน HAL_GPIO_WritePin. และถ้างานซับซ้อนขึ้นก็อาจใช้ RTOS เช่น FreeRTOS, ThreadX หรือ mbedOS.

VIZ-5Compile → Link Pipeline
Source.c / .h

โค้ดภาษา C/C++ (ใช้ bare-metal หรือ HAL)

คลิกแต่ละสเตจเพื่อดูว่าได้ไฟล์อะไรและทำอะไร. บน CubeIDE กด Build = รัน compiler→assembler→linker ให้อัตโนมัติ.

§1.6 ประวัติ ARM

ในปี 1981 บริษัท Acorn ตระหนักว่าตัวเองสามารถออกแบบ microprocessor ขึ้นมาเองได้ จึงเริ่มทำชิปสถาปัตยกรรมแบบ RISC. ภายหลังแยกออกมาตั้งเป็นบริษัท Advanced RISC Machines หรือที่รู้จักกันในชื่อ ARM Holdings.

จุดเด่นของ ARM คือโมเดลธุรกิจที่ขาย IP (ลิขสิทธิ์การออกแบบ) ให้บริษัทอื่นเอาไปผลิตเอง โดย ARM ไม่ได้ขายคอมทั้งเครื่องและไม่ต้องมีโรงงานผลิตชิป (fab) ของตัวเอง.

ด้านความเป็นเจ้าของ: ปี 2016 SoftBank ซื้อ ARM ไปด้วยมูลค่าราว 31 พันล้านดอลลาร์. ต่อมาปี 2020 Nvidia เสนอซื้อด้วยมูลค่าราว 40 พันล้านดอลลาร์ แต่ดีลล่มและถูกยกเลิกไปในเดือนกุมภาพันธ์ 2022. แกน Cortex-M บนบอร์ดของเราก็คือ IP ของ ARM ที่ ST นำไปผลิตออกมาเป็นชิปตระกูล STM32.

§1.7 บอร์ด NUCLEO-F767ZI

ตัวบอร์ดใช้แกน ARM 32-bit Cortex-M7 ที่มีหน่วยคำนวณทศนิยม DPFPU ทำงานที่ความถี่ 216MHz. มีหน่วยความจำ Flash 2MB และ SRAM 512KB. บนบอร์ดมี user LED 3 ดวง, ปุ่มกด user และปุ่ม reset, header แบบ Arduino Uno V3 และ header แบบ ST morpho พร้อมตัวโปรแกรม/ดีบัก ST-LINK/V2-1 ในตัว.

ตัวชิป STM32F767ZI รองรับ GPIO ได้สูงสุด 168 เส้น (บางเส้นทนแรงดัน 5V ได้), มี ADC ขนาด 12-bit จำนวน 3 ตัว, DAC ขนาด 12-bit จำนวน 2 ตัว, timer สูงสุด 18 ตัว และช่องสื่อสารสูงสุด 28 ช่อง (รวม I2C, USART, SPI, USB).

เครื่องมือพัฒนาหลักมีสองตัว. STM32CubeMX ใช้ตั้งค่าขา/นาฬิกาด้วยกราฟิกแล้ว gen โค้ดเริ่มต้นให้. ส่วน STM32CubeIDE (หรือ Keil) เป็นชุดรวม editor, compiler, linker และ debugger ไว้ในที่เดียว.

VIZ-6NUCLEO-F767ZI Board Map
STM32F767B0B7B14C13STIO
เลื่อนเมาส์หรือคลิกที่จุดบนบอร์ดเพื่อดูรายละเอียด

hover/คลิก hotspot เพื่อดูชื่อและ pin. สลับแท็บเพื่อดูสเปกชิป STM32F767ZI.

VIZ-13GPIO Write Demo (PB0 / LD1)
clock พอร์ต GPIOB
__HAL_RCC_GPIOB_CLK_ENABLE()
LD1
0
PB0 bit
0V (ดับ)
สถานะ clock: ปิด

ลำดับการสั่ง GPIO: เปิด clock พอร์ต → ตั้งโหมด pin → เขียนค่า. ถ้ายังไม่เปิด clock การเขียนจะไม่ทำงาน. SET=logic 1 (3.3V, ไฟติด), RESET=logic 0 (0V, ไฟดับ).

แบบฝึกหัด

12 ข้อ — แต่ละข้อมีชนิดและระดับความยากกำกับ กดปุ่ม "ดูเฉลย" เพื่อดูคำตอบและคำอธิบาย

  1. 1.ปรนัยง่าย

    ข้อใดอธิบาย embedded system ได้ถูกต้องที่สุด

  2. 2.ปรนัยง่าย

    ข้อใดคือความต่างหลักระหว่าง MCU กับ MP

  3. 3.ปรนัยกลาง

    อุปกรณ์ใดจัดเป็น microprocessor ไม่ใช่ microcontroller

  4. 4.ปรนัยกลาง

    ในปี 1971 เกิดเหตุการณ์สำคัญคู่ใดขึ้นพร้อมกัน

  5. 5.ถูก/ผิดง่าย

    ระบบควบคุมแบบ closed-loop ใช้ feedback จากเซนเซอร์มาเทียบค่า setpoint กับค่าจริง

  6. 6.ถูก/ผิดกลาง

    ระบบ open-loop มักให้ความแม่นยำสูงกว่า closed-loop

  7. 7.เติมคำง่าย

    ในสายงาน input→process→output ของระบบฝังตัว: สวิตช์/เซนเซอร์ทำหน้าที่เป็น ____ ส่วน LED/มอเตอร์ทำหน้าที่เป็น ____

  8. 8.เติมคำกลาง

    เติมขั้นตอนพัฒนา: C → ____ → machine code → ____ → download ลง Flash

  9. 9.ปรนัยกลาง

    โมเดลธุรกิจของ ARM เป็นอย่างไร

  10. 10.ปรนัยง่าย

    บอร์ด NUCLEO-F767ZI ใช้แกนประมวลผลใด

  11. 11.วิเคราะห์กลาง

    ใน Lab02 กดปุ่ม B1 แล้ว LD1 ติด 1 วินาที จัดเป็นระบบ open loop หรือ closed loop เพราะอะไร

  12. 12.วิเคราะห์ยาก

    ถ้าจะใช้ซีพียู Z80 ทำงานแบบ Lab01 แทน STM32 ต้องเพิ่มอะไรบ้าง และสะท้อนความต่าง MCU/MP อย่างไร