🌱 Sensor - Cảm biến nhiệt độ DS18B20
Ở những bài viết trước mình đã giới thiệu về một số loại cảm biến nhiệt độ, với các ưu nhược điểm khác nhau. Bài viết này mình sẽ giới thiệu về một loại cảm biến nhiệt độ khá phổ biến đó là DS18B20.
👉 Cảm biến Nhiệt độ DS18B20
💬 Cũng giống như những cảm biến nhiệt độ khác, cảm biến DS18B20 sử dụng để đo nhiệt độ. Cấu tạo của cảm biến này khá giống với 1 phần của DHT11, với một bộ ngoại vi ADC để chuyển đổi tín hiệu analog thành tương tự, sau đó truyền về theo giao thức One-Wire.
Cảm biến này 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. Mỗi IC DS18B20 có một ID riêng, được lưu trên EEPROM của IC, nên một Vi điều khiển có thể giao tiếp với nhiều Cảm biến, trên cùng một dây Data.
💬 Ứng dụng của cảm biến
Cảm biến nhiệt độ DS18B20 có khá nhiều ứng dụng trong thực tế:
- Việc có thể kết nối nhiều cảm biến trên cùng một dây và có thể đặt ở nhiều nới khác nhau, DS18B20 có thể sử dụng trong các ứng dụng kiểm soát thông số môi trường HVAC, đo nhiệt độ trong các tòa nhà, thiết bị hoặc máy móc, ...
(Mình đã bắt gặp cảm biến này ở trong các máy như điều hòa, tủ lạnh) - Dải đo nhiệt độ rộng, tính ổn định và độ chính xác khá cao, nên cảm biến thường được sử dụng rộng rãi để đo nhiệt độ trong các môi trường cứng như trong dung dịch hóa chất, hầm mỏ hoặc đất, ...
💬 Một số thông số cơ bản
Các bạn có thể xem DS18B20 Datasheet để nắm được các thông số cơ bản của Cảm biến trước khi sử dụng:
- Điện áp hoạt động: 3 - 5.5V.
- Dải đo nhiệt độ: -55°C đến 125°C.
- Sai số 0.5°C trong dải đo -10°C đến 85°C.
- Độ phân giải của bộ ADC nội (người dùng có thể chọn từ 9-12 bits).
- Thời gian chuyển đổi tối đa: 750ms với độ phân giải 12 bits.
💬 Sơ đồ chân
Giống như các IC sử dụng giao tiếp One-Wire khác, DS18B20 cũng có 3 chân có chức năng. Bao gồm 2 chân cấp nguồn VDD và GND. Chân còn lại là chân DQ - Data để truyền dữ liệu về thông qua giao thức One-Wire.
💬 Cấu tạo Cảm biến DS18B20
Bên trong cảm biến DS18B20 có tích hợp một số thành phần:
- Một bộ nhớ ROM 64-bits để lưu trữ ID của cảm biến cũng như data về nhiệt độ.
- Đầu cảm biến đo nhiệt độ, kết hợp với bộ phát hiện ngưỡng nhiệt độ (High/Low Temperature Trigger).
- Bộ ADC 9-12 bits để chuyển tín hiệu tương tự sang số. Cùng với đó là bộ Control Logic để chuyển đổi data từ đầu ra của ADC sang giao thức One-Wire.
- Bộ CRC 8-bit để check lỗi.
👉 Giao tiếp với Vi điều khiển
Có thể giao tiếp với DS18B20 giống như giao tiếp với những Vi điều khiển Onewire, đó là kết nối chân Data với một chân IO của Vi điều khiển. Tuy nhiên, về cách cấp nguồn thì chúng ta có thể cấp vào chân VDD, hoặc cấp trực tiếp vào chân Data.
💬 Sơ đồ cấp nguồn thông qua chân Data - DQ
Với cách kết nối này, chúng ta cần có thêm 1 điện trở pull-up trên đường Data để xác định mức logic mặc định là 1.
Tuy nhiên, để cảm biến có thể thực hiện việc chuyển đổi nhiệt độ chính xác, thì cần cung cấp đủ dòng điện qua đường dây Data khi quá trình chuyển đổi diễn ra (Dòng hoạt động của cảm biến có thể lên đến 1.5mA). Vì vậy, nếu có nhiều cảm biến trên cùng 1 line thực hiện chuyển đổi cùng lúc, dòng qua điện trở pull-up sẽ không đủ để cung cấp.
👉 Vì vậy, có 1 cách giải quyết đó là cấp thêm nguồn ngoài qua một MOSFET cho đường Data (Như hình trên).
💬 Sơ đồ cấp nguồn vào chân VDD
Một cách khác để giải quyết vấn đề trên là sử dụng nguồn cung cấp ngoài trên chân VDD cho mỗi cảm biến.
💬 Đọc nhiệt độ từ cảm biến
DS18B20 cung cấp độ phân giải từ 9 - 12 bits, tương ứng với độ phân giải nhiệt độ có thể ở các mức từ 0.5°C (9 bits) đến 0.0625°C (12 bits).
Để yêu cầu nhiệt độ chuyển đổi từ cảm biến, Vi điều khiển có thể gửi một lệnh Convert T [44h] tới cảm biến, việc chuyển đổi nhiệt độ sẽ được diễn ra và data sẽ được lưu trong 16-bits bộ nhớ, gọi là Scratchpad (Sử dụng số bit tương ứng với độ phân giải của ADC, hình bên dưới là sử dụng 12 bits, trong đó các bit S trong byte MSB có ý nghĩ là "sign" tức là chỉ thị dấu của nhiệt độ là âm hay dương).
- S = 1 ⇒ nhiệt độ âm.
- S = 0 ⇒ nhiệt độ dương.
Tiếp theo, Vi điều khiển có thể đọc data này bằng cách gửi lệnh Read Scratchpad [BEh], sau lệnh này thì cảm biến sẽ tự động gửi 16 bits data trên về Vi điều khiển qua giao thức One-Wire (byte LSB sẽ được gửi trước).
💬 Chức năng cảnh báo ngưỡng nhiệt độ
DS18B20 có chức năng cảnh báo nhiệt độ đo được vượt qua 2 ngưỡng cao và thấp, 2 giá trị ngưỡng này được lưu trong 2 thanh ghi TH và TL.
Khi Vi điều khiển gửi lệnh Convert T, cảm biến tiến hành chuyển đổi nhiệt độ và sau đó so sánh với 2 giá trị TH và TL. Nếu nhiệt độ vượt qua 2 ngưỡng này, một cờ cảnh báo trên cảm biến sẽ được set lên, và cảm biến sẽ gửi 1 lệnh cảnh báo về Vi điều khiển (Alarm search command).
👉 Nhìn chung cảm biến này có khá nhiều ưu điểm, đặc biệt là bộ nhớ ROM nội và CRC, và sẽ cần bàn luận thêm về thêm ở những bài viết sau. Bài viết này mình tạm dừng lại ở 2 chức năng chính kể trên.
👉 Các bạn có thể tham khảo đoạn code 8051 giao tiếp với DS18B20 tại link này nhé!
>>>= Follow ngay =<<<
0 Nhận xét