Lập Trình STM32 đọc Nhiệt độ Với DS18b20 Giao Tiếp Onewire
Có thể bạn quan tâm
Trong bài này chúng ta sẽ học cách lạp trình stm32 đọc nhiệt độ với cảm biến DS18b20, đây là một loại cảm biến nhiệt độ rất thông dụng. Độ chính xác khá cao và dải đo rộng. Chuyên dùng trong các sản phẩm đo đạc môi trường.
Bài này nằm trong Serie Học STM32 từ A tới Z
Table of Contents
- Tổng quan về cảm biến nhiệt độ DS18B20
- Thông số của Cảm biến nhiệt độ DS18B20 dây mềm
- Hướng dẫn điều khiển DS18B20
- Chuẩn giao tiếp 1 wire
- Bản đồ bộ nhớ của DS18B20
- Chuyển đổi dữ liệu thành giá trị nhiệt độ
- Lệnh điều khiển DS18B20
- Lập trình STM32 với DS18B20
- Cấu hình CubeMX
- Lập trình DS18B20 với KeilC
- Kết quả
- Kết
Tổng quan về cảm biến nhiệt độ DS18B20
Cảm biến nhiệt độ DS18B20 dây mềm, là phiên bản chống nước, chống ẩm của Cảm biến nhiệt độ DS18B20. Cảm biến nhiệt độ DS18B20 là cảm biến ( loại digital ) đo nhiệt độ mới của hãng MAXIM với độ phân giải cao ( 12bit ). IC sử dụng giao tiếp 1 dây rất gọn gàng, dễ lập trình. IC còn có chức năng cảnh báo nhiệt độ khi vượt ngưỡng và đặc biệt hơn là có thể cấp nguồn từ chân data ( parasite power ).
Cảm biến nhiệt độ này có thể hoạt động ở 125 độ C nhưng cáp bọc PVC => nên giữ nó dưới 100 độ C. Đây là cảm biến kỹ thuật số, nên không bị suy hao tín hiệu đường dây dài
Thông số của Cảm biến nhiệt độ DS18B20 dây mềm
- Nguồn: 3 – 5.5V
- Dải đo nhiệt độ: -55 đến 125 độ C ( -67 đến 257 độ F)
- Sai số: +- 0.5 độ C khi đo ở dải -10 – 85 độ C
- Độ phân giải: người dùng có thể chọn từ 9 – 12 bits
- Chuẩn giao tiếp: 1-Wire ( 1 dây ).
- Có cảnh báo nhiệt khi vượt ngưỡng cho phép và cấp nguồn từ chân data.
- Thời gian chuyển đổi nhiệt độ tối đa : 750ms ( khi chọn độ phân giải 12bit ).
- Mỗi IC có một mã riêng (lưu trên EEPROM của IC) nên có thể giao tiếp nhiều DS18B20 trên cùng 1 dây
- Ống thép không gỉ (chống ẩm , nước) đường kính 6mm, dài 50mm
- Đường kính đầu dò: 6mm
- Chiều dài dây: 1m
Hướng dẫn điều khiển DS18B20
Download datasheet ds18b20: https://datasheets.maximintegrated.com/en/ds/DS18B20.pdf
Chuẩn giao tiếp 1 wire
Tương tự như DHT11, DS18b20 cũng sử dụng chuẩn giao tiếp 1 wire (one wire), chỉ sử dụng một đường data duy nhất. Sử dụng thời gian xung 0 hoặc 1 để định nghĩa các trạng thái. Dưới đây là Timing khởi tạo DS18b20
Tiếp tới là Timing đọc, ghi. Và định nghĩa bit 0, 1 trong 1 wire.
Bản đồ bộ nhớ của DS18B20
Ds18b20 có 8byte bộ nhớ SRAM Scrachpad lưu trữ các dữ liêu nhiệt độ, thanh ghi, và các thiết lập, cụ thể:
Byte 0 và 1: lưu giá trị nhiệt độ đo được
Byte 2, 3 lưu giá trị nhiệt độ TH, TL hoặc giá trị do user ghi vào
Byte 4: lưu các thiết lập
Byte 8: CRC byte kiểm tra lỗi
EEPROM lưu dữ liệu TH TL hoặc dữ liệu của User và 1 thanh ghi thiết lập (configuration).
Thanh ghi configuration có 3 bit R0, R1, R2 điều chỉnh độ phân giải (độ mịn) của nhiệt độ mà DS18b20 đọc được
Chuyển đổi dữ liệu thành giá trị nhiệt độ
DS18b20 có dải đo từ -55 độ tới 125 độ. Tương ứng với bảng nhiệt độ sau, bit S (signal) sẽ cho người dùng biết đó là nhiệt độ âm hay dương.
Lệnh điều khiển DS18B20
Lệnh trong DS18b20 có rất nhiều, chia thành 2 loại chính đó là Temperature command (lệnh đọc nhiệt độ) và Memory command lệnh điều khiển bộ nhớ. Dưới đây là bảng lệnh sử dụng trong ds18b20
Quy trình để đọc nhiệt độ sẽ được triển khai theo flow chart (lưu đồ thuật toán sau)
Để đọc ghi dữ liệu vào ROM, chúng ta có flow chart sau:
Lập trình STM32 với DS18B20
Cấu hình CubeMX
Thiết lập SYS – Debug Serial Wire. Chọn một chân GPIO PB15 là OUPUT, đổi tên thành DS18B20.
Trong tab RCC – chọn Crystal sau đó qua Clock set 72mhz
Trong tab Timer thiết lập như hình để có thể sử dụng delay_us.
Lập trình DS18B20 với KeilC
Download thư viện DS18B20 về qua hướng dẫn ở bài viết: Tài liệu lập trình DS18b20
Thêm đường dẫn thư viện cho Keil C và add gile ds18b20 vào project. Mình đã nói khá nhiều rồi nên không nhắc lại nữa.
Include thư viện vào main.c. Sau đó khởi tạo một biến Struct DS18b20 mang tên DS1.
Trong main chúng ta khởi tạo DS18b20 với các giá trị truyền vào là Timer và GPIO để đọc/ghi dữ liệu vào
Trong while đọc kết quả sử dụng hàm ReadTemp sau đó delay 1 khoảng thời gian giữa các lần đọc
Kết quả
Vào Debug, Add giá trị Temp vào watch t. Sau đó chạy chương trình. Đây là kết quả thu được
Kết
Lập trình STM32 với DS18b20 cũng tương tự với các cảm biến 1 wire khác như DHT11, DHT22,… Chỉ khác đó là DS8b20 có ROM để lưu trữ các giá trị cài đặt và nhiệt độ. Đây là một loại cảm biến có thể sử dụng tốt để đo đạc môi trường, giá thành cũng tương đối hợp lý.
Nếu bạn thấy bài viết này có ích hãy để lại bình luận và đừng quên ra nhập Hội Anh Em Nghiện Lập trình nhé.
5/5 - (2 bình chọn)Từ khóa » Tổng Quan Về Cảm Biến Nhiệt độ Ds18b20
-
Cảm Biến Nhiệt độ DS18B20 Dây Mềm - Nshop
-
IC Cảm Biến Nhiệt Độ DS18B20 - ĐIỆN TỬ TƯƠNG LAI
-
[PDF] Cảm Biến Nhiệt độ Ds18b20
-
Cảm Biến Nhiệt độ DS18B20 Là Gì?
-
Cảm Biến Nhiệt độ DS18B20
-
DS18B20, Cảm Biến Nhiệt độ Trả Về Tín Hiệu Số (Digital) Với Sai Số Nhỏ
-
Cảm Biến Nhiệt độ Dây 1m DS18B20 1-Wire Digital Temperature ...
-
Đề Tài Tổng Quan Cảm Biến đo Nhiệt độ, Thermocouple DS18B20 ...
-
CẢM BIẾN NHIỆT ĐỘ DS18B20 - Điện Tử Spider
-
Hướng Dẫn Sử Dụng Cảm Biến Nhiệt độ DS18B20 (-55°C đến +125 ...
-
Cơ Bản Về DS18B20 - Hội Quán Điện Tử
-
Cảm Biến Nhiệt độ DS18B20 - Blog Mecsu
-
ĐỒ ÁN VXL - ĐO VÀ ĐIỀU KHIỂN NHIỆT ĐỘ SỬ DỤNG CẢM BIẾN ...
-
Cảm Biến Nhiệt độ Ds18b20 - Điện Tử Minh Việt