LỜI CẢM ƠN
Em xin chân thành cảm ơn tới các thầy cô giáo trong khoa Điện tử viễn
thông – trường Đại học hàng hải, đã định hướng, giúp đỡ, tạo mọi điều kiện
thuận lợi cho em trong quá trình nghiên cứu. Đặc biệt em xin cảm ơn thầy Ngô
Xuân Hường và thầy Vũ Xuân Hậu đã trược tiếp hướng dẫn, chỉ bảo em để có
thể hoàn thành tốt đồ án này.
Em xin chân thành cảm ơn tới các chú, các anh kỹ thuật viên trong Xưởng
điện tử, thuộc công ty cổ phần điện tử hàng hải đã nhiệt tình chỉ bảo, tạo điều
kiện cho em được tìm hiểu, tiếp xúc với các thiết bị thực tế đồng thời có thể thực
nghiệm, đo lường với các thiết bị, máy móc tại Xưởng.
i
LỜI CAM ĐOAN
Em xin cam đoan đây là công trình nghiên cứu của bản thân, dưới sự
hướng dẫn trực tiếp của thầy Ngô Xuân Hường và thầy Vũ Xuân Hậu. Các kết
quả nghiên cứu đưa ra trong đồ án này do em tự tìm hiểu, phân tích và thực
nghiệm và không sao chép bất kì công trình nghiên cứu của tác giả nào khác.
Nội dung đồ án có sử dụng một số thông tin, tài liệu tham khảo và được trích
dẫn rõ ràng tên tác giả, tên công trình, thời gian và địa điểm công bố, và được
liệt kê trong danh mục tài liệu tham khảo.
ii
MỤC LỤC
PHẦN MỞ ĐẦU...................................................................................................1
CHƯƠNG 1:GIỚI THIỆU VỀ HỆ THỐNG ĐO GIÓ..........................................2
3.3.2. Lập trình cho vi điều khiển Atmega8................................................33
KẾT LUẬN VÀ KIẾN NGHỊ.............................................................................35
1. Kết luận.......................................................................................................35
2. Kiến nghị.....................................................................................................35
TÀI LIỆU THAM KHẢO...................................................................................37
PHỤ LỤC............................................................................................................38
iii
MỘT SỐ TỪ VIẾT TẮT SỬ DỤNG TRONG ĐỒ ÁN
ENCODER
ALU
VĐK
USART
RAM
ROM
EPROM
GPS
Cảm biến góc quay
Arithmetic Logic Unit – Khối xử lý toán học
Vi điều khiển
Truyền thông nối tiếp
Random Access Memory – Bộ nhớ ghi/đọc
Read Only Memory – Bộ nhớ chỉ đọc
Aerraseble programmable ROM – Bộ nhớ Rom lập trình được
Global Position System – hệ thống định vị toàn cầu
DANH MỤC CÁC BẢNG
Số hình
Tên hình
Trang
1.1
Cảm biến đo gió WALKER 2050
2
1.2
Cảm biến đo gió YOUNG 05103
3
1.3
Màn hình chỉ báo của máy đo gió WALER 2050
4
2.1
Cấu tạo của encoder
10
2.7
Cấu trúc vi điều khiển Atmega8
11
2.8
Bộ nhớ chướng trình của Atmega8
12
2.9
Cấu trúc bộ nhớ dữ liệu
14
3.1
Cấu tạo mô hình cảm biến tốc độ gió
24
3.2
Cảm biến hướng gió
31
3.8
Sơ đồ layout mạch hiển thị Led
32
3.9
Mạch hiển thị Led
32
vi
PHẦN MỞ ĐẦU
Trong lịch sử phát triển của mình, từ xa xưa, con người đã biết tới nguồn
năng lượng gió và ảnh hưởng của nó đến đời sống. Ngưởi ta lợi dụng sức gió để
đẩy thuyền buồm ra khơi, để chế tạo cối xay gió hay để làm máy phát điện,..
Tuy nhiên sức gió cũng có thể gây ra những ảnh hưởng tiêu cực như làm lệch
hướng di chuyển của tàu thuyền, ảnh hưởng tới độ vững chắc của các tòa nhà
cao tầng, hay những cơn gió to gây thiệt hại tới tài sản và tính mạng con ngưởi.
Do đó việc “đo” được sức gió, nghĩa là nắm được những thông số như hướng
gió, tốc độ gió, áp suất gió là rất quan trọng, và những chiếc máy đo gió ra đời.
Tong quá trình tìm hiểu, chuẩn bị đề tài tốt nghiệp cùng với sự định
hướng của thầy Ngô Xuân Hường và thầy Vũ Xuân Hậu, em đã lựa chọn đề tài
tốt nghiệp “NGHIÊN CỨU THIẾT KẾ MÔ HÌNH HỆ THỐNG ĐO TỐC ĐỘ
Romney Robinson (1846), đây là một trong những thiết bị đo gió đầu tiên và
hiện nay vẫn được sử dụng khá rộng rãi.
Cấu tạo của máy gồm 3 hoặc 4 tay đòn đặt vuông góc với nhau. Ở đầu
mỗi tay đòn có gắn một chén hình bán cầu. Có một trục đứng ở giữa nằm ở giao
2
điểm các tay đòn là tâm mà các chén quay xung quanh và một bộ truyền động
thực hiện đếm số vòng mà trục quay được, và từ số vòng quay được đó trong
một khoảng thời gian ta sẽ tính ra được vận tốc gió.
Các chén được đặt đối xứng với nhau, do đó gió luôn thổi vào phía trong
của chén. Mặc dù phía ngoài của chén cũng có gió thổi vào nhưng áp suất gió rất
nhỏ, do đó chén sẽ bị đẩy đi theo 1 hướng, kết hợp với hiện tượng quán tính, lần
lượt các chén liên tục bị đẩy sinh ra hiện tượng quay vòng.
Máy đo gió dạng cối xay gió: trục quay nằm song song với hướng gió ,
với cánh quạt được gắn ở đầu, do đó nó nằm ngang, khi gió đổi chiều thì trục
quay cũng thay đổi.
Hình 1.2. Cảm biến đo gió YOUNG 05103
3
1.2.2. Khối Display
Hình 1.3. Màn hình chỉ báo của máy đo gió WALER 2050
Khối Display nhận tín hiệu từ cảm biến cho phép hiển thị tốc độ gió bằng
số, và hướng gió thể hiện bằng vị trí đèn led sáng hay chỉ báo bằng hướng mũi
tên trên màn hình LCD.
Ngoài việc hiển thị trên màn hình, hệ thống đo gió còn cho phép xuất tín
Encoder là một loại cảm biến vị trí, cho phép xác định thông tin về góc
quay một cách chính xác dưới dạng số. Tín hiệu ra của encoder là các bit nhị
phân, với số lượng bit tương ứng với độ phân giải của encoder.
b. Phân loại encoder
Encoder được phân làm 2 loại chính, bao gồm:
- Encoder tuyệt đối: sử dụng đĩa theo mã nhị phân, mã Gray hoặc mã
BCD
- Encoder tương đối: gồm có loại 1 kênh, loại 2 kênh.
c. Cấu tạo và nguyên lý hoạt động
Hình 2.1. Cấu tạo của encoder
Cấu tạo của encoder gồm 1 đĩa tròn xuay quanh trục. Trên đĩa có
khoét các lỗ (rãnh). Một bên mặt đĩa đặt một led phát hồng ngoại và bên
kia đặt một transitor thu quang thẳng hàng. Với mạch thu phát như hình
6
trên, khi đĩa quay, chỗ có lỗ, ánh sáng hồng ngoại sẽ chiếu vào transistor
thu quang, transistor sẽ dẫn và ta thu được tín hiệu ra mức “0” và ngược
lại, chỗ không có lỗ, ánh sáng hồng ngoại sẽ không chiếu vào transistor
được, transistor không dẫn và ta thu được tín hiệu ra mức “1”. Giả sử rằng
trên đĩa quay ta khoét một lỗ duy nhất thì khi ta nhận được một xung tín
hiệu ra nghĩa là đĩa đã quay được một vòng. Đây chính là nguyên lý cơ
bản của encoder.
d. Ứng dụng của Encoder
Trong thực tế, encoder thường được dùng để:
- Đo tôc độ động cơ, điều khiển tốc độ động cơ.
- Xác định góc dịch chuyển, hướng dịch chuyển.
- Đo khoảng dịch chuyển của vật, vận tôc của vật thông qua đo tốc
độ vòng quay.
một vòng.
Tuy nhiên, đôi khi do tác động của nhiễu có thể làm thay đổi số lượng
xung thu được, nếu hoạt động lâu dài, sai số này sẽ tích lũy dẫn đến sai số lớn.
Để khắc phục điều này, người ta đục thêm một lỗ định vị để đếm số vòng đã
quay của encoder. Bằng việc đối chiếu 2 tín hiệu thu được, ta có thể kiểm soát
và khắc phục được sự sai lệch.
9
2.2. VI ĐIỀU KHIỂN ATMEGA8
2.2.1. Tổng quan về vi điều khiển Atmega8
Atmega8 là vi điều khiển thuộc họ AVR do hãng Intel sản xuất. Đây là
loại chip thuộc dòng AVR mới nhất, nó có kích thước nhỏ gọn nhưng đầy đủ các
tính năng của một AVR.
Hình 2.5. Vi điều khiển Atmega8
Sơ đồ chân của Atmega8 như sau:
Hình 2.6. Sơ đồ chân của Atmega8
Các thông số cơ bản:
• Tốc độ tối đa: 16MHz.
• Bộ nhớ chương trình: 8 KB
• Bộ nhớ RAM: 1 KB
• Bộ nhớ EPROM: 512 Byte
10
• Bộ nhớ chương trình có khả năng ghi 10.000 lần, bộ nhớ EEPROM có thể
ghi 100.000 lần. Hỗ trợ bootloader, có khả năng tự ghi vào bộ nhớ chương
được quyết định bởi bộ đếm chương trình (Program counter).
Cấu trúc bộ nhớ Atmega8 bao gồm bộ nhớ chương trình và bộ nhớ dữ
liệu.
Bộ nhớ chương trình (program memory) là 8KB bộ nhớ Flash lập trình
được. Do các lênh của AVR có độ dài 16 hoặc 32 bit nên bộ nhớ chương trình
được sắp xếp theo kiểu 4Kx16. Bộ nhớ chương trình gồm Application Flash
Section và trong chip AVR mới ta có thêm phần Boot Flash setion. Application
Flash Section bao gồm 2 phần : phần chứa các mã lệnh (instruction) và phần
chứa các vector ngắt (interrupt vectors). Các vector ngắt nằm ở phần đầu của bộ
nhớ chương trình từ 0x000 đến 0x012, tiếp ngay sau đó là phần chứa các
instruction.
12
Hình 2.8. Bộ nhớ chướng trình của Atmega8
Bộ nhớ dữ liệu (data memory) là phần chứa các thanh ghi quan trọng của
chip. Bộ nhớ dữ liệu gồm:
Phần đầu của bộ nhớ dữ liệu bao gồm 32 thanh ghi từ R0 đến R31 trong
register file có địa chỉ tuyệt đối từ 0x0000 đến 0x001F có các đặc điểm:
- Được truy nhập trực tiếp trong quá trình thực thi chương trình.
- Register file được kết nối trực tiếp tới ALU.
- Các phép toán thực hiện trên thanh ghi chỉ trong 1 xung clock.
- Chúng là nguồn chứa các số hạng trong phép toán và là đích chứa kết
quả trả lại của phép toán.
- Các thanh ghi từ R26 tới R31 ngoài chức năng thông thường nó còn
từng đôi một tạo thành các thanh ghi 16 bit X, Y, Z được dùng làm con trỏ trỏ
tới bộ nhớ chương trình và bộ nhớ dữ liệu .Thanh ghi con trò X, Y có thể dùng
làm con trỏ trỏ tới bộ nhớ dữ liệu, còn thanh ghi Z có thể dùng làm con trỏ trỏ
tới bộ nhớ chương trình.
PORTx phải được gán 0 hoặc chân được cấu hình làm đầu ra (DDRx=1).
Nếu chân được cấu hình làm đầu ra (DDRx=1): Nếu PORTx=1 thì chân tương
ứng sẽ được đưa lên mức cao, ngược lại nếu PORTx=0 thì chân tương ứng sẽ
được đưa xuống mức thấp.
14
-
PINx: Đọc dữ liệu từ chân VĐK, độc lập với cấu hình chiều của chân,
trạng thái của chân có thể được đọc thông qua các bit của thanh ghi PINx.
2.2.4. Timer/counter
Vi điều khiển Atmega8 được thiết kế với 3 bộ Timer/Counter là
Timer/counter 0, timer/counter 1 và timer/counter 2. Các bộ timer/counter được
sử dụng cho các chức năng định thời, đếm sự kiện, tạo xung điều rộng PWM,
hoặc sử dụng như các bộ căn chỉnh thời gian trong các ứng dụng thời gian thực
(chỉ có ở timer/counter 2). Trong nội dung đồ án này, ta sẽ tìm hiểu 2 bộ
timer/counter 0 và timer/counter 1.
a. Timer/counter 0
Đây là một bộ định thời có độ dài 8bit, liên tục đếm từ 0-255 và tràn khi
đạt 256 lúc này bộ đếm trở về 00H và cờ tràn TOV0 được set lên 1, có thể xảy
ra 1 ngắt nếu có khai báo ngắt timer này.
Các thanh ghi phụ trách điều khiển Timer/counter 0:
- Thanh ghi TCCR0: Là thanh ghi điều khiển quá trình hoạt động của bộ
timer/counter 0
Tuy là thanh ghi 8 bit nhưng chỉ có 3 bit được sử dụng, có tác dụng chọn
xung clock cho bộ timer/counter 0, cứ mỗi xung clock là bộ đếm tăng lên 1 đơn
1
1
Fosc/64 - Tần số thạch anh chia 64
1
0
0
Fosc/256 - Tần số thạch anh chia 256
1
0
1
Fosc/1024 - Tần số thạch anh chia 1024
1
1
0
Đếm sự kiện bên ngoài ở chân T0 cạnh xuống
- Thanh ghi TCCR1A và TCCR1B: đây không phải là dạng byte cao và
byte thấp của 1 thanh ghi 16 bit mà là 2 thanh ghi độc lập điều khiển hoạt động
của timer/counter 1
16
Ta để ý thấy thanh ghi TCCR1B có 3 bit là CS12, Cs11 và CS10. Ba bit
này để chọn xung nhịp cho timer/counter 1, với các giá trị và chức năng giống
hệt với timer/counter 0.
- Thanh ghi ICR1: Trong quá trình timer/counter 1 hoạt động, giá trị trong
thanh ghi TCNT1 sẽ tăng dần, khi có một sự kiện trên chân ICP1, thanh ghi
ICR1 sẽ bắt giá trị của TCNT1 và có thế xảy ra 1 ngắt. Đây gọi là chế độ Input
Capture.
- Thanh ghi OCR1A và OCR1B: dùng trong chế độ so sánh. Cụ thể, trong
quá trình timer/counter 1 hoạt động, giá trị TCNT1 tăng dần và được so sánh
độc lập và liên tục với 2 thanh ghi này. Khi giá trị so sánh bằng nhau thì sẽ xảy
ra 1 ngắt hoặc 1 sự thay đổi nào đó trên chân OC1A hoặc OC1B.
- Thanh ghi TIMSK: thanh ghi này cũng được sử dụng cho timer/counter
1 do các bộ timer/counter dùng chung thanh ghi mặt nạ ngắt.
Có 4 bit được sử dụng cho timer/counter 1 là:
• TOIE1: cờ tràn và cũng là cờ chỉ thị ngắt cho timer/counter 1
• OCIE1B: cho phép ngắt khi TCNT1=OCR1B
• OCIE1A: cho phép ngắt khi TCNT1=OCR1A
• TICIE1: cho phép ngắt trong trường hợp Input Capture
- Thanh ghi TIFR: thanh ghi cờ nhớ cho các bộ timer/counter. Các bit từ 2
đến 5 là danhg cho timer/counter 1.
17
• MPCM: bit chọn chế độ hoạt động đa xử lý
- Thanh ghi UCSRB : là thanh ghi mặt nạ ngăt và điều khiển USART
Ý nghĩa các bit:
• RXCIE: cho phép ngắt nhận dữ liệu.
• TXCIE: cho phép ngắt truyền dữ liệu.
• UDRIE: cho phép ngắt khi thanh ghi dữ liệu UDR trống.
• RXEN: cho phép nhận dữ liệu trên chân RX.
• TXEN: cho phép truyền dữ liệu trên chân TX.
• UCSZ2: bit này kết họp với 2 bit trong thanh ghi UCSRC quy định
độ dài dữ liệu.
• RXB8: là bit 8 trong chế độ truyền dữ liệu 9 bit của Atmega8
• TXB8: là bit 8 trong chế độ nhận dữ liệu 9 bit của Atmega8.
• Thanh ghi UCSRC: thanh ghi quy định khung truyền và chế độ
truyền.
Ý nghĩa các bit:
• URSEL: bit chọn thanh ghi, do 2 thanh ghi UCSRC và UBRRH
(thanh ghi cao quy định tốc độ baud) có cùng địa chỉ. Khi
URSEL=1 thanh ghi này là UCSRC, khi URSEL=0 thanh ghi này
là UBRRH.
• UMSEL: lựa chọn giữa chế độ truyền đồng bộ và không đồng bộ.
• UPM1 và UPM0: 2 bit lựa chọn cách thức kiểm tra Parity.
UPM1
0
0
UPM0
0
1