这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 活动中心 » 板卡试用 » 【分享评测,赢取加热台】+利用IIC读温湿度传感器Si7021串口打印

共6条 1/1 1 跳转至

【分享评测,赢取加热台】+利用IIC读温湿度传感器Si7021串口打印

工程师
2024-03-27 20:16:43   被打赏 40 分(兑奖)     打赏

【Silicon Labs EFR32xG24 开发套件】这款开发板虽然体积小巧,但却集成了多款传感器,真正做到了麻雀虽小五脏俱全。其中,板卡自带的温湿度传感器S引起了我的浓厚兴趣。通过查阅原理图,我了解到这款传感器的型号为Si7021。

Si7021传感器采用了Silicon Labs的第二代RH感测解决方案,这一方案在温湿度测量方面表现出色。在温度测量方面,它的测量范围非常广泛,从-40℃到+125℃,几乎涵盖了大多数应用场景的温度范围。更令人惊喜的是,它的温度测量精度高达±0.4℃,这意味着无论是在寒冷的冬季还是炎热的夏季,它都能为我们提供准确可靠的温度数据。

除了温度测量,Si7021传感器在相对湿度测量方面也有着不俗的表现。它能够从0%RH到80%RH进行准确测量,满足了许多应用场景对湿度测量的需求。无论是需要监测室内湿度的智能家居系统,还是需要控制湿度的工业生产线,Si7021都能提供稳定可靠的湿度数据。

下面开始:

下图为温湿度传感器参数:

image.png

Si7021是由Silicon Labs生产的温湿度传感器芯片,它具有出色的性能和广泛的应用范围,从HVAC/R和资产跟踪到工业和消费平台都能见到它的身影。以下是Si7021的主要性能参数:

  1. 湿度精度:误差典型值为±2%RH,最大值为±3%RH(在0~80%RH范围内),出厂时已经校正。

  2. 温度精度:误差典型值为±0.3°C,最大值为±0.4°C(在-10°C~85°C范围内),出厂时也已校正。

  3. 测量范围:温度范围为0~100%RH;而最大温度范围为-40°C~125°C。

  4. 工作电压:Si7021的工作电压范围为1.9~3.6V,推荐工作电压为3.3V。

  5. 低功耗:在工作状态下,其有功电流为150μA;而在待机状态下,其电流仅为60nA。

  6. 接口:Si7021通过I2C与外部芯片通信,其最大速率支持400kbps。

  7. 长期稳定性:湿度变化每年不超过0.25%RH,温度变化每年不超过0.01°C。

  8. 封装:Si7021采用3x3mm DFN封装。

  9. 片上集成功能:该芯片还集成了加热器(heater),并可选配疏水性保护盖。

传感器我就不多介绍,详细的参数请看规格书,下面我们看一下原理图:

image.png

MCU引脚:

image.png

PC04 PC05 IO口上。
下图简单的说明,和Si7021如何连接到EFR32MG24。

image.png

Si7021 12c相对湿度和温度传感器是一个集成了湿度和温度传感元件、模数转换器、信号处理、振动数据和1C接口的单片COS iC。工业标准的低K极性电介质用于湿度传感的专利使用,使低功耗单片CvOS传感器IC的构建具有低漂移、稳定和卓越的长期稳定性。Si7021提供了一种精确、低功耗、工厂校准的数字解决方案,非常适合在从HVAC/R和资产跟踪到工业和消费者平台的应用中测量湿度、露点和温度。

在xG24开发套件上,Si7021通过开关连接。因此,在应用程序使用Pc09之前,必须通过将其设置为高电平来启用开关。这使Si7021能够通电,并将用于传感器的12c线路连接到EFR32MG24 2总线。应用程序代码应始终将Pc09信号驱动为高电平或低电平,以防止其浮动。下图显示Si7021连接到EFR32MG24。

已经采取措施将传感器与电路板热隔离,当电路板断电时,温度读数会受到影响。当通过Mini-Simplicity连接器用电池电压为板供电时,可以实现更准确的温度测量,因为消除了板载LO的自加热,板载调试器处于低功率状态。

实现的代码:

// 定义I2C传输返回类型变量  
I2C_TransferReturn_TypeDef ret;  
  
// 定义读取设备ID的命令数组,注意这里SI7021_CMD_READ_ID_BYTE2需要是一个有效的宏定义或数组  
uint8_t cmdReadId2[2] = SI7021_CMD_READ_ID_BYTE2;  
  
// 定义存储设备ID的数组  
uint8_t deviceId[8];  
  
// 等待传感器准备好,这里使用了延时函数,确保传感器已经上电并稳定  
sl_sleeptimer_delay_millisecond(80);  
  
// 检查设备是否存在,并通过I2C读取设备ID与预期的设备ID进行比较  
ret = SI7021_transaction(I2C_FLAG_WRITE_READ, cmdReadId2, 2, deviceId, 8);  
  
// 确保I2C传输成功完成  
EFM_ASSERT(ret == i2cTransferDone);  
  
// 检查接收到的设备ID是否与预期的设备ID匹配  
EFM_ASSERT(deviceId[0] == SI7021_DEVICE_ID);  
  
// 初始化LED PWM模块,这可能涉及到设置PWM的频率、占空比等参数  
initialise_temp_limits();  
  
// 初始化周期性定时器,用于定期读取传感器数据或执行其他周期性任务  
initialise_timer();  
  
// stdout被重定向到VCOM,这样在串口输出的信息会被发送到VCOM端口  
printf("Welcome to the I2CSPM example application\r\n");

读取传感器的值:

// 使用原子操作读取local_read_sensor_data变量的值,确保在多线程环境下读取的数据一致性  
sl_atomic_load(local_read_sensor_data, read_sensor_data);  
  
// 检查是否需要读取传感器数据  
if (local_read_sensor_data) {  
    // 测量当前的湿度和温度  
    SI7021_measure(&relative_humidity, &temperature);  
      
    // 将当前的湿度和温度打印到VCOM端口  
    printf("\r\n");  
    printf("Relative Humidity = %ld%%\r\n", relative_humidity);  
    printf("Temperature = %ld C\r\n", temperature);  
      
    // 根据温度设置相应的LED灯(可能是led0或led1)  
    set_leds(temperature);  
      
    // 重置读取传感器数据的标志位  
    local_read_sensor_data = false;  
      
    // 使用原子操作将重置后的值存回read_sensor_data变量  
    sl_atomic_store(read_sensor_data, local_read_sensor_data);  
}

通过串口打印出传感器的值:一个是温度,一个是温度。

image.png

串口端口(COM端口)和波特率(baud rate)是串口通信中两个重要的参数。串口端口是COM30,而波特率是115200。

  • 串口端口(COM30):这是计算机上用于串口通信的物理或虚拟端口。在Windows系统中,串口通常被标识为COM端口(如COM1、COM2等),并且可以通过设备管理器来查看和管理这些端口。COM30可能是一个虚拟串口,通常由某些软件或硬件接口创建,用于与外部设备或应用程序进行通信。

  • 波特率(115200):波特率是指每秒传输的符号数,它决定了串口通信的速度。115200波特率意味着每秒可以传输115200个符号。这是一个相对较高的波特率,适用于需要高速数据传输的应用场景。



视频:

https://www.bilibili.com/video/BV1CV4y1A7yV/?vd_source=0e4686609dd9c60a63b3f7fe54080c03











专家
2024-03-27 20:49:02     打赏
2楼

图片挂了


专家
2024-03-29 08:00:18     打赏
3楼

谢谢分享


专家
2024-03-29 08:49:50     打赏
4楼

谢谢分享


工程师
2024-04-01 13:22:26     打赏
5楼

学习了。谢谢分享。


工程师
2024-04-02 09:05:34     打赏
6楼

学习了


共6条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]