Vi điều khiển (tiếng Anh: microcontroller, viết tắt: MCU) là một hệ thống máy tính hoàn chỉnh được tích hợp trên một vi mạch đơn (chip đơn), bao gồm một hoặc nhiều lõi xử lý trung tâm (CPU), bộ nhớ chương trình và dữ liệu (ROM/Flash, RAM), cùng các cổng vào/ra (I/O) và ngoại vi chuyên dụng để điều khiển các thiết bị trong hệ thống nhúng.
Khác với bộ vi xử lý đa năng (microprocessor) dùng trong máy tính cá nhân đòi hỏi các chip nhớ và ngoại vi riêng biệt, vi điều khiển được thiết kế tối ưu hóa cho các tác vụ điều khiển chuyên biệt theo thời gian thực với kích thước nhỏ gọn, mức tiêu thụ năng lượng thấp và độ tin cậy vận hành cao.
Các ứng dụng phổ biến của vi điều khiển trải rộng trong đời sống và công nghiệp:
- Thiết bị điện tử gia dụng: Bảng mạch điều khiển máy giặt, lò vi sóng, tủ lạnh thông minh và máy điều hòa nhiệt độ.
- Kỹ thuật ô tô: Hệ thống chống bó cứng phanh (ABS), điều khiển túi khí an toàn, quản lý động cơ và mạng truyền thông CAN bus.
- Thiết bị y tế: Máy đo huyết áp điện tử, máy theo dõi điện tim di động và máy thở.
- Internet vạn vật (IoT) và tự động hóa: Nút cảm biến thông minh, thiết bị bay không người lái (UAV) và robot công nghiệp.
Cấu trúc phần cứng cơ bản
Một vi điều khiển điển hình tích hợp đầy đủ các khối chức năng cốt lõi trên một đế bán dẫn silicon để phục vụ nhu cầu xử lý tín hiệu tại chỗ:
| Thành phần phần cứng | Chức năng kỹ thuật |
|---|---|
| Lõi CPU (Central Processing Unit) | Bộ não xử lý, thực thi tập lệnh chương trình theo chu kỳ nạp - giải mã - thực thi |
| Bộ nhớ RAM (SRAM) | Lưu trữ biến số, ngăn xếp (stack) và dữ liệu tạm thời trong quá trình hệ thống vận hành |
| Bộ nhớ Flash / ROM | Lưu trữ vĩnh viễn mã nguồn firmware và các hằng số cấu hình hệ thống |
| Cổng vào/ra đa năng (GPIO) | Giao tiếp mức logic số với nút bấm, LED, relay, công tắc và cảm biến ngoại vi |
| Bộ định thời / Bộ đếm (Timers / Counters) | Đo khoảng thời gian, đếm xung tín hiệu, tạo trễ và điều chế độ rộng xung (PWM) để điều khiển động cơ |
| Bộ chuyển đổi ADC / DAC | Chuyển đổi tín hiệu tương tự sang tín hiệu số và ngược lại để thu nhận dữ liệu cảm biến |
| Giao diện truyền thông (UART, SPI, I2C) | Trao đổi dữ liệu nối tiếp đồng bộ hoặc không đồng bộ với các chip ngoại vi hoặc máy tính |
Nguyên lý hoạt động và quản lý ngắt
Vi điều khiển vận hành dựa trên chu trình lệnh lặp liên tục:
- Nạp lệnh (Fetch): Đọc mã lệnh nhị phân từ địa chỉ con trỏ chương trình (PC) trong bộ nhớ Flash vào thanh ghi lệnh.
- Giải mã lệnh (Decode): Khối giải mã nhận diện thao tác cần thực hiện và các toán hạng tương ứng.
- Thực thi lệnh (Execute): Đơn vị số học và logic (ALU) thực hiện phép tính và ghi kết quả vào thanh ghi hoặc RAM.
Cơ chế ngắt (interrupt) là tính năng sống còn giúp vi điều khiển phản hồi kịp thời với các sự kiện bên ngoài trong thời gian thực. Khi có tín hiệu ngắt (ngắt chân GPIO, ngắt tràn timer hoặc ngắt truyền thông), CPU lập tức lưu ngữ cảnh thanh ghi hiện tại, chuyển quyền điều khiển sang hàm phục vụ ngắt (ISR), rồi quay lại tiếp tục chương trình chính sau khi xử lý xong.
Phân biệt vi điều khiển và vi xử lý
Mặc dù cùng là các mạch tích hợp xử lý tín hiệu số, vi điều khiển và bộ vi xử lý phục vụ hai mục tiêu thiết kế hoàn toàn khác nhau:
| Tiêu chí so sánh | Vi điều khiển (Microcontroller) | Bộ vi xử lý (Microprocessor) |
|---|---|---|
| Mức độ tích hợp | Hệ thống máy tính đơn chip: Tích hợp sẵn CPU, RAM, Flash và ngoại vi I/O | Chỉ bao gồm lõi CPU xử lý tính toán, cần chip RAM, ROM và chipset ngoài |
| Mục đích sử dụng | Hệ thống nhúng chuyên dụng, điều khiển thời gian thực đơn nhiệm hoặc tác vụ xác định | Máy tính đa nhiệm hiệu năng cao (PC, máy chủ, điện thoại thông minh) |
| Công suất tiêu thụ | Rất thấp, tối ưu cho pin và chế độ ngủ sâu (sleep mode) | Cao, thường đòi hỏi tản nhiệt chủ động |
| Chi phí và kích thước | Chi phí thấp, kích thước mạch in (PCB) nhỏ gọn | Chi phí hệ thống cao, thiết kế bo mạch phức tạp nhiều lớp |
Môi trường phát triển và ngôn ngữ lập trình
Firmware cho vi điều khiển thường được phát triển bằng ngôn ngữ C hoặc C++ nhằm đạt được sự cân bằng tối ưu giữa hiệu năng phần cứng và tính cấu trúc của mã nguồn. Hợp ngữ (Assembly) được sử dụng hạn chế trong các đoạn mã khởi động hoặc thuật toán cần tối ưu từng chu kỳ máy. Gần đây, các ngôn ngữ bậc cao như MicroPython và Rust cũng dần phổ biến nhờ tính năng an toàn bộ nhớ.
Các môi trường phát triển tích hợp (IDE) tiêu biểu bao gồm STM32CubeIDE (dành cho dòng ARM Cortex-M), MPLAB X (dòng PIC/dsPIC), Keil MDK, IAR Embedded Workbench, cũng như hệ sinh thái mã nguồn mở Arduino IDE và VS Code với PlatformIO. Các hệ điều hành thời gian thực (RTOS) như FreeRTOS, Zephyr RTOS được ứng dụng rộng rãi để lập lịch đa tác vụ ưu tiên.
Các kiến trúc và dòng vi điều khiển tiêu biểu
Thị trường vi điều khiển được phân chia theo độ rộng bus dữ liệu và kiến trúc tập lệnh:
- Vi điều khiển 8-bit: Kiến trúc AVR (ATmega328P) và PIC (PIC16F) với chi phí thấp, cấu trúc đơn giản, phù hợp cho các bài toán điều khiển cơ bản và thiết bị đo lường đơn giản.
- Vi điều khiển 16-bit: Phân khúc trung gian như TI MSP430, nổi bật với khả năng siêu tiết kiệm năng lượng cho cảm biến đo xa.
- Vi điều khiển 32-bit: Thống trị bởi kiến trúc ARM Cortex-M (Cortex-M0, M3, M4, M7) với đại diện tiêu biểu là dòng STM32, NXP LPC và họ ESP32 (lõi kép Xtensa tích hợp Wi-Fi/Bluetooth), cung cấp năng lực tính toán vượt trội cho các ứng dụng công nghiệp và IoT.
Xu hướng phát triển và an toàn bảo mật
Công nghệ vi điều khiển đang chuyển mình mạnh mẽ theo các xu hướng công nghệ tiên tiến:
- Trí tuệ nhân tạo tại biên (TinyML): Tích hợp các bộ đồng xử lý thần kinh (NPU) và tối ưu hóa mô hình học sâu rút gọn để chạy suy luận trực tiếp trên vi điều khiển mà không cần truyền dữ liệu lên đám mây.
- Bảo mật phần cứng: Ứng dụng vùng thực thi tin cậy (Arm TrustZone-M), khối tạo số ngẫu nhiên thực (TRNG), công cụ mã hóa phần cứng (AES, RSA) và cơ chế khởi động an toàn (Secure Boot) nhằm ngăn chặn tấn công đọc trộm firmware và giả mạo thiết bị IoT.