Giới thiệu về Vi điều khiển AVR

Một phần của tài liệu thiết kế và chế tạo mạch điều khiển mô hình ô tô điện (Trang 56 - 68)

AVR là họ vi điều khiển 8 bit theo công nghệ mới, với những tính năng rất mạnh được tích hợp trong Chip của hãng Atmel theo công nghệ RISC (viết tắt của Reduced Instructions Set Computer - Máy tính với tập lệnh đơn giản hóa ), nó mạnh ngang hàng với các họ vi điều khiển 8 bit khác như PIC, Pisoc. Do ra đời muộn hơn nên họ vi điều khiển AVR có nhiều tính năng mới đáp ứng tối đa nhu cầu của người sử dụng. So với họ 8051, 89xx thì nó có độ ổn định, khả năng tích hợp, sự mềm dẻo trong việc lập trình và tiện lợi hơn rất nhiều.

a. Những tính năng chính của Vi điều khiển AVR

– Bộ nhớ chương trình Flash dung lượng lớn có thể lập trình nhiều lần. – Bộ nhớ Ram tĩnh (SRAM) có dung lượng lớn.

– Có thể sử dụng xung CLOCK lên đến 16MHz, hoặc sử dụng xung Clock nội lên đến 8MHz.

– Có nhiều cổng vào ra (I/O).

Có các bộ Timer/Counter 8 bit, 16 bit có tích hợp PWM.

– Có các bộ chuyển đổi Analog – Digital độ phân giải 8 bit, 10 bit và có nhiều kênh chuyển đổi.

– Có giao thức nối tiếp USART. – Có giao thức nối tiếp I2C. – Có giao thức nối tiếp SPI.

b. Cấu trúc bộ nhớ của AVR

AVR có cấu trúc Harvard, trong đó đường truyền cho bộ nhớ dữ liệu (Data memory bus) và đường truyền cho bộ nhớ chương trình (Program memory bus) được tách riêng. Data memory bus chỉ có 8 bit và được kết nối với hầu hết các thiết bị ngoại vi, với tệp thanh ghi (Register file). Trong khi đó đường truyền cho bộ nhớ chương trình có độ rộng 16 bits và chỉ phục vụ cho thanh ghi lệnh (Instruction registers).

Hình 2.49. Cấu trúc bộ nhớ của AVR

Bộ nhớ chương trình (Program memory): Là bộ nhớ Flash lập trình được, hay còn gọi là Application section. Thực chất, Application section bao gồm 2 phần: phần chứa các mã lệnh cho hoạt động của Chip (Instruction) và phần chứa các Vector ngắt (Interrupt vectors). Các Vector ngắt nằm ở phần đầu của Application section (từ địa chỉ 0x0000) và dài đến bao nhiêu tùy thuộc vào loại Chip. Phần chứa Instruction nằm liền sau đó, chương trình viết cho Chip phải được nạp vào phần này.

Bộ nhớ dữ liệu (Data memory): Chứa các thanh ghi quan trọng nhất của Chip, việc lập trình cho Chip phần lớn là truy cập bộ nhớ này. Bộ nhớ dữ liệu trên các Chip AVR có độ lớn khác nhau tùy theo mỗi Chip, tuy nhiên về cơ bản phần bộ nhớ này được chia thành 5 phần:

Hình 2.50. Thanh ghi 8 bit

+ Phần 1: Là phần đầu tiên trong bộ nhớ dữ liệu, phần này bao gồm 32 thanh ghi có tên gọi là Register file, hay đơn giản là các thanh ghi. Tất cả các thanh ghi này đều là các thanh ghi 8 bits .

Hình 2.51. Register file

Tất cả các Chip trong họ AVR đều bao gồm 32 thanh ghi Register file có địa chỉ tuyệt đối từ 0x0000 đến 0x001F. Mỗi thanh ghi có thể chứa giá trị dương từ 0 đến 255 hoặc các giá trị có dấu từ - 128 đến 127 hoặc mã ASCII của một ký tự nào đó. Các thanh ghi này được đặt tên theo thứ tự là R0 đến R31. Chúng được chia thành 2 phần, phần 1 bao gồm các thanh ghi từ R0 đến R15 và phần 2 là các thanh ghi R16 đến R31.

Tất cả 32 thanh ghi Register file đều có đặc điểm chung sau: Được truy cập trực tiếp trong các lệnh. Các toán tử, phép toán thực hiện trên các thanh ghi này chỉ cần 1 chu kỳ xung Clock. Register file được kết nối trực tiếp với bộ xử lí trung tâm (CPU) của Chip. Và chúng là nguồn chứa các số hạng trong các phép toán và cũng là đích chứa kết quả trả lại của phép toán.

Tóm lại 32 thanh ghi Register file của AVR được xem là một phần của CPU, vì thế chúng được CPU sử dụng trực tiếp và nhanh chóng, để gọi các thanh ghi này, chúng ta không cần gọi địa chỉ mà chỉ cần gọi trực tiếp tên của chúng. Register file thường được sử dụng như các toán hạng của các phép toán trong lúc lập trình.

+ Phần 2: RAM tĩnh, nội (Internal SRAM), là vùng không gian cho chứa các biến (tạm thời hoặc toàn cục) trong lúc thực thi chương trình, vùng này tương tự các thanh RAM trong máy tính nhưng có dung lượng khá nhỏ (khoảng vài KB, tùy thuộc vào loại Chip).

+ Phần 3: RAM ngoại (External SRAM), các Chip AVR cho phép người sử dụng gắn thêm các bộ nhớ ngoài để chứa biến, vùng này thực chất chỉ tồn tại khi nào người sử dụng gắn thêm bộ nhớ ngoài vào Chip.

+ Phần 4: EEPROM (Electrically ereasable programmable ROM) là một phần quan trọng của các Chip AVR mới, vì là ROM nên bộ nhớ này không bị xóa ngay cả khi không cung cấp nguồn nuôi cho Chip, rất thích hợp cho các ứng dụng lưu trữ dữ liệu. Như trong hình 2.54 phần bộ nhớ EEPROM được tách riêng và có địa chỉ tính từ 0x0000.

c. Cách thức hoạt động của Vi điều khiển AVR

Hình 2.57 biểu diễn cấu trúc bên trong của một AVR. Ta thấy rằng 32 thanh ghi Register file được nối trực tiếp với ALU bằng 2 line. Vì thế mà ALU có thể truy suất trực tiếp tới 2 thanh ghi Register file trong cùng một chu kỳ xung Clock.

Các lệnh được chứa trong bộ nhớ chương trình Flash memory dưới dạng các thanh ghi 16 bit. Bộ nhớ chương trình được truy cập trong mỗi chu kỳ xung Clock và mỗi lệnh chứa trong bộ nhớ chương trình được đưa vào trong thanh ghi lệnh Instruction register.

Các thanh ghi lệnh tác động và lựa chọn Register file cũng như RAM cho ALU thực thi. Trong lúc thực thi chương trình, địa chỉ của dòng lệnh đang thực thi được quyết định bởi một bộ đếm chương trình PC (Program counter). Đó chính là cách thức hoạt động của AVR.

AVR có ưu điểm là hầu hết các lệnh đều được thực thi trong 1 chu kỳ xung Clock, vì vậy có thể nguồn Clock lớn nhất cho AVR có thể nhỏ hơn một số vi điều khiển khác như PIC nhưng thời gian thực thi vẫn nhanh hơn.

Hình 2.52. Cấu trúc bên trong của AVR d. Cổng vào ra của Vi điều khiển AVR

Cổng vào ra là một trong số các phương tiện để Vi điều khiển giao tiếp với các thiết bị ngoại vi. Mỗi Chip có số cổng vào ra khác nhau. Các cổng vào ra của Vi điều khiển AVR đều là cổng vào ra hai chiều có thể định hướng được. Tất cả các chân của cổng đều được nối với điện trở kéo lên, ta có thể cho phép hay không cho phép điện trở này hoạt động.

Mỗi một cổng vào ra của Vi điều khiển được liên kết với ba thanh ghi PORTx, DDRx, PINx. Ba thanh ghi này sẽ được phối hợp với nhau để điều khiển hoạt động của cổng.

Thanh ghi DDRx: Đây là thanh ghi 8 bit có thể đọc ghi, có chức năng điều khiển hướng của cổng (là lối ra hay lối vào). Khi một bit của thanh ghi này được set lên 1 thì có nghĩa một chân tương ứng với nó được thiết lập là ngõ ra. Ngược lại nếu 1 bit của thanh ghi DDRx là 0 thì chân tương ứng với nó được thiết lập là ngõ vào. (adsbygoogle = window.adsbygoogle || []).push({});

Hình 2.54. Thanh ghi DDRA

Thanh ghi PORTx: Đây là thanh ghi 8 bit có thể đọc ghi, đây là thanh ghi dữ liệu của PORTx. Nếu một bit của thanh ghi này được thiết lập là 1 thì điện trở treo ở chân tương ứng của nó được kích hoạt, ngược lại nếu nếu bit này được thiết lập là 0 thì điện trở treo ở chân tương ứng sẽ không được kích hoạt, cổng ở trạng thái cao trở.

Hình 2.55. Thanh ghi PORTA

Thanh ghi PINx: Đây là thanh ghi chỉ đọc chứ không ghi, đây là địa chỉ trong bộ nhớ I/O kết nối trực tiếp các chân của cổng. Khi ta đọc PORTx tức là ta đọc dữ liệu được chốt trong PORTx, còn khi ta đọc PINx thì giá trị logic hiện thời ở chân của cổng tương ứng được đọc.

Bảng 1: Cấu hình các chân của cổng

DDRxn là bit thứ n của thanh ghi DDRx. PORTxn là bit thứ n của thanh ghi PORTx.

Dấu “x” ở cột thứ 3 là để chỉ giá trị logic là tùy ý.

e. Bộ định thời Timer/counter của AVR

Trong mỗi Chip của họ AVR được tích hợp số bộ định thời khác nhau. Có hai loại bộ định thời là bộ định thời 8 bit và bộ định thời 16 bit.

Hình 2.58. Sơ đồ khối bộ Timer/Counter 16 bit

Các thanh ghi có trong một bộ Timer (ở đây ta chọn bộ Timer 0 làm ví dụ): Thanh ghi TCCR0: Là thanh ghi điều khiển bộ Timer/Counter0, thanh ghi điều khiển này gồm 8 bit: FOC0, WGM00, COM01, COM00, WGM01, CS02, CS01, CS00 như hình vẽ:

Hình 2.59. Thanh ghi TCCR0

+ Bit 3 (WGM01) và bit 6 (WGM00) là các bit chọn chế độ hoạt động của Timer.

+ Bit 4 (COM00) và bit 5 (COM01) là các bít lựa chọn chế độ so sánh kết hợp. Nó điều khiển các ngõ ra so sánh ở pin OC0. Nếu một hoặc cả hai bit COM00 và COM01 bằng 1 thì ngõ ra OC0 thực hiện chức năng nhập dữ liệu từ các pin I/O kết nối với nó.

Bảng 3. Chế độ so sánh không PWM

+ Bit 2 (CS02) bit 1(CS01) và bit 0 (CS00) là các bit chọn nguồn xung để sử dụng cho bộ Timer hoạt động.

Thanh ghi TCNT0: Giá trị của thanh ghi này tăng giảm một đơn vị sau mỗi chu kỳ xung Clock. Thay đổi giá trị thanh TCNT0 khi đang hoạt động sẽ kéo theo những lỗi khi so sánh giữa hai thanh ghi TCNT0 và OCR0.

Hình 2.60. Thanh ghi TCNT0

Thanh ghi OCR0: Thanh ghi OCR0 chứa một giá trị 8 bit, giá trị này được so sánh liên tục với giá trị của thanh ghi Counter TCNT0. Phép so sánh này có thể được sử dụng để tạo ra hành động ngắt ở ngõ ra hay tạo xung ở ngõ ra tại chân OC0.

Thanh ghi TIMSK (Timer/Counter Interrupt Mask Register): Là thanh ghi mặt nạ ngắt.

Hình 2.62. Thanh ghi mặt nạ ngắt

+ Bít 1 (OCIE0): Khi bít này được thiết lập lên bằng 1 thì cho phép một ngắt so sánh. + Bít 0 (TOIE0): Khi bít này được thiết lập lên bằng 1 thì cho phép một ngắt tràn. Thanh ghi cờ ngắt TIFR (Timer/Counter interrupt flag register):

Hình 2.63. Thanh ghi cờ ngắt

+ Bit 1 (OCF0): Bit này được set lên mức 1 khi xảy ra sự so sánh khớp giữa thanh ghi TCCN0 và thanh ghi 0CR0. Cờ OCF0 sẽ được tự động xóa đi khi ngắt tương ứng được thực thi.

+ Bit 0 (TOV0): Được set lên mức 1 khi bộ định thời tràn và nó được xóa khi ngắt tương ứng được thực thi.

f. Các chế độ hoạt động của bộ Timer

Chế độ hoạt động thường: Đây là chế độ hoạt động đơn giản nhất của Timer. Bộ đếm sẽ liên tục đếm tăng lên cho đến khi vượt quá giá trị lớn nhất TOP và sau đó sẽ được khởi động lại tại giá trị BOTTOM. Trong các hoạt động thông thường thì cờ tràn sẽ được thiết lập khi giá trị trong Timer đạt giá trị không và không bị xoá đi. Tuy nhiên nếu mà ngắt tràn được chấp nhận thì cờ ngắt sẽ tự động bị xoá khi ngắt được thực hiện. Giá trị trong Timer có thể được viết vào bất cứ lúc nào.

Chế độ so sánh: Đây là chế độ mà giá trị trong Timer luôn được so sánh với giá trị trong thanh ghi ORC. Khi giá trị trong Timer bằng giá trị trong thanh ghi ORC thì giá trị trong Timer sẽ bị xoá đi. Giá trị trong ORC đóng vai trò là giá trị TOP cho

bộ đếm. Chế độ này cũng cho phép tạo ra tần số so sánh ở đầu ra. Tuy nhiên trong chế độ này nếu giá trị mới ghi vào thanh ghi ORC mà nhỏ hơn giá trị tức thời của bộ đếm thì thì một so sánh sẽ bị lỡ, khi đó bộ đếm sẽ đếm đến giá trị lớn nhất sau đó rơi xuống giá trị 0 trước khi so sánh tiếp theo xuất hiện.

Hình 2.64. Sơ đồ thời gian của chế độ so sánh g. Vi điều khiển ATMEGA32 (adsbygoogle = window.adsbygoogle || []).push({});

ATMEGA32 có đầy đủ tính năng của họ AVR, có giá thành vừa phải, rất phù hợp dùng để thiết kế những hệ thống vừa và nhỏ .

ATMEGA32 được đóng vỏ 40 chân, trong đó có 32 chân vào ra dữ liệu và được chia làm 4 PORT: PORTA, PORTB, PORTC và PORTD.

Ngoài 32 chân vào ra dữ liệu trên ATMEGA32 còn 8chân dùng để nối với nguồn, kết nối với bộ tạo dao động, nối với điện áp tham chiếu, nối với bộ phận Reset…

Một số đặc tính của ATMEGA32 :

• Bộ nhớ FLASH 32KB.

• Bộ nhớ EEPROM 1024 Byte.

• Bộ nhớ SRAM 2KB.

• Các đường dẫn vào/ra (I/O) lập trình được.

• Có giao tiếp SPI. Có giao tiếp I2C.

• Có 8 kênh ADC 10 bit .

• Có 1 bộ so sánh analog.

• Có 4 kênh băm xungPWM .

• Có 2 bộ timer/counter 8 bit.

• Có 1 bộ timer/counter1 16 bit .

• Có 1 bộ định thời Watchdog .

• Có 1 bộ truyền nhận USART lập trình được .

• Giao diện SPI đồng bộ.

• Có 1 bộ so sánh analog.

Có các chế độ tiết kiệm năng lượng như sleep, stand by..vv. Điện áp hoạt động từ 2,7 – 5,5 V.

Một phần của tài liệu thiết kế và chế tạo mạch điều khiển mô hình ô tô điện (Trang 56 - 68)