Tải bản đầy đủ (.doc) (16 trang)

Vi xử lý điều khiến động cơ 1 chiều

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 (403.47 KB, 16 trang )

Vi
Vi xử
xửlýlý::Điều
Điềukhiến
khiếnđộng
độngcơ
cơ 11chiều
chiều

biendt.
biendt.biendt@gmaiỉ.
biendt@gmaiỉ. com
com

CHƯƠNGLỜI
I: VI
NÓI
ĐIỀU
ĐÀU
KHIỂN 8501

Động cơ 1 chiều có nhiều ứng dụng trong điều khiển và sản xuất nhất
là trong công nghiệp. Trong đó nó đòi hỏi là động cơ phải có nhiều cấp
Bắtcóđầu
vào
1980, trải qua gần 30 năm, hiện đã có tới
tốc độ
thếxuất
tănghiện
giảm
dễnăm


dàng.
hang trăm biến thể (derrivatives) được sản xuất bởi hơn 20 hãng khác nhau,
trong đó phải kể đến các đại gia trong làng bán dẫn (Semiconductor) như
ATMEL, Texas Instrument, Philips, Analog Devices... Tại Việt Nam, các
đòi và
phát triển
của vi xửAT89C52,
lý thì vấnAT89S51,
đề điều khiển
động cơ 1
biếnVói
thể sự
củarahãng
ATMEL
là AT89C51,
AT89S52...
chiều
không
là hiện
vấn đề
nữa.
khiếnsửvới
đã
có thời
giancòn
xuất
trênkhó
thịkhăn
trường
kháĐộng

lâu vàcơcócó
thểthế
nóiđiều
là được
nhiều cấp tốc độ khác nhau và điều khiển dừng, đảo chiểu, nhanh chậm
dễ dàng được.

Vi xử lý 8501 là loại dòng vi xử lý khá là thông dụng đã có mặt từ rất
lâu và được ứng dụng vào nhiều các thiết bị điều khiến hay tự động hóa.
Nên việc điều khiến động cơ 1 chiều vói dòng vi xử lý này là 1 phương
pháp tối ưu và kỉnh tế đối với bài toán điều khiến động cơ DC ngày nay.

r

Câu trúc bus

Bus địa chỉ của họ vi điều khiến 8051 gồm 16 đường tín hiệu (thường gọi
là bus địa chỉ 16 bit). Với số lượng bit địa chỉ như trên, không gian nhớ của
21


Vi
Vi xử lý : Điều khiến động cơ 1 chiều

biendt. biendt@gmaiỉ. com

hợp
trong
thuộc
họ vi

điềulàkhiển
dung8 luợng
khác
liệu bên
8 bit),
đó mọi
là lýchip
do tại
sao nói
8051
họ vi này,
điềucó
khiển
bit. Với
độ rộng
nhau
tùy dữ
loạiliệu
chip,
thường
khoảng
Đây hạng
chính8làbitnơi
của bus
nhưnhưng
vậy, các
chip chỉ
họ 8051
cóvài
thểtrăm

xử lýbyte.
các toán
trongcác
mộtbiến
chutrung
kỳ lệnh.
chứa
gian trong quá trình hoạt động của chip. khi mất điện, do
bản chất của SRAM mà giá trị của các biến này cũng bị mất theo. Khi có
điện trở lại, nội dung củaCPU
các ô(Central
nhớ chứaProcessing
các biến này
cũng là bất kỳ, không
Unit)
thể xác định trước. Bên cạnh bộ nhớ loại SRAM, một số chip thuộc họ 8051
còn có thêm bộ nhớ dữ liệu loại EEPROM với dung lượng tối đa vài Kbyte,
CPU là đon vị xử lý trung tâm, đó là bộ não của toàn bộ hệ thống vi điện
tử được tích hợp trên chip vi điều khiển. CPU có cấu tạo chính gồm một đơn
vị xử lý số học và lôgic ALU (Arithmethic Logic Unit) - nơi thực hiện tất cả
các phép toán số học và phép lôgic cho quá trình xử lý.
Bộ nhớ chương trình (Program Memory)

Không gian bộ nhớ chương trình của AT89 là 64K byte, tuy nhiên hầu
hết Đối
các vi
AT89
trênSRAM
thị trường
tích

trêncác
chipbyte
một
vớiđiều
các khiển
chip có
bộ nhớ
128chỉ
byte
thìhợp
địa sẵn
chỉ của
lượng bộ
chương
chiếm
dải địa
OOOOh
SRAM
nàynhớ
được
đánh trình
số từ nhất
OOhđịnh
đến và
7Fh.
Đối với
các chỉ
chiptừcó
bộ nhớ trở đi
trong

không
gian
bộ
nhó'
chương
trình.
AT89C51/AT89S51

byte
bộ
SRAM 256 byte thì địa chỉ của các byte SRAM được đánh số từ4K
OOh
đến
nhớ chương
tíchcóhợp
trongđến
chip.
là bộ
cho
FFh.
Ớ cả haitrình
loại loại
chip,Flash
SRAM
địasẵn
chỉ bên
từ OOh
7FhĐây
được
gọinhớ

là vùng
phép ghi/xóa
nhiều
lần chỉ
bằngtừđiện,
chính
vì (nếu
thế cho
dụng
thay
RAM
thấp, phần
có địa
80h đến
FFh
có)phép
đượcngười
gọi làsử
vùng
RAM
đối chương trình nhiều lần. số lần ghi/xóa được thường lên tới hàng vạn lần.
cao.
Bộ nhớ chương trình dùng để chứa mã của chương trình nạp vào chip. Mỗi
lệnh được mã hóa bởi 1 hay vài byte, dung lượng của bộ nhớ chương trình
phản ánh số lượng lệnh mà bộ nhớ có thể chứa được. Địa chỉ đầu tiên của bộ
nhớ
chương
địa8051
chỉ Reset
của

8051.
Ngaycác
sauthanh
khi
Bên
cạnh
các bộtrình
nhớ,(0x0000)
bên trongchính
mỗi là
chip
còn có
một
tập hợp
reset
(do
tắt
bật
nguồn,
do
mức
điện
áp
tại
chân
RESET
bị
kéo
lên
5V...),

ghi chức năng đặc biệt (SFR - special Function Register). Các thanh ghi này
CPU sẽ nhảy đến thựchiện lệnh đặt tại địa chỉ này trước tiên, luôn luôn là
như vậy. Phần còn trống trong không gian chương trình không dùng để làm
gì cả. Neu muốn mở rộng bộ nhớ chương trình, ta phải dùng bộ nhớ chương
trình bên ngoài có dung lượng như ý muốn. Tuy nhiên khi dùng bộ nhớ
chương trình ngoài, bộ nhớ chương trình onchip không dùng được nữa, bộ
nhớ chương trình ngoài sẽ chiếm dải địa chỉ ngay từ địa chỉ 0x0000.
Bộ nhớ dữ liệu (Data Memory)
34


Vi xử lý : Điều khiến động cơ 1 chiều

biendt.
bìendt. biendt@gmaiỉ. com

được
(bit
ETx
trong
IElà=
Việc
cho
timer
chạy/dừng
xảy

dùng
tạo
ra,cho

cổng
ra
bấtphép
lớn
kể
đó hơn
sự
làm
kiện
8byte
cổng
đóra
nên
cóhay
được
tạithanh
cổng
vector
choghi
vào)
phép
ngắt,
ngắt
độc
ta1).
chỉ
lập
hay
đặt
giữa

không.
lệnh
các
nhảy
Do
cổng
vậy,
tớivàchương
trước
giữa
khi
trình
các cho
chân
xửphép
lý(các
ngắt
một
bit)
nằm
ngắt,
trong
ở vùng
tacùng
nênnhớ
một
xóakhác.
cổng.
cờ của
Neu

Víngắt
dụ,
không
đó
ta có
để
làm
thể
đảm
vậy,
định
bảo

nghĩa
sau
chương
khi
cống
cho
trình
PO
phép,
xử
là cổng
lý ngắt
các
ra,sự
này
P1kiện


sẽcổng
lấn
gâysang,
ngắt
vào hoặc
trong
đè vào
ngược
quá
vector
khứ
lạingắt
không
một kế
cách
thể
cận.
tùy
gâyý,ngắt
vớinữa.
cả 2 cổng P2
và P3 còn lại cũng vậy. Trong cùng một cống PO, ta cũng có thể định nghĩa
chân PO.O là cổng vào, PO. 1 lại là cổng ra tùy ý.
8051 có 2 ngắt ngoài là INTO và INT1. Ngắt ngoài được hiểu là ngắt
TRxsự=kiện
1, timerx
sè đếm,
ngược
lại áp
khithấp,

TRxgần
= 0,0V)
timerx
không
được Khi
gây bit
ra bởi
mức lôgic
0 (mức
điện
hoặcsẽsườn
đếm
mặc

vẫn
cómức
xung
đưatrở
vào.
Khi
dừng
đếm, xảy
giá trị
timer
5Serial Port xuống
TI,
RI
SCON
0x0023
Ngắt

nối
tiếp
Cổng
(sựcống
PO
chuyển
không

điện
áp
từ
treo
mức
caocao
(pullup
vềkhông
mức
resistor)
thấp)
bên
ra
trong,
ởcủa
chân
mạch
ngắt
lái
khi
được
giữ

nguyên.
Các
bit
TFx

các
cờ
báo
tràn
timer,
khi
sự
kiện
tràn
timer
tạomức cao chỉ có khi sử dụng cổng này với tính năng là bus dồn kênh địa
xảy
ra, liệu.
cờ sẽNhư
đượcvậy
tự với
động
đặt năng
lên bằng
1 và nếu
ngắt PO
trànlàtimer
cho
chỉ/dữ
chức

ra thông
thường,
cổngđược
ra open
phép,
sẽ xảy
ra. Khi
lý ngắt
ngắt TFx tưong
drain, ngắt
với chức
năng
vào,CPU
PO làxửcổng
vào tràn
cao timerx,
trở (highcờimpedance).
Neu
ứng
sẽ
tự
động
được
xóa
về
0.
Giá
trị
đếm
lóbit

của
timerx
được
lưu
trongtrở
muốn sử dụng cổng PO làm cống vào/ra thông thường, ta phải thêm điện
hai
thanh
THxGiá
(byte
(byte
thanhtừghi
nàyđến
có 10K.
thể
pullup
bênghi
ngoài.
trịcao)
điệnvà
trởTLx
pullup
bênthấp).
ngoàiHai
thường
4K7
ghi/đọc được bất kỳ lúc nào. Tuy nhiên nhà sản xuất khuyến cáo rằng nên
bit (cho
ITx =bit1 TRx
thì ngắt

ứng được
ngắt
dừngKhi
timer
= 0)ngoài
trướctương
khi ghi/đọc
các chọn
thanhkiếu
ghi là
chứa
giátheo
trị
sườn
ngược
lại hoạt
nếu bit
ITxtheo
= 0 nhiều
thì ngắt
tươngquy
ứngđịnh
được

đếm. xuống,
Các timer
có thể
động
chếngoài
độ, được

bởisẽcác
kiếu
ngắt

ngắt
theo
mức
thấp.
Các
bit
IE

các
bit
cờ
ngắt
ngoài,
chỉ

bittrong thanh ghi TMOD (không đánh địa chỉ đến từng bit).
Các cổng Pl, P2 và P3 đều có điện trở pullup bên trong, do đó có thể
tác dụng trong trường hợp kiếu ngắt được chọn là ngắt theo sườn xuống. Khi
dùng với chức năng cổng vào/ra thông thường mà không cần có thêm điện
kiểu ngắt theo sườn xuống được chọn thì ngắt sẽ xảy ra duy nhất một lần
trở pullup bên ngoài. Thực chất, điện trở pullup bên trong là các FET, không
khi có sườn xuống của tín hiệu, sau đó khi tín hiệu ở mức thấp, hoặc có sườn
phải điện trở tuyến tính thông thường, tuy vậy nhưng khả năng phun dòng ra
lên, hoặc
ở mức
cao

cũngngười
không có
ngắtnguồn
xảy raxung
nữa nhịp
cho đến khi có
sườn
Để xác
thờithì
chọn
vào
của mạch
láiđịnh
khi đầu
ragian,
ở mức cao ta(hoặc
khi là đầu
vào) rất (clock)
nhỏ, chỉđưa
khoảng
xuống
tiếp timer
theo. là
Cờxung
ngắt nhịp
IE sẽbên
dựng
lên (dành
khi cócho
sườn

xuống
và tự xung
động nhịp
bị xóa
đếm
trong
trong
CPU).
Nguồn
100 micro Ampe.
khi
bắtrất
đầu
xửđặn
lý ngắt.
Khisốkiểu
ngắt theo
mức
thấp
được
ngắt
này CPU
thường
đều
(có tần
ổn định),
do đó
từ số
đếm
củachọn

timerthìngười

xảythể
ra nhân
bất cứvới
khichu
nàokỳtínxung
hiệunhịp
tại chân
ngắt ởthời
mứcgian
thấp.
khi xử
ta có
trôiNeu
qua.sau
Timer
lúclý
Cổng vào
ra để
nốitính
tiếpra(Serial
Port)
xong
ngắt

tín
hiệu
vẫn


mức
thấp
thì
lại
ngắt
tiếp,
cứ
như
vậy
cho
đến
này được gọi chính xác với cái tên “timer”, tức bộ định thời.
khi xử lý xong ngắt lần thứ n , tín hiệu đã lên mức cao rồi thì thôi không
ngắt nữa. Cờ ngắt IE trong trường hợp này không có ý nghĩa gì cả.Thông
thường kiểu ngắt hay được chọn là ngắt theo sườn xuống.
Cổng nối tiếp trong 8051 chủ yếu được dùng trong các ứng dụng có yêu
Đecầu
đếm
các sự
kiệnvới
bênmáy
ngoài,
người
chọn
xung
nhịp
đưaLiên
vào đếm
truyền
thông

tính,
hoặctavới
mộtnguồn
vi điều
khiển
khác.
quan
Bộ
định
thòi/BỘ
đếm
(Timer/Counter)
trong
timer

tín
hiệu
từ
bên
ngoài
(đã
được
chuẩn
hóa
về
dạng
xung
vuông
đến cổng nối tiếp chủ yếu có 2 thanh ghi: SCON và SBUF. Ngoài ra, một
0V/5V).

tínlàhiệu
nàyghi
sẽPCON
được nối
với các
bitđịa
cổng
dồn
thanh ghiCác
khác
thanh
(không
đánh
chỉcóbit)
cókênh
bit 7thêm
tên làcác
tính
năng
T0/T1/T2.
có sự
vào
kiện
bên
songngoài
song
gây
(I/O
Port)
thay

xung =ở 1)
SMOD
quy
định tốc Khi
độ cỗng
truyền
củaracổng
nối
tiếp
córagấp
đôiđổi
lênmức
(SMOD
đầu
đếm,
timer sẽ
tụ' động tăng lên 1 đon vị giống như trường hợp đếm
hay vào
không
(SMOD
= 0).
2 timer
timerO
vàđược
timerl.
timer
xung8051
nhịpcó
bên
trong.tên

Lúclànày,
timer
gọiCác
chính
xácnày
vớiđều
cái là
têntimer
khác:lóbit,
giátrị
đếm
max
do
đó
bằng
216
=
65536
(đếm
từ
0
đến
65535).
Đe“counter”,
cho phép tóc
mộtbộ
ngắt,
tương
vớivào
ngắtbảng

đó và
phảighi
được
đặt bên
đếmbit(sự
kiện).ứng
Nhìn
môbittảEA
thanh
TMOD
Ngắt
(Interrupt)
bằng
1.
Thanh
ghi
IE

thanh
ghi
đánh
địa
chỉ
bit,
do
đó

thế
dùng
các

trên,8051
ta cócó
thể4 nhận
cósong
2 bộ song,
4 bit giống
(gồm
MxO
cổng thấy
vào ra
có tênnhau
lần lượt
là GATEx,
P0, Pl, P2C/Tx,
và P3.
Tất
lệnh
tác
động
bit
đế
tác
động
riêng
rẽ
lên
tùng
bit

không

làm
ảnh
hưởng
cảcác cổng này đều là cổng vào ra hai chiều 8bit. Các bit của mỗi cổng là
89765


Vi xử lý : Điều khiến động cơ 1 chiều

biendt. biendt@gmaiỉ. com

vào đếm trong timer. Neu C/Tx = 0, timer sẽ được cấu hình là bộ định thời,
nếu C/Tx = 1, timer sẽ được cấu hình là bộ đếm sự kiện. Hai bit còn lại
(MxO và Mxl) tạo ra 4 tổ hợp các giá trị (00,01,10 và 11) ứng với 4 chế độ
hoạt động khác nhau của timerx. Trong 4 chế độ đó thường chỉ dùng chế độ
timer/counter lóbit (Mxl = 0, MxO = 1) và chế độ Auto Reĩoad 8bit
timer/counter (Mxl = 1, MxO = 0).Trong chế độ timer/counter lóbit, giá trị
đếm (chứa trong hai thanh ghi THx và TLx) tự động được tăng lên 1 đon vị
mỗi lần nhận được thêm một xung nhịp. Khi giá trị đếm tăng vượt quá giá trị
max = 65535 thì sẽ tràn về 0, cờ ngắt TFx được tự động đặt = 1. Chế độ này
được dùng trong các ứng dụng đếm thời gian và đếm sự kiện. Trong chế độ
Auto Reload 8bit, giá trị đếm sẽ chỉ được chứa trong thanh ghi TLx, còn giá
trị của thanh ghi THx bằng một số n (tù’ 0 đến 255) do người lập trình đưa
vào. Khi có thêm 1 xung nhịp, giá trị đếm trong TLx đương nhiên cũng tăng
lên 1 đơn vị như bình thường. Tuy nhiên trong trường hợp này, giá trị đếm
lớn nhất là 255 chứ không phải 65535 như trường hợp trên vì timer/counter
chỉ còn 8bit. Do vậy sự kiện tràn lúc này xảy ra nhanh hơn, chỉ cần vượt quá
255 là giá trị đếm sẽ tràn. Cờ ngắt TFx vẫn được tự động đặt = 1 như trong
trường hợp tràn 16bit. Điểm khác biệt là thay vì tràn về 0, giá trị THx sẽ
được tự động nạp lại (Auto Reload) vào thanh ghi TLx, do đó timer/counter

sau khi tràn sẽ có giá trị bằng n (giá trị chứa trong THx) và sẽ đếm từ giá trị
n trở đi. Chế độ này được dùng trong việc tạo Baud rate cho truyền thông
qua cổng nối tiếp.

Để sử dụng timer của 8051, hãy thực hiện các bước sau:

-

Quy định chế độ hoạt động cho timer bằng cách tính toán và ghi giá trị
cho
các bit trong thanh ghi TMOD.

-

Ghi giá trị đếm khởi đầu mong muốn vào 2 thanh ghi đếm THx và TLx.

10


Vi xử lý : Điều khiến động cơ 1 chiều

biendt. biendt@gmaiỉ. com

Chương II:

Đe điều khiển được tốc độ động cơ thì ta chỉ cần thay đối độ rộng xung
trong vi điều khiển. Độ rộng xung càng lớn thì động cơ quay càng nhanh.

Như chúng ta đã biết thì việc điều khiển nhấp nháy 1 con LED cũng là
chúng ta đã điều chế được PWM rồi nhưng xung đó có độ rộng thay đổi và

tần số lớn và có thể điều khiển nó bằng hàm trễ (delay). Tuy nhiên khi dùng
hàm delay thì trong thời gian xung lên 5V và xuống ov thì vi điều khiển
không làm gì cả hơn nữa việc tạo xung hàm delay thì nếu ta muốn phát
xung ở 2 kênh có độ rộng thay đổi là rất khó khăn cho nên chúng ta sử dụng
bộ định thời timer ở đây là phương pháp tối un nhất
Timer

Program excution vvith interrupt

Một chương trình không có ngắt thì chạy liên tục, còn chương trình mà
có ngắt thì cứ khi nào có ngắt được đảm bảo thì con trỏ sẽ nhảy sang hàm
11


Vi
Vi xử
xử lý
lý :: Điều
Điều khiến
khiến động
động cơ
cơ 11 chiều
chiều
TMOD

biendt.
biendt. biendt@gmaiỉ.
biendt@gmaiỉ. com
com
Chon model cho bỏ đinh thời 1


Ví dụ : bạn đang học bài mà có tiếng chuông điện thoại kêu , bạn dừng việc
học lại để nghe điện thoại và nghe xong là bạn lại trở về học bài tiếp. Như
vậy bạn đang học bài là chương trinh chính còn bạn nghe điện thoại là điều
kiện ngắt. Bạn nghe điện thoại là thực hiện chương trình ngắt sau đó quay về
học bài là chương trình chính

RiêngNhìn
ngắtvào
Reset
bắt đầu
đếm
và ngắt
ngoàitrình
từ 0.chính đang
tiếnkhông
trình tính
của hàm
main
và từ
có0ngắt:
Chương
chạy, ngắt xẩy ra, thực hiện hàm ngắt rồi quay lại chương trình chính . Thời
gian thực hiện hàm ngắt rất nhỏ cho nên thời gian thực hiện hàm ngắt không
ảnh hưởng gì đến chức năng của hàm chính như vậy là trong hàm ngắt thực
II: Tạo
PWM
Timer
hiện
1 công

việctừvàngắt
trong
hàm 0chính chúng ta thực hiện 1 công việc.

1) Cách tạo hàm ngắt.
Ví dụ : với ngắt của bộ định thời Timer hay bộ đếm couter là khi tràn bộ
đếm thì phần cứng của vi điều khiển sẽ bào là có ngắt xảy ra và nhảy đến
chương trình phục vụ ngắt
c) Bắt đầu chương trình có ngắt.
Với ngắt ngoài nếu ta khai báo chân sử dụng ngắt ngoài (P3_2) mà chân
sử dụng cho ngắt mà không sử dụng cho 10 thì cứ 1 xung xuất hiện ở chân
này thì vi điều khiến nhận ra rằng là có điều kiện tắc động vào phần cứng và
vi điều khiển thực hiện chương trình ngắt

TCON.7

Với ngắt cổng nối tiếp thì cứ khi thu song 1 kí tụ’ hay truyền song 1 kí tụ’ ở
cống nối tiếp , nếu ta có sử dụng ngắt để truyền dữ liệu nối tiếp thì chương
trình
sẽ nhảyCò'
đếntràn
chương
trình
phục
TF1
của bộ
định
thờivụ1.ngắt.
Cò' này được set
b) Cấu hình ngắt


TCON.6

TRI

Bit điểu khiển hoạt động của bộ định thời 1.
Bit này được set hoặc xoá bởi phần mềm để
14
12
13


TCON.3

IE1

Cừ ngát ben ngoài 1 (kích khởi cạnh). Cờ
này được set bời phần cứng khi có cạnh âm

TCON.2

IT1

Cờ ngắt bẽn ngoài 1 (kích khỏi canh hoặc

2: Tạo PWM có chu kì max : lOOus

a) Tạo timer 0

Do yêu cầu của bài toán là điều khiển tốc độ động co quay nhanh và quay

chậm trong khi chạy thuận nghịch nên dữ nguyên chu kì và thay đổi thời
gian mở. Yêu cầu nhu:

15


Vi xử lý : Điều khiến động cơ 1 chiều

biendt. biendt@gmaiỉ. com

TLO là thanh ghi 8 bit nó đếm từ 0 đến 255 . Nếu nó đếm đến 256 thì nó tràn
bộ đếm . TLO lại quay về 0 và cờ ngắt TFO tự động nạp lại giá trị 1 và ngắt
đuợc xảy ra

Như đối với bài toán này thì ta chỉ cần tạo timer 0 là lOOus nên ta tính theo
công thức ta có :

b) Nguyên lý hoạt động PWM

*

PWM : Đưa ra để mở các transitor , xung có độ rộng lớn hơn thì transitor
sẽ mở lâu hơn động cơ sẽ quay nhanh hơn nhưng mà không tuyến tính .
Không có xung thì động cơ sẽ không quay, xung có độ rộng 100% thì
động
cơ quay là lớn nhất. Tuy nhiên xung phải lớn hơn 1 mức nào đó mới đủ

* Hàm khởi tạo timerO

16



Vi xử lý : Điều khiến động cơ 1 chiều

biendt. biendt@gmaiỉ. com

Như đã nói ở trên muốn có giá trị timerO nào chỉ cần gán cho TLO để cho
thanh ghi đếm sau đó tràn nhưng ở đây do tạo timer là 1 OOus nên ta dùng
chế độ 2 8 bit tự nạp

void khoitaotimerO(void)// Ham khoi tao
{

EA=0;// Cam ngat toan cuc
TMOD=0x02;// Timer 0 che do 2 8 bit auto reload
TH0=0x9B;// Gia tri nap lai 155 doi ra so hex
TL0=0x9B;// Gia tri khoi tao 155 doi ra so hex
ET0=1;// Cho phep ngat timer 0
EA=1;// Cho phep ngat toan cuc
TR0=1;// Chay timer 0 bat dau dem so chu ki may

}

* Hàm ngắt,
bit PWM;

unsigned char dem=0;// Khai bao bien dem de dem tu 1 den 10

17



ViVixử
xửlýlý: :Điều
Điềukhiến
khiếnđộng
độngcơ
cơ11chiều
chiều

biendt.
biendt.biendt@gmaiỉ.
biendt@gmaiỉ.com
com

CHƯƠNG III :

Lưu ĐÒ - CHƯƠNG TRÌNH - MẠCH NGUYÊN LÝ

Do yêu cầu của bài toán ứng dụng trên thực tế là khi nhấn nút thì động cơ

II ) Chưong trình :
Dem=0
/* Dieu khien toc do dong co DC : Quay thuan, quay nghich, tang toc, giam
Chương
trình
Nhom 6: Nguyên Van Bien
— TBD47
Nguyên Son Tung
Nguyên Duc Hanh
— TBD47

Quan Duc Huong
Do Van Khang
— TBD47
Dang Thi Tuyet Lan
Nghiêm Minh Tuan
18
19


Vi xử lý : Điều khiến động cơ 1 chiều

biendt. biendt@gmaiỉ. com

*/
//2 Chan dieit khien dong co la : P2_0 va P2_l
// 5 chan de dieu khiên : Quay thuan, quay nghich, Dung, Tang toc, giam toc
// 3 chan bao hieu dong co dang o che do nao.
Mnclude <REGX51.H>
/* Dinh nghĩa cac nut nhan */
#defme stop P1_0
#dẹfine thu an p1 _1
#defme nghich Pl_2
#dẹfine tang p 13
#defme giam Pl_4
bit PWM;
unsỉgned char dem=0;
unsỉgned int phantram_PWM=10;

/* Hi en thi gia tri tang giam toc */
unsigned char

LED[10]={0x40,0xJ9,0x24,0x30,0x19,0x12,0x02,0xJ8,0x80,0x10};
void hienthì ịuns igned char digitỉ, unsigned char digit2)
{
/*Hien thi so thu nhat*/
P3 =LED[digit2];
20


Vi xử lý : Điều khiến động cơ 1 chiều

biendt. biendt@gmaiỉ. com

P0J =
1;
de lay
(2);
P0J=0;

}
/* Khoi tao Timer lOOas*/
void khoitaohethongO
{
//ES=Ỉ;
EA=0;

TMOD=0x02; // che do 8 bit tu nap
TH0=0x9b; // nap gia tri 155 ma hex
TL0=0x9b;
EA=1;
TRO=ỉ;


ì

ET0=1;
/* Ngat tao ra PWM*/

void ngat_timerO(void) interrupt 1
{
}
void stopdc(void)
{

/* Ham dung dong co */

21


Vi xử lý : Điều khiến động cơ 1 chiều

biendt. biendt@gmaiỉ. com

P2_l=0;
P2_2=0;

/* Ham quay thuan dong co */
void quaythuan(void)
{
P2_l=0;
P2_0=PWM;


/* Ham quay nghich dong co */
void quaynghich(void)
{

P2_0=0;
P2_1=PWM;

}
/* Ham dieu khiên tang toc*/
unsigned char tangtoc(void)
í
if(tang==0)
{
wh iỉe (tang==0)
{;}
phantram_p WMdelay(lOO);
ỉf(phantram_p WM< 1)
22


Vi xử lý : Điều khiến động cơ 1 chiều

biendt. biendt@gmaiỉ. com

}
return (phantram_PWM);
}
/* Ham dieit khien giam toc*/
unsigned char giamtoc(void)
{

if(giam==0)
{
wh iỉeịgiam==0)
{;}
unsigned char n;
unsigned char chonchedo(void)
{
if(stop==0) n=ỉ;
if(thuan==0) n=2;
if(nghich==0) n=3;
switch(n)
{
case 0: Ịbreak;}
case 1: {stopdc();break;}
case 2: ỊquaythuanO;break;ị
case 3: ịcỊuayngh ich 0;
break;}
}
return (n);
}
23


Vi xử lý : Điều khiến động cơ 1 chiều

bìendt. biendt@gmaiỉ. com

tangtocQ;
giamtocQ;
chonchedoQ;

III) Mạch nguyên lý

DIEU KHIEN DONG co 1 CHIEU

KÉT LUẬN

Sau 1 thời gian tìm hiểu và làm bài tập thì bài tập điều khiển động cơ 1 chiều
đã được hoàn thành đúng thời gian quy định. Bài tập đã thực hiện được đúng
yêu cầu của bài ra : Quay thuận, quay nghịch, tăng tốc, giảm tốc, dừng.

24


Vi xử lý : Điều khiên động cơ / chiều

hìendt. biendí@gmail. com

25



×