atmel avr

45
BÁO CÁO ĐỀ TÀI VI ĐIỀU KHIỂN AVR Thành viên: Võ Đình Chinh Phạm Hoài Phước Trần Minh Tính Huỳnh Thanh Long GVHD: ThS Lê Hoài Nghĩa

Upload: chinh-vo

Post on 26-May-2015

3.924 views

Category:

Education


2 download

DESCRIPTION

Atmel-AVR control description

TRANSCRIPT

Page 1: Atmel avr

BÁO CÁO ĐỀ TÀI VI ĐIỀU KHIỂN AVR

Thành viên:Võ Đình Chinh

Phạm Hoài Phước

Trần Minh Tính

Huỳnh Thanh LongGVHD: ThS Lê Hoài Nghĩa

Page 2: Atmel avr

NỘI DUNG

• Tổng quan về vi điều khiển AVR • Kiến trúc vi điều khiển AVR – Atmega16• Giới thiệu PWM AVR điều khiển động

cơ DC• Các công cụ lập trình AVR

Page 3: Atmel avr

&1.Tổng quan về vi điều khiển AVR

• AVR do hãng Atmel chế tạo ra, là họ VĐK 8bit theo công nghệ mới với những tính năng rất mạnh được tích hợp trong trong chip.

• AVR ổn định hơn rất nhiều so với dòng VĐK 8051• Tính năng mới của họ AVR :

- Giao diện SPI đồng bộ, giao tiếp I2C, USART.- Các lối vào ra Bộ Timer/Counter 8bit và 16bitlập trình được.- Tích hợp bộ biến đổi ADC 10bit.- Có sẵn các kênh băm xung PWM.- Bộ nhớ EEPROM.

Page 4: Atmel avr

Lịch sử phát triển AVR• Ban đầu AVR MCU (Micro Controller Unit) được phát

triển tại một phòng ASIC (Application Specific IC) ở Trondheim Nauy, đó là nơi mà 2 người sáng lập của Atmel Nauy làm việc như là sinh viên. Và nó được biết đến với tên µRISC (Micro RISC). Khi công nghệ này được bán cho Atmel, cấu trúc bên trong AVR được phát triển xa hơn bởi Alf và Vegard tại Atmel Nauy, một công ty con của Atmel được thành lập bởi 2 thành viên trên.

• AVR là viết tắt của Advanced Virtual RISC, nhưng cũng có thể là viết tắt cho 2 người sáng lập: Alf and Vegard [RISC], nhưng Atmel nói rằng AVR chẳng là viết tắt của bất cứ cái gì cả.

• Một sản phẩm đầu tiên của AVR là AT90S8515, cũng có đóng gói DIP 40 chân giống như 8051 vậy, nó bao gồm phức hợp địa chỉ các thành phần bên ngoài và data bus. Điều khác biệt là chân RESET (8051 RESET tích cực mức cao, AVR lại tích cực mức thấp), ngoại trừ điểm này, các ngỏ ra đều giống nhau.

Page 5: Atmel avr

Ưu thế của MCU AVR

• Kết nối phần cứng cho AVR đơn giản với những linh kiện thông dụng như điện trở, tụ điện, thạch anh. Dòng ra điều khiển Port lớn và không cần dùng điện trở kéo.

• Thiết kế mạch nạp cho AVR khá đơn giản giao tiếp qua cổng LPT, COM, USB. Hỗ trợ ISP lập trình trực tiếp trên mạch.

• Hỗ trợ lập trình trên nền ngôn ngữ ASM, C với nhiều công cụ hỗ trợ như CodeVision, AVR Studio.

Page 6: Atmel avr

Phân loại AVR a. tinyAVRs :                                                - 1-8 kB bộ nhớ chương trình.                                                - 8-32 chân.                                                 -Hạn chế các thiết bị ngoại vi. b.megaAVRs:                                                - 4-256 kB  bộ nhớ chương trình.                                                 -28-100 chân.                                                - Mở rộng tập lệnh.                                                 -Nhiều thiết bị ngoại vi. c. XmegaAVRs:                                                 - 16-256 kB  bộ nhớ chương trình.                                                 -44-100 chân.                                                - Mở rộng các thiết bị như  DMA, "Event

System", và hỗ trợ mã hóa .                                                  -Mở rộng thiết bị ngoại vi với DACs.d. Application specific AVRs:                                                 -megaAVRs với các thành phần đặc biệt

không có trong các sản phẩm khác của AVR như là LCD controller, USB controlller, PWN, CAN, v.v...

The New 32-Bit AVRs: Năm 2006 Atmel tung ra VDK mới, 32 bit, kiến trúc AVR32.

Chúng bao gồm tập lệnh SIMD và DSP, cùng với các thành phần xử lý audio và video. Dòng VDK 32 bit này được dự định cạnh tranh với VDK ARM. Các tập lệnh giống với các nhân RISC khác, nhưng không tương thích với các dòng AVR trước cũng như nhân ARM khác.

Page 7: Atmel avr

Một số AVR phổ biến– AT90S1200– AT90S2313 – AT90S2323 and AT90S2343 – AT90S2333 and AT90S4433– AT90S4414 and AT90S8515 – AT90S4434 and AT90S8535 – AT90C8534– ATtiny10, ATtiny11 and ATtiny12– ATtiny15 – ATtiny22– ATtiny26 – ATtiny28 – ATmega8/8515/8535 – ATmega16 – ATmega161 – ATmega162 – ATmega163 – ATmega169 – ATmega32 – ATmega323 – ATmega103– ATmega64/128/2560/2561

Page 8: Atmel avr

&2. Kiến trúc vi điều khiển AVR Atmega16

• 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 register file. Trong khi đó program memory bus có độ rộng 16 bits và chỉ phục vụ cho instruction registers.

Page 9: Atmel avr

Sơ đồ chân

Page 10: Atmel avr

Sơ đồ khối

Page 11: Atmel avr

Các Port xuất nhập • Port A:

– Port A là bên cạnh là Port xuất nhập thông thường 8 bit còn được thiết kế cho bộ ADC chuyển đổi tương tự số. Port A thiết kế với điện trở nội treo lên ở mức cao.

• Port B:– Là port xuất nhập thông thường 8 bit.

• Port C:– Là port xuất nhập thông thường 8 bit. Bên cạnh đó

Port C còn có một số chân giao tiếp JTAG PC5-TDI, PC3-TMS, PC2 –TCK.

• PORT D:– Là port xuất nhập thông thường 8 bit.

• Các chân khác:» VCC, AVCC, AREF, XTAL1, XTAL2, RESET

Page 12: Atmel avr

CPU

Page 13: Atmel avr

CPU (tt)• ALU:

– ALU làm việc trực tiếp với các thanh ghi chức năng chung. Các phép toán được thực hiện trong một chu kỳ xung clock. Hoạt động của ALU được chia làm 3 loại: đại số, logic và theo bit.

• Thanh ghi trạng thái:– Đây là thanh ghi 8 bit lưu trữ trạng thái

của ALU sau các phép tính số học và logic.

Page 14: Atmel avr

CPU(tt)• C: Carry Flag cờ nhớ .• Z: Zero Flag Cờ zero. • N: Negative Flag kết quả phép toán âm.• V: Two’s complement overflow cờ bù 2.• S For signed tests (S=N XOR V) kiểm tra 2 cờ N

và V.• H: Half Carry Flag được sử dụng trong BCD

cho một số toán hạng.• T: Transfer bit used by BLD and BST

instructionsđược sử dụng làm nơi trung gian trong các lệnh BLD,BST.

• I: Global Interrupt Enable/Disable Flag đây là bit cho phép toàn cục ngắt. Nếu bit này ở trạng thái logic 0 thì không có một ngắt nào được phục vụ.

Page 15: Atmel avr

CPU(tt)• Atmega 16 có 32 thanh ghi chức

năng chung thực thi nhiều tác vụ trong đó – Một 8 bit output toán hạng và một 8 bit cho input kết

quả.

– Hai 8 bit output toán hạng và một 8 bit cho input kết quả.

– Hai 8 bit cho output kết quả và một 16 bit cho input kết quả.

– Một 16 bit cho output toán hạng và một 16 bit cho input kết quả.

Page 16: Atmel avr

Memorry • Bộ nhớ chương trình Flash

Bộ nhớ Flash 16KB của ATmega16 dùng để lưu trữ chương trình với độ rộng 16 bit. Do các lệnh của AVR có độ dài 16 hoặc 32 bit nên bộ nhớ Flash được sắp xếp theo kiểu 8KX16.

• Bộ nhớ chương trình chỉ gồm 1 phần là Application Flash Section nhưng trong các chip AVR mới chúng ta có thêm phần Boot Flash section. Boot Section. Thực chất, application section bao gồm 2 phần: phần chứa các instruction và phần chứa 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 và phần chứa instruction nằm liền sau đó. Các chương trình được viết sau địa chỉ đó.

Page 17: Atmel avr

Memorry(tt)

• Bộ nhớ dữ liệu SRAM

Page 18: Atmel avr

Memorry• Đây là phần 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 và bộ nhớ này gồm các phần sau:

– Phần 1: là phần đầu tiên trong bộ nhớ dữ liệu bao gồm 32 thanh General Purpose Rgegister – GPR. Tất cả các thanh ghi này đều là các thanh ghi 8 bits. 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.

– Phần 2: là phần nằm ngay sau SFR bao gồm 64 thanh ghi IO hay còn gọi là vùng nhớ IO. Vùng nhớ I/O là cửa ngõ giao tiếp giữa CPU và thiết bị ngoại vi. Vùng nhớ I/O có thể được truy cập như SRAM hay như các thanh ghi I/O. Nếu sử dụng instruction truy xuất SRAM để truy xuất vùng nhớ này thì địa chỉ của chúng được tính từ 0x0020 đến 0x005F. Nhưng nếu truy xuất như các thanh ghi I/O thì địa chỉ của chúng đựơc tính từ 0x0000 đến 0x003F.

– Phần 3: internal SRAM là vùng không gian cho chứa các biến trong lúc thực thi chương trình.

Page 19: Atmel avr

Memorry(tt)

• Bộ nhớ dữ liệu EEPROM ATmega16 chứa bộ nhớ dữ liệu EEPROM dung lượng 512 byte, và được sắp xếp theo từng byte, cho phép các thao tác đọc/ghi từng byte một. EEPROM được tách riêng và có địa chỉ tính từ 0x0000H.

Page 20: Atmel avr

Quá trình thực thi lệnh • Các instruction đượ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à  1 instruction chứa trong program memory sẽ được load vào trong instruction register, instruction register 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). Hầu hết các instruction đều được thực thi trong 1 chu kỳ xung clock.

Page 21: Atmel avr

&3. Giới thiệu PWM AVR điều khiển động cơ DC

• PWM là cụm từ Pulse Witdth Modulation là một kỹ thuật dùng để điều khiển động cơ DC bằng cách điều chỉnh độ rộng của xung. Khoảng thời gian mà xung ở mức logic cao sẽ ứng với thời gian có dòng điện qua động cơ và ngược lại. PWM sử dụng kỹ thuật đóng mở nguồn cung cấp cho động cơ với những khoảng thời gian giãn cách khác nhau từ đó điều khiển được tốc độ của động cơ.

Page 22: Atmel avr

Cấu tạo động cơ DC• Động cơ một chiều được ứng dụng rộng rãi trong

rất nhiều lĩnh vực điều khiển tự động. Cấu tạo của động cơ một chiều gồm có Stato và Roto.

• Stato thường làm bằng nam châm vĩnh cửu hoặc nam châm điện ở những động cơ công suất lớn. Roto là những cuộn dây được quấn trên lõi thép. Roto thường là bộ phận quay còn Stato thì đứng yên.

• Các đầu ra của cuộn dây Roto được đặt lên bộ cổ góp có các chổi than nhằm đảm bảo từ thông qua cuộn dây Roto là liên tục tức là duy trì lực từ tác dụng quay lên Roto một cách liên tục.

• Động cơ DC có một số loại như Servo, Step, Encoder…

Page 23: Atmel avr

Thiết kế PWM như thế nào?

• Dùng IC 555 tạo xung:

Page 24: Atmel avr

Thiết kế PWM như thế nào?

• Dùng module PWM tích hợp sẵn của AT Mega 16• AT Mega 16 có 4 kênh PWM tương ứng với 4 chân

là:

Timer 1Timer 2

Timer 0

Page 25: Atmel avr

Sơ đồ khối

• Sơ đồ khối Timer 16 bit:

Page 26: Atmel avr

Các chế độ định thời• Chế Độ Thô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.

Page 27: Atmel avr

Các chế độ định thời(tt)• Chế Độ So Sánh (CTC) :

Đâ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ì 1 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.

Page 28: Atmel avr

Các chế độ định thời(tt)• Chế Độ Fast PWM:

Cho phép tạo ra sóng với tần số cao.Sự khác biệt cơ bản giữa Fast PWM với các loại PWM khác là nó chỉ sử dụng 1 sườn dốc.Bộ đếm sẽ đếm từ Bottom đến Max sau đó khởi động lại từ bottom. Trong chế độ không đảo đầu ra của chân so sánh OCx sẽ bi xoá khi có phép toán so sánh giữa TCNTx và thanh ghi ORC là bằng nhau. Và sẽ được sét lên 1 khi giá trị đạt Bottom. Trong chế độ đảo ,đầu ra đảo sẽ được set lên 1 khi sự so sánh giữa thanh ghi ORC và giá trị trong Timer bằng nhau và sẽ bị xoá khi giá trị đạt Bottom.Trong cả hai trường hơp này tần số của chế đô Fast PWM đều gấp đôi so với chế độ phase correct PWM sử dụng hai sườn dốc.

Page 29: Atmel avr

Các chế độ định thời(tt)• Chế độ Phase correct PWM:

Chế độ này hoạt động dựa trên hai sườn lên xuống.Bộ đếm sẽ đếm liên tục từ giá trị BOTTOM đến giá trị MAX và sau đó từ giá trị MAX đến giá trị BOTTOM.Trong chế độ so sánh không đảo chân so sánh (OCx) sẽ bị xóa khi giá trị TCNTx bằng giá trị OCRx trong quá trình đếm lên và sẽ được set bằng 1 khi giá trị so sánh xuất hiện trong quá trình đếm xuống.Chế độ so sánh đảo thì các giá trị là ngược lại.Với hoạt động hai sườn xung này thì chế độ này không tạo ra được tần số nhỏ như chế độ một sườn xung .Nhưng do tính cân đối của hai sườn xung thì nó tốt hơn cho điều khiển động cơ.

Page 30: Atmel avr

PWM Timer 1 – 16 bit• Step 1: pin PWM là output bằng

cách set giá trị trong thanh ghi DDRn.X

• Step 2: chọn chế độ PWM bằng cách set thanh ghi TCCR1A

• Step 3: chọn xung clock bằng cách set thanh ghi TCCR1B

• Step 4: chọn giá trị của thanh ghi OCRn

• Step 5: bắt đầu PWM

Page 31: Atmel avr

Code PWM chế độ Pharse Correct

• Sử dụng 2 kênh OC1A, O1CB:– Step1: OC1A, OC1B output:

• DDRD=0x30=0b001100000;

• PORTD=0x00;– Step2: PWM Mode Pharse Correct

• TCCR1A=0xF1=0b11110001;

– Step3: Select clock source• TCCR1B=0x8B;

– Step4: set OCRL=0x00, OCRH=0x00;– Step5: bắt đầu PWM

Page 32: Atmel avr

Một số mạch điều khiển động cơ DC bằng PWM

• Mạch cầu H:

Page 33: Atmel avr

Một số mạch điều khiển động cơ DC bằng PWM(tt)

• Mạch 1 Fet 1 Role

Page 34: Atmel avr

Một số mạch điều khiển động cơ DC bằng PWM(tt)

• Mạch IC 298:

Page 35: Atmel avr

&4.Các công cụ lập trình AVR

• Thiết kế phần cứng• Lập trình điều khiển

Page 36: Atmel avr

Thiết kế phần cứng

• Thiết kế nguồn 5V cho AVR– Đây là bước khởi đầu quan trọng và cần thiết, vì

nếu không có bộ nguồn ổn định cho con AVR thì dù có làm mạch nạp đúng, cấu hình đúng các chương trình nạp,… AVR vẫn làm việc không tốt. Dẫn đến việc chương trình nạp không đọc được AVR.

– Sau đây là sơ đồ nguồn 5V:

Page 37: Atmel avr

Thiết kế phần cứng(tt)• Sơ đồ mạch nạp qua cổng LPT

Page 38: Atmel avr

Thiết kế phần cứng(tt)

Sơ đồ mạch nạp qua cổng LPT dùng IC đệm 74HC244

Page 39: Atmel avr

Thiết kế phần cứng(tt)

• Mạch nạp qua cổng USB AVR 910

Page 40: Atmel avr

Thiết kế phần cứng(tt)

• KẾT NỐI MẠCH NẠP VỚI AVR

Page 41: Atmel avr

Lập trình điều khiển

• Công cụ lập trình:– AVR Studio– CodeVision

Page 42: Atmel avr

Lập trình Input-Output• Cấu trúc chân của AVR có thể phân biệt rõ chức năng (vào ra)

trạng thái (0 1) từ đó ta có 4 kiểu vào ra cho một chân của avr.Khác với 89 là chỉ có 2 trạng thái duy nhất (0 1) . Đặc biệt nguồn từ chân của AVR đủ khoẻ để điều khiển Led trực tiếp (mA) còn 89 chỉ là vài uA .Để điều khiển các chân này chúng ta có 2 thanh ghi ->PORTx :giá trị tại từng chân (0 – 1) có thể truy cập tới từng bit PORTx.n->DDRx : thanh ghi chỉ trạng thái của từng chân , vào hoặc là ra .Giá trị 1 là ra và 0 là vào .

Page 43: Atmel avr

Lập trình Input-Output• Thanh ghi DDRx

– Đây là thanh ghi 8 bit (ta có thể đọc và ghi các bit ở thanh ghi này) và có tác dụng điều khiển hướng cổng PORTx (tức là cổng ra hay cổng vào). Nếu như một bit trong thanh ghi này được set thì bit tương ứng đó trên PORTx được định nghĩa như một cổng ra. Ngược lại nếu như bit đó không được set thì bit tương ứng trên PORTx được định nghĩa là cổng vào.

• Thanh ghi PORTx– Đây cũng là thanh ghi 8 bit (các bit có thể đọc và ghi

được) nó là thanh ghi dữ liệu của cổng Px và trong trường hợp nếu cổng được định nghĩa là cổng ra thì khi ta ghi một bit lên thanh ghi này thì chân tương ứng trên port đó cũng có cùng mức logic. Trong trường hợp mà cổng được định nghĩa là cổng vào thì thanh ghi này lại mang dữ liệu điều khiển cổng. Cụ thể nếu bit nào đó của thanh ghi này được set (đưa lên mức 1) thì điện trở kéo lên (pull-up) của chân tương ứng của port đó sẽ được kích hoạt. Ngược lại nó sẽ ở trạng thái hi-Z. Thanh ghi này sau khi khởi động Vi điều khiểnsẽ có giá trị là 0x00.

• Thanh ghi PINx– Đây là thanh ghi 8 bit chứa dữ liệu vào của PORTx (trong

trường hợp PORTx được thiết lập là cổng vào) và nó chỉ có thể đọc mà không thể ghi vào được.

Page 44: Atmel avr

Lập trình Input-Output• Để đọc dữ liệu từ ngoài thì ta phải thực

hiện các bước sau:– Đưa dữ liệu ra thanh ghi điều khiển DDRxn để đặt cho

PORTx (hoặc bit n trong port) đó là đầu vào (xóa thanh ghi DDRx hoặc bit).

– Sau đó kích hoạt điện trở pull-up bằng cách set thanh ghi PORTx ( bit).

– Cuối cùng đọc dữ liệu từ địa chỉ PINxn (trong đó x: là cổng và n là bit).

• Để đưa dữ liệu từ vi điều khiển ra các cổng cũng có các bước hoàn toàn tương tự. – Ban đầu ta cũng phải định nghĩa đó là cổng ra bằng cách set bit

tương ứng của cổng đó….và sau đó là ghi dữ liệu ra bit tương ứng của thanh ghi PORTx.

Page 45: Atmel avr

Thanks so much……