Tổng quan về vi điều khiển, cấu tạo và cách hoạt động

Trong lập trình nhúng, kiến trúc vi điều khiển là rất quan trọng. Nếu nói lập trình là tạo ra trí mưu trí cho máy tính, thì việc hiểu rõ cấu trúc, cấu trúc của máy tính sẽ giúp tất cả chúng ta hiểu cách quản lý và vận hành của chúng. Từ đó điều khiển chúng một cách thuận tiện và quyến rũ hơn .
Đây là những kỹ năng và kiến thức bắt buộc phải học so với mỗi một kĩ sư nhúng. Vậy, cùng tìm hiểu và khám phá nhé !

Vi điều khiển là gì ?

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ố,…

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,…

Theo wikipedia .

Các họ vi điều khiển

Họ vi điều khiển Atmel

Đây là một dòng đã quá quen thuộc khi những bạn học vi điều khiển trên ghế nhà trường, nổi bật của nó là họ 8051. Ngoài ra còn có những dòng như sau :

  • 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

at89C51 microcontroller 800x800 min

Họ vi điều khiển STMicroelectronics

Đây là dòng chip chủ yếu trong những bài học kinh nghiệm của mình, đại diện thay mặt chính là dòng STM32 lịch sử một thời

  • ST 62
  • ST7
  • STM8
  • STM32 (Cortex-Mx)

stm32

Họ vi điều khiển Microchip

Quá quen thuộc với những dòng PIC lịch sử một thời. VD :

  • 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

Các dòng vi điều khiển khác

Ngoài ra còn có những dòng ít gặp của những hãng khác như :

  • Họ vi điều khiển Cypress MicroSystems
  • Họ vi điều khiển AMCC (Applied Micro Circuits Corporation)
  • Họ vi điều khiển Freescale Semiconductor.
  • Họ vi điều khiển Intel
  • Họ vi điều khiển National Semiconductor
  • Họ vi điều khiển Philips Semiconductors

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

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

Dựa vào độ dài của những thanh ghi và những lệnh của VĐK mà người ta chia ra những loại vi điều khiển 8 bit, 16 bit hay 32 bit …
Các loại VĐK 16 bit do có độ dài lệnh lớn hơn nên những tập lệnh cũng nhiều hơn, đa dạng và phong phú hơn. Tuy nhiên bất kể chương trình nào viết băng VĐK 16 bit tất cả chúng ta đều hoàn toàn có thể viết trên vi điều khiển 8 bit với chương trình thích hợp .

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

Vi điều khiển CISC là vi điều khiển có tập lệnh phức tạp. Các VĐK này có một số lượng lớn những lệnh nên giúp cho người lập trình hoàn toàn có thể linh động và thuận tiện hơn khi viết chương trình .
Vi điều khiển RISC là vi điều khiển có tập lệnh đơn gian. Chúng có một số lượng nhỏ những lệnh đơn thuần. Do đó, chúng yên cầu phần cứng ít hơn, giá tiền thấp hơn, và nhanh hơn so với CISC. Tuy nhiên nó yên cầu người lập trình phải viết những chương trình phức tạp hơn, nhiều lệnh hơn .

bo xu ly risc

Kiến trúc Harvard và kiến trúc Von-Neumann

Kiến trúc Harvard sử dụng bộ nhớ riêng không liên quan gì đến nhau cho chương trình và tài liệu. Bus địa chỉ và bus dữ liệu độc lập với nhau nên quy trình truyền nhận tài liệu đơn thuần hơn. Kiến trúc Von-Neumann sử dụng chung bộ nhớ cho chương trình và tài liệu. Điều này làm cho VĐK gọn nhẹ hơn, giá tiền rẻ hơn .

Tại sao tất cả chúng ta hay nhầm lẫn giữa vi điều khiển và vi giải quyết và xử lý

Chúng ta thường bị nhầm giữa vi điều khiển và vi giải quyết và xử lý. Vậy rốt cuộc chúng giống và khác nhau gì

Điểm giống nhau

Vi điều khiển và vi giải quyết và xử lý đều giải quyết và xử lý thông tin điều khiển sự hoạt động giải trí của máy tính hoặc mạch điện .
Chúng có kịch thước và hình dáng khá giống nhau .
Vì vậy nên sẽ rất dễ nhầm lẫn 2 khái niệm này với nhau. Vậy chúng khác nhau như thế nào ?

Điểm khác biệt

Nếu ví vi điều khiển như một con người thì vi giải quyết và xử lý chính là bộ não .

  • Vi điều khiển có thể hoạt động độc lập, tương tác với thế giới bên ngoài bằng các ngoại vi như ADC, các chân IO, các chuẩn giao tiếp I2C, SPI,…. Còn vi xử lý chỉ có thể tiếp nhận thông tin, phân tích và điều khiển qua các bus dữ liệu.
  • Vi điều khiển là sự tích hợp của vi xử lý và nhiều các thành phần khác nhau nữa như bộ nhớ, ngoại vi, bộ định thời,… Đối với vi xử lý, để hoạt động được chúng cần có các bộ nhớ ngoài như RAM, ổ cứng,…. các bộ định thời như RTC…
  • Lập trình vi điều khiển thường được sử dụng để làm các thiết bị tự động, còn lập trình vi xử lý thường để làm các hệ điều hành dùng trong máy tính hoặc các sản phẩm tương tự máy tính. Tuy vậy vi xử lý cũng có thể sử dụng trong các thiết bị như máy tính nhúng, có thể kể đến như Ras PI, Jetson…
  • Vi xử lý sẽ quan trọng phần hiệu năng làm việc, vi xử lý càng có hiệu năng tốt thì càng mạnh mẽ, còn vi điều khiển sẽ quan trọng phần tối ưu giữa công xuất và hiệu năng, bởi các ứng dụng nhúng đôi khi không cần tốc độ làm việc quá cao mà sẽ quan tâm tới việc tiết kiệm năng lượng và ổn định.

Cấu trúc tổng quan của vi điều khiển

Cấu trúc vi điều khiển

CPU hay Vi xử lý

CPU (Center Programing Unit) hay bộ xử lý trung tâm là bộ não của vi điều khiển. CPU chịu trách nhiệm nạp lệnh, giải mã và thực thi. Tất cả những hành vi của vi điều khiển đều là do CPU điều khiển.

Chúng tiếp xúc với những phần khác trong vi điều khiển trải qua mạng lưới hệ thống Bus .

CPU

Ocscillator Circuit

Nếu CPU là bộ não thì Ocscillator Circuit hay còn gọi là Clock được coi là trái tim của vi điều khiển. Để mọi thứ hoàn toàn có thể hoạt động giải trí, bắt buộc tất cả chúng ta phải cấp xung, trái tim hoạt động giải trí mới hoàn toàn có thể bơm máu cho hàng loạt khung hình hoạt động giải trí được .
Chúng ta thường nghe quảng cáo dòng vi xư lý có vận tốc bao nhiêu Ghz gì gì đó, chính là vận tốc Clock mà vi giải quyết và xử lý đó hoàn toàn có thể phân phối được, vận tốc xung càng cao thì vận tốc giải quyết và xử lý của CPU cũng tăng lên. Đương nhiên mọi thứ đều có số lượng giới hạn của nó .

Clock

Memory – Bộ nhớ

Bộ nhớ hoàn toàn có thể coi là một phần không hề thiếu, chúng là nơi tàng trữ chương trình nạp lên hoặc dùng làm nơi chứa những thông tin tức thời mà CPU cần dùng tới. 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 cần dùng để tính toán, đưa ra quyết định, chúng 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 hay trí khôn của vi điều khiển, chúng được ghi khi chúng ta nạp chương trình vào vi điều khiển, không bị mất khi tắt điện hoặc reset.

RAM

Timer/counter

Một vi điều khiển hoàn toàn có thể có nhiều bộ đếm thời hạn và bộ đếm. Bộ đếm thời hạn và bộ đếm có tính năng đếm thời hạn tạo ra những sự kiện để vi điều khiển hoạt động giải trí đúng thời gian .

Các ngoại vi của vi điều khiển

ngoai vi

I/O Ports – Input/ouput

Có thể coi I / O Port là tay chân của vi điều khiển, chúng giúp cho vi điều khiển tương tác với những thành phần khác ngoài môi trường tự nhiên .
Cổng đầu vào / đầu ra được sử dụng hầu hết điều khiển hoặc tiếp xúc những thiết bị như màn hình hiển thị LCD, đèn LED, máy in, … cho vi điều khiển .

Các chuẩn giao tiếp

Giống như miệng và tai vậy. Vi điều khiển sẽ sử dụng những chuẩn tiếp xúc khác nhau để liên lạc với nhau hoặc liên lạc với những phâng tử khác trên mạch. Có thể kể đến như I2C, SPI, UART, USB, … .

Bộ chuyển đổi analog sang digital (ADC)

Bộ chuyển đổi ADC được sử dụng để quy đổi tín hiệu analog sang dạng digital. Tín hiệu nguồn vào trong bộ chuyển đổi này phải ở dạng analog ( ví dụ : đầu ra cảm ứng ) và đầu ra từ thiết bị này ở dạng digital. Đầu ra digital hoàn toàn có thể được sử dụng cho những ứng dụng kỹ thuật số ( ví dụ : những thiết bị đo lường và thống kê ) .

Bộ chuyển đổi Digital sang Analog (DAC)

Hoạt động của DAC là đảo ngược của ADC. DAC quy đổi tín hiệu digital thành định dạng analog. Nó thường được sử dụng để điều khiển những thiết bị analog như động cơ DC, những ổ đĩa …

Interrupt control hay quản lý sự kiện

Ngoài việc thực thi chương trình, vi điều khiển còn phải tương tác với những tác nhân bên trong và bên ngoài. Các tác nhân này sẽ tạo ra những sự kiện gọi là Ngắt, để quản trị nó cần có một khối quản trị ngắt ( Interrupt control )

Special functioning block

Một số vi điều khiển chỉ được sử dụng cho 1 số ít ứng dụng đặc biệt quan trọng ( ví dụ : mạng lưới hệ thống khoảng trống và rô bốt ) những bộ điều khiển này có chứa những cổng bổ trợ để thực thi những hoạt động giải trí đặc biệt quan trọng đó. Đây được coi là khối tính năng đặc biệt quan trọng .

Tiếp cận với vi điều khiển như thế nào ?

Vậy để mở màn lập trình vi điều khiển tất cả chúng ta cần làm những gì ? Cùng tìm hiểu và khám phá nhé !

Chọn dòng vi điều khiển nào?

Khi đặt câu hỏi này, tất cả chúng ta nghĩ ngay đến tính năng, số chân, và size thiết yếu của vi điều khiển. Và tất cả chúng ta phải lựa chọn được con vi điều khiển tất cả chúng ta cần dùng, tất yếu kèm theo ngay sau đó là tất cả chúng ta hoàn toàn có thể mua được nó nữa .
Tùy theo ứng dụng, Ngân sách chi tiêu, công dụng, độ không thay đổi tất cả chúng ta cần chọn cho mình một hoặc 2 loại để mở màn .

  • Nếu bạn muốn học sâu về vi điều khiển mình khuyên các bạn nên học từ những con đơn giản như 8051, lập trình sử dụng thanh ghi của nó. Bạn sẽ hiểu sâu về vi điều khiển, sau đó thì có thể chuyển qua dòng khác một cách rất đơn giản.
  • Nếu bạn muốn sử dụng nó để làm sản phẩm, các bạn có thể chọn STM32, STM8,…. Các dòng vi điều khiển này có bộ thư viện và công cụ giúp chúng ta làm sản phẩm 1 cách nhanh chóng.

Tham khảo : Học lập trình STM32 từ A tới Z

  • Nếu bạn muốn làm các ứng dụng IOT các bạn nên sử dụngc các chip có hỗ trợ các chuẩn truyền thông không dây (wifi, ble, zigbee…) như ESP32, ESP8266, NRF52832….

Tham khảo : Học lập trình ESP32 từ A tới Z

  • Còn nếu bạn chỉ muốn DIY các sản phẩm đơn giản hoặc dùng để làm quen với lập trình nhúng, các bạn có thể sử dụng Arduino hay các dòng có hỗ trợ thư viện Arduino.

Lập trình cho dòng vi điều khiển đó

Nếu vi điều khiển chỉ là thân xác, thì việc lập trình chính là những bạn đang tạo ra linh hồn cho nó .
Để lập trình vi điều khiển thì bắt buộc những bạn phải học ngôn từ C, vì ngôn từ C hoàn toàn có thể can thiệp tới tầng thấp nhất của phần cứng, điều mà những ngôn từ khác không làm được .
Tham khảo : Lập trình C từ A tới Z

Bản chất của lập trình vi điều khiển chỉ là tạo ra các hành động cụ thể cho nó. Như việc con người chúng ta tương tác với thế giới xung quanh như thế nào vậy. Mọi thao tác đó được lập trình viên viết ra bằng ngôn ngữ lập trình C hoặc ngôn ngữ khác.
Sau đó ngôn ngữ đó được thông dịch lại cho vi điêu khiển hiểu, quá trình đó gọi là biên dịch. Thường thì sẽ tạo ra file .hex hoặc .bin

Muốn làm được điều này, những bạn cần có một trình biên dịch, hoặc thiên nhiên và môi trường lập trình tích hợp ( IDE ). Có thể kể đến như KeilC, Arduino, VScode, … .

Nạp chương trình

Bạn viết chương trình trên máy tính, bạn đã dịch ra được file thực thi. hex, để vi điều khiển hoàn toàn có thể hiểu được bạn muốn làm gì. Vậy làm thế nào để đưa nội dung đó vào cho vi điều khiển ?
Các bạn cần có một mạch nạp và một chương trình nạp tương thích với mạch nạp đó. Công việc nạp được cụ thể hoá bằng việc cắm mạch nạp vào máy tính, bật chương trình nạp, load file. HEX vào chương trình nạp, lựa chọn vi điều khiển cần nạp, thiết lập những thông số kỹ thuật nạp, và nạp vào vi điều khiên đó
Các mạch nạp hoàn toàn có thể kể đến như : ST Link, JTAG, ISP, … .

Debug chương trình

Cuối cùng là quy trình gian truân mà mỗi lập trình viên đều phải làm, đó là Debug. Hay nói những khác là sửa những lỗi lập trình khiển code của bạn không hoạt động giải trí đúng .
Một lập trình viên giỏi không phải là người viết code nhanh, viết đc nhiều code. Mà là người hoàn toàn có thể fix đc hết Bug hoặc nhiều Bug nhất hoàn toàn có thể .
Tham khảo : Các công cụ Debug trên Keil C

Ưu và điểm yếu kém của vi điều khiển

Ưu điểm của vi điều khiển

  • Những ưu điểm chính của vi điều khiển là:
  • Vi điều khiển hoạt động như một máy vi tính không có bất kỳ bộ phận kỹ thuật số nào.
  • Tích hợp cao hơn bên trong vi điều khiển làm giảm chi phí và kích thước của hệ thống.
  • Việc sử dụng vi điều khiển rất đơn giản, dễ khắc phục sự cố và bảo trì hệ thống.
  • Hầu hết các chân được lập trình bởi người dùng để thực hiện các chức năng khác nhau.
  • Dễ dàng kết nối thêm các cổng RAM, ROM, I/O.
  • Cần ít thời gian để thực hiện các hoạt động.

Nhược điểm của vi điều khiển

  • Vi điều khiển có kiến trúc phức tạp hơn so với vi xử lý.
  • Chỉ thực hiện đồng thời một số lệnh thực thi giới hạn.
  • Chủ yếu được sử dụng trong các thiết bị vi mô.
  • Không thể trực tiếp giao tiếp các thiết bị công suất cao.

Ưng dụng của vi điều khiển

Vi điều khiển hiện hữu trên rất nhiều mặt của đời sống .
Bạn hoàn toàn có thể tìm thấy vi điều khiển trong toàn bộ những loại thiết bị điện tử lúc bấy giờ. Bất kỳ thiết bị nào tương quan đến đo lường và thống kê, tàng trữ, điều khiển, giám sát hoặc hiển thị thông tin đều phải có chip vi điều khiển bên trong .
Ứng dụng lớn nhất của vi điều khiển là trong ngành công nghiệp xe hơi ( vi điều khiển được sử dụng thoáng rộng để trấn áp động cơ và điều khiển hiệu suất trong xe hơi ) .
Bạn cũng hoàn toàn có thể tìm thấy vi điều khiển bên trong bàn phím, chuột, modem, máy in và những thiết bị ngoại vi khác. Trong thiết bị thử nghiệm, vi điều khiển giúp bạn thuận tiện thêm những tính năng như năng lực tàng trữ số đo, tạo và tàng trữ những thói quen của người dùng và hiển thị thông tin cũng như dạng sóng .
Sản phẩm tiêu dùng sử dụng bộ vi điều khiển gồm có máy quay kỹ thuật số, đầu phát quang, màn hình hiển thị LCD / LED …
Hay đến với thời đại 4.0 những bạn sẽ thấy vi điều khiển trong những thiết bị IOT, giúp con người liên kết mọi máy móc từ xa trải qua Internet

vi dieu khien min

Kết

Hiểu được cấu trúc của vi điều khiển là một phần tất yếu khi học lập trình nhúng. Nếu bạn vẫn đang mông lung khi gặp những khái niệm mình đã nêu trên thì nên khám phá kĩ càng lại từ đầu. Bởi nếu không hiểu tất cả chúng ta đang thao tác với cái gì, thì rất khó để làm nó chạy một cách đúng mực, rất khó tìm ra lỗi, nguyên do khiến code của bạn không chạy .
Cám ơn bạn đã đón đọc, cùng vào hội Anh Em Nghiện Lập Trình để cùng trao đổi nhé

5/5 – ( 2 bầu chọn )

5/5 - (1 vote)
Banner-backlink-danaseo

Bài viết liên quan

Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments