DS18B20是一种数字温度传感器,由达拉斯半导体公司生产。它是全球范围内应用最广泛的数字温度传感器之一。
DS18B20采用1-Wire总线进行数字通信,支持多设备共用一根总线。它可以在几种不同的精度和分辨率下进行操作,其精度高达0.5°C。
在DS18B20进行温度采集时,需要一定的上电时间和稳定时间。在启动温度转换之后,DS18B20需要一定的时间进行ADC转换。如果没有适当的延时,这个过程可能会导致读取到错误的温度值,这将严重影响应用的准确性。
在DS18B20进行查找ROM码时,5V电源需要通过串行电阻上拉,然而由于系统每次上电可能会出现芯片内部电容充放电不正常的可能,因此需要进行延时以保证电容充放电稳定从而避免错误的上/下切边。
按照DS18B20的官方文档,启动转换后需要等待最长的转换时间,即零点温度转换时750ms。当然如果采用10位的分辨率可以缩短采集时间,但是同样也需要最多750ms的稳定时间。
一般建议至少等待800毫秒以上再读温度,以确保DS18B20转换已经完成。
在DS18B20进行温度采集时,需要使用控制引脚将其工作模式切换到温度转换模式,并延迟一段时间以允许转换完全进行。
在Arduino等单片机环境下,可以通过软件延时的方式,使用delay()函数来实现。例如,将DS18B20转换模式切换指令发送到总线上并延时800ms,可以使用以下代码实现:
```c
void DS18B20_Start(void)
pinMode(DS18B20_PIN, OUTPUT);
digitalWrite(DS18B20_PIN, LOW);
delayMicroseconds(480);
pinMode(DS18B20_PIN, INPUT_PULLUP);
delayMicroseconds(80);
float DS18B20_ReadTemp(void)
float temp;
uint8_t data[9], crc;
DS18B20_Start();
OneWire_Read(data, 1);
DS18B20_Start();
OneWire_WriteByte(0xCC);
OneWire_WriteByte(0xBE);
OneWire_Read(data, 9);
crc = OneWire_CRC(data, 8);
if (crc != data[8]) return -127;
temp = ((int16_t)data[1] << 8) | data[0];
return temp * 0.0625;
```
其中函数DS18B20_Start()表示DS18B20开始进行温度转换,函数DS18B20_ReadTemp()表示读取DS18B20的实时温度数据。