新闻中心

EEPW首页>嵌入式系统>设计应用> 基于PXA310平台的温湿度传感器设计

基于PXA310平台的温湿度传感器设计

作者: 时间:2016-12-01 来源:网络 收藏

  4.1 温湿度传感器测试环境
  在实验室常温下,测试程序多次调用驱动程序中读温湿度的函数接口获得测试数据,来验证设计的正确和可靠。并考虑实验室内常温下,相对湿度与温度具有非线性关系,计算湿度值时需要考虑温度的补偿关系,其关系如图3 所示。

本文引用地址://m.amcfsurvey.com/article/201612/324471.htm

▲图3 SORH 转换到相对湿度

  为补偿湿度传感器的非线性以获取准确数据,并考虑实际温度与测试参考温度(25℃)不同,使用如下公式修正读数。

  RHlinear 是温度修正系数,RHtrue 是相对湿度,SORH是传感器返回的湿度值。进行12bit 湿度检测时,参数取值如下表所示。

▲表1 湿度转换系数与温度补偿系数

  由于能隙材料研发的温度传感器具有极好线性,14bit 温度值参考如下公式。
  Temperature = d1+d2 x SOT
  温度转换系数取值如下表所示,SOT 是传感器返回的温度值。

▲表2 温度转换系数

  利用上述温湿度转换公式和系数可以得出温湿度测量值。
  4.2 温湿度传感器测试途径与效率验证
  在测试程序中,考虑上述测量环境下温湿度之间的非线性,调用驱动程序的sht10_read 函数将读到的温湿度数据返回上层测试程序进行浮点数运算,将计算值通过串口输出,达到测试验证的目的。测试程序的实现如下所示。
  static void calc_sht10(float *humi, float*temp)
  {
  float rh=*humi;
  float t=*temp;
  float rh_line;
  float rh_true;
  t=t*d2+d1; //温度转换公式
  rh_line=C3*rh*rh+C2*rh+C1; //相对湿度转换公式
  rh_true=(t-25)*(t1+t2*rh)+rh_line;
  //相对湿度温度补偿
  if(rh_true>100)rh_true=100; //超出范围
  if(rh_true<0.1)rh_true=0.1;
  printf("Humidity is: %.2f%RH",rh_true);
  printf("Temperature is: %.2fC",t);
  }
  int main(int argc, char *argv[]) //主函数
  {
  int fd;
  float temp,humi; //温湿度数据
  char buffer[4]; //数据缓冲
  fd = open("/dev/sht10", 0); //打开文件
  if (fd < 0) { //打开失败,退出
  perror("open device /dev/sht10");
  exit(1);
  }
  read(fd,buffer,sizeof(buffer));// 读取温湿度值
  temp=(float)((buffer[0]《8)|buffer[1]);
  humi=(float)((buffer[2]《8)|buffer[3]);
  calc_sht10(&humi, &temp); //温湿度数值转换
  close(fd); //关闭文件
  return 0; //退出
  }
  测试完成后,考察驱动程序运行效率,即在驱动程序的tasklet_schedule 和copy_to_user 前分别对PXA310 的OSCR 时间计数寄存器进行时间读取,计算此次温湿度测量所用时间。计算公式如下所示。
  Time=(OSCR2-OSCR1)/OSCR_FREQ
  OSCR2 是唤醒线程后的时间,OSCR1 是进入任务队列前的时间。OSCR_FREQ 是PXA310 内部时钟频率3.25MHz.这样就可以计算出每次温湿度读取消耗的时间,以此对比SHT10 开发文档中理论测量时间值,确定实际驱动程序运行的效率。
  5 实验结果与分析
  超级终端中插入驱动模块,运行测试程序,可以在终端上看到测试结果(如图4)。

▲图4 超级终端测试结果

  系统功能实现后,利用上述Time 计算公式计算驱动程序中温湿度测量消耗的时间,实际测试结果如表3 所示。

▲表3 驱动程序中实际测量消耗的时间

  上表的测试结果不仅和传感器的响应速度有关,而且还与系统中其他运行的线程有关。当系统中有高一级任务到来或其他实时事件需要处理时,实际测量时间会大于上表中的测量时间,并且随着任务的增加测量时间也会相应的增加,完成的时间也受到外界中断的影响。内核会在任务不繁忙时完成测量操作。上表测试结果并未受到系统中其他驱动程序和中断的影响。对比开发手册中理论测量时间可以看到,使用任务队列的方法对改善系统处理能力与实时性效果明显。
  此外,实现温湿度传感器驱动程序还需要清楚了解SHT10 读写时序,读取温度和湿度所需要的时间不同。如果应用程序中得出的温湿度值超过预期值,就可以打开GPIO 驱动模块,触发系统板上的蜂鸣器达到预警效果。
  6 结语
  此设计方案已经应用于嵌入式无声交互控制系统的检测,并且运行正常。实践证明,该嵌入式Linux温湿度传感器设计方案可行有效,线程阻塞提高系统运行效率,在环境测量准确度和系统实时性方面得到了令人满意的效果。由于此方案基于Linux 操作系统和PXA310 平台,其在多任务、实时快速处理上具有一定的优势。

上一页 1 2 3 下一页

评论


技术专区

关闭