BÀI TẬP LỚN VI ĐIỀU KHIỂN
Bộ Cơng Thương
Cộng hịa xã hội chủ nghĩa Việt Nam
Trường ĐHCN Hà Nội
Độc Lập – Tự do – Hạnh phúc
BÀI TẬP LỚN
MÔN:VXL VÀ VĐK
Họ và tên HS-SV : Nhóm 8
1.Nguyễn Văn Tài
Mã SV: 0541240070
2. Đỗ Văn Quang
Mã SV: 0541240075
3. Nguyễn Văn Hải
Mã SV: 0541240016
4. Nguyễn Huy Hiệp
Mã SV: 0541240033
5.Phạm Đình Quynh
Mã SV: 0541240062
6. Mầu Tiến Huân
Mã SV: 0541240030
7.Dư Mạnh Huy
Mã SV: 05412400
Lớp : ĐH TĐH1
Khoá: 5
Khoa : Điện
Giáo viên hướng dẫn
Phạm Văn Hùng
BÀI TẬP LỚN VI ĐIỀU KHIỂN
Đề bài:
Ứng dụng họ vi điều khiển 8051 ghép nối 4 led 7 thanh dể hiển thị số đo tốc độ
động cơ dùng encoder có 100(xung/vòng). Khoảng đo(0-2500)v/p.
BÀI TẬP LỚN VI ĐIỀU KHIỂN
Mục lục
Lời nói đầu
Ngày nay, với những ứng dụng của khoa học kỹ thuật tiên tiến, thế giớicủa
chúng ta đã và đang ngày một thay đổi, văn minh và hiện đại hơn. Sự phát
triển của kỹ thuật điện tử đã tạo ra hàng loạt những thiết bị với các đặc điểm
nổi bật như sự chính xác cao, tốc độ nhanh, gọn nhẹ là những yếu tố rất cần
thiết góp phần cho hoạt động của con người đạt hiệu quả cao.
Các bộ điều khiển sử dụng vi điều khiển tuy đơn giản nhưng để vậnhành và sử
dụng được lại là một điều rất phức tạp. Các bộ vi điều khiển theo thời gian
cùng với sự phát triển của công nghệ bán dẫn đã tiến triển rất nhanh, từ các bộ
vi điều khiển 4 bit đơn giản đến các bộ vi điều khiển 32 bit, rồi sau này là 64
bit. Điện tử đang trở thành một ngành khoa học đa nhiệm vụ. Điện tử đã đáp
ứng được những địi hỏi khơng ngừng từ các lĩnh vực cơng – nông –lâm – ngư
nghiệp cho đến các nhu cầu cần thiết trong hoạt động đời sống hằng ngày.
Một trong những ứng dụng thiết thực trong đó là ứng dụng về đo và hiển thị
tốc độ động cơ. Đây là một ứng dụng rất quan trọng được áp dụng trong
nhiều lĩnh vực và dây chuyền sản xuất. Tốc độ động cơ sẽ được hiển thịtrên
màn hình nhờ led 7 thanh, Từ đó chúng ta có thể giám sát được tốc độđộng
cơ rùi có các quyết định điều khiển cho phù hợp với u cầu. Vì thế, với mơn
học Vi điều khiển này, em đã quyết định nhận làm bài tập lớn về đo tốc độ
động cơ dùng 8051. Cụ thể trong bài tập này, chúng em sẽ ghép nối vi điều
khiển 89C51RD2 với 4 led 7 thanh để hiển thị tốc độ động cơ, sử dụng encoder
có 100(xung/vịng). Chúng em xin trình bày nội dụng cụ thể của bàitập lớn như
sau. Kính mong các thầy - cơ xem và cho nhận xét, đánh giá đểbài tập lớn
được đầy đủ hơn.
Chúng em xin chân thành cảm ơn!
BÀI TẬP LỚN VI ĐIỀU KHIỂN
PHẦN I: CƠ SỞ LÝ THUYẾT
Chương I: Tổng quan về vi điều khiển
1.1.Giới thiệu về các họ vi xử lý và các họ điều khiển thông dụng
Lịch sử phát triển của bộ vi xử lý và bộ vi điều khiển
Sự ra đời và phát triển nhanh chóng của kĩ thuật vi điện tử mà đặc trưng
là kĩ thuật vi xử lý đã tạo ra một bước ngoặt quan trọng trong sự phát triển của
khoa học tính tốn, điều khiển vi xử lý thơng tin.Kĩ thuật vi xử lý đóng vai trị
rât quan trọng trong tất cả các lĩnh vực của cuộc sống và khoa học kĩ thuật, đặc
biệt là lĩnh vực tin học và tự động hoá.
Năm 1971, hãng Intel đã cho ra đời bộ vi xử lý( microprocessor ) đầu tiên
trên thế giới tên gọi là Intel – 4004/4 bit, nhằm đáp ứng nhu cầu cấp thiết của
một công ty kinh doanh là hãng truyền thông BUSICOM. Intel-4004 là kết quả
của một ý tưởng quan trọng trong kĩ thuật vi xử lý số. Đó là một kết cấu logic
mà có thể thay đổi được chức năng của nó bằng chương trình ngồi chứ khơng
phát triển theo hướng tạo ra một cấu trúc cứng chỉ thực hiện một số chức năng
nhất định như trước đây. Sau đó, các bộ vi xử lý mới liên tục được đưa ra thị
trường ngày càng được phát triển, hoàn thiện hơn trong các thế hệ về sau.
Vào năm 1972, hãng Intel đưa ra bộ vi xử lý 8 bit đầu tiên với tên Intel
8008/8 bit. Từ năm 1974 – 1975, Intel chế tạo các bộ vi xử lý 8-bit 8080 và
8085A. Cũng vào khoảng thời gian này, một loạt các hãng khác trên thế giới
cũng đã cho ra đời các bộ vi xử lý tương tự như : 6800 của Motorola với 5000
Tranzitor, signetics 6520, 1801 của RCA, kế đến là 6502 của hãng MOS
Technology và Z80 của hãng Zilog.
1.2.Các bộ vi điều khiển
1.2.1. Các bộ vi điều khiển và các bộ xử lý nhúng.
Trong mục này chúng ta bàn về nhu cầu đối với các bộ vi điều khiển
(VĐK ) và so sánh chúng với các bộ vi xử lý cùng dạng chung Pentium và các
bộ vi xử lý 86 khác. Chúng ta cùng xem xét vai trò của các bộ vi điều khiển
trong thị trường các sản phẩm nhúng. Ngồi ra, chúng ta cịn cung cấp một số
tiêu chuẩn vể cách lựa chọn một bộ vi điều khiển như thế nào.
1.2.2.Bộ vi điều khiển so với bộ vi xử lý cùng dùng chung
Sự khác nhau giữa một bộ vi điều khiển và một bộ vi xử lý là gì? Bộ xử lýở đây
là cá bộ vi xử lý công dụng chung như họ Intel là 86(8086, 80286, 80386,
BÀI TẬP LỚN VI ĐIỀU KHIỂN
80486 và Pentium) hoặc họ Motorola là 680 là ( 68000, 68010, 68020, 68030,
68040 vv...) Những bộ vi xử lý này khơng có RAM, ROM và khơng có các
cổng vào ra trên chíp.Với lý do đó mà chúng được gọi chung là các bộ vi xử lý
cơng dụng chung.
Hình 1.1: Hệ thống vi xử lý được so sánh với hệ thống vi điều khiển
a)Hệ thống vi xử lý công dụng chung
b) Hệ thống vi điều khiển
Như thiết kế hệ thống sử dụng bộ vi xử lý công dụng chung chẳng hạn
như Pentium hay 68040 phải bổ xung thêm RAM, ROM, các cổng vào ra và các
bộ định thời ngoài để làm cho chúng hoạt động được. Mặc dù việc bổ sung
RAM, ROM và các cổng vào ra bên ngoài làm cho hệ thống cồng kềnh và đắt
hơn, nhưng chúng có ưu điểm là linh hoạt chẳng hạn như người thiết kế có
quyền quyết định về số lượng RAM, ROM và các cổng vào ra cần thiết phù hợp
với bài tốn trong tam tay của mình. Điều này khơng thể có được với các bộ vi
điều khiển. Một bộ vi điều khiển có một CPU (một bộ vi xử lý) cùng với một
lượng cố định RAM, ROM, các cổng vào ra và một bộ định thời tất cả trên cùng
một chíp. Hay nói cách khác là bộ xử lý RAM, ROM các cổng vào ra và bộ
định thời đều được nhúng với nhau trên một chíp; do vậy người thiết kế không
thể bổ xung thêm bộ nhớ ngoài , cổng vào ra hoặc bộ đinh thời cho nó. Số
lượng cố định của RAM, ROM trên chíp và số các cổng vào – ra trong các bộ vi
điều khiển làm cho chúng trở nên lý tưởng với nhiều ứng dụng mà trong đó giá
thành và khơng gian lại hạn chế. Trong nhiều ứng dụng , ví dụ như điều khiển
TV từ xa thì khơng cần cơng suất tính tốn của bộ vi xử lý 486 hoặc thâm chí
như 8086. Trong rất nhiều ứng dụng thì khơng gian nó chiếm, cơng suất nó tiêu
tốn và giá thành trên một đợn vie là những cân nhắc nghiêm ngặt hơn nhiều so
BÀI TẬP LỚN VI ĐIỀU KHIỂN
với cơng suất tính tốn. Những ứng dụng thường yêu cầu một số thao tác vào-ra
để đọc các tín hiệu tắt- mở những bit nhất định. Điều thú vị là một số nhà sản
xuất các bộ vi điều khiển đã đi xa hơn là tích hợp cả một bộ chuyển đổi ADC và
các ngoại vi khác vào trong bộ điều khiển.
BÀI TẬP LỚN VI ĐIỀU KHIỂN
Chương II:Tổng quan về họ vi điều khiển 8051
I.Họ vi điều khiển 8051
2.1.Giới thiệu chung
Họ vi điều khiển 8051(còn gọi là C51) là một trong những họ vi điều
khiển thông dụng nhất. Bộ vi điều khiển này có 128 byte RAM,4K byte
ROM trên chíp, hai bộ định thời, một cổng nối tiếp và 4 cổng (đều
rộng 8 bit) vào rat ấ t c ả đ ư ợ c đ ặ t t r ên m ộ t c h í p . L ú c ấ y n ó đ ư ợ c
c o i l à m ộ t “ h ệ t h ố n g t r ên chíp”. 8051 là một bộ xử lý 8 bit có nghĩa là
CPU chỉ có thể làm việc với 8 bit dữ liệu tại một thời điểm. Dữ liệu lớn
hơn 8 bit được chia ra thành các dữ liệu 8 bit để cho xử lý. 8051 có tất cả 4
cổng vào-ra I/O mỗi cổng rộng 8 b i t . M ặ c d ù 8 0 5 1 c ó t h ể c ó m ộ t R O M
t r ên c h íp c ự c đ ạ i l à 6 4 K b y t e , n h ư n g c á c n hà s ả n x uấ t l ú c đ ó đ ã
c h o x u ấ t x ư ở n g c h ỉ vớ i 4 K b yt e R O M trên chíp 8051 đã trở nê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 bất kỳ
dạng biến thể nào của 8051 mà họ thích với điều kiện họ phải để mã
lại tương thích với 8051.Điều này dẫn đến sự ra đ ờ i n h i ề u p h i ên b ả n
c ủ a 8 0 5 1 vớ i cá c t ố c đ ộ k há c n ha u và d un g l ư ợ n g ROM trên chíp
khác nhau được bán bởi hơn nửa các nhà sản xuất . Điềunày quan trọng
là 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 chíp, 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 ta viết chương trình của mình cho
một phiên bản nào đó thì nó cũng sẽ chạy với mọi phiên bản bất kỳ khác mà
khơng phân biệt nó từ hãng sản xuất nào.
•
•
•
•
•
•
•
•
•
•
•
2.2.Sơ đồ cấu trúc chung của họ 8051
Interrupt control : Điều khiển ngắt.
Other registers : Các thanh ghi khác.
ROM : là loại bộ nhớ không mất dữ liệu khi mất nguồn cung cấp, được gọi là
nhớ chương trình bên trong .
RAM : là bộ nhớ dữ liệu bên trong có dung lượng 128Byte dùng để lưu trữ dữ
liệu như biến số, hằng số, bộ đệm truyền thông.
Timer 2, 1 , 0 : Bộ định thời 2 , 1 , 0
CPU : Đơn vị điều khiển trung tâm.
Oscillator : Mạch dao động.
Bus control: Điều khiển Bus
I/O ports: Các ports vào/ ra
Serial port: port nối tiếp
Address/data : địa chỉ/ dữ liệu.
BÀI TẬP LỚN VI ĐIỀU KHIỂN
Hình 2.1: Cấu trúc 8051
BÀI TẬP LỚN VI ĐIỀU KHIỂN
2.3.Sơ đồ chân của 8051
Hình 2.2: Sơ đồ chân 8051
Chức năng các chân của AT89C51:
+ Port 0 (P0.0 – P0.7 hay chân 32 – 39): Ngồi chức năng xuất nhập ra, port 0
cịn là bus đa hợp dữ liệu và địa chỉ (AD0 – AD7), chức năng này sẽ được sử
dụng khi AT89C51 giao tiếp với thiết bị ngồi có kiến trúc bus.
BÀI TẬP LỚN VI ĐIỀU KHIỂN
Hình 2.3:Port0.
+ Port 1 (P1.0 – P1.7 hay chân 1 – 8): có chức năng xuất nhập theo bit và byte.
Ngoài ra, 3 chân P1.5, P1.6, P1.7 được dùng để nạp ROM theo chuẩn ISP, 2
chân P1.0 và P1.1 được dùng cho bộ Timer 2.
Hình 2.4:Port1.
+ Port 2 (P2.0 – P2.7 hay chân 21 – 28): là một port có cơng dụng kép. Là
đường xuất nhập hoặc là byte cao của bus địa chỉ đối với các thiết kế dùng bộ
nhớ mở rộng.
BÀI TẬP LỚN VI ĐIỀU KHIỂN
Hình 2.5:Port2.
+ Port 3 (P3.0 – P3.7 hay chân 10 – 17): mỗi chân trên port 3 ngồi chức
năng xuất nhập ra cịn có một số chức năng đặc biệt sau:
BÀI TẬP LỚN VI ĐIỀU KHIỂN
Hình 2.6:Port3.
BÀI TẬP LỚN VI ĐIỀU KHIỂN
•
-
2.4.Cổng vào ra song song (I/O Port)
8051 có 4 cổng vào ra song song có tên lần lượt là P0, P1, P2, P3 tất cả
các cổng này đều là cổng ra vào 2 chiều 8 bit. Các bít của mỗi cổng là một chân
trên chíp như vậy mỗi cổng sẽ có 8 chân trên chíp. Hướng dữ liệu dùng cổng đó
làm cổng ra hay cổng vào là độc lập giữa các cổng và giữa các chân trong cùng
1 cổng.
Các chân P0 khơng có điện trở treo cao (pullup resistor) bên trong, mạch
lái tạo mức cao chi có khi sử dụng cổng này với tính năng là bus dồn kênh địa
chỉ/ dữ liệu. Như vậy với chức năng ra thông thường, P0 là cổng ra open drain,
với chức năng vào, P0 là cổng cao trở. Nếu muốn sử dụng cổng P0 làm cổng
vào /ra thông dụng thì ta phải thêm trở tử 4K7 đến 10K. Các cổng P1, P2, P3
đều có điện trở pullup bên trong, do đó có thể dùng với chức năng cổng vào/ra
thơng thường mà khơng cần thêm điện trở bên ngồi.
Cổng truyền thông nối tiếp ( Serial Port) :
Cổng nối tiếp trong 8051 chủ yếu được dùng trong các ứng dụng có u
cầu truyền thơng với máy tính, hoặc với 1 vi điều khiển khác. Liên quan đến
cổng nối tiếp chủ yếu có 2 thanh ghi : SCON và SBUF. Ngồi ra, một thanh ghi
khác là thanh ghi PCON (không đánh địa chỉ bít) có bít 7 tên là SMOD quy
định tốc độ truyền của cổng nối tiếp có gấp đơi lên (SMOD=1) hay khơng
(SMOD=0).
Cổng có đặc điểm :
Truyền song cơng : có nghĩa là tại một thời điểm có thể vừa truyền vừa nhận dữ
liệu.
Phương thức truyền không đồng bộ: là dữ liệu được truyền đi theo từng kí tự.
Bộ đệm truyền nhận dữ liệu đều có tên là SBUF
SCON là thanh ghi bit được dùng để lập trình việc đóng khung dữ liệu, xác định
chế độ làm việc của cổng truyền thông nối tiếp.
Bảng dưới đây mô tả chi tiết các bit khác nhau của thanh ghi SCON :
Bit
7
6
5
4
3
2
1
0
Tên
SM0
SM1
SM2
REN
TB8
RB8
TI
RI
Địa chỉ
9FH
9EH
9DH
9CH
9BH
9AH
99H
98H
Chức năng
Xác định chế độ cổng nối tiếp (bit 0)
Xác định chế độ cổng nối tiếp (bit 1)
Cho phép truyền thông đa xử lý
Bít cho phép nhận
Sử dụng trong chế độ 2 và 3
Sử dụng trong chế độ 2 và 3
Cờ truyền :nhận được sau khi truyền xong 1 byte
Cờ nhận: Nhận được sau khi nhận đủ 1 byte
BÀI TẬP LỚN VI ĐIỀU KHIỂN
Các chế độ làm việc của cổng truyền thông
SM0
0
0
1
1
SM1
0
1
0
1
Chế độ
0
1
2
3
Khung dữ liệu
8-bit Shift Register
8-bit UART
9-bit UART
9-bit UART
Tốc độ Baud
Oscillator/12
Cài đặt bởi timer 1(*)
Oscillator/64(*)
Cài đặt bởi timer 1(*)
II. Giới thiêu về Vi điều khiển 89C51
AT89C51 là một vi điều khiển 8 bit, chế tạo theo công nghệ CMOS chất lượng
cao, công suất thấp với 4 KB PEROM (Flash Programeable and erasable read
only memory).
Các đặc điểm của 8951 được tóm tắt như sau:
Đặc tính
Số lượng
ROM trên chíp
4K byte
RAM
128 byte
Bộ định thời
2
Các chân vào - ra
32
Cổng nối tiếp
1
Nguồn ngắt
6
Bảng 2.1: Các đặc tính cơ bản của 8051.
BÀI TẬP LỚN VI ĐIỀU KHIỂN
Chương 3: CHUẨN RS232
3.1.Giới thiệu
Được xây dựng phục vụ chủ yếu trong việc ghép nối điểm – điểm giữa
hai thiết bị đầu cuối (DTE, Data Terminal Equipment).mặc dù tính năng hạn chế
nhưng chuẩn RS232 có từ lâu đời nhất vì thế nên nó được sử dụng rộng rãi.
Ngày nay mỗi máy tính cá nhân có vài cổng RS232( cổng com) có thể sử dụng
nối các thiết bị ngoại vi hoặc với các máy tính khác.
3.1.1.Ưu điểm của giao diện nối tiếp RS232
+ Khả năng chống nhiễu của các cổng nối tiếp cao
+ Thiết bị ngoại vi có thể tháo lắp ngay cả khi máy tính đang được cấp điện
+ Các mạch điện đơn giản có thể nhận được điện áp nguồn nuôi qua công nối
tiếp
3.1.2.Những đặc điểm cần lưu ý trong chuẩn RS232
+ Trong chuẩn RS232 có mức giới hạn trên và dưới (logic 0 và 1) là +-15V. Hiện nay đang được cố
định trở kháng tải trong phạm vi từ-7000Ω- 3000Ω
+ Mức logic 1 có điện áp nằm trong khoảng -3V đến -15V, mức logic 0
từ -3V đến 15V
+ Tốc độ truyền nhận dữ liệu cực đại là 100kbps ( ngày nay có thể lớn hơn)
+ Các lối vào phải có điện dung nhỏ hơn 2500pF
+ Trở kháng tải phải lớn hơn 3000 ôm nhưng phải nhỏ hơn 7000 ôm
+ Độ dài của cáp nối giữa máy tính và thiết bị ngoại vi ghép nối qua cổng
nối tiếp RS232 không vượt qua 15m nếu chúng ta không sử model
+ Các giá trị tốc độ truyền dữ liệu chuẩn :
50,75,110,750,300,600,1200,2400,4800,9600,19200,28800,38400....56600,1
15200 bps
3.2.Quá trình dữ liệu
3.2.1.Quátrình truyền dữ liệu
Truyền dữ liệu qua cổng nối tiếp RS232 được thực hiện không đồng bộ.
Do vậy nên tại một thời điểm chỉ có một bit được truyền (1 kí tự). Bộ truyền
gửi một bit bắt đầu (bit start) để thông báo cho bộ nhận biết một kí tự sẽ được
gửi đến trong lần truyền bit tiếp the . Bit này ln bắt đầu bằng mức 0.. Tiếp
theo đó là các bit dữ liệu (bits data) được gửi dưới dạng mã ASCII( có thể là
BÀI TẬP LỚN VI ĐIỀU KHIỂN
5,6,7 hay 8 bit dữ liệu) Sau đó là một Parity bit ( Kiểm tra bit chẵn, lẻ hay
không) và cuối cùng là bit dừng - bit stop có thể là 1, 1,5 hay 2 bit dừng.
3.2.2.Tốc độ Baud
Đây là một tham số đặc trưng của RS232. Tham số này chính là đặc trưng
cho quá trình truyền dữ liệu qua cổng nối tiếp RS232 là tốc độ truyền nhận dữ
liệu hay còn gọi là tốc độ bit. Tốc độ bit được định nghĩa là số bit truyền được
trong thời gian 1 giây hay số bit truyền được trong thời gian 1 giây. Tốc độ bit
này phải được thiết lập ở bên phát và bên nhận đều phải có tốc độ như nhau
( Tốc độ giữa vi điều khiển và máy tính phải chung nhau 1 tốc độ truyền bit)
Ngồi tốc độ bit cịn một tham số để mô tả tốc độ truyền là tốc độ Baud.
Tốc độ Baud liên quan đến tốc độ mà phần tử mã hóa dữ liệu được sử dụng để
diễn tả bit được truyền cịn tơc độ bit thì phản ánh tốc độ thực tế mà các bit
được truyền.Vì một phần tử báo hiệu sự mã hóa một bit nên khi đó hai tốc độ
bit và tốc độ baud là phải đồng nhất
Một số tốc độ Baud thường dùng: 50, 75, 110, 150, 300, 600, 1200, 2400,
4800, 9600, 19200, 28800, 38400, 56000, 115200 … Trong thiết bị họ thường
dùng tốc độ là 19200, Khi sử dụng chuẩn nối tiếp RS232 thì yêu cầu khi sử
dụng chuẩn là thời gian chuyển mức logic không vượt quá 4% thời gian truyền
1 bit. Do vậy, nếu tốc độ bit càng cao thì thời gian truyền 1 bit càng nhỏ thì thời
gian chuyển mức logic càng phải nhỏ. Điều này làm giới hạn tốc Baud và
khoảng cách truyền.
3.2.3.Bit chẵn lẻ hay Parity bit
Đây là bit kiểm tra lỗi trên đường truyền. Thực chất của quá trình kiểm
tra lỗi khi truyền dữ liệu là bổ xungthêm dữ liệu được truyền để tìm ra hoặc
sửa một số lỗi trong q trình truyền . Do đó trong chuẩn RS232 sử dụng một
kỹ thuật kiểm tra chẵn lẻ.
Một bit chẵn lẻ được bổ sung vào dữ liệu được truyền để ch thấy số lượng các
bit "1" được gửi trongmột khung truyền là chẵn hay lẻ.
Một Parity bit chỉ có thể tìm ra một số lẻ các lỗi chả hạn như 1,3,,5,7,9...
Nếu như một bit chẵn được mắc lỗi thì Parity bit sẽ trùng giá trị với trường
hợp không mắc lỗi vì thế khơng phát hiện ra lỗi. Do đó trong kỹ thuật mã hóa
lỗi này khơng được sử dụng trong trường hợp có khả năng một vài bit bị mắc
lỗi.
3.3.IC MAX232
Max232 là IC chuyên dùng cho giao tiếp giữa RS232 và thiết bị ngoại vi.
Max232 là IC của hãng Maxim. Đây là IC chay ổn định và được sử dụng phổ
biến trong các mạch giao tiếp chuẩn RS232. Giá thành của Max232 phù hợp
(12K hay 10K) và tích hợp trong đó hai kênh truyền cho chuẩn RS232. Dịng
BÀI TẬP LỚN VI ĐIỀU KHIỂN
tín hiệu được thiết kế cho chuẩn RS232 . Mỗi đầu truyền ra và cổng nhận tín
hiệu đều được bảo vệ chống lại sự phóng tĩnh điện ( hình như là 15KV). Ngồi
ra Max232 cịn được thiết kế với nguồn +5V cung cấp nguồn công suất nhỏ.
Chương IV:ECONDER VÀ LED BẢY THANH
4.1.econder
Encoder mục đích dùng để quản lý vị trí góc của một đĩa quay, đĩa
quay có thể là bánh xe, trục động cơ, hoặc bất kỳ thiết bị quay nào cần
xác định vị trí góc.
Encoder được chia làm 2 loại, absolute encoder và incremental encoder.
Tạm dịch là encoder tuyệt đối và encoder tương đối. Nếu dịch sát nghĩa,
khi ta đọc absolute encoder, có nghĩa là encoder tuyệt đối, tức là tín hiệu
ta nhận được, chỉ rõ ràng vị trí của encoder, chúng ta khơng cần xử lý gì
thêm, cũng biết chính xác vị trí của encoder.
Cịn incremental encoder, là loại encoder chỉ có 1, 2, hoặc tối đa là
3 vịng lỗ. Các bạn hình dung thế này, nếu bây giờ các bạn đục một lỗ
trên một cái đĩa quay, thì cứ mỗi lần đĩa quay 1 vịng, các bạn sẽ nhận
được tín hiệu, và các bạn đã biết đĩa quay một vòng. Nếu bây giờ các
bạn có nhiều lỗ hơn, các bạn sẽ có được thơng tin chi tiết hơn, có nghĩa
là đĩa quay 1/4 vong, 1/8 vòng, hoặc 1/n vòng, tùy theo số lỗ nằm trên
incremental encoder.
Cứ mỗi lần đi qua một lỗ, chúng ta phải lập trình để thiết bị đo đếm lên
1. Do vậy, encoder loại này có tên incremental encoder (encoder tăng
lên 1 đơn vị).
BÀI TẬP LỚN VI ĐIỀU KHIỂN
Nguyên lý hoạt động cơ bản của encoder, LED và lỗ
Nguyên lý cơ bản của encoder, đó là một đĩa trịn xoay, quay quanh trục.
Trên đĩa có các lỗ (rãnh). Người ta dùng một đèn led để chiếu lên mặt
đĩa. Khi đĩa quay, chỗ không có lỗ (rãnh), đèn led khơng chiếu xun
qua được, chỗ có lỗ (rãnh), đèn led sẽ chiếu xuyên qua. Khi đó, phía
mặt bên kia của đĩa, người ta đặt một con mắt thu. Với các tín hiệu có,
hoặc khơng có ánh sáng chiếu qua, người ta ghi nhận được đèn led có
chiếu qua lỗ hay khơng.
Khi trục quay, giả sử trên đĩa chỉ có một lỗ duy nhất, cứ mỗi lần con mắt
thu nhận được tín hiệu đèn led, thì có nghĩa là đĩa đã quay được một
vịng.
Đây là ngun lý rất cơ bản của encoder.
Tuy nhiên, những vấn đề được đặt ra là, làm sao để xác định chính xác
hơn vị trí của đĩa quay (mịn hơn) và làm thế nào để xác định được đĩa
đang quay theo chiều nào? Đó chính là vấn đề để chúng ta tìm hiểu về
encoder.
Hình sau sẽ minh họa nguyên lý cơ bản của hoạt động encoder.
BÀI TẬP LỚN VI ĐIỀU KHIỂN
Các bạn thấy trong hình, có một đĩa mask, khơng quay, đó là đĩa cố
định, thực ra là để che khe hẹp ánh sáng đi qua, giúp cho việc đọc
encoder được chính xác hơn mà thôi. Chúng tôi không để cập đến đĩa
mặt nạ này ở đây.
Hoạt động của hai loại encoder này như thế nào?
4.1.1.Absolute encoder
Vấn đề chúng ta sẽ quan tâm ở đây, chính là vấn đề về độ mịn của
encoder, có nghĩa là làm thế nào biết đĩa đã quay 1/2 vòng, 1/4 vịng,
1/8 vịng hay 1/n vịng, chứ khơng phải chỉ biết đĩa đã quay được một
vịng.
Quay lại bài tốn cơ bản về bit và số bit, chúng ta xem xét vấn đề theo
một cách hồn tồn tốn học nhé:
Với một số nhị phân có 2 chữ số, chúng ta sẽ có 00, 01, 10, 11, tức là 4
trạng thái. Điều đó có nghĩa là với 2 chữ số, chúng ta có thể chia đĩa
encoder thành 4 phần bằng nhau. Và khi quay, chúng ta sẽ xác định
được độ chính xác đến 1/4 vòng.
Tương tự như vậy, nếu với một số có n chữ số, chúng ta sẽ xác định
được độ chính xác đến 1/(2^n) vịng.
Thế làm sao để xác định 2^n trạng thái này của đĩa encoder?
Các bạn xem hình sau:
BÀI TẬP LỚN VI ĐIỀU KHIỂN
Ở đây, tôi đưa ra ví dụ với đĩa encoder có 2 vịng đĩa. Các bạn sẽ thấy
rằng, ở vịng trong cùng, có một rãnh rộng bằng 1/2 đĩa. Vịng phía
ngồi, sẽ có 2 rãnh nằm đối diện nhau.
Như vậy, chúng ta cần 2 đèn led để phát xuyên qua 2 vòng lỗ, và 2 đèn
thu.
Giả sử ở vòng lỗ thứ nhất (trong cùng), đèn đọc đang nằm ở vị trí có lỗ
hở, thì tín hiệu nhận được từ con mắt thu sẽ là 1. Và ở vịng lỗ thứ hai,
thì chúng ta đang ở vị trí khơng có lỗ, như vậy con mắt thu vòng 2 sẽ
đọc được giá trị 0.
Và như vậy, với số 10, chúng ta xác định được encoder đang nằm ở góc
phần tư nào, cũng có nghĩa là chúng ta quản lý được độ chính xác của
đĩa quay đến 1/4 vịng. Trong ví dụ trên, nếu đèn LED đọc được 10, thì
vị trí của LED phải nằm trong góc phần tư thứ hai, phía trên, bên trái.
Kết quả, nếu đĩa encoder có đến 10 vịng lỗ, thì chúng ta sẽ quản lý
được đến 1/(2^10) tức là đến 1/1024 vòng. Hay người ta nói là độ phân
giải của encoder là 1024 xung trên vòng (pulse per revolution - ppr).
Sau đây là ví dụ abosulte encoder 8 vịng lỗ:
BÀI TẬP LỚN VI ĐIỀU KHIỂN
Vậy cách thiết kế absolute encoder như thế nào?
Các bạn luôn chú ý rằng, để thiết kế encoder tuyệt đối, người ta luôn vẽ
sao cho bit thứ N (đối với encoder có N vịng lỗ) nằm ở trong cùng, có
nghĩa là lỗ lớn nhất có góc rộng 180 độ, nằm trong cùng. Bởi vì chúng ta
thấy rằng, bit0 (nếu xem là số nhị phân) sẽ thay đổi liên tục mỗi 1/2^N
vịng quay, vì thế, chúng ta cần rất nhiều lỗ. Nếu đặt ở trong thì khơng
thể nào vẽ được, vì ở trong bán kính nhỏ hơn. Ngồi ra, nếu đặt ở
trong, thì về kết cấu cơ khí, nó q gần trục, và q nhiều lỗ, sẽ rất yếu.
Vì hai điểm này, nên bit0 ln đặt ở ngồi cùng, và bitN-1 ln đặt trong
cùng như hình trên.
Rất nhiều người thắc mắc về cách thực tế để vẽ encoder như thế nào.
Tuy nhiên, kể từ khi có chương trình thiết kế encoder này, tơi cho rằng
chúng ta khơng nên quan tâm đến vấn đề đó nữa. Chỉ cần hiểu nó hoạt
động ra sao, rồi sau đó chúng ta dùng chương trình này để vẽ.
Kết quả, nếu đĩa encoder có đến 10 vịng lỗ, thì chúng ta sẽ quản lý
được đến 1/(2^10) tức là đến 1/1024 vòng. Hay người ta nói là độ phân
giải của encoder là 1024 xung trên vòng (pulse per revolution - ppr).
4.1.2.Incremental encoder
Nhận thấy một điều rằng, encoder tuyệt đối rất có lợi cho những trường hợp khi góc quay là nhỏ, và
động cơ khơng quay nhiều vịng. Khi đó, việc xử lý encoder tuyệt đối trở nên dễ dàng cho người
dùng hơn, vì chỉ cần đọc giá trị là chúng ta biết ngay được vị trí góc của trục quay.Tuy nhiên, nếu
động cơ quay nhiều vịng, điều này khơng có lợi, bởi vì khi đó, chúng ta phải xử lý để đếm số vòng
quay của trục.
BÀI TẬP LỚN VI ĐIỀU KHIỂN
Ngoài ra, như các bạn thấy đó, nếu thiết kế encoder tuyệt đối, chúng ta cần quá nhiều vòng lỗ, và
dẫn tới giới hạn về kích thước của encoder, bởi vì việc gia cơng chính xác các lỗ quá nhỏ là không thể
thực hiện được. Chưa kể rằng việc thiết kế một dãy đèn led và con mắt thu cũng ảnh hưởng rất lớn
đến kích thước giới hạn này.Tuy nhiên, điều này được khắc phục bằng incremental encoder một
cách khá đơn giản. Chính vì vậy, ngày nay, đa số người ta sử dụng incremental encoder trong những
ứng dụng hiện đại.
Hoạt động của incremental encoder
Thật đơn giản, incremental encoder, sẽ tăng 1 đơn vị khi một lần lên
xuống của cạnh xung.
Các bạn xem hình encoder sau:
Các bạn thấy rằng, cứ mỗi lần quay qua một lỗ, thì encoder sẽ tăng một
đơn vị trong biến đếm.
Tuy nhiên, một vấn đề là làm sao để biết được encoder quay hết một
vịng? Nếu cứ đếm vơ hạn như thế này, thì chúng ta khơng thể biết
được khi nào nó quay hết một vòng. Nếu bây giờ đếm số lỗ encoder để
biết nó đã quay một vịng, thì nếu với encoder 1000 lỗ sẽ đếm rất lâu.
Chưa kể, mỗi lần có những rung động nào đó mà ta khơng quản lý
được, encoder sẽ bị sai một xung. Khi đó, nếu hoạt động lâu dài, sai số
này sẽ tích lũy, ngày hôm nay sai một xung, ngày hôm sau sai một xung.
Đến cuối cùng, có thể động cơ quay 2 vịng rồi các bạn mới đếm được 1
vòng.Để tránh điều tai hại này xảy ra, người ta đưa vào thêm một lỗ
định vị để đếm số vòng đã quay của encoder.
BÀI TẬP LỚN VI ĐIỀU KHIỂN
Như vậy, cho dù có lệch xung, mà chúng ta thấy rằng encoder đi ngang
qua lỗ định vị này, thì chúng ta sẽ biết là encoder đã bị đếm sai ở đâu
đó. Nếu vì một rung động nào đó, mà chúng ta khơng thấy encoder đi
qua lỗ định vị, vậy thì từ số xung, và việc đi qua lỗ định vị, chúng ta sẽ
biết rõ hiện tượng sai của encoder.
Đây là hình encoder có lỗ định vị:
Tuy nhiên, một vấn đề lớn nữa là, làm sao chúng ta biết encoder đang
xoay theo chiều nào? Bởi vì cho dù xoay theo chiều nào, thì tín hiệu
encoder cũng chỉ là các xung đơn lẻ và xoay theo hai chiều đều giống
nhau.Chính vì vậy, người ta đặt thêm một vòng lỗ ở giữa vòng lỗ thứ 1
và lỗ định vị như hình sau:
BÀI TẬP LỚN VI ĐIỀU KHIỂN
Chú ý rằng, vị trí góc của các lỗ vịng 1 và các lỗ vịng 2 lệch nhau. Các
cạnh của lỗ vòng 2 nằm ngay giữa các lỗ vòng 1 và ngược lại.Chúng ta
sẽ khảo sát tiếp vấn đề encoder trong phần tín hiệu xung để hiểu rõ hơn
về encoder. Tuy nhiên, các bạn sẽ thấy một điều rằng, thay vì làm 2
vịng encoder, và dùng 2 đèn LED đặt thẳng hàng, thì người ta chỉ cần
làm 1 vòng lỗ, và đặt hai đèn LED lệch nhau.
Kết quả, các bạn sẽ thường thấy các encoder có dạng như hình 2:
Đây là dạng encoder phổ biến nhất hiện nay.
BÀI TẬP LỚN VI ĐIỀU KHIỂN
Hình trên là hình xung incremental encoder.
Các bạn thấy rằng nếu như khi xung A đang từ mức cao xuống mức
thấp, mà lúc đó B đang ở mức thấp, thì chúng ta sẽ xác định được chiều
chuyển động của encoder theo chiều mũi tên màu cam.
Nếu A đang từ mức cao xuống mức thấp, mà B đang ở mức cao, thì
chúng ta sẽ biết encoder đang quay theo chiều màu nâu.
4.2.Giới thiệu chung led 7 thanh
LED 7 thanh được dùng nhiều trong các mạch hiện thị thơng báo, hiện thị
số, kí tự đơn giản... LED 7 được cấu tạo từ các LED đơn sắp xếp theo các thanh
nét để có thể biểu diễn các chữ số hoặc các kí tự đơn giản như từ số 0 đến 9 và
A đến F chả hạn. LED 7 thanh dùng để hiện số thì rất đẹp và dễ nhìn. Tùy vào
kích thước của số và kí tự mà mỗi thanh được cấu tạo bởi một hay nhiều LED
đơn. Các LED đơn đó được ghép và được đặt tên bằng các chữ cái a...g và có
một dấu chấm dot ( dấu chấm này có thể sáng và tắt tùy theo yêu cầu) được cấu
tạo bởi 1 LED đơn. Qua đó người ta chỉ cần 8 bit tương ứng với 8 LED đơn để
điều khiển được và hiện thị số từ 0 đến 9 và các kí tự từ A đến F.