一、温度传感器 DS18B20是Maxim(美信公司)生产的温度传感器,单片机可以通过1-Wire协议与DS18B20通信,最终读取温度。1-Wire总线的硬件接口非常简单,只需将DS18B20的数据引脚连接到单片机的一个IO口即可。
文章图片
引脚功能:
文章图片
特性:
1.测温范围 :-55℃~+125℃,固有测温误差1℃
2.支持多点组网功能,多个DS18B20可以并联在唯一的三线上,最多只能并联8个
3.分辨率:从9位到12位的可编程分辨率
4.最多在750ms内将温度转换为12位数字
文章图片
温度暂存器:
文章图片
文章图片
一般使用0,1,4字节,前面两个字节是与温度有关的,后者是配置寄存器用于配置温度计的精度和最大转换时间。
文章图片
高字节前五个字节表示温度的正(0000 0)负(1111 1),紧接着后7位是温度的整数部分,低四位是温度的小数部分。
文章图片
DS18B20精度设置:
文章图片
二、程序 DS18B20的DQ连接PA6,需要连接TDQ与P1的跳线帽。
//rom和功能指令
#define OW_SKIP_ROM0xCC
#define DS18B20_CONVERT0x44
#define DS18B20_READ0xBEfloat ds18b20_read(void)
{
uint8_t low_temp,high_temp;
ow_reset();
// 初始化
ow_byte_wr(OW_SKIP_ROM);
// 跳过rom
ow_byte_wr(DS18B20_CONVERT);
//转换温度
delay_us(750000);
ow_reset();
// 初始化
ow_byte_wr(OW_SKIP_ROM);
// 跳过rom
ow_byte_wr(DS18B20_READ);
// 读暂存器
low_temp = ow_byte_rd();
// 读取温度低字节
high_temp = ow_byte_rd();
// 读取温度高字节
return ((high_temp<<8)|low_temp)/16.0;
}
DS18B20常用的ROM命令和功能指令DS18B20采集到的温度是16位的,若高5位位1则是负温度,需要对采集到的数值进行取反并且加一才是真正温度。若高5位为是0,则采集的温度是整数,有的将它进行与操作0x07ff,这里默认它是零上温度,有无这步都可以。
文章图片
文章图片
返回值除以16.0是为了得到实际温度,从测量值到实际温度的转换,DS18B20的精度为0.0625度,即读回数据的最低位代表0.0625度,实际测量值x0.0625即可。
【#|蓝桥杯国赛之温度传感器】
推荐阅读
- #|蓝桥杯国赛之PWM互补输出
- 蓝桥杯国赛复习总结
- STM32|STM32通过串口控制LED闪烁或者呼吸效果
- 嵌入式|STM32的USART串口通讯~使用HAL库(查询方式)
- Keil5 mdk5安装
- stm32项目|基于STM32智能循迹送货小车(一)项目介绍及硬件部分
- #|HashSet源码学习
- 嵌入式|做嵌入式开发呢这两个设计思想要掌握的
- STM32|SPI通信原理---STM32F4--HAL