传感技术
直播中

胡烨

7年用户 16经验值
私信 关注

【罗姆传感器评估板试用体验连载】2.温度传感器评估板(简介+引脚说明+寄存器+程序开发基本思路)

本帖最后由 戟战士 于 2022-3-6 12:59 编辑

一、简介
       温度传感器评估板采用的是BH1900NUX传感器。BH1900NUX是一个数字温度传感器,通过I2C总线进行数据传输,拥有3个地址引脚,总线上可同时连接8个设备。
       工作电压范围为2.7V~3.6V。
       可检测的温度范围为-20℃~+85℃,误差为±3.0℃。
       工作温度范围为-30℃~+95℃。

二、引脚说明
       BH1900NUX引脚图
       引脚图.png
       引脚描述
       引脚描述.png
       Pin1:串行总线数据引脚。用于I2C总线进行数据传输。
       Pin2:串行总线时钟引脚。用于I2C总线进行数据传输时提供时钟脉冲。
       Pin3:报警输出引脚。用于在环境温度超过传感器的检测温度时进行报警信号的输出。
       Pin4:电源地。
       Pin5~Pin7:地址引脚。可通过地址引脚设置设备在总线中的地址。
       Pin8:电源引脚。

三、寄存器
       BH1900NUX寄存器
         寄存器映射.png
       寄存器地址0x00:温度值寄存器。(用于存放温度传感器的检测结果)
       Temperature Data[11:0]:采用12位二进制数记录温度值,负数以二进制补码表示,将该值乘以0.0625得到温度值。
       寄存器地址0x01:配置寄存器。(用于配置相关参数)
       OS:当设备处于关闭模式,将该位写入'1',设备将进行单次温度测量,当测量结束后,设备回到关闭模式。设备处于工作模式,该位为'0',进行连续温度测量。
       ALERT:只读寄存器。提供中断状态信息,当读取温度数据或ALERT时,该位变成'0'。
       FAULT QUEUE[1:0]:记录连续故障次数,'00'代表1次,'01'代表2次,'10'代表4次,'11'代表6次。当故障次数超过计数范围时,ALERT引脚输出状态将变化。
       POL:选择ALERT引脚有效信号的极性,'0'代表低电平有效,'1'代表高电平有效。
       SD:将该位写入'1'时,在当前温度转换完成后,设备计入关闭模式。将该位写入'0',进入工作模式。
       TW[1:0]:选择设备温度转换时间间隔(具体查看数据手册)。
       寄存器地址0x02:最低温度限制寄存器
       TLOW Limit[11:0]:设置最低温度限制,数据的格式同温度值寄存器,该寄存器的值必须小于最高温度限制寄存器。
       寄存器地址0x03:最高温度限制寄存器
       THIGH Limit[11:0]:设置最高温度限制,数据的格式同温度值寄存器,该寄存器的值必须大于最低温度限制寄存器。
       寄存器地址0x04:软件复位寄存器
       SW_RST:在向该位写入'1'时设备进行复位。('1'未写入寄存器)

四、程序开发基本思路
       1.通讯初始化
       我们需要使用串口打印BH1900NUX的测量结果,需要用I2C总线进行通讯对BH1900NUX进行配置以及获取结果,所以首先需要对串口和I2C总线通讯进行初始化配置。

Serial.begin(115200);//串口初始化,波特率115200
Wire.begin();//I2C总线初始化,不带参数默认为主机
Wire.setClock(400000);//设置I2C总线时钟频率

       2.配置BH1900NUX
       通过对BH1900NUX的配置寄存器、最低温度限制寄存器、最高温度限制寄存器进行写入操作,进行基本配置。
       写操作
       写操作.png
       发送起始信号->发送7位设备地址+'0'(写)->发送寄存器地址->发送需要写入的数据->发送停止信号。对相关寄存器进行写操作。然后对软件复位寄存器SW_RST写'1'进行复位。
       设备地址为1001+A2+A1+A0,由威廉希尔官方网站 图可知A2为'0',A1为'0',A0为'1',所以设备地址为1001001;
       威廉希尔官方网站
图.png
       3.读取温度值并打印输出
       读操作
       读操作.png
       发送起始信号->发送7位设备地址+'0'(写)->发送寄存器地址->发送7位设备地址+'1'读->读取从设备发送的数据->发送应答(ACK)或非应答(NACK)信号->发送停止信号。读取温度值后,用串口进行打印输出。
       Wire.beginTransmission(0x49);//起始信号,参数为从设备地址(温度传感器地址)
       Wire.write(value);//写操作函数
       Wire.write(string);
       Wire.write(data, length);
       Wire.read();//读操作函数
       Wire.endTransmission();//停止信号
       Wire.endTransmission(stop);
       Serial.print(val);//串口打印输出函数
       Serial.print(val, format);
       Serial.println(val);
       Serial.println(val, format);

PS:
1.具体操作可以查看例程。
2.Arduino相关函数介绍将会发在评论区。


回帖(1)

更多回帖

发帖
×
20
完善资料,
赚取积分