Báo cáo đồ án thực tập tốt nghiệp
Nội dung: Thiết kế mạch điều khiển động cơ DC và hiển thị
tốc độ ra màn hình LCD.
Giáo viên hướng dẫn: Đặng Thị Hương Giang
Hà Thanh Sơn
Nhóm sinh viên thực hiện: nhóm tối 3, 5,7. ca 5h30-8h
1051070056 Ngô Thị Mai 22/06/1992
1051070048 Nguyễn Hoàng Long 22/02/1992
1051070060 Nguyễn Thị Oanh 24/11/1992
1051070069 Nguyễn Hồng Quân 18/09/1992
1051070063 Đàm Văn Phương 28/01/1992
1051070081 Nguyễn Thị Sản 01/02/1992
1051070093 Nguyễn Thị Thao 15/01/1991
1051070003 Nguyễn Việt Điển 01/04/1991
1051070104 Nguyễn Minh Tú 11/10/1991
1051070109 Đỗ Văn Tuấn 28/09/1991
1051070099 Nguyễn Thanh Tùng 07/07/1991
1051070100 Cao Thế Tùng 07/05/1992
1051070101 Vũ Thanh Tùng 19/01/1992
1051070113 Nguyễn Thị Thanh Tuyền 28/11/1992
1051070118 Dương Thị Xiêm 16/08/1992
1051070090 Dương Quyết Thắng 23/01/1992
Phần A giới thiệu
Báo cáo đồ án thực tập tốt nghiệp.
Lời giới thiệu.
Từ giữa những năm 80 đến nay công nghệ chế tạo linh kiện bán dẫn có
những phát triễn vược bật để hỗ trợ cho sự phát triễn của công nghệ
thông tin, và sự tự động hóa trong công nghiệp, … Với độ tích hợp ngày
càng cao, công suất tiêu tán bé hơn, thông minh hơn nó đã làm thay đổi
hẵn cấu trúc của nền công nghiệp hiện tại. Bước vào đầu thế kỷ 21 kỹ
thuật điện tử_vi điều khiển sẽ là “Chiếc chìa khóa kỹ thuật“ cho các
Xin chân thành cảm ơn !
Nhóm thực hiện đồ án.
Mục Lục
3 | P a g e
Báo cáo đồ án thực tập tốt nghiệp.
Phần A: giới thiệu
Lời giới thiệu
Lời cảm ơn
Phần B: nội dung chính
Tóm tắt nội dung đề tài
CHƯƠNG I GIỚI THIỆU LINH KIỆN QUAN TRỌNG TRONG ĐỒ ÁN
I. GIỚI THIỆU CHUNG VỀ CHÍP ATMEGA8 7
II. TÌM HIỂU LCD 16x2 22
III. TÌM HIỂU IC 74LS151 (74HC151)…………………………………… 27
IV. TÌM HIỂU ĐỘNG CƠ DC……………………………………………….29
CHƯƠNG II MẠCH NGHUYÊN LÝ VÀ NGUYÊN LÝ LÀM VIỆC
I. MẠCH ĐIỀU KHIỂN PHÍM BẤM 35
1. Sơ đồ nguyên lý
2. Nghuyên lý làm việc
II. MẠCH ĐIỀU KHIỂN ĐỘNG CƠ DC 36
1. Sơ đồ nguyên lý
2. Nguyên lý làm việc
III. MẠCH ĐIỀU KHIỂN TRUNG TÂM 37
1. Sơ đồ nguyên lý
2. Nguyên lý làm việc
CHƯƠNG III CODE ĐIỀU KHIỂN THIẾT BỊ VÀ MÔ PHỎNG PROTEUS….38
1. Code điều khiển
2. Mạch mô phỏng
CHƯƠNG IV: KẾT LUẬN ………………………………………………………44
TÀI LIỆU THAM KHẢO 44
EEPROM có thể ghi 100.000 lần.Hỗ trợ bootloader, có khả năng
tự ghi vào bộ nhớ chương trình, cập nhật chương trình cho chip
mà không cần mạch nạp.
- Timer 8 bit: 2.
- Timer 16 bit: 1.
- ADC: 6 kênh, 10 bit.
- Giao tiếp: TWI (I2C), UART, SPI
Điện áp hoạt động:
Atmega8L: 2.7V – 5.5V.
Atmega8: 4.5V – 5.5V.
…
Sơ đồ chân:
7 | P a g e
Báo cáo đồ án thực tập tốt nghiệp.
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. Hình 1 mô tả 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, trong các chip AVR cũ (như AT90S1200 hay
AT90S2313…) 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 setion. Boot section sẽ được khảo
sát trong các phần sau, trong bài này khi nói về bộ nhớ chương
trình, chúng ta tự hiểu là Application section. Thực chất,
application section bao gồm 2 phần: phần chứa các instruction
8 | P a g e
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. Các thanh
ghi này có các đặc điểm sau:
• Được truy cập trực tiếp trong các instruction.
• 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.
• 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.
10 | P a g e
Báo cáo đồ án thực tập tốt nghiệp.
Để minh họa, hãy xét ví dụ thực hiện phép cộng 2 thanh ghi
bằng instruction ADD như sau:
ADD R1, R2
Bạn thấy trong dòng lệnh trên, 2 thanh ghi R1 và R2 được
sử dụng trực tiếp với tên của chúng, dòng lệnh trên khi được
dịch sang opcode để download vào chip sẽ có dạng:
0000110000010010 trong đó 00001=1 tức thanh ghi R1 và
00010 = 2 chỉ thanh ghi R2. Sau phép cộng, kết quả sẽ được lưu
vào thanh ghi R1.
Tất cả các instruction sử dụng RF làm toán hạng đều có thể
truy nhập tất cả các RF một cách trực tiếp trong 1 chu kỳ xung
clock, ngoại trừ SBCI, SUBI, CPI, ANDI và LDI, các
instruction này chỉ có thể truy nhập các thanh ghi từ R16 đến
R31.
Thanh ghi R0 là thanh ghi duy nhất được sử dụng trong
instruction LPM (Load Program Memory). Các thanh ghi R26,
R27, R28, R29, R30 và R31 ngoài chức năng thông thường còn
được sử dụng như các con trỏ (Pointer register) trong một số
I/O, lệnh này sử dụng địa chỉ kiểu thanh ghi, cấu trúc của lệnh
như sau: OUT A, Rr, trong đó A là địa chỉ của thanh ghi trong
vùng nhớ I/O, Rr là thanh ghi RF, lệnh OUT xuất giá trị từ thanh
ghi Rr ra thanh ghi I/O có địa chỉ là A. Giả sử chúng ta muốn
xuất giá trị chứa trong R6 ra thanh ghi điều khiển hướng của
PORTD, tức thanh ghi DDRD, địa chỉ tính theo vùng I/O của
thanh ghi DDRD là 0x0011, như thế câu lệnh của chúng ta sẽ có
dạng: OUT 0x0011, R6. Tuy nhiên trong 1 trường hợp khác, nếu
muốn truy xuất DDRD theo dạng SRAM, ví dụ lệnh STS hay
LDS, thì phải dùng địa chỉ tuyệt đối của thanh ghi này, tức giá
trị 0x0031, khi đó lệnh OUT ở trên được viết lại là STS 0x0031,
R6.
Để thống nhất cách sử dụng từ ngữ, từ bây giờ chúng ta
dùng khái niệm “địa chỉ I/O” cho các thanh ghi trong vùng nhớ
I/O để nói đến địa chỉ không tính phần Register File, khái niệm
“địa chỉ bộ nhớ” của thanh ghi là chỉ địa chỉ tuyệt đối của
chúng trong SRAM. Ví dụ thanh ghi DDRD có “địa chỉ I/O” là
0x0011 và “địa chỉ bộ nhớ” của nó là 0x0031, “địa chỉ bộ nhớ”
= “địa chỉ I/O” + 0x0020.
13 | P a g e
Báo cáo đồ án thực tập tốt nghiệp.
Vì các thanh ghi trong vùng I/O không được hiểu theo tên gọi
như các Register file, khi lập trình cho các thanh ghi này, người
lập trình cần nhớ địa chỉ của từng thanh ghi, đây là việc tương
đối khó khăn. Tuy nhiên, trong hầu hết các phần mềm lập trình
cho AVR, địa chỉ của tất cả các thanh ghi trong vùng I/O đều
được định nghĩa trước trong 1 file Definition, bạn chỉ cần đính
kèm file này vào chương trình của bạn là có thể truy xuất các
thanh ghi với tên gọi của chúng. Giả sử trong ví dụ ở bài 1, để
lập trình cho chip Atmega8 bằng AVRStudio, dòng thứ 2 chúng
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). Đó chính là
cách thức hoạt động của AVR.
15 | P a g e
Báo cáo đồ án thực tập tốt nghiệp.
AVR có ưu điểm là hầu hết các instruction đề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 1 số vi điều khiển khác như PIC nhưng
thời gian thực thi vẫn nhanh hơn.
Stack.
Stack được hiểu như là 1 “tháp” dữ liệu, dữ liệu được chứa
vào stack ở đỉnh “tháp” và dữ liệu cũng được lấy ra từ đỉnh.
Kiểu truy cập dữ liệu của stack gọi là LIFO (Last In First Out –
vào sau ra trước). Hình 5 thể hiện cách truy cập dữ liệu của
stack.
Hình 5. Stack.
Khái niệm và cách thức hoạt động của stack có thể được áp
dụng cho AVR, bằng cách khai báo một vùng nhớ trong SRAM
là stack ta có thể sử dụng vùng nhớ này như một stack thực thụ.
Để khai báo một vùng SRAM làm stack chúng ta cần xác
lập địa chỉ đầu của stack bằng cách xác lập con trỏ stack-SP
(Stack Pointer). SP là 1 con trỏ 16 bit bao gồm 2 thanh ghi 8 bit
SPL và SPH (chữ L là LOW chỉ thanh ghi mang giá trị byte thấp
của SP, và H = HIGH), SPL và SPH nằm trong vùng nhớ I/O.
16 | P a g e
17 | P a g e
Báo cáo đồ án thực tập tốt nghiệp.
LDI R16, 8
PUSH R16
Khi đó nội dung của stack sẽ như trong hình 6.
Hình 6. Nội dung stack trong ví dụ.
Sau mỗi lần PUSH dữ liệu, SP sẽ giảm 1 đơn vị và trỏ vào
vị trí tiếp theo.
Bây giờ nếu ta dùng POP để lấy dữ liệu từ stack, POP R2, thì R2
sẽ mang giá trị của ngăn nhớ 0x045D, tức R2=8. Trước khi
instruction POP được thực hiện, con trỏ SP được tăng lên 1 đơn
vị, sau đó dữ liệu sẽ được lấy ra từ vị trí mà SP trỏ đến trong
stack.
Stack trong AVR không phải là “vô đáy”, nghĩa là chúng ta
chỉ có thể PUSH dữ liệu vào stack ở 1 độ sâu nhất định nào đấy
(phụ thuộc vào chip). Sử dụng stack không đúng cách đôi khi sẽ
làm chương trình thực thi sai hoặc tốn thời gian thực thi vô ích.
Vì thế không nên sử dụng stack chỉ để lưu các biến thông
thường. Ứng dụng phổ biến nhất của stack là sử dụng trong các
chương trình con (Subroutine), khi chúng ta cần “nhảy” từ một
vị trí trong chương trình chính đến 1 chương trình con, sau khi
thực hiện chương trình con lại muốn quay về vị trí ban đầu trong
chương trình chính thì Stack là phương cách tối ưu dùng để chứa
bộ đếm chương trình trong trường hợp này. Xem lại ví dụ trong
bài 1, trong chương trình chính chúng ta dùng lệnh RCALL
18 | P a g e
Báo cáo đồ án thực tập tốt nghiệp.
DELAY để nhảy đến đoạn chương trình con DELAY, RCALL
là lệnh nhảy đến 1 vị trí trong bộ nhớ chương trình, trước khi
nhảy, PC được cộng thêm 1 và PUSH một cách tự động vào
phép toán đại số hay phép Logic bằng 0.
• Bit 2 – N (Negative Flag: Cờ âm): cờ này được set nếu kết
quả phép toán đại số hay phép Logic là số âm.
• Bit 3 – V (Two’s complement Overflow Flag: Cờ tràn
của bù 2): hoạt động của cờ này có vẻ sẽ khó hiểu cho bạn vì nó
liên quan đến kiến thức số nhị phân (phần bù), chúng ta sẽ đề
cập đến khi nào thấy cần thiết.
• Bit 4 – S (Sign Bit: Bit dấu): Bit S là kết quả phép XOR
giữa 1 cờ N và V, S=N xor V.
• Bit 5 – H (Half Carry Flag: Cờ nhờ nữa): cờ H là cờ nhớ
trong 1 vài phép toán đại số và phép Logic, cờ này hiệu quả đối
với các phép toán với số BCD.
• Bit 6 – T (Bit Copy Storage): được sử dụng trong 2
Instruction BLD (Bit LoaD) và BST (Bit STorage). Tôi sẽ giải
thích chức năng Bit T trong phần giới thiệu về BLD và BST.
20 | P a g e
Báo cáo đồ án thực tập tốt nghiệp.
• Bit 7 – I (Global Interrupt Enable) : Cho phép ngắt toàn
bộ): Bit này phải được set lên 1 nếu trong chương trình có sử
dụng ngắt. Sau khi set bit này, bạn muốn kích hoạt loại ngắt nào
cần set các bit ngắt riêng của ngắt đó. Hai instruction dùng riêng
để Set và Clear bit I là SEI và CLI.
Chú ý: tất cả các bit trong thanh ghi SREG đều có thể được
xóa thông qua các instruction không toán hạng CLx và set bởi
SEx, trong đó x là tên của Bit.Ví dụ CLT là xóa Bit T và SEI là
set bit I.
Tôi chỉ giải thích ngắn gọn chức năng của các bit trong thanh
ghi SREG, cụ thể chức năng và cách sử dụng của từng bit chúng
ta sẽ tìm hiểu trong các trường hợp cụ thể sau này, người đọc có
thể tự tìm hiểu thêm trong các tài liệu về INSTRUCTION cho
với bộ điều khiển và 2 chân nguồn cho “đèn LED nền”. Thứ tự
các chân thường được sắp xếp như sau:
23 | P a g e
Báo cáo đồ án thực tập tốt nghiệp.
Bảng 1. Sơ đồ chân.
Trong một số LCD 2 chân LED nền được đánh số 15 và 16
nhưng trong một
số trường hợp 2 chân này được ghi là A (Anode) và K
(Cathode). Hình dưới mô tả cách kết nối LCD với nguồn và
mạch điều khiển.
24 | P a g e
Báo cáo đồ án thực tập tốt nghiệp.
Chân 1 và chân 2 là các chân nguồn, được nối với GND và
nguồn 5V. Chân 3 là chân chỉnh độ tương phản (contrast), chân
này cần được nối với 1 biến trở chia áp như trong hình 2.Trong
khi hoạt động, chỉnh để thay đổi giá trị biến trở để đạt được
độtương phản cần thiết, sau đó giữ mức biến trở này. Các chân
điều khiển RS, R/W, EN và các đường dữ liệu được nối trực tiếp
với vi điều khiển. Tùy theo chế độ hoạt động 4 bit hay 8 bit mà
các chân từ D0 đến D3 có thể bỏ qua hoặc nối với vi điều khiển.
25 | P a g e