# Vi điều khiển

Vi điều khiển
**Vi điều khiển** là một máy tính được tích hợp trên một chip, nó thường được sử dụng để điều khiển các thiết bị điện tử. Vi điều khiển, thực chất, là một hệ thống bao gồm một vi xử lý có hiệu suất đủ dùng và giá thành thấp (khác với các bộ vi xử lý đa năng dùng trong máy tính) kết hợp với các khối ngoại vi như bộ nhớ, các module vào/ra, các module biến đổi số sang tương tự và tương tự sang số,... Ở máy tính thì các module thường được xây dựng bởi các chip và mạch ngoài.

Vi điều khiển thường được sử dụng để xây dựng các hệ thống nhúng. Nó cũng được sử dụng trong các thiết bị điện, điện tử như máy giặt, lò vi sóng, điện thoại, đầu đọc DVD, thiết bị đa phương tiện hay dây chuyền sản xuất tự động,...

## Phân loại vi điều khiển

Có thể phân loại vi điều khiển theo theo độ dài thanh ghi và theo kiến trúc

### Phân loại theo độ dài thanh ghi

Dựa vào độ dài của các thanh ghi và các tập lệnh của vi điều khiển mà vi điều khiển có thể chia thành các dòng 8 bit, 16 bit hay 32 bit,... Vi điều khiển có thanh ghi nhiều bit hơn thì sẽ có độ dài tập lệnh lớn hơn, do đó số lượng các tập lệnh cũng nhiều hơn các dòng có thanh ghi ít bit hơn.

### Phân loại theo kiến trúc CISC và RISC

### Phân loại theo kiến trúc Harvard và kiến trúc Von-Neumann

Kiến trúc Harvard sử dụng bộ nhớ riêng biệt cho chương trình và dữ liệu, với bus địa chỉ và bus dữ liệu độc lập với nhau nên quá trình truyền nhận dữ liệu đơn giản hơn. Hầu hết các vi điều khiển ngày nay được xây dựng dựa trên kiến trúc Harvard, kiến trúc này định nghĩa bốn thành phần cần thiết của một hệ thống nhúng. Những thành phần này là lõi CPU, bộ nhớ chương trình (thông thường là ROM hoặc bộ nhớ flash), bộ nhớ dữ liệu (RAM), một hoặc vài bộ định thời và các cổng vào/ra để giao tiếp với các thiết bị ngoại vi và các môi trường bên ngoài - tất cả các khối này được thiết kế trong một vi mạch tích hợp.

Kiến trúc Von-Neumann sử dụng chung bộ nhớ cho chương trình và dữ liệu, làm giảm kích thước và giá thành của vi điều khiển.

## Kiến trúc của vi điều khiển

### CPU hoặc vi xử lý

CPU (central processing unit) hay bộ xử lý trung tâm chịu trách nhiệm nạp lệnh, giải mã và thực thi các tập lệnh. Từ đó, tất cả mọi hoạt động của của vi điều khiển đều là do CPU điều khiển. CPU giao tiếp với các phần khác trong vi điều khiển thông qua hệ thống bus.

### Hệ thống xung clock

Hệ thống xung clock làm nhiệm vụ cấp xung nhịp cho toàn vi điều khiển. Thông số kĩ thuật tốc độ xung clock tối đa (maximum clock speed hay maximum CPU speed) của các dòng vi điều khiển, ví dụ như vi điều ATmega328 có tốc độ xung nhịp tối đa là 20 MHz, cho biết tốc độ xử lý tối đa mà vi xử lý trong vi điều khiển này có thể đáp ứng được. Hệ thống xung clock được thiết kế chủ yếu từ các mạch tạo xung (oscillator circuit) trong vi điều khiển.

### Bộ nhớ

Bộ nhớ (tiếng Anh: memory) là nơi lưu trữ chương trình hoặc là nơi chứa các thông tin mà CPU đang làm việc. Có 2 kiểu bộ nhớ cơ bản:

* RAM (Random access memory) là bộ nhớ lưu các dữ liệu mà CPU đang làm việc. Dữ liệu trogn RAM sẽ bị xóa khi mất điện
* ROM/EPROM/EEPROM hoặc flash: là bộ nhớ lưu trữ chương trình vận hành của vi điều khiển, chúng được ghi khi vi điều khiển được nạp chương trình. Nội dung trong các loại bộ nhớ này không bị mất khi mất điện hoặc reset.

### Các ngoại vi

Hệ thống ngoại vi trên vi điều khiển rất đa dạng theo nhiều dòng vi điều khiển khác nhau, nhưng nhìn chung các dòng vi điều khiển đều có những ngoại vi cơ bản như sau:

* Ngõ vào ra (I/O Ports hay GPIO)
* Các chuẩn giao tiếp phổ biến như I2C, SPI, UART,...
* Bộ đếm thời gian và bộ đếm sự kiện (timer và counter)
* ADC/DAC
* Interrupt

## Nạp chương trình

Để đưa chương trình vào được vi điều khiển thì phải thông qua mạch nạp. Mạch nạp được thiết kế để đưa file file thực thi (thường là file .hex) từ máy tính xuống vi điều khiển, thông qua các chuẩn ngoại vi có sẵn trên vi điều khiển, ví dụ như board Arduino IDE hỗ trợ nạp chương trình qua mạch nạp ISP nối vào các chân SPI có sẵn của board. Các mạch nạp phổ biến có thể kể đến như ST Link, JTAG, ISP,...

## Vi điều khiển và vi xử lý

Vi điều khiển khác với các bộ vi xử lý đa năng ở chỗ là nó có thể hoạt động chỉ với vài vi mạch hỗ trợ bên ngoài.

## Các vi điều khiển thông dụng

* Họ vi điều khiển AMCC (do tập đoàn "Applied Micro Circuits Corporation" sản xuất). Từ tháng 5 năm 2004, họ vi điều khiển này được phát triển và tung ra thị trường bởi IBM.
	+ 403 PowerPC CPU
	+ PPC 403GCX
	+ 405 PowerPC CPU
	+ PPC 405EP
	+ PPC 405GP/CR
	+ PPC 405GPr
	+ PPC NPe405H/L
	+ 440 PowerPC Book-E CPU
	+ PPC 440GP
	+ PPC 440GX
	+ PPC 440EP/EPx/GRx
	+ PPC 440SP/SPe
* Họ vi điều khiển Atmel
	+ Dòng 8051 (8031, 8051, 8751, 8951, 8032, 8052, 8752, 8952)
	+ Dòng Atmel AT91 (Kiến trúc ARM THUMB)
	+ Dòng AT90, Tiny & Mega – AVR (Atmel Norway design)
	+ Dòng Atmel AT89 (Kiến trúc Intel 8051/MCS51)
	+ Dòng MARC4
* Họ vi điều khiển Cypress MicroSystems
	+ CY8C2xxxx (PSoC)
* Họ vi điều khiển Freescale Semiconductor. Từ năm 2004, những vi điều khiển này được phát triển và tung ra thị trường bởi Motorola.
	+ Dòng 8-bit
		- 68HC05 (CPU05)
		- 68HC08 (CPU08)
		- 68HC11 (CPU11)
	+ Dòng 16-bit
		- 68HC12 (CPU12)
		- 68HC16 (CPU16)
		- Freescale DSP56800 (DSPcontroller)
	+ Dòng 32-bit
		- Freescale 683XX (CPU32)
		- MPC500
		- MPC 860 (PowerQUICC)
		- MPC 8240/8250 (PowerQUICC II)
		- MPC 8540/8555/8560 (PowerQUICC III)
* Họ vi điều khiển Fujitsu
	+ F²MC Family (8/16 bit)
	+ FR Family (32 bit)
	+ FR-V Family (32 bit RISC)
* Họ vi điều khiển Intel
	+ Dòng 8-bit
		- 8XC42
		- MCS48
		- MCS51
		- 8061
		- 8xC251
	+ Dòng 16-bit
		- 80186/88
		- MCS96
		- MXS296
	+ Dòng 32-bit
		- 386EX
		- i960
* Họ vi điều khiển Microchip
	+ PIC 8-bit (xử lý dữ liệu 8-bit, 8-bit data bus)
		- Từ lệnh dài 12-bit (Base-line): PIC10F, PIC12F và một vài PIC16F
		- Từ lệnh dài 14-bit (Mid-Range và Enhance Mid-Range): PIC16Fxxx, PIC16F1xxx
		- Từ lệnh dài 16-bit (High Performance): PIC18F
	+ PIC 16-bit (xử lý dữ liệu 16-bit)
		- PIC điều khiển động cơ: dsPIC30F
		- PIC có DSC: dsPIC33F
		- Phổ thông: PIC24F, PIC24E, PIC24H
	+ PIC 32-bit (xử lý dữ liệu 32-bit): PIC32MX
* Họ vi điều khiển National Semiconductor
	+ COP8
	+ CR16
* Họ vi điều khiển STMicroelectronics
	+ ST 62
	+ ST7
	+ STM8
	+ STM32 (Cortex-Mx)
* Họ vi điều khiển Philips Semiconductors
	+ LPC2000
	+ LPC900
	+ LPC700

## Tham khảo

## Xem thêm

* Danh sách các vi điều khiển thông dụng
* Danh sách các vi điều khiển hỗ trợ WiFi
* Microbotics
* Programmable logic controller
* Vi điều khiển đơn board

## Liên kết ngoài

* Vi điều khiển, thông tin tại trang Curlie