LỜI NÓI ĐẦU
Trong quá trình sản xuất hiện đại, đo tốc độ động cơ là việc làm
không thể thiếu, nó giúp cho quá trình giám sát sản xuất nhah hơn, tốt hơn,
cho ra những sản phẩm như ý, chính xác. Nếu ta không đo được tốc độ của
động cơ thì không thể điều khiển tốc độ chính xác được. Với những máy
móc hiện đại như ngày nay, trong quá trình sản xuất luôn chạy với nhiều
tốc độ khác nhau, tùy theo mỗi giai đoạn làm việc của nó, chính vì thế mà ta
cần phải biết tốc độ động cơ là bao nhiêu để điều chỉnh cho phù hợp.
Từ lâu con người đã nghiên cứu chế tạo ra những máy đo tốc độ và
được sử dụng rộng rãi. Trong các hệ truyền động kinh điển người ta dùng
máy phát tốc đo tốc độ động cơ, máy phát tốc một chiều hay xoay chiều
thực chất cũng chỉ là máy phát điện công suất nhỏ, có suất điện động ra tỷ
lệ với tốc độ cần đo. Về sau nền sản xuất công nghiệp ngày càng phát triển
hiện đại người ta bắt đầu nghiên cứu và cho ra đời các máy đo tốc độ có độ
chính xác cao hơn như máy đo góc tuyệt đối, máy đo sử dụng cảm biến
quang tốc độ với đĩa giải mã …
Trong quá trình ngồi trên ghế trường đại học em đã được trang bị
một số kiến thức về lĩnh vực này, thấy được tầm quan trọng của nó và để
tìm hiểu kỹ hơn thầy giáo đã giao cho em bài tập “ Thiết kế hệ thống
đo tốc độ động cơ sử dụng encoder hiển thị trên máy tính“ để
làm cơ sở cho sự phát triển các môn chuyên ngành. Đề tài này cũng không
có gì mới mẻ nhưng em nghĩ tuy cũ mà mình chưa nghiên cứu thì với mình
nó vẫn là mới như thường,với lại tầm quan trọng của nó là rất lớn, trong
quá trình làm việc sau này chắc chắn sẽ còn gặp thường xuyên nên phải
nghiên cứu để nắm vững.
Với đề tài trên yêu cầu người làm phải nắm vững được các phương
pháp đo tốc độ động cơ, từ đó thiết kế và thi công máy đo tốc độ không tiếp
1
xúc và hiển thị được tốc độ đó, từ cơ sở đó buộc người làm đề tài phải thực
hiện được những công việc sau:
- Tìn hiểu về các phương pháp đo tốc độ động cơ
- Trong thực tế sản xuất việc đo tốc độ thường là đo tốc độ quay
của máy, trong trường hợp chuyển Tìm hiểu về các linh kiện sử
dụng
- Tìm hiểu về cảm biến tốc độ
- Thiết kế và thi công phần cứng
- Xây dựng lưu đồ giải thuật và tiến hành lập trình cho mạch
Trong thực động thẳng, thường người ta chuyển tốc độ dài sang đo
tốc độ quay, do đó cảm biến tốc độ gốc luôn chiếm ưu thế trong lĩnh vực đo
tốc độ. Trong đề tài này em chọn cảm biến thu phát hồng ngoại(encoder)
để đọc tốc độ của roto động cơ. Muốn làm được điều này thì trên trục roto
ta phải gắn cho nó bộ phận chiếu sáng hồng ngoại, số vòng quay của động
cơ sẽ được cảm biến mã hóa về cho vi điều khiển sử lý, chân ngắt ngoài
0(INT0) sẽ giao nhiệm vụ nhận giá trị cảm biến đọc về
Máy đo tốc độ trên thị trường ngày nay rất đa dang và hiện đại có
độ chính xác cao, những chiếc máy này được ra đời và hoàn thiện dần trong
chuỗi thời gian rất lâu, các công ty sản xuât nó đã bỏ rất nhiều thời gian và
tiền bạc để nghiên cứu chế tạo. Với kiến thức của một sinh viên, và thời
gian có hạn em không thể nào đem sản phẩm của mình so sánh được. Tuy
nhiên em sẽ dành tất cả kiến thức và thời gian mà mình có được để hoàn
thành đề bài mà thầy giáo giao cho một cách tốt nhất, và xem đó như là một
cơ hội để học tập và kiểm tra lại kiến thức mà mình đã học, vì vậy bài làm
của em vẫn còn nhiều sai sót mong quý thầy cô thông cảm. Em xin chân
thành cảm ơn sự giúp đỡ tận tình của các thầy các cô trong khoa, đặc biệt
là thầy PHẠM TUẤN ANH đã giúp em hoàn thành bài tập này.
Em xin chân thành cám ơn !
2
Hải phòng, ngày 29 tháng 4 năm 2011
Sinh viên
Trịnh Minh Hải
Chương 1
MÔ TẢ CHUNG VỀ HỆ THỐNG ĐO TỐC ĐỘ
1.1 Giới thiệu về động cơ điện một chiều
1. Giới thiệu về động cơ điện.
a. Động cơ điện xoay chiều:
+. Cấu tạo và nguyên lý hoạt động:
Động cơ gồm có hai phần chính là stator và rotor. Stato gồm các cuộn
dây của ba pha điện quấn trên các lõi sắt bố trí trên một vành tròn để tạo ra từ
trường quay. Rôto hình trụ có tác dụng như một cuộn dây quấn trên lõi
thép.Khi mắc động cơ vào mạng điện xoay chiều, từ trường quay do stato gây
ra làm cho rôto quay trên trục. Chuyển động quay của rôto được trục máy
truyền ra ngoài và được sử dụng để vận hành các máy công cụ hoặc các cơ cấu
chuyển động khác.
+. Phân loai:
Động cơ điện xoay chiều được sản xuất với nhiều kiểu và công suất khác
nhau. Theo sơ đồ nối điện có thể phân ra làm 2 loại: động cơ 3 pha và 1 pha, và
nếu theo tốc độ có động cơ đồng bộ và động cơ không đồng bộ.
b. Động cơ điện một chiều:
+. Cấu tạo:
3
Stator của động cơ điện 1 chiều thường là 1 hay nhiều cặp nam châm
vĩnh cửu, hay nam châm điện, rotor có các cuộn dây quấn và được nối với
nguồn điện một chiều, 1 phần quan trọng khác của động cơ điện 1 chiều là bộ
phận chỉnh lưu, nó có nhiệm vụ là đổi chiều dòng điện trong khi chuyển động
quay của rotor là liên tục. Thông thường bộ phận này gồm có một bộ cổ góp và
một bộ chổi than tiếp xúc với cổ góp.
+. Cơ chế hoạt động:
Nếu trục của một động cơ điện một chiều được kéo bằng 1 lực ngoài,
động cơ sẽ hoạt động như một máy phát điện một chiều, và tạo ra một sức điện
động cảm ứng Electromotive force (EMF). Khi vận hành bình thường, rotor khi
quay sẽ phát ra một điện áp gọi là sức phản điện động counter-EMF (CEMF)
hoặc sức điện độngđối kháng, vì nó đối kháng lại điện áp bên ngoài đặt vào
động cơ. Sức điện động này tương tự như sức điện động phát ra khi động cơ
được sử dụng như một máy phát điện (như lúc ta nối một điện trở tải vào đầu ra
của động cơ, và kéo trục động cơ bằng một ngẫu lực bên ngoài). Như vậy điện
áp đặt trên động cơ bao gồm 2 thành phần: sức phản điện động, và điện áp
giáng tạo ra do điện trở nội của các cuộn dây phần ứng. Dòng điện chạy qua
động cơ được tính theo biều thức sau:
I = (V
Nguon
− V
PhanDienDong
) / R
PhanUng
Công suất cơ mà động cơ đưa ra được, được tính bằng:
P = I * (V
PhanDienDong
)
1.2. Các phương pháp đo tốc độ đông cơ.
1. Đo tốc độ động cơ sử dung encoder
4
*> Nguyên lý:
Đo tốc độ động cơ dùng encoder, tín hiệu từ encoder tạo ra các dạng xung
vuông có tần số thay đôi phụ thuộc vào tốc độ động cơ. Do đó các xung vuông
này được đưa vào bộ vi xử lý để đếm số xung trong khoảng thời gian cho phép
từ đó ta có thể tính được giá trị vận tốc của động cơ. Đây cũng là phương pháp
mà người ta sử dụng để ổn định tốc độ động cơ hay điều khiển nhanh chậm
*> Nguyên lý encoder
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 xuyên 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. Số xung đếm được
và tăng lên nó tính bằng số lần ánh sáng bị cắt. Như vậy là encoder sẽ tạo ra các
tín hiệu xung vuông và các tín hiệu xung vuông này được cắt từ ánh sáng xuyên
qua lỗ. Nên tần số của xung đầu ra sẽ phụ thuộc vào tốc độ quay của tấm tròn
đó. Đối với encoder người ta có thể dùng 2 bộ đặt lệch nhau 90
0
nó sẽ có 2 tín
hiệu ra lệch pha nhau 90. Hai tín hiệu này có thể xác định được chiều quay của
động cơ.
Sơ đồ cấu tạo bên trong của encode
5
2. Đo tốc độ động cơ sử dụng máy phát tốc
Đo tốc độ động cơ dùng máy phát tốc, tín hiệu từ máy phát tốc tạo ra có
điện áp thay đôi phụ thuộc vào tốc độ động cơ. Do đó điện áp này được đưa qua
bộ chuyển đổi ADC tạo thành các xung vuông, các xung vuông này được đưa
vào bộ vi xử lý để đếm số xung trong khoảng thời gian cho phép từ đó ta có thể
tính được giá trị vận tốc của động cơ.
a, Sử dụng máy phát tốc: có nhược điểm là độ chính xác không cao,
lại đòi hỏi kèm theo bộ chuyển đổi tương tự - số để số hóa tín hiệu đo nên
phương pháp này không được ưa dùng nên nó dần đi vào dĩ vãng.
b, Phương pháp đo sử dụng bộ cảm biến quang tốc độ: với đĩa
giải mãi để đo tốc độ động cơ có các ưu điểm: độ phân giải cao dẫn đến kết quả
cực kì chính xác, ít nhiễu với sóng điện từ.
c, Phương pháp sử dụng máy đo góc tuyệt đối: có ưu điểm ít bị
ảnh hưởng bởi nhiệt độ, ít nhiễu điện từ tuy nhiên chúng không đạt được độ
phân giải cao như bộ cảm biến quang tốc độ với tín hiệu hình sin.
d, Phương pháp xác định tốc độ gián tiếp: qua phép đo dòng điện
và điện áp stato mà không cần bộ cảm biến tốc độ.
6
Các phương pháp sử dụng máy phát tốc hay bộ cảm biến dòng nói
trên có một số nhược điểm là : nó làm cho hệ thống truyền động không đồng
nhất do phải lắp thêm vào trục động cơ các cảm biến, trong một số trường hợp
không thực hiện được. Ví dụ như trong hệ thống truyền động cao tốc hoăc khi
động cơ làm việc trong môi trường độc hại. Phương pháp xác định tốc độ gián
tiếp qua phép đo dòng điện và điện áp stato mà không cần dùng đến bộ cảm biến
tốc độ khắc phục được các nhược điểm trên.
1.3. Giới thiệu về encoder.
a.Tổng quát về encoder:
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 ( encoder tuyệt đối ) và
incremental ( encoder tương đối ). Đối với loại encoder tuyệt đối thì 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 đối với encoder tương đối thì loại này chỉ
có 1, 2, hoặc 3 vòng lỗ. Ta có thể hình dung như thế này, nếu bây giờ ta đục
thêm một lỗ trên một cái đĩa quay thì cứ mỗi lần quay được 1 vòng ta sẽ nhận
được tín hiệu và ta biết được đĩa quay được 1 vòng. Nếu bây giờ trên đĩa đó có
nhiều lỗ hơn thì ta sẽ có được những thông tin chi tiết hơn, có nghĩa là đĩa quay
1/4 vòng, 1/8 vòng hay 1/n vòng tùy theo số lỗ nằm trên encoder.
7
Hình 1.1. Đĩa encoder.
b, Nguyên lý hoạt động của encoder.
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ỗ. 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 xuyên 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. 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.
8
Hinh 1.2. Nguyên lý cơ bản của hoạt động encoder.
a, Với encoder tuyệt đối:
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 toán cơ bản về bit và số bit, chúng ta xem xét vấn đề theo
một cách hoàn toàn toán học như sau:
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?
Ta xét hình sau:
Hình 1.3. Đĩa encoder có 2 vòng đĩa
Ở hình trên ta 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 ngoà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 lỗ, và 2 đèn thu.
Giả sử ở vòng lỗ thứ nhất ( trong cùng ), đèn đọc đang nằm ở hai 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ứ 2, thì
9
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ị là 0. Như vậy với đĩa có 10 vòng, 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).
Hình 1.4. Đĩa encoder 8 vòng.
Cách chế tạo encoder tuyệt đối: Để 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. Ngoài ra, nếu đặt ở trong, thì về kết cấu cơ
khí, nó quá gần trục, và quá nhiều lỗ, sẽ rất yếu. Vì hai điểm này, nên bit 0 luôn
đặt ở ngoài cùng, và bit N-1 luôn đặt trong cùng như hình trên.
b, encoder tương đối:
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à
10
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. Ngoài ra, 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.
Hoạt động của encoder tương đối bằng cách tăng lên 1 đơn vị khi một
lần lên xuống của cạnh xung.
Hình 1.5. Encoder tương đối.
Ta thấy 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 1
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 1 vòng. Để giải quyết vấn đề này, ta đưa thêm vào 1 lỗ định vị để
đếm số vòng đã quay của encoder. Như vậy, cho dù có lệch xung mà chúng ta
vẫn thấy rằng encoder đi ngang qua lỗ định vị này thì chúng ta vẫn 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 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.
11
Hình 1.6. 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.
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, ta 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ì ta chỉ cần làm 1 vòng lỗ, và đặt hai đèn LED lệch nhau.
c, Thuật toán đo tốc độ động cơ
12
Hình 1.7. Sơ đồ cấu tạo bên trong của encoder.
DO Psoc có đủ các module : Timer 16, couter 8, LCD nên ta chỉ cần lấy
các modul đó ra Sử dụng.
Thuật toán đơn giản mà được dùng rất phổ biến là ngắt thời gian để đếm
xung từ encoder cụ thể như sau :
+ Tạo một module thời gian ở đây là timer 16 có thời gian là 0.01s,
module Cou ter 8 đếm xung từ 0 đến 255 (Nó đếm lần lượt từ 0 đến 255 và đến
255 thì lại trở về chu kì mới)
+ Sử dụng ngắt timer 16. (Có nghĩa là cứ 0.01s là chương trình lại xẩy ra
ngắt 1 lần). Trong hàm ngắt chúng ta xử lý số liệu mà số xung từ encoder được
đưa về vi điều khiển. Vì Couter nó chỉ đếm được từ 0 đến 255 để bao gồm cả
trường hợp trong 0.01s mà số xung nó lớn hơn 255 (Hay 0.01s nó được được
trên 255 xung). Do đó chúng ta cần phải có 2 giá trị đếm của couter : Giá trị đếm
mới (newcount), giá trị đếm cũ (oldcount).
* Giá trị đếm cũ = Giá trị đếm mới:
* Khởi tạo cho newcount = 255 - giá trị xung đếm
* Nếu mà giá trị oldcount > newcount thì giá trị xung cuối cùng là :
count = 255 + newcount - oldcount.
13
* Nếu mà giá trị oldcount < newcount thì giá trị đếm cuối cùng là :count
= newcount - oldcount
Từ giá trị đếm được số xung đó ta tính được vận tốc của động cơ. NHớ
là encoder có 100xung/vòng.
CHƯƠNG 2
XÂY DỰNG MẠCH PHẦN CỨNG.
2.1. Sơ đồ khối hệ thống đo tốc độ động cơ.
Việc thiết kế một hệ vi xử lý bao gồm cả việc thiết kế phần cứng vào và
viết phần mềm cho nền tảng phần cứng mà ta thiết kế. Việc xem xét giữa tổ
chức phần cứng và chương trình phần mềm cho một thiết kế là một vấn đề cần
phải cân nhắc. Vì khi tổ chức phần cứng càng phức tạp, càng có nhiều chức
năng hỗ trợ cho yêu cầu thiết kế thì phần mềm càng được giảm bớt và dễ dàng
thực thi nhưng lại đẩy giá thành sản phẩm lên cao, cũng như chi phí bảo trì.
Ngược lại với một phần cứng tối thiểu lại yêu cầu một chương trình phần mềm
phức tạp hơn, hoàn thiện hơn, nhưng lại cho phép bảo trì hệ thống dễ dàng hơn
cũng như việc phát triển tính năng của hệ thống từ đó có thể đưa ra gia thành
cạnh tranh.
14
Khối nguồn
Khối hiển thị
Hình 2.1. Sơ đồ khối hệ thống đo tốc độ động cơ.
Sơ đồ nguyên lý mạch đo
a, Khối nguồn :
15
Động cơ
Khối thu
phát tín hiệu
Khối xử lý
Nguồn điện được thiết kế riêng sử dụng IC 7805 cho phép cung cấp điện
áp ổn định 5V với điện áp vào thay đổi từ 9-12V. Mạch nguồn được thiết kế
nhằm giảm thiểu sai số do mạch không ổn định của điện áp cung cấp cho mạch
đếm và các phụ kiện liên quan và hạn chế sự gia tăng đột ngột gây hỏng linh
kiện.
VI
1
VO
3
GND
2
U1
C1 C2 R1
D1
Hình 2.2. Mạch nguồn 5V.
Các tụ C1 và C2 có nhiệm vụ ổn áp tránh dao động do dòng điện, hoặc
các hiện tượng sụt áp, ngoài ra còn có điện trở R1 và con led để báo nguồn.
b, Khối động cơ:
Hoạt động của động cơ được xác định mỗi khi có sự thay đổi tín hiệu
xung nhận được khi có chùm sáng từ cảm biến phát quang qua khe đặt trên cánh
động cơ xuống cảm biến thu quang. Tín hiệu thu từ bộ cảm biến hồng ngoại có
tính chất tuần hoàn do động cơ hoạt động theo chu kỳ. Chính vì vậy, ta có thể
xác định được số vòng quay trong một giây.
Tín hiệu thu được từ bộ cảm biến chưa ổn định, do nhiều nguyên nhân
khác nhau. Tín hiệu này được đưa vào IC khuếch đại thuật toán để xử lý. Giá trị
điện áp tín hiệu được khuếch đại lên khoảng 12V tại đây tín hiệu được đưa vào
chân của xử lý.
c, Khối thu phát tín hiệu:
Khối này gồm những bộ phận sau:
16
- Bộ thu phát hồng ngoại làm nhiệm vụ thu nhận tốc độ động cơ bằng
diode thu phát quang để đếm số vòng quay của động cơ qua một đĩa chắn quang
gắn vào trục của động cơ.
- Bộ so sánh ngưỡng LM358 làm nhiệm vụ chuyển tín hiệu từ bộ thu
phát hồng ngoại thành tín hiệu TTL tương ứng đưa vào chân của vi điều khiển.
LM358 còn có nhiệm vụ là khuếch đại thuật toán.
H I
+
-
L M 3 5 8
3
2
1
84
2 1
0
21
Hình 2.3. Mạch thu phát hồng ngoại.
Nguyên lý hoạt động của mạch: việc đo tốc độ của động cơ dựa vào quá
trình đếm xung của vi xử lý thông qua các xung của bộ cảm biến thu phát (ứng
với mỗi vòng quay của động cơ cảm biến sẽ phát một xung đưa về bộ đếm của
vi xử lý ). Thông qua chương trình được lập trình sẵn trong vi xử lý, mạch đếm
sẽ tính toán số liệu đo được và cho hiển thị kết quả. Với khả năng lập trình được
vi xử lý cho phép động cơ chọn thang đo ( có thể thay đổi khoảng thời gian
trong phép đo từ đó thay đổi thang đo theo giây, phút ). Ngoài ra, vi xử lý còn
cho phép phát triển thêm các tính năng của mạch như điều khiển tốc độ của
động cơ khi cần thiết, lưu giữ các kết quả của phép đo trước đó mở rộng khả
năng ứng dụng trong nhiều lĩnh vực của mạch ( đo tần số, đo chu kì… )
Nhờ sử dụng xung đồng bộ của thạch anh có độ chính xác và ổn định cao
nên vi xử lý cho phép loại bỏ sai số của hệ thống do sự “chậm” của thời điểm
17
“mở “ và “đóng “ các xung của tín hiệu đi vào mạch tính toán. Đầu ra của khối
được đưa vào một chân ngắt ngoài của IC.
d, Khối xử lý:
Từ yêu cầu của bài toán ta chọn chip vi điều khiển thuộc họ MCS-51 của
Intel, mà cụ thể ở đây là họ 8051 vì những lý do sau:
Thứ nhất họ 8051 là chip vi điều khiển. Đặc điểm của các chip này
nói chung là nó được tích hợp với đầy đủ chức năng của một hệ vi xử lý nhỏ, rất
thích hợp với những thiết kế hướng điều khiển. Tức là trong nó bao gồm: mạch
vi xử lý, bộ nhớ chương trình và dữ liệu, bộ đếm, bộ tạo xung, các cổng vào-ra
nối tiếp và song song, mạch điều khiển ngắt.
Thứ hai là, họ vi điều khiển 8051 cùng với các họ vi điều khiển
khác nói chung trong những năm gần đây được phát triển theo các hướng sau:
- Giảm nhỏ dòng tiêu thụ.
- Tăng tốc độ làm việc hay tần số xugng nhịp của CPU.
- Giảm điện áp nguồn nuôi.
- Có thể mở rộng nhiều chức năng trên chip, mở rộng cho các thiết kế
lớn.
Những đặc điểm đó dẫn đến đạt được hai tính năng quan trọng là: giảm
công suất tiêu thụ và cho phép điều khiển thời gian thực nên về mặt ứng dụng nó
rất thích hợp với các thiết kế hướng điều khiển.
Thứ ba là, vi điều khiển thuộc họ MCS-51 được hỗ trợ một tập lệnh
phong phú nên cho phép nhiều khả năng mềm dẻo trong vấn đề viết chương
trình phần mềm điều khiển.
Thứ tư là, dung lượng bộ nhớ trương trình và bộ nhớ dữ liệu lớn.
Cuối cùng là, các chip thuộc họ MCS-51 hiện đuộc sử dụng rất phổ
biến và được coi là chuẩn công nghiệp cho các thiết kế khả dụng. Mặt khác, qua
việc khảo sát thị trường linh kiện việc có được chip 8051 là dễ dàng nên mở ra
khả năng thiết kế thực tế.
18
Vì những lý do trên mà việc lựa chọn vi điều khiển họ 8051 là một giải
pháp hoàn toàn phù hợp cho thiết kế.
Đặc điểm chính của họ vi xử lý 8051:
- 4k byte ROM, 128k byte RAM.
- 4 port I/O 8 bit.
- 2 bộ đếm/ định thời 16 bit.
- Mạch giao tiếp nối tiếp.
- 64k byte không gian nhớ chương trình ngoài.
- 64k byte không gian nhớ dữ liệu mở rộng.
- Một bộ xử lý bit ( thao tác trên các bit riêng rẽ ).
- 210 vị trí nhớ được định địa chỉ, mỗi vị trí 1 bit.
- Nhân /chia trong 4 µs.
X1
XTAL2
18
XTAL1
19
ALE
30
EA
31
PSEN
29
RST
9
P0.0/AD0
39
P0.1/AD1
38
P0.2/AD2
37
P0.3/AD3
36
P0.4/AD4
35
P0.5/AD5
34
P0.6/AD6
33
P0.7/AD7
32
P1.0
1
P1.1
2
P1.2
3
P1.3
4
P1.4
5
P1.5
6
P1.6
7
P1.7
8
P3.0/RXD
10
P3.1/TXD
11
P3.2/INT0
12
P3.3/INT1
13
P3.4/T0
14
P3.7/RD
17
P3.6/WR
16
P3.5/T1
15
P2.7/A15
28
P2.0/A8
21
P2.1/A9
22
P2.2/A10
23
P2.3/A11
24
P2.4/A12
25
P2.5/A13
26
P2.6/A14
27
U1
AT89C51
C1
470n
C2
470n
C3
1nF
Hình 2.4. Sơ đồ chân IC AT89C51.
Nhiệm vụ của khối xử lý: nhận tín hiệu từ bộ thu phát dưới dạng xung
điện áp và biến đổi xử lý thành các tín hiệu điều khiển để đưa ra hiển thị trên
LCD
e, Khối hiển thị:
19
-Có nhiệm vụ hiển thị kết quả đo được.Ở đây ta dùng LCD ghép
nối với vi điều khiển để hiển thị kết qua.
-Hình dáng và kết cấu chân của LCD
Hình dáng LCD thực tế
-Kết cấu chân của LCD
20
-Cách ghép nối LCD với vi điều khiển 8051
như sau:
+Chân P1.0 đến P1.7 được nối với chân dữ
liệu D0 –D7 của LCD
+Chân P2.0 được nối tới chân RS của LCD
+Chân P2.1 được nối vớ chân R/Ư của LCD
+Chân P2.2 được nối với chân E của LCD
21
-Phng phỏp gi mó lnh hoc d liu ti LCD
LCD và 8051 hoạt động không đồng bộ với nhau, 8051
xử lý nhanh hơn LCD, do đó sau khi ra một lệnh cho LCD,
8051 phải đợi LCD thực hiện xong lệnh trớc đó mới đợc
ra lệnh tiếp theo. Để chờ LCD thực hiện xong lệnh trớc đó
ta có 2 phơng pháp đợc sử dụng để gửi mã lệnh hoặc dữ
liệu đến LCD:
- Phng pháp 1: Gửi các lệnh và dữ liệu đến LCD với một
độ trễ, tức là sau khi ra một lện, 8051 phải đợi một khoảng
thời gian cố định, thời gian này phải dài hơn thời gian làm
việc của LCD (do nhà sản xuất quy định khoảng từ 37 us
đến 1,52 ms). Phơng pháp này đợc mô tả bằng lu đồ
sau:
22
23
-Phng phỏp 2: - Phơng pháp 2:Gửi các lệnhvà dữ liệu đến
LCD có kiểm tra cờ bận (ở phơng phápnày ta không cần phải
đặt một độ trễ lớn trong quá trình xuất dữ liệu hay ra lệnh cho
LCD mà chỉ cầnhiện thị cờ bận (đọc cờ bận BF thông qua chân
DB7) từ LCD trớc khi xuất một lệnh hoặc dữ liệu tới LCD). Ph-
ơng pháp này đợc mô tả bằng lu đồ sau:
Lu ý rằng ở bất kì phơng pháp nào để gửi một lệnh bất kì tới
LCD ta phải đa chân RS về 0. Đối với dữ liệu thì bật RS =1 sau
đó gửi một sờn xung cao xuống thấp đến chân E để cho phép
chốt dữ liệu trong LCD
24
CHƯƠNG 3
LẬP TRÌNH PHẦN MÊM
3.2 CODE LỆNH
#include <avr/io.h>
#include <stdio.h>
#include <util/delay.h>
#include <avr/pgmspace.h>
#include <avr/interrupt.h>
#include "lcd_lib.c"
#include "lcd_lib.h"
/*******************************************
// doc gia tri tra ve tu counter, xuat ra LCD
// xuat gia tri len PC
//tinh ra toc do motor
//xuat toc do le LCD
*******************************************/
uint16_t rad=0; //khai bao bien toan cuc
uint16_t t = 0;
//dat chuong trinh con phuc vu ngat o truoc
ISR (TIMER1_OVF_vect)
{
TCNT1=54736; //gia tri TCNT1 nap lai
t++;
}
//adjust LCDsendChar () function for stream
static int LCDsendstream (char c, FILE *stream);
//current channel
//uint8_t ch;
//set output stream to LCD
static FILE lcd_str = FDEV_SETUP_STREAM (LCDsendstream, NULL,
_FDEV_SETUP_WRITE);
//string for LCD store in Flash memory
const uint8_t motor2 [] PROGMEM="motor2: \0";
const uint8_t motor1 [] PROGMEM="motor1: \0";
const uint8_t CLRROW [] PROGMEM=" \0"; //clear row
const uint8_t *LCDXY [] = {
motor1, //for Motor1
motor2}; //for Motor2
static int LCDsendstream (char c, FILE *stream)
{
25