Tải bản đầy đủ (.pdf) (31 trang)

Đồ án : Thiết kế mạch và viết chương trình điều khiển động cơ bước dùng vi điều khiển 8051

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (2.99 MB, 31 trang )

PHẦN I : GIỚI THIỆU VI ĐIỀU KHIỂN 8051
I. TỔNG QUAN VỀ HỌ VI ĐIỀU KHIỂN
MCS-51 là họ vi điều khiển của hãng Intel. Vi mạch tổng quát của họ
MCS-51 là chip 8051. 8051 đã trở lên phổ biến sau khi Intel cho phép các nhà
sản xuất khác sản xuất và bán các dạng biến thể của 8051. Điều này dẫn đến sự
ra đời nhiều phiên bản của 8051 với các tốc độ khác nhau và dung lượng ROM
trên chip khác nhau. Mặc dù có nhiều biến thể khác nhau của 8051 về tốc độ và
dung lượng nhớ ROM trên chip, nhưng tất cả chúng đều tương thích với 8051
ban đầu về các lệnh. Điều này có nghĩa là nếu viết chương trình của mình cho
một phiên bản nào của 8051 thì nó cũng sẽ
chạy với mọi phiên bản khác mà không
phân biệt nó được sản xuất từ hãng nào.
Chip 8051 có một số đặc trưng cơ bản sau :
 Bộ nhớ chương trình bên trong : 4 KB (ROM).
 Bộ nhớ dữ liệu bên trong : 128 byte (RAM).
 Bộ nhớ chương trình bên ngoài : 64 KB (ROM).
 Bộ nhớ dữ liệu bên ngoài : 64 KB (RAM).
 40 chân và 32 chân vào/ra.
 6 nguồn ngắt.
 4 cổng xuất nhập (I/O Port) 8 bit.
 Có 2 bộ định thời 16 bit.
 Mạch giao tiếp nối tiếp.
 Bộ xử lý bit (thao tác trên các bit riêng lẻ).
 Có 210 vị trí nhớ được định địa chỉ, mỗi vị trí 1 bit.
 Nhân / Chia trong 4 µs.
Ngoài ra, trong họ MCS-51 còn có một số chip vi điều khiển khác có cấu trúc
tương đương như :

SVTH : Đặng Minh Đức DHTD8A2_HN

Trang - 1 -




II. PHẦN CỨNG CỦA VI ĐIỀU KHIỂN 8051
1. SƠ ĐỒ KHỐI CỦA CHIP 8051

- CPU (Central Processing Unit) : Đơn vị xử lý trung tâm tính toán và điều
khiển quá trình hoạt động của hệ thống.
- OSC (Oscillator) : Mạch dao động tạo tín hiệu xung clock cung cấp cho các
khối trong chip hoạt động.
- Interrupt control : Điều khiển ngắt > nhận tín hiệu ngắt từ bên ngoài (INT0,
INT1), từ bộ định thời (Timer 0, Timer 1) và từ cổng nối tiếp (Serial port), lần
luợt đua các tín hiệu ngắt này đến CPU để xử lý.
- Other registers : Các thanh ghi khác, Lưu trữ dữ liệu của các port xuất/nhập,
trạng thái làm việc của các khối trong chip trong suốt quá trình hoạt động của hệ
thống.
- RAM (Random Access Memory) : Bộ nhớ dữ liệu trong chip lưu trữ các dữ
liệu.
- ROM (Read Only Memory) : Bộ nhớ chương trình trong chip lưu trữ chương
trình hoạt động của chip.
- I/O ports (In/Out ports) : Các port xuất/nhập điều khiển việc xuất nhập dữ liệu
duới
dạng song song giữa trong và ngoài chip thông qua các port P0, P1, P2, P3.
- Serial port : Port nối tiếp điều khiển việc xuất nhập dữ liệu duới dạng nối tiếp
giữa trong và ngoài chip thông qua các chân TxD, RxD.
- Timer 0, Timer 1 : Bộ định thời 0, 1 dùng để định thời gian hoặc đếm sự kiện
(đếm xung) thông qua các chân T0, T1.
- Bus control : Điều khiển bus điều khiển hoạt động của hệ thống bus và việc di
chuyển thông tin trên hệ thống bus.
- Bus system : Hệ thống bus liên kết các khối trong chip lại với nhau.


SVTH : Đặng Minh Đức DHTD8A2_HN

Trang - 2 -


2. SƠ ĐỒ CHÂN VÀ CHỨC NĂNG CÁC CHÂN CỦA VI ĐIỀU KHIỂN
8051

Sơ đồ các chân của vi điều khiển 8051

* Chân 1 đến 8 : được gọi là Cổng 1 (Port 1), 8 chân này có duy nhất 1 chức
năng là xuất và nhập. Cổng 1 có thể xuất và nhập theo bit hoặc byte. Ta đánh
tên cho mỗi chân của Port 1 là P1.X (X = 0 đến 7).
* Chân 9 : là chân vào reset của 8051 Khi tín hiệu này được đưa lên mức cao
trong ít nhất là 2 chu kỳ máy, các thanh ghi trong bộ vi điều khiển được tải
những giá trị thích hợp để khởi động hệ thống. Hay nói cách khác là vi điều
khiển sẽ bị reset nếu chân này được kích hoạt mức cao.

Sơ đồ mạch reset ngoài của 8051

* Chân 10 đến 17 : được gọi là Cổng 3 (Port 3), 8 chân này ngoài chức năng là
xuất và nhập như các chân ở cổng 1 (chân 1 đến 8) thì mỗi chân này còn có
chức năng riêng nữa, cụ thể như sau :
SVTH : Đặng Minh Đức DHTD8A2_HN

Trang - 3 -


Bit
P3.0

P3.1
P3.2
P3.3
P3.4
P3.5
P3.6
P3.7

Tên
RxD
TxD
INT0
INT1
T0
T1
WR
RD

Địa chỉ bit
B0H
B1H
B2H
B3H
B4H
B5H
B6H
B7H

Chức năng
Chân nhận dữ liệu của port nối tiếp.

Chân phát dữ liệu của port nối tiếp.
Ngõ vào ngắt ngoài 0.
Ngõ vào ngắt ngoài 1.
Ngõ vào của bộ định thời/đếm 0.
Ngõ vào của bộ định thời/đếm 1.
Điều khiển ghi vào RAM ngoài.
Điều khiển đọc từ RAM ngoài.

* Chân 18 và 19 (XTAL1 & XTAL2) : 2 chân này được sử dụng để nối với bộ
dao động ngoài.

Mạch dao động cấp cho 8051

- Chức năng :
 Dùng để nối với thạch anh hoặc mạch dao động tạo xung clock bên
ngoài, cung cấp tín hiệu xung clock cho chip hoạt động.
 XTAL1 : ngõ vào mạch tạo xung clock trong chip.
 XTAL2 : ngõ ra mạch tạo xung clock trong chip.
Lưu ý : fTYP=12MHz

fTYP (MHz) : tần số danh định.

* Chân 20 : được nối vào chân 0V của nguồn cấp
* Chân 21 đến chân 28 : được gọi là cổng 2 (Port 2), 8 chân của cổng 2 có 2
công dụng, ngoài chức năng là cổng xuất và nhập như cổng 1 thì cổng 2 này còn
là byte cao của bus địa chỉ khi sử dụng bộ nhớ ngoài.
* Chân 29 (PSEN) : Chân PSEN là chân điều khiển đọc chương trình ở bộ nhớ
ngoài, nó được nối với chân OE của ROM ngoài để cho phép đọc các byte mã
lệnh trên ROM ngoài. PSEN ở mức thấp trong thời gian đọc mã lệnh. Khi thực
hiện chương trình trong ROM nội thì PSEN được duy trì ở mức cao.

* Chân 30 (ALE) : Chân ALE cho phép tách các đường dữ liệu và các đường
địa chỉ tại Port 0 và Port 2.

SVTH : Đặng Minh Đức DHTD8A2_HN

Trang - 4 -


* Chân 31 (EA) : Tín hiệệu chân EA cho phép chọn bộ nhớ chương trình
tr
là bộ
nhớ trong hay ngoài vi điềều khiển. Nếu chân EA được nối ở mứcc cao (nối
(n
nguồn Vcc), thì vi điềuu khi
khiển thi hành chương trình
ình trong ROM nội.
n Nếu chân
EA ở mức thấp (được nốii GND) thì vi điều khiểnn thi hành chương trình
tr
từ bộ
nhớ ngoài.
* Chân 32 đến 39 : đượcc ggọi là cổng 0 (Port 0). Cổng 0 gồm
m 8 chân cũng
c
có 2
công dụng, ngoài chứcc năng xu
xuất nhập, cổng 0 còn là bus đa hợpp dữ
d liệu và địa
chỉ, chức năng này sẽ đượ
ợc sử dụng khi 8051 giao tiếp vớii các biết

bi bị ngoài có
kiếnn trúc Bus như các vi m
mạch nhớ... Vì cổng P0 là mộtt máng mở
m khác so với
các cổng P1, P2 và P3 nên các chân ở cổng 0 phải được nối vớii điện
đi trở kéo khi
sử dụng
ng các chân này như chân vào/ra. Đi
Điện trở này tùy thuộcc vào đặc
đ tính ngõ
vào của thành phầnn ghép nnối với chân của port 0. Thường
ng ta dùng điện
đi trở kéo
khoảng 4K7 đến 10K.

N
Nối điện trở kéo cho cổng 0 của 8051

* Chân 40 : chân nguồnn ccủa vi điều khiển, được nốii vào chân VCC của
c nguồn.
3. TỔ CHỨC BỘ NHỚ C
CỦA CHIP 8051
- Bộ vi xử lý có không gian bbộ nhớ chung cho dữ liệuu và chương trình.
tr

chương trình và dữ liệu nnằm chung trên RAM truớcc khi đưa vào CPU để
đ thực
thi.
- Bộ vi điều khiển có không gian bbộ nhớ riêng cho dữ liệuu và chương trình.
tr


SVTH : Đặng Minh Đứcc DHTD8A2
DHTD8A2_HN

Trang - 5 -


chương trình và dữ liệu nằm riêng trên ROM và RAM truớc khi đưa vào CPU
để thực thi.
- Tổ chức bộ nhớ của chip 8051 :

Không gian bộ nhớ trong chip 8051

3.1. Bộ nhớ chương trình (ROM) :
- Dùng để lưu trữ chương trình điều khiển cho chip 8051 hoạt động.
- Chip 8051 có 4 KB ROM trong, địa chỉ truy xuất : 000H – FFFH.
3.2. Bộ nhớ dữ liệu (RAM) :
- Dùng để lưu trữ các dữ liệu và tham số.
- Chip 8051 có 128 byte RAM trong, địa chỉ truy xuất : 00H – 7FH.
- RAM trong của chip 8051 được chia ra :
 RAM đa chức năng :

 RAM định địa chỉ bit :
Cho phép xử lý từng bit dữ liệu riêng lẻ mà không ảnh hưởng đến các bit
khác trong cả byte.

SVTH : Đặng Minh Đức DHTD8A2_HN

Trang - 6 -



 Các dãy thanh ghi :
Cho phép truy xuất dữ liệu nhanh, lệnh truy xuất đơn giản và ngắn gọn.

3.3. Thanh ghi chức năng đặc biệt :

3.3.1. Thanh ghi A :

3.3.2. Thanh ghi B :

3.3.3. Thanh ghi từ PSW :

SVTH : Đặng Minh Đức DHTD8A2_HN

Trang - 7 -


- Cờ CY (Carry Flag) : cờ nhớ  báo có nhớ/muợn tại bit 7.
 CY = 0 : nếu không có nhớ từ bit 7 hoặc không có muợn cho bit 7.
 CY = 1 : nếu có nhớ từ bit 7 hoặc có muợn cho bit 7.
- Cờ AC (Auxiliary Carry) : cờ nhớ phụ  báo có nhớ/muợn tại bit 3.
 AC = 0 : nếu không có nhớ từ bit 3 hoặc không có muợn cho bit 3.
 AC = 1 : nếu có nhớ từ bit 3 hoặc có muợn cho bit 3.
- Cờ F0 (Flag 0) : cờ zero  có nhiều mục đích dành cho các ứng dụng khác
nhau của nguời lập trình (dự trữ cho các phiên bản chip trong tương lai).
- Bit RS0, RS1 (Register Select) : bit chọn dãy thanh ghi  cho phép xác định
dãy thanh ghi tích cực (hay dãy thanh ghi mà các thanh ghi có tên là R0-R7).

- Cờ OV (Overflow) : cờ tràn  báo kết quả tính toán của phép toán số học
(phép toán có dấu) có nằm trong khoảng từ -128 đến +127 hay không.

 OV = 0 : nếu -128  kết quả  +127.
 OV = 1 : nếu kết quả < -128 hoặc kết quả > +127. Nói cách khác là :
Đối với phép
cộng thì OV=1 nếu có nhớ từ bit 7 nhưng không có nhớ từ bit 6 hoặc nếu có
nhớ từ bit 6 nhưng không có nhớ từ bit 7. Đối với phép trừ thì OV=1 nếu có
mượn cho bit 7 nhưng không có mượn cho bit 6 hoặc nếu có mượn bit 6 nhưng
không có mượn bit 7.
- Cờ P (Parity) : cờ chẵn lẻ  báo số chữ số 1 trong thanh ghi A là số chẵn hay
số lẻ (trong chip 8051 sử dụng chế độ parity chẵn).
 P = 0 : nếu số chữ số 1 trong thanh ghi A là số chẵn (parity chẵn).
 P = 1 : nếu số chữ số 1 trong thanh ghi A là số lẻ (parity chẵn).
3.3.4. Thanh ghi SP :

- Ngăn xếp là vùng nhớ dùng để lưu trữ tạm thời các dữ liệu.
- Đối với chip 8051 thì vùng nhớ đuợc dùng để làm ngăn xếp được giữ trong
RAM nội.
SVTH : Đặng Minh Đức DHTD8A2_HN

Trang - 8 -


- Để sử dụng ngăn xếp thì ta phải khởi động thanh ghi SP (nghĩa là nạp giá trị
cho thanh ghi SP)  vùng nhớ của ngăn xếp có địa chỉ bắt đầu : (SP)+1 và địa
chỉ kết thúc : 7FH.
- Nếu không khởi động SPvùng nhớ của ngăn xếp có địa chỉ bắt đầu : 08H và
địa chỉ kết thúc : 7FH (chế độ mặc định).
3.3.5. Thanh ghi DPTR :

3.3.6. Thanh ghi port xuất nhập :


3.3.7. Thanh ghi port nối tiếp :

SVTH : Đặng Minh Đức DHTD8A2_HN

Trang - 9 -


3.3.8. Thanh ghi định thời :

SVTH : Đặng Minh Đức DHTD8A2_HN

Trang - 10 -


3.3.9. Thanh ghi ngắt :

3.3.10. Thanh ghi điều khiển nguồn :

- Bit SMOD (Serial Mode)  cho phép tăng gấp đôi tốc độ truyền dữ liệu nối
tiếp (tốc độ baud) khi SMOD = 1.
- Bit GF1, GF0 (General Function)  cho phép nguời lập trình dùng với mục
đích riêng (dự trữ cho các phiên bản chip trong tương lai).
- Bit PD (Power Down) dùng để qui định chế độ nguồn giãm.
- Bit IDL (Idle)  dùng để qui định chế độ nghi.

SVTH : Đặng Minh Đức DHTD8A2_HN

Trang - 11 -



3.4. Bộ nhớ ngoài
- Chip 8051 cho ta khả năng mở rộng :
 Không gian bộ nhớ chương trình lên đến 64 KB.
 Không gian bộ nhớ dữ liệu lên đến 64 KB.
- Khi sử dụng bộ nhớ ngoài :
 Port 0  bus địa chỉ byte thấp và bus dữ liệu đa hợp (AD0-AD7).
 Port 2  bus địa chỉ byte cao (A8-A15).
 Port 3 các tín hiệu điều khiển (WR, RD).
- Sự khác nhau giữa đa hợp và không đa hợp bus địa chỉ và bus dữ liệu :

Nhằm làm giảm số lượng chân đưa ra ngoài chip  giảm kích thước của chip.

SVTH : Đặng Minh Đức DHTD8A2_HN

Trang - 12 -


3.4.1. Kết nối và truy xuất bộ nhớ chương trình ngoài :

Giản đồ thời gian chu kỳ nạp lệnh bộ nhớ ngoài

3.4.2. Kết nối và truy xuất bộ nhớ dữ liệu ngoài :

SVTH : Đặng Minh Đức DHTD8A2_HN

Trang - 13 -


Truy xuất bộ nhớ dữ liệu bên trong


3.4.3. Các không gian nhớ chương trình và dữ liệu gối nhau :
RAM 1 : đóng vai trò là bộ nhớ dữ liệu.
RAM 2 : đóng vai trò là bộ nhớ chương trình + bộ nhớ dữu liệu.
Chân RST = 0  Chip 8051 hoạt động bình thuờng.
Chân RST = 1  Chip 8051 đuợc reset.
 Để hoàn tất quá trình reset thì chân RST phải ở mức cao tối thiểu là 2
chu kỳ máy và sau đó chuyển xuống mức thấp.
 Nội dung của RAM trong chip không bị ảnh huởng bởi hoạt động reset.
 Sau khi reset, việc thực thi chương trình luôn luôn bắt đầu ở vi trí đầu
tiên trong bộ nhớ chương trình : Địa chỉ 0000H.

SVTH : Đặng Minh Đức DHTD8A2_HN

Trang - 14 -


III. ỨNG DỤNG CỦA VI ĐIỀU KHIỂN 8051
Kết nối VĐK 8051 với một số ngoại vi đơn giản :
+ VĐK giao tiếp led đơn và phím nhấn
+ Kết nối VĐK với Rơle
+ Kết nối VĐK với LCD
+ Kết nối VĐK với ma trận led
+ Điều khiển động cơ DC
+ Điều khiển động cơ bước
...
Vi điều khiển là một IC lập trình, vì vậy Vi điều khiển cần được lập trình
trước khi sử dụng. Mỗi phần cứng nhất định phải có chương trình phù hợp kèm
theo, do đó trước khi viết chương trình đòi hỏi người viết phải nắm bắt được
cấu tạo phần cứng và các yêu cầu mà mạch điện cần thực hiện.
Chương trình là tập hợp các lệnh được tổ chức theo một trình tự hợp lí để giải

quyết các yêu cầu của người lập trình.Tập hợp tất cả các lệnh gọi là tập lệnh. Họ
Vi điều khiển MSC-51 đều có chung một tập lệnh, các Vi điều khiển được cải
tiến sau này thường ít thay đổi hoặc mở rộng tập lệnh mà chú trọng phát triển
phần cứng.
Lệnh của Vi điều khiển là các số nhị phân 8 bit hay còn gọi là mã máy. Các
lệnh mang mã 00000000b đến 11111111b. Các mã lệnh này được đưa vào lưu
trữ trong ROM, khi thực hiện chương trình Vi điều khiển đọc các mã lệnh này,
giải mã, và thực hiện lệnh.
Vì các lệnh của Vi điều khiển có dạng số nhị phân quá dài và khó nhớ, hơn
nữa việc gỡ lỗi khi chương trình phát sinh lỗi rất phức tạp và khó khăn. Khó
khăn này được giải quyết với sự hỗ trợ của máy vi tính, người viết chương trình
có thể viết chương trình cho vi điều khiển bằng các ngôn ngữ lập trình cấp cao,
sau khi việc viết chương trình được hoàn tất, các trình biên dịch sẽ chuyển các
câu lệnh cấp cao thành mã máy một cách tự động. Các mã máy này sau đó được
đưa (nạp) vào bộ nhớ ROM của Vi điều khiển, Vi điều khiển sẽ tìm đến đọc các
lệnh từ ROM để thực hiện chương trình . Bản thân máy tính không thể thực hiện
các mã máy này vì chúng không phù hợp với phần cứng máy tính, muốn thực
hiện phải có các chương trình mô phỏng dành riêng.

SVTH : Đặng Minh Đức DHTD8A2_HN

Trang - 15 -


Chương trình cho Vi điều khiển có thể viết bằng C++, C, Visual Basic, hoặc
băng các ngôn ngữ cấp cao khác. Tuy nhiên hợp ngữ Assembler được đa số
người dùng Vi điều khiển sử dụng để lập trình, vì lí do này chúng tôi chọn
Assembly để hướng dẫn viết chương trình cho Vi điều khiển. Assembly là một
ngôn ngữ cấp thấp, trong đó mỗi câu lệnh chương trình tương ứng với một chỉ
lệnh mà bộ xử lý có thể thực hiện được. Ưu điểm của hợp ngữ Assembly là : mã

gọn, ít chiếm dung lượng bộ nhớ, hoạt động với tốc độ nhanh, và nó có hiệu
suất tốt hơn so với các chương trình viết bằng ngôn ngữ bậc cao khác.
Tổng quan về ngôn ngữ lập trình ASSEMBLY :
 Một số lệnh thường gặp khi lập trình cho vi điều khiển :
1. Lệnh MOV :
Cấu trúc : MOV đích, nguồn
Chức năng : chuyển dữ liệu từ nguồn vào đích va thoát khỏi câu lệnh.
Lưu ý : đích la các thanh ghi, nguồn có thể là thanh ghi cũng có thể là giá
trị trực tiếp hoặc gián tiếp. Nếu nguồn là dữ liệu trực tiếp thì phải ghi theo
cấu trúc :
MOV đích, #dữ liệu trực tiếp
Nếu là số hexa thì phải viết #0(dữ liệu dạng hexa). Vd #FFH
Nếu là số nhị phân phải viết #(dữ liệu dạng bit)B. Vd #11110000B
Nếu là số thập phân phải viết #(dữ liệu dạng thập phân). Vd #255
2. Lệnh JB :
Cấu trúc : JB bit, nhãn
Chức năng : kiểm tra mức trạng thái của bit. Nếu là mức thấp thì thoát
khỏi câu lệnh. Nếu là mức cao thì nhảy đến vị trí của nhãn.
Lưu ý : nhãn là tên gọi đánh dấu của một vị trí nào đó trong chương trình
lập trình mà chúng ta quy định cho nó.
3. Lệnh JNB :
Cấu trúc : JNB bit, nhãn
Chức năng : kiểm tra mức trạng thái của bit.Nếu là mức cao thì thoát khỏi
câu lệnh. Nếu là mức thấp thì nhảy tới vị trí của nhãn.
4. Lệnh CJNE :
Cấu trúc : CJNE đích, nguồn, nhãn
Chức năng : so sánh dữ liệu của nguồn với đích. Nếu không bằng nhau thì
nhảy đến vị trí của nhãn. Nếu bằng thì thoát khỏi câu lệnh.
5. Lệnh DJNZ :
Cấu trúc : DJNZ thanh ghi, nhãn


SVTH : Đặng Minh Đức DHTD8A2_HN

Trang - 16 -


Chức năng : so sánh giá trị thanh ghi với 0. Nếu không bằng thì giảm giá
trị thanh ghi đi 1 và nhảy tới vị trí của nhãn.Nếu bằng 0 thì thoát khỏi câu
lệnh.
Lưu ý : khi lập trình ta nên để cho thanh ghi có giá trị dương.
6. Lệnh SETB :
Cấu trúc : SETB bit
Chức năng : thiết lập mức trạng thái cao cho bit và thoát khỏi câu lệnh.
Lưu ý : khi bit đang ở mức 0 thì đưa lên mức 1, còn đang ở mức 1 thì giữ
nguyên.
7. Lệnh CLR :
Cấu trúc : CLR bit
Chức năng : thiết lập mức trạng thái 0 cho bit và thoát khỏi câu lệnh.
Lưu ý : khi bit đang ở mức 1 thì đưa xuống mức 0, còn đang ở mức 0 thì
giữ nguyên. Có thể thay bit bằng thanh ghi nà khi đó tất cả các bit của
thanh ghi đều được đưa xuống mức 0.
8. Lệnh INC :
Cấu trúc : INC thanh ghi
Chức năng : tăng giá trị thanh ghi lên 1 và thoát khỏi câu lệnh.
9. Lệnh LJMP :
Cấu trúc : LJMP nhãn.
Chức năng : nhảy tới vị trí của nhãn.
Lưu ý : có thể nhảy trong toàn chương trình.
10.Lệnh SJMP :
Cấu trúc : SJMP nhãn

Chức năng : nhảy tới vị trí của nhãn
Lưu ý : có thể nhảy trong phạm vi 128byte và 127byte sau câu lệnh.
11.Lệnh RET :
Cấu trúc : RET
Chức năng : kết thúc một chương trình con và đưa con trỏ về vị trí lúc gọi
chương trình con.
12.Lệnh LCALL :
Cấu trúc : LCALL nhãn
Chức năng : gọi một chương trình con bắt đầu từ vị trí của nhãn.
Lưu ý : có thể gọi trong toàn chương trình.
Từ các câu lệnh trên ta áp dụng để lập trình cho VĐK 8051.

SVTH : Đặng Minh Đức DHTD8A2_HN

Trang - 17 -


PHẦN II : THIẾT KẾ MẠCH NGUỒN CHO VI ĐIỀU KHIỂN
BẰNG PHẦN MỀM ALTIUM DESIGNER
I. THIẾT KẾ CHI TIẾT KHỐI NGUỒN

Sơ đồ nguyên lý của mạch nguồn

Linh kiện sử dụng thiết kế khối nguồn :
 1 biến áp 220VAC/9-12VAC/2A
 5 diode 1N4007 1A
 2 tụ 470µF/25V, 1 tụ 100µF và 1 tụ 104
 1 điện trở 1K, 1 led 5V
 1 IC ổn áp LM7805
Nguồn đầu vào là điện lưới 220VAC, đi qua biến áp hạ xuống 12VAC, qua cầu

chỉnh lưu ra điện áp 1 chiều : 12 VDC.
Từ đây đưa vào IC ổn áp LM7805 cho ra đầu ra 5VDC ổn định (thực tế khoảng
điện áp ra dao động từ 4.8V – 5.4 V).
IC LM7805 có 3 chân cho ta kết nối với nó : Chân 1 là chân nguồn đầu vào,
chân 2 là chân GND , chân 3 là chân lấy điện áp ra.
- Chân 1 - 2 (Chân điện áp đầu vào IN/GND) : Đây là chân cấp nguồn đầu vào
cho LM7805 hoạt động. Giải điện áp cho phép đầu vào lớn nhất là 40V.
- Chân 3 ( Chân điện áp đầu ra OUT) : Chân này cho chúng ta lấy điện áp đầu
ra ổn định 5V. Đảm bảo đầu ra ổn định luôn nằm trong giải từ (4.75V đến
5.25V).
- Đảm bảo tản nhiệt tốt cho LM7805 khi chạy với tải. Khi công suất tăng lên
thì do LM7805 là linh kiện bán dẫn công suất nên rất nóng khi tải lớn. Để tránh
hỏng linh kiện và cho linh kiện hoạt động trong nhiệt độ bình thường thì cần
phải tản nhiệt tốt.
- Tụ C1, C2 là lọc nguồn đầu vào cho LM7805. Tụ này là tụ hóa phải có điện
dung đủ lớn để lọc phẳng điện áp đầu vào và điện áp tụ chịu đựng phải lớn hơn
điện áp đầu vào nên ở đây sử dụng tụ 470µF/25V.
- Tụ C3, C4 là lọc nguồn đầu ra cho 7805. Tụ C3 cũng là tụ hóa, tụ C4 là tụ
gốm, 2 tụ này có điện dung nhỏ dùng để lọc nguồn đầu ra cho băng phẳng.
Trong thành phần một chiều còn có các sóng điều hòa bậc 2, 3... sóng nhấp nhô
có tần số cao, nhiễu bên ngoài. Các sóng này ảnh hưởng đến hoạt động của
SVTH : Đặng Minh Đức DHTD8A2_HN

Trang - 18 -


7805. Nếu trong mạch tồn tại những thành phần sóng này sẽ làm sai sót khó
phát hiện trong mạch làm cho mạch hoạt động không ổn định. Tụ điện ở đây
đóng vai trò lọc nguồn và san phẳng điện áp. Để lọc được tần số càng cao thì
điện dung của tụ điện càng nhỏ.

- Chống dòng ngược hay bảo vệ mạch chống dòng ngược là mạch nào cũng
phải có trong mạch 1 chiều. Tránh được trường hợp người sử dụng lắp ngược
nguồn sinh ra hỏng mạch và cháy mạch. Diode D5 trên mạch có tác dụng bảo
vệ hiện tượng lắp ngược nguồn đầu vào để bảo vệ mạch. Cái này rất quan trọng
trong mạch 1 chiều.
II. VẼ MẠCH TRONG ALTIUM DESIGNER
Vẽ sơ đồ mạch điện phía trên bằng các linh kiện có sẵn trong thư viện của
Altium :

Sau khi vẽ được mạch nguyên lý, chuyển mạch nguyên lý sang mạch mô phỏng
PCB, ta được :
- Mạch nguồn ở dạng 2D :

Điện áp 220VAC đi vào ở cổng J1 và 5VDC đi ra ở cổng J2

SVTH : Đặng Minh Đức DHTD8A2_HN

Trang - 19 -


- Mạch nguồn mô phỏng 3D :

- Mạch in đã phủ đồng GND sẵn sàng cho quá trình làm mạch thật :

SVTH : Đặng Minh Đức DHTD8A2_HN

Trang - 20 -


PHẦN III – IV : GHÉP NỐI HIỂN THỊ TỐC ĐỘ ĐỘNG CƠ

TRÊN LCD - LẬP TRÌNH ĐIỀU KHIỂN TỐC ĐỘ ĐỘNG CƠ
1. LCD sử dụng ở đây là loại 16x2
- Chân VCC, Vss, và VEE : các chân VCC và VSS cáp dương nguồn 5v và
mass tương ứng. Chân VEE được dùng để điều khiển độ tương phản.
- Chân chọn thanh ghi RS(Register Select) : có 2 thanh ghi trong LCD chân
RS được dùng để chọn thanh ghi. Nếu RS=0 thì thanh ghi mã lệnh được chọn để
cho phép người dùng gửi 1 lệnh lên chẳng hạn như xoá màn hình, đưa con trỏ về
đầu dòng… Nếu RS=1 thì thanh ghi dữ liệu được chọn cho phép người dùng gửi
dữ liệu cần hiển thị lên LCD.
- Chân đọc/ghi (R/W) : đầu vào đọc/ghi cho phép người dùng đọc thông tin từ
LCD khi R/W=1 hoặc ghi thông tin lên LCD.
- Chân cho phép E(Enable) : chân cho phép được sử dụng bởi LCD để chốt dữ
liệu của nó. Khi dữ liệu được cấp đến chân dữ liệu thì 1 xung mức cao xuống
thấp phải được áp đến chân này để LCD chốt dữ liệu trên các chân dữ liệu.
Xung này có độ rộng tối thiểu 450ns.
- Chân D0-D7 : đây là đường dữ liệu 8 bit, được dùng để gửi thông tin lên
LCD hoặc đọc nội dung các thanh ghi trong LCD. Để hiển thị các chữ cái và các
con số, chúng ta gửi mã ASCII của các chữ cái từ A đến Z , a đến z và các chữ
số từ 0 đến 9 đến các chân này khi bật RS=1.
Các bước để lập trình điều khiển LCD :
Bước 1 : Khởi tạo cho LCD.
Bước 2 : Gán các giá trị cho các bit điều khiển các chân RS, RW, EN cho
phù hợp với các chế độ : hiển thị kí tự lên LCD hay thực hiện 1 lệnh của
LCD.
Bước 3 : Xuất byte dữ liệu ra cổng điều khiển 8 bit dữ liệu của LCD.
Bước 4 : Kiểm tra cờ bận xem LCD sẵn sàng nhận dữ liệu mới chưa.
Bước 5 : Quay vòng lại bước 1.
2. Các hệ truyền động rời rạc thường được thực hiện nhờ động cơ chấp hành
đặc biệt gọi là động cơ bước. Động cơ bước là một loại động cơ điện có nguyên
lý và ứng dụng khác biệt với đa số các loại động cơ điện thông thường. Chúng

thực chất là một động cơ đồng bộ dùng để biến đổi các tín hiệu điều khiển dưới
dạng các xung điện rời rạc kế tiếp nhau thành các chuyển động góc quay hoặc
các chuyển động của Rotor và có khả năng cố định Rotor vào những vị trí cần
thiết. Động cơ bước làm việc được là nhờ các bộ chuyển mạch điện tử đưa các
tín hiệu điều khiển vào Stator (phần ứng) theo một thứ tự nhất định và một tần
số nhất định. Tổng số góc quay của Rotor (phần cảm) tương ứng với số lần
chuyển mạch, cũng như chiều quay và tốc độ quay của Rotor phụ thuộc vào thứ
SVTH : Đặng Minh Đức DHTD8A2_HN

Trang - 21 -


tự chuyển đổi và tần số chuyển đổi. Khi một xung điện áp đặt vào cuộn dây
Stator của động cơ bước, thì Rotor của động cơ sẽ quay đi một góc nhất định,
góc ấy là một bước quay của động cơ.
Vậy để điều khiển động cơ quay liên tục thì chúng ta chỉ việc cấp xung lần lượt
cho các cuộn dây. Có 2 cách điều khiển động cơ bước là :
- Điều khiển full bước.
- Điều khiển nửa bước.
Ở đây sử dụng cách điều khiển full bước, có nghĩa là mỗi lần cấp điện áp cho
các cuộn dây, động cơ sẽ quay đủ 1 bước (5.625 độ), thứ tự cấp xung điều khiển
như sau (thứ tự từ trái sang phải : cuộn 1 -> cuộn 2 -> cuộn 3 -> cuộn 4) :
Bước 1 : 0011
Bước 2 : 0110
Bước 3 : 1100
Bước 4 : 1001
Để điều khiển động cơ quay nửa bước, thứ tự các xung cấp vào các cuộn dây
như sau (thứ tự từ trái sang phải : cuộn 1 ->..-> cuộn 4 cuộn 1 ->..-> cuộn 4) :
Bước 1: 0110 1110
Bước 2: 1100 1101

Bước 3: 1001 1011
Bước 4: 0011 0111
3. ULN 2003 là một vi mạch đệm, bản chất cấu tạo là các mảng darlington
chịu được dòng đện lớn và điện áp cao, trong đó có chứa 7 cặp transistor NPN
ghép darlington cực góp hở với cực phát chung. Mỗi kênh của ULN 2003 có
một diode chặn có thể sử dụng trong trường hợp tải có tính cảm ứng, ví dụ như
các relay. ULN 2003 có khả năng điều khiển 7 kênh riêng biệt, có thể nối trực
tiếp với vi điều khiển 5V. Bên cạnh đó, mỗi kênh của ULN 2003 có thể chịu
được dòng điện lớn trong một khoảng thời gian dài lên tới 500mA với biên độ
đỉnh lên tới 600mA.
Ứng dụng của ULN 2003 được sử dụng trong các mạch đệm điều khiển động
cơ một chiều, động cơ bước, khối hiển thị ma trận led, ..

SVTH : Đặng Minh Đức DHTD8A2_HN

Trang - 22 -


Code lập trình :
/* -- Khai báo tiền định -- */
#include <REGX52.H>
#include <stdio.h>

// -- Khai báo kết nối với LCD
sbit LCD_RS = P2^0;
sbit LCD_EN = P2^1;
#define LCD_DATA P0

// Chân data của LCD


// -- Trễ theo giá trị nhập vào dùng timer
void delay_ms(unsigned int t)
{
unsigned int i;
for(i=0;i{
TMOD = 0x01;

// Chọn chế độ 1 timer 0

TH0 = 0xfc;

// Trễ 1ms

TL0 = 0x18;
TR0 = 1;

// Khởi động bộ định thời

while(!TF0);

// Duy trì kiểm tra cờ TF, thoát vòng lặp khi TF cao

TR0 = 0;

// Dừng bộ định thời

TF0 = 0;

// Xóa cờ tràn TF


}
}
// -- Ghi lệnh ra LCD
void ghi_lenh(unsigned char lenh)
{
LCD_RS = 0;
LCD_DATA = lenh;
LCD_EN = 0;
LCD_EN = 1;
SVTH : Đặng Minh Đức DHTD8A2_HN

Trang - 23 -


if(lenh<=0x02)
{
delay_ms(2);
}
else
{
delay_ms(1);
}
}
// -- Kiểm tra LCD
void kiem_tra(char c)
{
LCD_RS = 1;
LCD_DATA = c;
LCD_EN = 0;

LCD_EN = 1;
delay_ms(1);
}
// -- Ghi chuỗi ra LCD
void ghi_chuoi(char *str)
{
unsigned char i = 0;
while(str[i]!=0)
{
kiem_tra(str[i]);
i++;
}
}
// -- Khởi tạo LCD
void khoi_tao()
{
ghi_lenh(0x30);
SVTH : Đặng Minh Đức DHTD8A2_HN

Trang - 24 -


delay_ms(5);
ghi_lenh(0x30);
delay_ms(1);
ghi_lenh(0x30);
ghi_lenh(0x38);

// Số dòng hiển thị là 2, font 5x8


ghi_lenh(0x01);

// Xóa nội dung hiển thị

ghi_lenh(0x0C);

// Bật hiển thị và tắt con trỏ

}
// -- Xuất xung cho StepMotor
void step(int a)
{
if (a==0)

P3=0xf3;

// Bước 1 : 0011

if (a==1)

P3=0xf6;

// Bước 2 : 0110

if (a==2)

P3=0xfc;

// Bước 3 : 1100


if (a==3)

P3=0xf9;

// Bước 4 : 1001

}
// -- Điều chỉnh chiều StepMotor
int chieu_step(unsigned int t, int chieu, int *s)
{
if (t==0) return 0;
if (chieu==1)
{
step(*s);

// a = s

*s=*s+1;
if (*s>3) *s=0;
}
if (chieu==2)
{
step(*s);
*s=*s-1;
if (*s<0) *s=3;
}
SVTH : Đặng Minh Đức DHTD8A2_HN

Trang - 25 -



×