BÀI 10 : SRF05 VỚI STM8S .


  1. Khái niệm về lý thuyết.
  2. Cảm biến siêu âm srf05 dùng để đo khoảng cách từ cảm biến đến đối tượng, giới hạn đo trong khoảng từ 2cm -> 300cm. Đây là loại cảm biến giá rẻ, thông dụng với các bạn sinh viên dùng để làm đồ án hoặc với những ứng dụng trung bình và nhỏ.

    Cấu tạo gồm 5 chân :

    • VCC: cấp nguồn 5V.
    • Trig : đây là chn kích hoạt cảm biến – kích hoạt tạo xung phát đi.
    • Echo: chân này là chân thu tín hiệu của cảm biến.
    • OUT:chân chọn chế đọ hoạt động (chỉ sử dụng 1 chân Trig để thu - phát, hoặc sử dụng cả 2 chân Trig và Echo).
    • GND : chân nối MASS(GND).

    Nguyên tắc hoạt động dựa vào việc đo khoảng thời gian giữa khi phát sóng siêu âm để truyền đi và nhận lại nên ta thấy cảm biến có 2 con mắt. Các bạn cần hiểu được nguyên lí hoạt động để lập trình được với bất kì 1 loại vi điều khiển nào mà không cần thư viện có sẵn. Ở đây mình chỉ giới thiệu mode hoạt động 1 và cách lập trình. Có nhiều cách lập trình khác nhau. Việc lập trình cũng dựa theo nguyên lí hình sau:

    • B1: phát 1 tín hiệu có độ rộng xung tối thiểu 10uS ở trên chân Trig để kích hoạt bộ phát xung siêu âm đồng thời cho phép timer hoạt động để tính thời gian phát đi và nhận lại - Ở trong code của mình là ở chân PC6 trong ngắt timer2.
    • B2 : đợi tín hiệu trả về , dùng timer để tính thời gian nhận xung trả về - ở đây của mình là timer2.
    • B3: Nếu có xung trả về thì lưu giá trị thời gian, reset timer để cho lần phát tiếp theo quay trở lại bước B1 – xung nhận về ngắt ngoài ở chân PC7. Nếu sau 25ms mà không có xung trả về tức là không có vật cản, reset timer quay trở lại B1(trong code là ở chỗ reset khi biến đếm =5000 trong ngắt timer 2 - ở đây mình tăng giá trị 25ms thành 50ms).

    Sau khi có khoảng thời gian giữa truyền đi và nhận lại chúng ta sẽ tính khoảng cách theo công thức sau:

    S = V*T/2.

    • S: là khoảng cách từ cảm biến đến đối tượng.
    • V: là vận tốc của sóng âm trong không khí 343.2m/s mình thường lấy 334 cho chẵn.
    • T/2 : giá trị T là thời gian đo được trong khoảng thời gian phát và thu, khoảng thời gian đó gấp đôi khoảng thời gian từ cảm biến đến vật nên chúng ta phải chia 2.

    Tùy theo đơn vị tính mà chúng ta sẽ có các khoảng cách được hiển thị theo m, cm, dm, mm. Tuy nhiên, trong quá trình đo cũng sẽ xảy ra sai số do vi điều khiển, do cảm biến nên chúng ta tính toán công thức(hiệu chỉnh hệ số bù sai số) sao cho phù hợp với thực tế(cái này mình gọi là scale sai số).

  3. Cấu hình trong thư viện chuẩn ST.
    1. Cấu hình phần cứng và giải thích nguyên lí của code:
    2. Phần cứng:

      • Chân VCC của SRF05 nối chân +5V của vi điều khiển.
      • Chân GND của SRF05 nối chân GND của vi điều khiển.
      • Chân Trig của SRF05 nối chân PC6 của vi điều khiển.
      • Chân Echo của SRF05 nối chân PC7 của vi điều khiển.
      • Chân OUT của SRF05 để trống.

      Nguyên lí hoạt động: Đầu tiên mình sẽ cấu hình chương trình con để timer2 ngắt mỗi 12.5us(trong code do có nhiều lệnh được thực thi trong ngắt nên thời gian xảy ra ngắt thực tế lên đến 25us – mình kiểm tra bằng cách đo xung trên chân PD2- chân này đảo trạng thái mỗi khi xảy ra ngắt). Tiếp theo mình cấu hình ngắt ngoài để khi có xung trả về trên chân Echo sẽ nhảy vào ngắt ngoài để tính thời gian.

    3. Cấu hình chương trình con ngắt mỗi 12.5us:
    4. Cấu hình chương trình con ngắt ngoài khi có tín hiệu xung trên chân Echo:
    5. Cấu hình ưu tiên ngắt.
    6. Vì có 2 ngắt xảy ra là ngắt ngoài và ngắt tràn timer. Ngắt ngoài có mức ưu tiên cao hơn nên phải cấu hình ưu tiên ngắt.

    7. Chương trình thực thi ngắt timer2:
    8. Trên thực tế khoảng thời gian ngắt của timer2 là trên 12.5us(khoảng 25us) vì trong ngắt có thực thi 1 số lệnh làm trễ ngắt. Mình đã đo và kiểm tra bằng Oscillosope trên chân PD2.Nếu bỏ đoạn code xử lý thì ngắt sẽ đúng 12.5us.

    9. Chương trình thực thi ngắt ngoài trên chân PC7:
    10. Công thức trên mình đã bù thêm sai số để chính xác so với thực tế. tùy vào ứng dụng(do chính xác ở phạm vi gần hoặc xa mà chúng ta chỉnh lại các thông số này cho phù hợp).

    11. Hiển thị khoảng cách lên máy tính qua UART.
    12. Ở đây mình sử dụng hàm printf để hiển thị lên máy tính thông qua UART, phần hướng dẫn sử dụng UART bằng lệnh printf mình đã hướng dẫn trong bài UART.

    LƯU Ý:

    • Khi nối dây với VĐK cần chú ý cắm đúng chân, đảm bảo các chân đã được kết nối. Tránh tình trạng cắm nhầm nguồn hoặc nhầm chân VCC và GND. Điều này có thể là cảm biến chết hoặc hoạt động không bình thường.
    • Thời gian VĐK nhận được tín hiệu trả về ở chân trigger sau khi phát tín hiệu ở chân Echo = T*n. Trong đó T là thời gian xảy ra ngắt tràn timer, n là giá trị của biến đếm(n được tăng khi nhảy vào ngắt timer2). VD: khi n=10 mà ngắt tràn timer2 là 12.5us -> time = 12.5*10 =125us.
Link tải chương trình sử dụng srf05