本帖最后由 Stduino 于 2020-8-18 20:34 编辑
说明:1DS18B20是由 DALLAS 半导体公司推出的一种的“单总线”接口的温度传感器。与传统的热敏电阻等测温元件相比,它是一种新型的体积小、适用电压宽、与微处理器接口简单的数字化温度传感器。 单总线结构具有简洁且经济的特点,可使用户轻松地组建传感器网络,从而为测量系统的构建引入全新概念,测量温度范围为-55到+125℃,精度为±0.5℃。现场温度直接以“单总线”的数字方式传输,大大提高了系统的抗干扰性。它能直接读出被测温度,并且可根据实际要求通过简单的编程实现 9-12 位的数字值读数方式。它工作在 3~5.5V 的电压范围,采用多种封装形式,从而使系统设计灵活、方便,设定分辨率及用户设定的报警温度存储在 EEPROM 中,掉电后依然保存。 DS18B20的操作步骤如下: 1.初始化单总线对象; 2.搜索单总线上的仆从设备,并返回其ROM地址; 3.对ROM地址进行处理,包括CRC校验、判断芯片类型,无误后进行下一步; 4. 读取温度,具体过程包括: 4.1 复位,向DS18B20 发温度转换命令(0X44 ) 4.2 重置,发读取存储命令(0XBE ) 4.3 对连续校正的两个字节数据进行转换。 5. 将温度通过串口打印
实验目的:在本例中,我们将利用 DS18B20模块测定温度。
器材:Stduino UNO / Nano; 杜邦线;数字温度传感器(DS18B20 )模块
电路连接:
代码展示: #include <OneWire.h>
OneWire ds(10); // 选择I/O,实例化对象
void setup(void) {
Serial.begin(9600);
}
void loop(void) {
byte i;
byte present = 0;
byte data[12];
byte addr[8];
float celsius, fahrenheit;
if ( !ds.search(addr)) {
Serial.println("No more addresses.");
Serial.println();
ds.reset_search();
delay(250);
return;
}
Serial.print("ROM =");
for( i = 0; i < 8; i++) {
Serial.write(' ');
Serial.print(addr, HEX);
}
if (OneWire::crc8(addr, 7) != addr[7]) {
Serial.println("CRC is not valid!");
return;
}
Serial.println();
// 利用ROM最低8位判断是否属于DS18B20系列,以及具体的种类
switch (addr[0]) {
case 0x28:
Serial.println(" Chip = DS18B20");
break;
case 0x22:
Serial.println(" Chip = DS1822");
break;
default:
Serial.println("Device is not a DS18x20 family device.");
return;
}
//4读取温度,具体过程包括:
//4.1复位、向DS18B20发温度转换命令(0X44)
ds.reset();
ds.select(addr);
ds.write(0x44, 1); // 开始温度转换, 并保持电源接通单总线
delay(1000);
//4.2复位、发读取存储器命令(0XBE)
present = ds.reset();
ds.select(addr);
ds.write(0xBE); // 读取暂存器
Serial.print(" Data = ");
Serial.print(present, HEX);
Serial.print(" ");
for ( i = 0; i < 9; i++) { // 将暂存器里的九字节数据存储给data
data = ds.read();
Serial.print(data, HEX);
Serial.print(" ");
}
Serial.print(" CRC="); //CRC校验
Serial.print(OneWire::crc8(data, 8), HEX);
Serial.println();
// 4.3对连续读出的两个字节数据进行转换。
int16_t raw = (data[1] << 8) | data[0];//由于最终结果是16位整形数据,因此被存储为“int16_t”类型
// 通过data第四字节判断保留的温度数据位数,将多余的位数置0
byte cfg = (data[4] & 0x60);
if (cfg == 0x00) raw = raw & ~7; // 9位, 93.75 ms
else if (cfg == 0x20) raw = raw & ~3; // 10位, 187.5 ms
else if (cfg == 0x40) raw = raw & ~1; // 11位, 375 ms
// 默认为12位,不需要处理,转换时间750 ms
celsius = (float)raw / 16.0; //将数据转化为实际温度,即把数据乘以0.0625
fahrenheit = celsius * 1.8 + 32.0; //摄氏度转华氏温度
//4.4串口打印
Serial.print(" Temperature = ");
Serial.print(celsius);
Serial.print(" Celsius, ");
Serial.print(fahrenheit);
Serial.println(" Fahrenheit");
}
实验效果:如串联监视器所示,现在的温度位 34.50 ℃。
Stduino IDE是一款面向32位处理器快速入门学习的集成开发平台,目前已经支持Arduino_Core_STM32框架,集聚快捷、高效、免费、开源、易得于一身,软件还集成了GDB调试功能。IDE当前支持的功能有:
GDB调试
封装库下载安装
代码自动补全提示
中英文模式
UTF-8\GBK编码格式
代码快速格式化
SWD\串口程序下载&调试(已验证)
DFU程序下载方式(待验证)
USB HID程序下载方式(待验证)
maple DFU程序下载方式(待验证)
maple DFU2程序下载方式(待验证)
MassStorage程序下载方式(待验证)
更多功能细节请点击图片上水印显示的网址进行了解
已经支持的芯片&板型列表:
Stduino UNO&Nano
Nucleo 144 boards
Nucleo 64 boards
Nucleo 32 boards
Discovery boards
Eval boards
STM32MP1 series coprocessor boards
Generic STM32F0 boards
Generic STM32F1 boards
Generic STM32F3 boards
Generic STM32F4 boards
Generic STM32H7 boards
Generic STM32L0 boards
3D printer boards
LoRa boards
Electronic Speed Controller boards
Generic flight controllers
Garatronics boards
Midatronics boards
更多功能集成正在进行中~
|