Tư vấn: 0979.466.469 / 0938.128.290

MENU

Máy đo khoảng cách siêu âm sử dụng 8051

Nhận mua hàng nước ngoài

Trong bài viết này, chúng ta sẽ trình bày một đầu dò khoảng cách siêu âm đơn giản sử dụng vi điều khiển 8051. Thiết bị này có thể đo khoảng cách lên đến 2.5 mét với độ chính xác 1 centimet. Vi điều khiển AT89s51 và mô-đun cảm biến siêu âm HC-SR04 là cơ sở của mạch này. Mô-đun siêu âm gửi một tín hiệu đến đối tượng, sau đó thu tín hiệu phản xạ và đưa ra một dạng sóng với chu kỳ thời gian tỉ lệ với khoảng cách. Vi điều khiển chấp nhận tín hiệu này, thực hiện xử lý cần thiết và hiển thị khoảng cách tương ứng trên màn hình hiển thị bảy đoạn 3 chữ số. Mạch này được ứng dụng rộng rãi trong các dự án như cảm biến đỗ xe ô tô, hệ thống cảnh báo vật cản, robot theo dõi địa hình, đo khoảng cách công nghiệp, v.v.

Mô-đun siêu âm HC-SR04

HC-SR04 là một mô-đun đo khoảng siêu âm được thiết kế cho các dự án nhúng như vậy. Nó có độ phân giải là 0.3 cm và khoảng cách đo từ 2 cm đến 500 cm. Nó hoạt động từ nguồn cung cấp DC 5V và dòng chờ là dưới 2mA. Mô-đun này phát một tín hiệu siêu âm, thu tín hiệu phản xạ của nó, đo thời gian giữa hai sự kiện và đưa ra một dạng sóng mà chu kỳ cao của nó được điều chế bởi thời gian đo lường tỉ lệ với khoảng cách. Hình ảnh của một mô-đun HC-SR04 được hiển thị dưới đây.

Mô-đun đo khoảng siêu âm HC-SR04

Mô-đun đo khoảng siêu âm HC-SR04

Hỗ trợ các mạch được chế tạo trên mô-đun giúp nó trở nên gần như tự động và những gì người lập trình cần làm là gửi một tín hiệu kích hoạt để bắt đầu truyền và nhận tín hiệu phản xạ từ nó để tính toán khoảng cách. HR-SR04 có bốn chân, gồm Vcc, Trigger, Echo và GND, và chúng được giải thích chi tiết dưới đây.

  1. VCC: Điện áp nguồn 5V DC được kết nối với chân này.

  2. Trigger: Tín hiệu kích hoạt để bắt đầu truyền được đưa vào chân này. Tín hiệu kích hoạt phải là một xung có thời gian cao 10uS. Khi mô-đun nhận được một tín hiệu kích hoạt hợp lệ, nó phát ra 8 xung âm thanh siêu âm 40KHz từ bộ phát. Tín hiệu phản xạ của âm thanh này được thu bởi bộ thu.

  3. Echo: Ở chân này, mô-đun đưa ra một dạng sóng với thời gian cao tỉ lệ với khoảng cách.

  4. GND: Chân này được kết nối với đất.

Sơ đồ thời gian của HC-SR04

Sơ đồ thời gian HC-SR04

Từ sơ đồ thời gian, bạn có thể thấy rằng tàu xung 40KHz được truyền ngay sau xung kích hoạt 10uS và đầu ra của âm thanh được nhận sau thêm thời gian. Xung kích hoạt tiếp theo chỉ có thể được đưa vào sau khi âm thanh đã phai nhạt và khoảng thời gian này được gọi là chu kỳ. Chu kỳ cho HC-SR04 không được dưới 50mS. Theo tài liệu kỹ thuật, khoảng cách có thể được tính từ chiều rộng xung phản xạ bằng các phương trình sau:

Module điện tử 932*50

Khoảng cách trong cm = chiều rộng xung phản xạ trong uS/58

Khoảng cách trong inch = chiều rộng xung phản xạ trong uS/148

Sơ đồ mạch đo khoảng siêu âm sử dụng vi điều khiển 8051

Sơ đồ mạch đo khoảng siêu âm sử dụng vi điều khiển

Mô-đun siêu âm được kết nối với vi điều khiển thông qua các chân P3.0 và P3.1. Cổng0 được sử dụng để truyền dữ liệu hiển thị 8 bit đến màn hình và các chân của cổng P1.0, P1.1, P1.2 được sử dụng để truyền tín hiệu điều khiển hiển thị cho các đơn vị hiển thị tương ứng D1, D2, D3. Nút nhấn S1, tụ C3 và resistor R9 tạo thành mạch đặt lại chống nhiễu. Các tụ C1, C2 và crystal X1 liên quan đến mạch đồng hồ.

Program.

ORG 00H                // origin
MOV DPTR,#LUT          // moves the address of LUT to DPTR
MOV P1,#00000000B      // sets P1 as output port
MOV P0,#00000000B      // sets P0 as output port
CLR P3.0               // sets P3.0 as output for sending trigger
SETB P3.1              // sets P3.1 as input for receiving echo
MOV TMOD,#00100000B    // sets timer1 as mode 2 auto reload timer
MAIN: MOV TL1,#207D    // loads the initial value to start counting from
      MOV TH1,#207D    // loads the reload value
      MOV A,#00000000B // clears accumulator
      SETB P3.0        // starts the trigger pulse
      ACALL DELAY1     // gives 10uS width for the trigger pulse
      CLR P3.0         // ends the trigger pulse
HERE: JNB P3.1,HERE    // loops here until echo is received
BACK: SETB TR1         // starts the timer1
HERE1: JNB TF1,HERE1   // loops here until timer overflows (ie;48 count)
      CLR TR1          // stops the timer
      CLR TF1          // clears timer flag 1
      INC A            // increments A for every timer1 overflow
      JB P3.1,BACK     // jumps to BACK if echo is still available
      MOV R4,A         // saves the value of A to R4
      ACALL DLOOP      // calls the display loop
      SJMP MAIN        // jumps to MAIN loop

DELAY1: MOV R6,#2D     // 10uS delay
LABEL1: DJNZ R6,LABEL1
        RET     

DLOOP: MOV R5,#100D    // loads R5 with 100D
BACK1: MOV A,R4        // loads the value in R4 to A
       MOV B,#100D     // loads B with 100D
       DIV AB          // isolates the first digit
       SETB P1.0       // activates LED display unit D1
       ACALL DISPLAY   // calls DISPLAY subroutine
       MOV P0,A        // moves digit drive pattern for 1st digit to P0
       ACALL DELAY     // 1mS delay
       ACALL DELAY
       MOV A,B         // moves the remainder of 1st division to A
       MOV B,#10D      // loads B with 10D
       DIV AB          // isolates the second digit
       CLR P1.0        // deactivates LED display unit D1
       SETB P1.1       // activates LED display unit D2
       ACALL DISPLAY
       MOV P0,A        // moves digit drive pattern for 2nd digit to P0
       ACALL DELAY
       ACALL DELAY
       MOV A,B         // moves the remainder of 2nd division to A
       CLR P1.1        // deactivates LED display unit D2
       SETB P1.2       // activates LED display unit D3
       ACALL DISPLAY
       MOV P0,A        // moves the digit drive pattern for 3rd digit to P0
       ACALL DELAY
       ACALL DELAY
       CLR P1.2       // deactivates LED display unit D3
       DJNZ R5,BACK1  // repeats the display loop 100 times
       RET

DELAY: MOV R7,#250D        // 1mS delay
LABEL2: DJNZ R7,LABEL2
        RET

DISPLAY: MOVC A,@A+DPTR   // gets the digit drive pattern for the content in A
         CPL A            // complements the digit drive pattern (see Note 1)
         RET
LUT: DB 3FH               // look up table (LUT) starts here
     DB 06H
     DB 5BH
     DB 4FH
     DB 66H
     DB 6DH
     DB 7DH
     DB 07H
     DB 7FH
     DB 6FH
END

Phần đầu của chương trình đặt điều kiện ban đầu. Cổng 0 và Cổng 1 được thiết lập làm cổng xuất cho việc gửi các mẫu điều khiển chữ số và tín hiệu điều khiển chữ số tương ứng. Chân cổng 3.0 được đặt làm chân xuất để gửi tín hiệu kích hoạt đến mô-đun siêu âm để bắt đầu truyền và chân cổng 3.1 được đặt làm chân nhập để nhận tín hiệu phản xạ. Đăng ký TMOD của vi điều khiển được nạp sao cho Timer 1 hoạt động ở chế độ 2, 8 bit tự động nạp lại. Timer 0 của vi điều khiển không được sử dụng ở đây. Trong phần tiếp theo của chương trình (vòng lặp MAIN), các đăng ký TL1 và TH1 của Timer1 được nạp với các giá trị ban đầu. TL1 được nạp giá trị ban đầu để bắt đầu đếm từ giá trị đó và tiếp tục đếm cho đến khi quay vòng (tức là 255D). Khi quay vòng xảy ra, cờ TF1 được thiết lập và TL1 tự động được nạp với giá trị nạp lại được lưu trữ trong TH1 và chuỗi được lặp lại cho đến khi TR1 được làm thấp bởi chương trình. TF1 trở thành cao sau quay vòng đầu tiên và nếu bạn muốn nó như một chỉ báo cho mỗi quay vòng, bạn phải xóa nó bằng cách sử dụng chương trình sau mỗi quay vòng. Trong phần tiếp theo của vòng lặp MAIN, P3.0 được thiết lập cao trong 10uS và sau đó được xóa để tạo xung kích hoạt 10uS. Mô-đun siêu âm phát ra một dạng sóng xung 40Khz sau khi nhận được kích hoạt này và chương trình đợi cho đến khi một tín hiệu phản xạ hợp lệ được nhận ở P3.1. Độ rộng xung của tín hiệu phản xạ tỉ lệ với khoảng cách đến vật cản, vì vậy công việc tiếp theo của chương trình là đo độ rộng xung. Khi có một xung phản xạ hợp lệ tại P3.1, Timer1 bắt đầu và nó đếm từ giá trị ban đầu đến 255, tức là 255-207 = 48 lần đếm. Sau đó, bộ đếm khởi động lại và bộ chứa tăng lên một cho mỗi lần khởi động lại. Chuỗi này được lặp lại cho đến khi tín hiệu phản xạ ở P3.1 biến mất (tức là P3.1 xuống cấp). Bây giờ nội dung trong A sẽ bằng số lần nạp lại của Timer1, thực sự tỉ lệ với khoảng cách. Từ bảng dữ liệu, rõ ràng rằng chiều rộng xung phản xạ 58uS chỉ ra khoảng cách 1cM. Khi vi xử lý được đồng bộ bằng một tinh thể 12MHz, 58 lần đếm của Timer1 chỉ ra 1cM. Điều này có nghĩa là 1 lần nạp lại bằng 1cM. Nhưng ở đây chúng ta để Timer1 đếm chỉ 48 lần trước khi nạp lại và điều này được thực hiện để đền bù cho các độ trễ thời gian gây ra bởi các lệnh nhánh được sử dụng để kiểm tra trạng thái của chân P3.0 và P3.1. Nếu mẹo này không được thực hiện, các độ trễ thời gian cá nhân gây ra bởi các lệnh nhánh sẽ được cộng dồn vào chiều rộng xung quan sát và máy đo khoảng cách sẽ hiển thị một giá trị đo lường cao hơn so với khoảng cách ban đầu. Cần một số thử nghiệm và lỗi để có được giá trị nạp lại Timer1 đúng và với giá trị 207D (tức là 48 lần đếm) được sử dụng ở đây, sai số được tìm thấy là ít hơn một nửa centimet, điều này khá tốt trong bối cảnh này. Phần tiếp theo của chương trình thực hiện toán học cần thiết trên nội dung hiện tại trong A và hiển thị nó dưới dạng đọc được 3 chữ số trên màn hình.

Ghi chú:

  1. LUT được sử dụng ở đây ban đầu được tạo cho một màn hình hiển thị 7 đoạn chung cathode và ở đây chúng ta đang sử dụng màn hình hiển thị chung anode. Lệnh CPL A chỉ đơn giản là phản đảo mẫu điều khiển chữ số đã nhận được và làm cho nó phù hợp với kế hoạch chung anode. Nếu bạn có thời gian, hãy tạo một LUT cho kế hoạch chung anode và thay thế nó bằng cách sử dụng nó. Bằng cách này, bạn có thể tránh được lệnh CPL A thừa và đó là phương pháp chính xác.

  2. Toàn bộ mạch có thể được cung cấp từ nguồn 5V DC.

  3. Hãy cẩn thận khi xử lý mô-đun siêu âm. Có nhiều linh kiện bề mặt nhạy cảm được sản xuất ở phía sau của nó.

  4. Đọc qua các bài viết này: Tương tác với màn hình hiển thị bảy đoạn cho 8051, Độ trễ bằng cách sử dụng bộ đếm thời gian 8051, Rutin độ trễ phần mềm sử dụng 8051.

Gia công pcb 932*150
Sản phẩm nổi bật
Sale 0%
18000 /Cái
/ Cái

Code: 7201-019 Còn hàng

Lưu xem sau
Sale 0%
50000 /Cái
/ Cái

Code: 7201-023 Còn hàng

Lưu xem sau
Sale 0%
35000 /Cái
/ Cái

Code: 7201-001 Còn hàng

Lưu xem sau
Hỗ trợ liên kết
0979466469
0899909838
0938128290
0899909838
Khiếu nại: 0964238397
0979466469
0868565469
0868565469

Hotline: 0979 466 469

Loading
0964238397
Bạn cần linh kiện mẫu ? 7-11 ngày