Cấu tạo bộ nhớ: ♦ Có 4 Kbyte bộ nhớ FLASH ROM bên trong dùng ñể lưu chương trình ñiều khiển.. ♦ Có thể giao tiếp với 64 Kbyte bộ nhớ bên ngoài dùng ñể lưu chương trình ñiều khiển.. Tron
Trang 1CHƯƠNG I: GIỚI THIỆU VI ðIỀU KHIỂN AT89C51
I/ CẤU TẠO CHUNG:
Hình 1 – sơ ñồ chân con 89c51
1 Cấu tạo bộ nhớ:
♦ Có 4 Kbyte bộ nhớ FLASH ROM bên trong dùng ñể lưu chương trình ñiều khiển
♦ Có 128 Byte RAM nội
♦ 4 Port xuất / nhập (Input/Output) 8 bit
♦ Có khả năng giao tiếp truyền dữ liệu nối tiếp
♦ Có thể giao tiếp với 64 Kbyte bộ nhớ bên ngoài dùng ñể lưu chương trình ñiều khiển
♦ Có thể giao tiếp với 64 Kbyte bộ nhớ bên ngoài dùng ñể lưu dữ liệu
♦ Có 210 bit có thể truy xuất từng bit Có các lệnh xử lý bit
2 Cấu trúc các Port:
* Port 0:
- Port 0 là port có 2 chức năng với số thứ tự chân 32 – 39
Trong các hệ thống ñiều khiển ñơn giản sử dụng bộ nhớ bên trong không dùng bộ nhớ mở rộng bên ngoài thì port 0 ñược dùng làm các ñường ñiều khiển IO (Input- Output)
Trong các hệ thống ñiều khiển lớn sử dụng bộ nhớ mở rộng bên ngoài thì port 0 có chức năng là bus ñịa chỉ và bus dữ liệu AD7 - AD0 (Address: ñịa chỉ, data: dữ liệu)
* Port 1:
- Port 1 với số thứ tự chân 1- 8 Port1 chỉ có 1 chức năng dùng làm các ñường ñiều khiển xuất nhập IO, port 1 không có chức năng khác
Trang 2* Port 2:
- Port 2 là port có 2 chức năng với số thứ tự chân 21 – 28
- Trong các hệ thống ñiều khiển ñơn giản sử dụng bộ nhớ bên trong không dùng bộ nhớ
mở rộng bên ngoài thì port 2 ñược dùng làm các ñường ñiều khiển IO (Input- Output).Trong các hệ thống ñiều khiển lớn sử dụng bộ nhớ mở rộng bên ngoài thì port
2 có chức năng là bus ñịa chỉ cao A8 - A15
* Port 3:
- Port 3 là port có 2 chức năng với số thứ tự chân 10 -17 Các chân của port này có nhiều chức năng, các công dụng chuyển ñổi có liên hệ với các ñặc tính ñặc biệt của 89C51 như ở bảng sau:
Bit Tên Chức năng chuyển ñổi
P3.0
P3.1
P3.2
P3.3
P3.4
P3.5
P3.6
P3.7
RxD TxD 0INT 1INT T0 T1
WR
RD
Ngõ vào nhận dữ liệu nối tiếp
Ngõ xuất dữ liệu nối tiếp
Ngõ vào ngắt cứng thứ 0
Ngõ vào ngắt cứng thứ 1
Ngõ vào của timer/counter thứ 0
Ngõ vào của timer/counter thứ 1
Tín hiệu ñiều khiển ghi dữ liệu lên bộ nhớ ngoài Tín hiệu ñiều khiển ñọc dữ liệu từ bộ nhớ ngoài
3 Các ngõ tín hiệu:
* PSEN Ngõ tín hiệu (Program store enable):
- PSEN là tín hiệu ngõ ra ở chân 29 có tác dụng cho phép ñọc bộ nhớ chương trình mở rộng thường nối ñến chân OE (output enable hoặc RD) của Eprom cho phép ñọc các byte mã lệnh
- Khi có giao tiếp với bộ nhớ chương trình bên ngoài thì mới dùng ñến PSEN, nếu không có giao tiếp thì chân PSEN bỏ trống
* Ngõ tín hiệu ñiều khiển ALE (Address Latch Enable ) :
- Khi vi ñiều khiển 89C51 truy xuất bộ nhớ bên ngoài, port 0 có chức năng là bus tải ñịa chỉ và bus dữ liệu [AD7 – AD0] do ñó phải tách các ñường dữ liệu và ñịa chỉ Tín hiệu ra ALE ở chân thứ 30 dùng làm tín hiệu ñiều khiển ñể giải ña hợp các ñường ñịa chỉ và dữ liệu khi kết nối chúng với IC chốt
* Ngõ tín hiệu EA (External Access):
- Tín hiệu vào EA ở chân 31 thường nối lên mức 1 hoặc mức 0
- Nếu nối EA lên mức logic 1 (+5v) thì vi ñiều khiển sẽ thi hành chương trình từ bộ nhớ nội
- Nếu nối EA với mức logic 0 (0V) thì vi ñiều khiển sẽ thi hành chương trình từ bộ nhớ ngoại
* Ngõ tín hiệu RST (Reset):
Ngõ vào RST ở chân 9 là ngõ vào Reset của 89C51 Khi cấp ñiện cho hệ thống hoặc khi nhấn nút reset thì mạch sẽ reset vi ñiều khiển Khi reset thì tín hiệu reset phải ở mức cao
ít nhất là 2 chu kỳ máy, khi ñó các thanh ghi bên trong ñược nạp những giá trị thích hợp
ñể khởi ñộng hệ thống
Trang 3CHƯƠNG II: GIỚI THIỆU VỀ MÁY MASSAGE
I/ GIỚI THIỆU CHUNG:
- Máy massage có nhiều loại như máy massage lưng, máy massage bụng, máy massage mắt … Còn máy massage của em có chức năng massage bụng
- Người sử dụng chỉ việc ñeo chiếc máy vào bụng và bật công tắc, thế là máy sẽ phát ra ñộng năng rung ñộng tác ñộng lên thành bụng với ba cấp ñộ Mid – Low – Hi Tùy vào ñiều khiển của người sử dụng Những rung ñộng của máy chẳng những có tác dụng làm săn chắc, tóm gọn cơ bụng mà còn giúp bộ máy tiêu hóa ñược hoạt ñộng ổn ñịnh
II/ CẤU TẠO PHẦN CỨNG:
Chiếc máy của em có các phần chính ñó là Adapter nguồn 2A, vỏ máy, hộp rung,
bộ ñiều khiển
1 Adapter nguồn:
Là một bộ phận quan trọng nhất vì nó có nhiệm vụ cung cấp nguồn nuôi cho toàn
bộ máy Bộ adapter này áp dụng công nghệ nguồn xung Không như biến áp sắt từ cũ vừa cồng kềnh hiệu suất lại kém Nguồng xung có ưu ñiểm là nhỏ gọn mà dòng ñiện sho ra lại lớn Nguồn ñiện sau khi chỉnh lưu còn ñược ổn áp tự ñộng mà khả năng chống nhiễu lại rất cao, ñáp ứng ñược hiệu quả kinh tế nhỏ gọn dễ vận chuyển
* Thông số kỹ thuật:
ðiện áp vào : AC 220 – 250 V ðiện áp ra: DC 12 V – 2 A
2 Vỏ máy:
Vỏ máy ñược may từ vải tổng hợp nên có ñộ bền cao chịu ñựng ñược mài mòn, va ñập có chức năng chứa các bộ phận bên trong gồm có hai hộp lắc
Hình 2 – vỏ máy
Trang 43 Hộp rung:
- Hộp rung cũng là một bộ phận quan trọng vì nó là bộ phận phát ra rung ñộng của máy
- Cấu tạo của hộp rung gồm lớp vỏ làm từ nhựa tổng hợp Bên trong có chứa một motor cực khỏe và một cục tạ có hình khối bán trụ lệch tâm và khối trụ lệch tâm có thể tự quay quanh trục của nó thông qua sợi cua-roa ñược nối với trục motor
- Chiếc máy có tất cả hai hộp rung Khi motor quay, trục motor kéo theo cục tạ lệch tâm quay theo Theo quán tính cục tạ khi quay sẽ tạo ra một rung ñộng nhất ñịnh tác ñộng làm cho hộp rung dao ñộng liên hồi tác ñộng vào cơ bụng
Hình 3 – hai khoang chứa hai hộp rung
Hình 4 – hộp lắc
Trang 5Hình 5 Ờ Cấu tạo bên trong hộp lắc
1 Motor
2 cục tạ lệch tâm
4 Hộp ựiều khiển:
* Hộp ựiều khiển gồm có 3 nút và 6 ựèn:
+ Nút Power: Cho phép Ờ ngắt hoạt ựộng của máy
+ Nút Ivert: đảo chiều quay của ựộng cơ
+ đèn power: Báo rằng máy ựang hoạt ựộng
+ đèn clockwise: Báo motor quay thuận
+ đèn unclockwise: Báo motor quay nghịch
Hình 6 Ờ hộp ựiều khiển
Trang 6III/ CÁCH SỬ DỤNG:
- Hẳn nhìn vào bảng ñiều khiển chắc là các bạn ñã biết cách sử dụng Nhưng không vì
thế mà mình quên hướng dẫn
- Cách sử dụng rất dễ bạn chỉ cần ñeo máy vào người (chiếc máy này có may dính với một miếng vải dài có gắn miếng dán) giống như ñeo thắt lưng vậy Khi ñeo máy vào người, chiếc máy ñược cố ñịnh qua hai miếng vài tay dài và khoang máy có thể áp sát
vào bụng hoặc nới lỏng ra tùy người sử dụng
- Bước tiếp theo là bạn cắm Adapter vào ổ ñiện, cắm jack ñiện từ adapter vào máy Nhấn nút Power ñể khởi ñộng máy lúc này chỉ có ñèn power sáng lên Sau ñó là nhấn tuần tự nút mode ñể thay ñổi tốc ñộ quay của motor (cứ nhấn nút power tốc ñộ của motor sẽ tự ñộng ñược thay ñổi theo thứ tự sau: Chậm vừa nhanh lặp lại
- Khi muốn ñảo chiều quay của motor bạn chỉ việc nhấn nút invert thì motor sẽ tự ñộng
ñảo chiều
Hình 7 – test máy
Trang 7CHƯƠNG III: CHƯƠNG TRÌNH ðIỀU KHIỂN
I/ PWM LÀ GÌ ?
- Nghe thuật ngữ này có lẽ lạ với ña số các bạn nhưng với những bạn ñã học ở trung cấp rồi thì thuật ngữ này là viết tắt của từ tiếng Anh (pulse with modulator) có nghĩa là ñiều chế ñộ rộng xung
- Thực ra thuật ngữ này ám chỉ việc ñiều khiển motor bằng cách tạo ra một chuỗi xung với thời gian của mức logic 1 và mức logic 0 có thể lệch nhau làm tín hiệu cấp cho motor Với quán tính của momen quay thì motor sẽ không bị giật mà sẽ quay với tốc ñộ chậm hay nhanh tùy vào thời gian on của xung
- Ở chiếc máy này, motor quay với 3 tốc ñộ nên mình sẽ ñiều chế xung từ vi ñiều khiển với ba dạng xung
a Dạng xung PWM ở chế ñộ low:
Hình 8 – dạng xung ở chế ñộ low
Hình 9 – dạng xung ở chế ñộ mid
Trang 8Hình 10 – dạng xung ở chế ñộ hi
II/ PHẦN CỨNG ðIỀU KHIỂN:
Hình 11 – mạch ñiều khiển
III/ CHƯƠNG TRÌNH ðIỀU KHIỂN:
org 0000h
nuton_off bit p1.0
nutmode bit p1.1
nutdao bit p1.2
qthuan bit p1.3
qnghich bit p1.4
d1 bit p3.0
Trang 9d2 bit p3.1
d3 bit p3.2
dt bit p3.3
dn bit p3.4
don bit p3.5
bienon_off equ 20h
bienmode equ 21h
mov tmod ,#00000001b mov p1,#00h
mov p3,#00h mov bienon_off,#0 mov bienmode,#0
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
main: jnb nuton_off,main
jb nuton_off,$
inc bienon_off kt_tat:
jnb nuton_off,kt_nutmode
jb nuton_off,$
lcall stop ljmp main kt_nutmode:
setb don jnb nutmode,kt_tat
jb nutmode,$
inc bienmode mov a,bienmode kt_mode1:
cjne a,#1,kt_mode2 setb d1
clr d2 clr d3 lcall mode1 kt_mode2:
cjne a,#2,kt_mode3 clr d1
setb d2 clr d3 lcall mode2 kt_mode3:
cjne a,#3,kt_cuoi clr d1
clr d2 setb d3 lcall mode3 kt_cuoi:
cjne a,#4,kt_nuton_off mov bienmode,#1 clr d3
Trang 10setb d1 lcall mode1 ljmp kt_nutmode kt_nuton_off:
jnb nuton_off,kt_nutmode
jb nuton_off,$
inc bienon_off mov a,bienon_off cjne a,#2,kt_nutmode lcall stop
ljmp main
;mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm mmmmmmmm
mode1:clr qnghich
setb dt setb tr0 clr dn m1a: setb qthuan
mov tl0,#0efh mov th0,#0d8h jnb tf0,$
clr tf0 clr qthuan mov tl0,#0bfh mov th0,#063h jnb tf0,$
clr tf0 jnb nuton_off,m1a1 ljmp thoat1
m1a1: jnb nutmode,m1a2
ljmp thoat1 m1a2: jnb nutdao,m1a
jb nutdao,$
clr dt clr qthuan setb dn setb tr0 m1b: setb qnghich
mov tl0,#0efh mov th0,#0d8h jnb tf0,$
clr tf0 clr qnghich mov tl0,#0bfh mov th0,#063h jnb tf0,$
clr tf0 jnb nuton_off,m1b1 ljmp thoat1
Trang 11m1b1: jnb nutmode,m1b2
ljmp thoat1 m1b2: jnb nutdao,m1b
jb nutdao,$
ljmp mode1 thoat1: ret
mode2:clr qnghich
setb dt setb tr0 clr dn m2a: setb qthuan
mov tl0,#057h mov th0,#09eh jnb tf0,$
clr tf0 clr qthuan mov tl0,#057h mov th0,#09eh jnb tf0,$
clr tf0 jnb nuton_off,m2a1 ljmp thoat2
m2a1: jnb nutmode,m2a2
ljmp thoat2 m2a2: jnb nutdao,m2a
jb nutdao,$
clr dt setb dn clr qthuan setb tr0 m2b: setb qnghich
mov tl0,#057h mov th0,#09eh jnb tf0,$
clr tf0 clr qnghich mov tl0,#057h mov th0,#09eh jnb tf0,$
clr tf0 jnb nuton_off,m2b1 ljmp thoat2
m2b1: jnb nutmode,m2b2
ljmp thoat2 m2b2: jnb nutdao,m2b
jb nutdao,$
ljmp mode2 thoat2: ret
Trang 12mode3:clr qnghich
setb dt setb tr0 clr dn m3a: setb qthuan
mov tl0,#0bfh mov th0,#063h jnb tf0,$
clr tf0 clr qthuan mov tl0,#0efh mov th0,#0d8h jnb tf0,$
clr tf0 jnb nuton_off,m3a1 ljmp thoat3
m3a1: jnb nutmode,m3a2
ljmp thoat3 m3a2: jnb nutdao,m3a
jb nutdao,$
clr dt setb dn clr qthuan setb tr0 m3b: setb qnghich
mov tl0,#0bfh mov th0,#063h jnb tf0,$
clr tf0 clr qnghich mov tl0,#0efh mov th0,#0d8h jnb tf0,$
clr tf0 jnb nuton_off,m3b1 ljmp thoat3
m3b1: jnb nutmode,m3b2
ljmp thoat3 m3b2: jnb nutdao,m3b
jb nutdao,$
ljmp mode3 thoat3: ret
stop:
clr don clr dt clr dn clr d1 clr d2
Trang 13clr d3 clr qthuan clr qnghich mov bienmode,#0 mov bienon_off,#0 ret
end