Báo cáo đề tài vi điều khiển AVR
Trang 1BÁO CÁO ĐỀ TÀI VI ĐIỀU KHIỂN AVR
Nhóm av
GVHD: ThS Lê Hoài Nghĩa
Trang 2NỘ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
Trang 3&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à 16bit
lậ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.
Trang 4Lị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
Trang 5Ư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
Trang 6Phân loại AVR
-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.
Trang 7Mộ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
Trang 8&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
Trang 9Sơ đồ chân
Trang 10Sơ đồ khối
Trang 12CPU
Trang 13CPU (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.
Trang 14• 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ụ.
Trang 15• Atmega 16 có 32 thanh ghi chức
năng chung thực thi nhiều tác vụ
Trang 16có 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ỉ đó.
Trang 17• Bộ nhớ dữ liệu SRAM
Trang 18• Đâ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.
Trang 19• 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.
Trang 20Quá 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.
Trang 21&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ơ.
Trang 22Cấ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…
Trang 23Thiết kế PWM như thế nào?
• Dùng IC 555 tạo xung:
Trang 24Thiế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 1
Timer 2Timer 0
Trang 25Sơ đồ khối
• Sơ đồ khối Timer 16 bit:
Trang 26Cá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
Trang 271 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
Trang 28độ phase correct PWM sử dụng hai sườn dốc.
Trang 29Cá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ơ
Trang 30cá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
Trang 31Code PWM chế độ Pharse
Correct
• Sử dụng 2 kênh OC1A, O1CB:
– Step1: OC1A, OC1B output:
Trang 32Một số mạch điều khiển động cơ DC bằng PWM
• Mạch cầu H:
Trang 33Một số mạch điều khiển động cơ DC bằng PWM(tt)
• Mạch 1 Fet 1 Role
Trang 34Một số mạch điều khiển động cơ DC bằng PWM(tt)
• Mạch IC 298:
Trang 35&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
Trang 36Thiế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:
Trang 37Thiết kế phần cứng(tt)
• Sơ đồ mạch nạp qua cổng LPT
Trang 38Thiết kế phần cứng(tt)
Sơ đồ mạch nạp qua cổng LPT dùng IC đệm 74HC244
Trang 39Thiết kế phần cứng(tt)
• Mạch nạp qua cổng USB AVR 910
Trang 40Thiết kế phần cứng(tt)
• KẾT NỐI MẠCH NẠP VỚI AVR
Trang 41Lập trình điều khiển
• Công cụ lập trình:
– AVR Studio
– CodeVision
Trang 42Lậ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
Trang 43Lập trình Input-Output
– Đâ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.
– Đâ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.
– Đâ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.
Trang 44Lậ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
Trang 45Thanks so much……