Cảm biến chuyển động đo khoảng cách dùng ATMEGA8 và SRF04
Trang 1TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI
**********************
Cảm biến chuyển động đo khoảng cách
dùng ATMEGA8 và SRF04
Lớp: KSTN ĐTVT K56 Giáo viên hướng dẫn: Nguyễn Hoàng Dũng Nhóm sinh viên thực hiện: Đỗ Anh Dân 20111261
Nguyễn Bá Dũng 20112561
Hà Nội 05-2014
MỤC LỤC
Trang 2Chương I: Giới thiệu chung
1 Giới thiệu về Atmega 8
1.1 Đặc điểm
1.2 Sơ đồ khối ATmega8
1.3 Sơ đồ chân ATmega8
1.4 Mô tả chức năng các chân Atmega8
2 Giới thiệu về SRF04
2.1 Thông số kĩ thuật
2.2 Chế độ hoạt động
2.3 Chức năng các chân
2.4 Nguyên tắc hoạt động
2.5 Tính toán và xác định khoảng cách
3 Giới thiệu về LCD
3.1 Chức năng chân LCD
3.2 Sơ đồ khối LCD
Chương II: Thiết kế mạch 1 Phân tích yêu cầu đề tài
2 Xây dựng sơ đồ khối của mạch
3 Phân tích chức năng,thông số kĩ thuật từng khối
4 Xây dựng sơ đồ nguyên lý toàn mạch
5 Mạch in
6 Đo đạc,kiểm tra,đánh giá chất lượng của mạch
Chương III: Lập trình và mô phỏng 1 Lập trình
2 Mô Phỏng
Chương IV: Kết luận 1 Ưu điểm
2 Nhược điểm Chương V: Tài liệu tham khảo
Chương I: Giới thiệu chung
Trang 31 Giới thiệu về ATmega 8
mà vẫn đảm bảo tốc độ xử lý
Atmega 8 đã tích hợp đầy đủ các tính năng như bộ chuyển đổi ADC 10bit, bộ so sánh,
bộ truyền nhận nối tiếp, bộ định thời, bộ đếm thời gian thực, bộ điều chế độ rộng xung
… Do đó ta phải nghiên cứu và khai thác triệt để các tính năng này để ứng dụng hiệu quả vào những mạch trong thực tế
Atmega8 sử dụng kiến trúc RISC (Reduced Instruction Set Computer) AVR
Atmega8 với kiến trúc RISC có chỉ tiêu chất lượng cao và tiêu thụ năng lượng ít:
- 130 lệnh hầu hết được thực hiện trong một chu kỳ xung nhịp
- 32 thanh ghi làm việc đa năng
- Tốc độ xử lý lệnh lên đến 16 triệu lệnh/giây ở tần số 16MHz
Bộ nhớ dữ liệu và bộ nhớ chương trình không tự mất dữ liệu:
- 8K byte bộ nhớ Flash lập trình được ngay trên hệ thống, có thể nạp xoá 10000 lần
- 512 byte bộ nhớ EEFROM lập trình được ngay trên hệ thống, có thể ghi xóa
100000 lần
- Có thể giao tiếp với 8K byte bộ nhớ ngoài
- Khóa bảo mật phần mềm lập trình được
- Giao diện nối tiếp SPI để lập trình ngay trên hệ thống
Các tính năng ngoại vi:
- Hai bộ đếm/ bộ định thời 8 bit với chế độ so sánh và chia tần số tách biệt
- Một bộ định thời 16 bit với chế độ so sánh, chia tần số tách biệt và chế độ bắt mẫu (Capture Mode)
- Bộ đếm thời gian thực (RTC) với bộ dao động tách biệt
- Bộ biến đổi ADC bên trong 8 kênh 10 bit
- 2 bộ USART nối tiếp lập trình được
- Bộ định thời Watchdog lập trình được với bộ dao động trên chip
Các tính năng vi điều khiển đặc biệt:
- Có mạch power - on reset và có thể reset bằng phần mềm
- Các nguồn ngắt ngoài và trong
- Có 5 chế độ ngủ: chế độ rỗi, chế độ tiết kiệm điện, chế độ giảm nhiễu ADC, chế độ chờ và chế độ giảm bớt điện năng
- Tần số làm việc có thể thay đổi được bằng phần mềm
Vào ra và các cách đóng vỏ
- 23 đường vào ra lập trình được
Trang 4- 32 chân dán kiểu vỏ vuông (TQFP)
Điện thế làm việc:
Vùng tốc độ làm việc:
1.2 Sơ đồ khối Atmega8
1.3 Sơ đồ chân Atmega8
Trang 51.4 Mô tả chức năng các chân Atmega8
- Port B là port I/O 8 bit với điện trở kéo lên ở bên trong, cung cấp dòng điện 40mA cóthể điều khiển trực tiếp led đơn
- Khi các chân Port B là các lối vào được đặt xuống mức thấp từ bên ngoài, chúng sẽ
là nguồn dòng nếu như các điện trở nối lên nguồn dương được kích hoạt Các chân này sẽ ở trạng thái tổng trở cao khi tín hiệu Reset ở mức tích cực hoặc ngay cả khi không có dao động
- Port C là port I/O 8 bit với điện trở kéo lên ở bên trong, cung cấp dòng điện 40mA cóthể điều khiển trực tiếp led đơn
- Khi các chân Port C là các lối vào được đặt xuống mức thấp từ bên ngoài, chúng sẽ
là nguồn dòng nếu như các điện trở nối lên nguồn dương được kích hoạt Các chân này sẽ ở trạng thái tổng trở cao khi tín hiệu Reset ở mức tích cực hoặc ngay cả khi không có dao động
- Port C cũng đóng vai trò như 8 đường địa chỉ cao từ A8 đến A15 khi kết nối bộ nhớ SRAM bên ngoài
- Port D là port I/O 8 bit với điện trở kéo lên ở bên trong, cung cấp dòng điện 40mA
có thể điều khiển trực tiếp LED đơn
- Khi các chân Port D là các lối vào được đặt xuống mức thấp từ bên ngoài, chúng sẽ
là nguồn dòng nếu như các điện trở nối lên nguồn dương được kích hoạt Các chân này sẽ ở trạng thái tổng trở cao khi tín hiệu Reset ở mức tích cực hoặc ngay cả khi không có dao động
Trang 6 Reset: Ngõ vào được đặt lại ATmega8 sẽ được đặt lại khi chân này ở mức thấp trong hơn 50ns hoặc ngay cả khi không có tín hiệu xung clock Các xung ngắn hơn không tạo ra tín hiệu đặt lại.
không sử dụng bộ chuyển đổi ADC thì chân AVCC vẫn phải đươc kết nối tới nguồn VCC
AREF: Đây là chân điều chỉnh điện áp tham chiếu cho chuyển đổi A/D
XTAL1: Ngõ vào bộ khuếch đại đảo và ngõ vào mạch tạo xung nhịp bên ngoài
Bộ tạo dao động thạch anh :
- XTAL1 và XTAL2 lần lượt là lối vào và lối ra của một bộ khuếch đại đảo, bộ khuếch đại này được bố trí để làm bộ tạo dao động trên chip
- Để điều khiển được bộ Vi Điều Khiển từ một nguồn xung nhịp bên ngoài, chân XTAL2 để không, chân XTAL1 được nối với tín hiệu dao động bên ngoài
1.5 Ngắt ngoài trong Atmega8
Ngắt là tín hiệu khẩn cấp báo hiệu cho vi điều khiển cần dừng chương trình đang thực
thi lại và ưu tiên nhảy đến 1 vị trí khác để thực hiện một nhiệm vụ khẩn cấp nào đó, nhiệm vụ khẩn cấp đó là 1 chương trình con phục vụ ngắt-hay là trình phục vụ ngắt ISR(Interrupts Service Routine) Sau khi thực hiện xong trình phục vụ ngắt thì vi điềukhiển sẽ quay lại tiếp tục công việc trước đó
Trang 7Bảng tóm tắt các vector ngắt trong ATMega8:
Trong chip ATMega8 có các ngắt phục vụ Reset, External Interrupt, Timer, USART, ADC, SPI, I2C, được dùng với các mục đích khác nhau
Ngắt ngoài trong ATMega8
Ngắt ngoài là ngắt được kích hoạt bởi các tác động điện áp đến các chân ngắt ngoài của
vi điều khiển, nên ngắt ngoài là cách hiệu quả để giao tiếp đơn giản giữa người dùng và
vi điều khiển
Trong chip ATMega8 có 2 ngắt ngoài là INT0 và INT1, và 2 chân ngắt tương ứng là PD2 và PD3
Trang 8Nếu ta kết nối với vi điều khiển như hình trên, khi đó các button dùng để tạo ngắt và khi
đó sẽ có 4 Mode có thể xảy ra khi ta nhấn và nhả button Khi không nhấn button, thì trạng thái của chân ngắt là high(vì có điện trở kéo lên; khi vừa nhấn button thì trên chân ngắt sẽ thay đổi trạng thái từ High->Low và được gọi là cạnh xuống (Falling Edge); sau
đó button được giữ thì thì chân ngắt có trạng thái là Low; sau đó ta nhả nút nhấn thì trênchân ngắt sẽ thay đổi trạng thái từ Low-> High và được gọi là cạnh lên (Rising Edge) Dựa vào từng Mode để phục vụ cho từng mục đích khác nhau
Đối với ngắt ngoài ta cần quan tâm đến 3 thanh ghi: MCUCR, GICR, GIFR và SREG:
Thanh ghi MCUCR:
Thanh ghi MCUCR là thanh ghi 8 bit và 4 bit thấp dùng để thiết lập các Mode ngắt Trong 4 bit ISC(Interrup Senso Control) thi 2 bit ISC00, ISC01 để thiết lập ngắt INT0
và 2 bit ISC10, ISC11 để thiết lập ngắt INT1 Cách thiết lập cho mỗi ngắt tương tự nhau
và bảng sau đây thiết lập Mode ngắt cho INT1 :
Thanh ghi GICR (General Interrupt Control Register):
Trang 9Thanh ghi GICR là thanh ghi 8 bit, nhưng trong ngắt ngoài ta chỉ quan tâm đến 2 bit cuối là INT0 và INT1 Bit INT0 và INT1 dùng để thiết lập điều khiển ngắt của ngắt ngoài INT0 và INT1 Khi đó:
INTx = 1 -> cho phép ngắt INTx
INTx = 0 -> không cho phép ngắt INTx
Thanh ghi GIFR (General Interrupt Flag Register):
Thanh ghi GIRF là thanh ghi 8 bit, và đối với ngắt ngoài thì ta chỉ sử dụng 2 bit cao INTF1 và INTF0 Hai bit INTF1 và INTF0 là cờ ngắt tương ứng cho ngắt ngoài INT0
và INT1 Các bit này sẽ được set lên khi có ngắt tương ứng xảy ra
Thanh ghi SREG:
Thanh ghi SREG là thanh ghi trạng thái, gồm 8 bit Trong ngắt ngoài ta chỉ cần quan tâm đến bit I trong thanh ghi SREG, bit I này dùng để thiết lập cho phép ngắt toàn cục
1.6 Timer/Counter0 trên Atmega8
Là một bộ định thời, đếm đơn giản với 8 bit Gọi là đơn giản vì bộ này chỉ có 1 chế độhoạt động (mode) so với 5 chế độ của bộ Timer/Counter1 Chế độ hoat động của Timer/Counter0 thực chất có thể coi như 2 chế độ nhỏ (và cũng là 2 chức năng cơ bản) đó là tạo ra một khoảng thời gian và đếm sự kiện Chú ý là trên các chip AVR dòng mega sau này như Atmega16,32,64…chức năng của Timer/Counter0 được nâng lên như các bộ Timer/Counter1…
Có 4 thanh ghi được thiết kế riêng cho hoạt động và điều khiển T/C0, đó là:
TCNT0 (Timer/Counter Register): là 1 thanh ghi 8 bit chứa giá trị vận hành của T/C0.Thanh ghi này cho phép bạn đọc và ghi giá trị một cách trực tiếp
TCCR0 (Timer/Counter Control Register): là thanh ghi điều khiển hoạt động của T/C0 Tuy là thanh ghi 8 bit nhưng thực chất chỉ có 3 bit có tác dụng đó là CS00, CS01 và CS02
Trang 10Các bit CS00, CS01 và CS02 gọi là các bit chọn nguồn xung nhịp cho T/C0 (Clock Select) Chức năng các bit này được mô tả trong bảng 1.
Bảng 1: chức năng các bit CS0X
TIMSK (Timer/Counter Interrupt Mask Register): là thanh ghi mặt nạ cho ngắt của tất
cả các T/C trong Atmega8, trong đó chỉ có bit TOIE0 tức bit số 0 (bit đầu tiên) trong thanh ghi này là liên quan đến T/C0, bit này có tên là bit cho phép ngắt khi có tràn ở T/C0 Tràn (Overflow) là hiện tượng xảy ra khi bộ giá trị trong thanh ghi TCNT0 đã đạt đến MAX (255) và lại đếm thêm 1 lần nữa
Khi bit TOIE0=1, và bit I trong thanh ghi trạng thái được set (xem lại bài 3 về điều khiển ngắt), nếu một “tràn” xảy ra sẽ dẫn đến ngắt tràn
TIFR (Timer/Counter Interrupt Flag Register): là thanh ghi cờ nhớ cho tất cả các bộ T/C Trong thanh ghi này bit số 0, TOV0 là cờ chỉ thị ngắt tràn của T/C0 Khi có ngắt tràn xảy ra, bit này tự động được set lên 1 Thông thường trong điều khiển các T/C vaitrò của thanh ghi TIFR không quá quan trọng
2 Giới thiệu về SRF04
Trang 12
Giản đồ định thời gian
2.3 Chức năng các chân
- Echo Output : chân đầu ra tín hiệu phản hồi về từ cảm biên
- Triger Output : chân đầu vào kích hoạt
- Mode : chân chế độ ( không được kết nối ở chế độ một)
- Bộ năm chân bên kia : 5 được đóng nhãn là "programming pins" chỉ được sử dụng một lần duy nhất trong quá trình sản xuất để lập trình cho bộ nhớ Flash trên chip
PIC16F630 Các chân chương trình của PIC16F630 cũng được sử dụng cho các chức năng khác trên SRF04, nên chắc chắn rằng bạn không kết nối bất cứ cái gì với các chân, hoặc bạn sẽ làm gián đoạn hoạt động mô-đun
2.4 Nguyên tắc hoạt động
Từ giản đồ định thời ta thấy :
- Để SRF04 hoạt động ta cần cấp một xung ở mức cao có độ rộng ít nhất là 10uS trên chân TRI
- Sau đó SRF04 sẽ phát ra một chu kì 8 khối tín hiệu siêu âm ở tần số 40KHz và tăng dòng tín hiệu phản hồi của nó lên ở mức cao Sau đó nó chờ phản hồi, và ngay sau khi phát hiện một vật thể nó sẽ giảm dòng phản hồi xuống do đó dòng phản hồi
sẽ là một xung có độ rộng tỉ lệ với khoảng cách tới vật thể Bằng cách đo xung , ta hoàn toàn có thể tính toán khoảng cách Nếu không phát hiện vật thể thì SRF05 sẽ kéodòng phản hồi xuốc mức thấp sau 30ms
- SRF04 cung cấp một xung phản hồi tỉ lệ với khoảng cách Nếu đo độ rộng của xung bởi uS, sau đó chia cho 58 sẽ cho ta khoảng cách tính bằng cm, hoặc chia cho
148 sẽ cho khoảng cách tính bằng inch: uS/58=cm hoặc uS/148=inch
- SRF04 có thể được kích hoạt nhanh chóng với mỗi 50mS, hay 20 lần / s
Bạn nên đợi 50ms trước xung kích hoạt kế tiếp, ngay cả khi SRF04 phát hiện vật thể ởgần và xung phản hồi ngắn hơn Điều này để đảm bảo rằng siêu âm “beep” đã tắt hẳn
và không làm sai lệch tín hiệu phản hồi trong lần đo tiếp theo
Đặc biệt SRF04 chỉ có thể nhận xung trên chân TRI tối đa 20 Hz,cho nên việc kích xung trên chân TRI phải phù hợp thì SRF05 mới hoạt động chính xác
2.5 Tính toán và xác định khoảng cách
Trang 13Sóng siêu âm được truyền đi trong không khí với vận tốc 343 m/s Nếu một cảm biến phát ra sóng siêu âm và thu về các sóng phản xạ đồng thời, đo được khoảng thời gian từ lúc phát ra tới lúc thu về, thì máy tính có thể xác định được quãng đường mà sóng đã di chuyển trong không gian Quãng đường di chuyển của sóng = 2 lần khoảng cách từ cảm biến tới chướng ngại vật theo hướng phát của sóng siêu âm
=>khoảng cách từ cảm biến tới chướng ngại vật sẽ được tính theo nguyên lý
d = \f(v.t,2
Trong đó : d: khoảng cách cần đo
v: vận tốc sóng siêu âm trong môi trường truyền sóng
t: thời gian từ lúc sóng được phát đi đến lúc sóng được ghi nhận lại
mức độ sóng âm hồi tiếp phụ thuộc vào cấu tạo của đối tượng và góc phản xạ nó Mộtđối tượng mềm có thể cho ra tín hiệu phản hồi yếu hoặc không có phản hồi Một đối tượng ở một góc cân đối thì mới có thể phản hồi tín hiệu một chiều cho cảm biến nhận
Nếu ngưỡng để phát hiện ra đối tượng được đặt quá gần cảm biến thì sóng âm phản hồi sẽ rơi vào điểm mù.Còn nếu ngưỡng này đặt ở một khoảng cách quá lớn thì sẽ không thể thu được sóng âm phản xạ do bị triệt tiêu bởi nhiễu
Vùng phát hiện của SRF05 nằm trong khoảng 1 mét chiều rộng và không quá 4 mét xa
Trang 143.Giới thiệu về LCD
3.1 Chức năng chân LCD
Số Chân Tên Chức Năng
GND của mạch điềukhiển
với VCC=5V của mạchđiều khiển
DB0-DB7, các lệnh chỉ được chấp nhận khi có 1 xung cho phép của chân E
+ Ở chế độ ghi: Dữ liệu ở bus sẽ được LCD chuyển vào(chấpnhận) thanh ghi bên
trong nó khi phát hiện một xung (high-to-low transition) của tínhiệu chân E
+ Ở chế độ đọc: Dữ liệu sẽ được LCD xuất ra DB0-DB7 khiphát hiện cạnh lên (low-
to-high transition) ở chân E và được LCD giữ ở bus đến khi nàochân E xuống mức
thấp
MPU Có 2 chế độ sửdụng 8 đường bus này : + Chế độ 8 bit : Dữ liệu được truyền trên cả 8 đường, với bitMSB là bit DB7
+ Chế độ 4 bit : Dữ liệu được truyền trên 4 đường từ DB4 tớiDB7, bit MSB là DB7
Chi tiết sử dụng 2 giao thức này được đề cập ở phần sau
3.2 Sơ đồ khối LCD
Trang 153.2.1 Các thanh ghi
Chíp HD44780 có 2 thanh ghi quan trọng
Thanh ghi IR: để điều khiển LCD Nguời dùng phải ra lệnh thông qua đuờng bus tín hiệu,mỗi lệnh đuợc nhà cung cấp qui định rõ rang Người dung chỉ việc cung cấp địa chỉ lệnh bằngcách nạp vào thanh ghi IR Nghĩa là, khi ta nạp vào thanh ghi IR một chuỗi 8 bit, chípHD44780 sẽ tra bảng mã lệnh tại địa chỉ mà IR cung cấp và thực hiện lệnh đó
Thanh ghi DR dung để chứa dữ liệu 8 bit để ghi vao RAM DDRAM hoặc CG RAM Hoặcdung để chứa dữ liệu từ hai vùng RAM gửi ra MPU Nghĩa là, khi MPU ghi thông tin vào
DR, mạch nội bên trong chíp sẽ tự động ghi thông tin này vào DDRAM hoặc CGRAM Hoặckhi thông tin về địa chỉ được ghi vào IR, dữ liệu ở địa chỉ này trong vùng RAM nộicủaHD44780 sẽ được chuyển ra DR để truyền cho MPU
3.2.2 Cờ báo bận BF
Khi thực hiện các hoạt động bên trong chíp, mạch nội bên trong cần một khoảng thời gian
để hoàn tất Khi đang thực thi các hoạt động bên trong chip như thế, LCD bỏ qua mọi giao tiếp với bên ngoài và bật cờ BF(thông qua chân DB7 khi có thiết lập RS=0, R/W=1) lên để báo cho MPU biết nó đang “bận” Dĩ nhiên, khi xong việc, nó sẽ đặt cờ BF lại mức 0
Lưu ý: Thời gian cập nhật AC không được tính vào thời gian thực thi lệnh mà được cập nhật sau khi cờ BF lên mức cao (not busy), cho nên khi lập trình hiển thị, bạn phải delay một khoảng tADDkhoảng 4uS-5uS (ngay sau khi BF=1) trước khi nạp dữ liệu mới Xem thêm hình bên dưới