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

发布者:清新风华最新更新时间:2015-05-07 来源: eechina关键字:PXA310  温湿度传感器  传感器  单片机 手机看文章 扫描二维码
随时随地手机看文章
  1 引言
  在工业控制和工业生产领域中,传感器对于工业控制和生产环境的监控作用不言而喻。传统的传感器监控系统大都采用单片机控制,其监控的准确度和实时性不太令人满意。本文寻找到一套切实可行的传感器设计方案,其利用温湿度传感器芯片,基于PXA310硬件平台和Linux 操作系统,能有效监控现场温湿度变化。在周围环境发生变化,不能满足工作要求时,可以获取监控数据并提出预警,提高生产和工作环境检测的可靠性及实时性。
  2 温湿度传感器电路设计
  比较了一些传感器应用设计方案后,选用SHT10芯片为嵌入式温湿度传感器的核心部件。它外围电路简便,相比其他传感器芯片(DS18B20)有其独到优势。
  STH10 每秒可进行3 次温湿度测量,数据精度14 bit并且工作稳定。其测量采用CMOSens 专利,所以在测量效率和精度上要好于DS18B20.DS18B20 采用单总线控制方案(1-wire),大约每秒测量一次,9 位数字式温度数据;只提供温度测量。其在生产环境检测要求严格时,就显得精度和功能有些不足。
  2.1 sht10 简介
  SHT10 是一款高度集成的温湿度传感器芯片,提供全量程标定数字输出。传感器包括一个电容性聚合体湿度敏感元件和一个用能隙材料制成的温度敏感元件,他们与一个14 位A/D 转换器以及一个串行接口电路设计在同一个芯片上面。其通过标定得到校准系数以程序形式储存在芯片OTP 内存中,并利用两线制串行接口与内部电压调整,使外围系统集成变得快速而简单。
  2.2 SHT10 工作原理
  SHT10 芯片电源3.3V .传感器上电后,等待11ms 来完成"休眠"状态。通信复位和启动传输命令后,发送一组测量命令('00000101'表示相对湿度RH,'00000011'表示温度T),控制器要等待测量结束。这个过程需要大约11/55/210ms ,分别对应8/12/14bit 测量。SHT10 通过下拉DATA 至低电平,表示测量结束。控制器触发SCK 时钟前,必须等待这个"数据备妥"信号才能将测量数据正确读入。
  测量和通讯结束后,SHT10 自动转入休眠模式。数据传送采用两线制串行接口(与I2C 接口不兼容)。
  2.3 SHT10 电路原理图
  SHT10 采用LCC 封装,其DATA 和SCK 引脚分别连接到PXA310 的GPIO78 和GPIO79.PXA310通过模拟时序方式实现对外围温湿度传感器的控制和数据读写操作。由于SHT10 对于温湿度灵敏度很高,在系统集成时应尽量远离发热源(如MCU、LCD 等),否则测量结果会有所偏离;为SHT10 布线时,周围应尽量铺地减少周围器件对其的干扰。SHT10 电路原理图如图1 所示。

1.jpg

 

▲图1 SHT10 电路原理图

  3 Linux温湿度传感器驱动程序实现
  单片机控制的传感器设备中,单片机通常是单线程运行。在进行温湿度测量时,单片机需要等待测试结果返回,其方法阻碍了其他测试和操作的同步执行。
  在嵌入式Linux 系统中,驱动程序将测试任务送入任务队列,交出CPU 控制权,继而进行其他实时任务运行,待内核空闲再进入任务队列完成传感器的测量,以此提高系统执行的效率和实时性。
  3.1 Linux 温湿度传感器设备加载
  温湿度传感器使用Linux 内核的Miscdevice 数据结构在驱动程序初始化时将设备注册到内核。
  Miscdevice 是字符设备,其主设备号为10,设备及设备接口函数定义如下所示。
14.jpg2.jpg 
  驱动程序加载设备时将调用内核的注册函数。在Linux2.4 和2.6 内核中,几乎所有Linux 驱动程序都依靠如下函数加载模块。
  驱动程序初始化完成后,上层应用程序可以调用sht10_fops 中的sht10_read 函数进行温湿度的读取操作。
  3.2 Linux 温湿度传感器设备操作
  进行数据读取前,首先要在驱动程序中开辟4 个字节的数据空间,用于存放温度和湿度测量值。这里定义全局变量数据缓冲区为unsigned char buf[4].
  读取SHT10 温湿度数据前,需要进行端口初始化和SHT10 复位操作,然后将任务送于任务队列并阻塞线程,当任务完成返回后再唤醒线程,将读到数据传递给上层应用程序做进一步处理。程序流程图和实现函数如图2 所示。[page]

3.jpg

 

▲图2 驱动程序流程图

4.jpg5.jpg 
  上述函数中start_trans; write_byte; read_data; read_byte 分别利用PXA310 引脚模拟时序完成启动传输、写字节,读一位数据和读字节的操作。

6.jpg

 

 

  内核tasklet_schedule() 调度执行指定的tasklet,在获得运行机会之前只会调度一次,如果在运行时被调度, 则完成后会被再次运行。
  wait_for_completion()这个函数进行一个不可打断的等待,如果有代码调用它,并且没有完成这个任务,结果会是一个不可杀死的进程。copy_to_user()将内核空间数据传向上层用户空间,并让上层测试程序做进一步处理。
  3.3 Linux 温湿度传感器设备阻塞操作
  由于温湿度传感器测量需要一定时间,为提高系统运行效率和实时性,在驱动程序中阻塞线程,交出内核控制权,等待操作完成后唤醒线程,提高系统利用率。complete()在函数中就是唤醒一个等待的读取线程。任务队列实现函数如下所示。
7.jpg 
  Tasklet可以使测量操作在系统负荷不重时被调用,或是被立即执行,但始终不会晚于下一个CPU clock.
  Tasklet 始终在中断期间运行,并且在调度他的同一CPU 上运行。对比单片机系统,在单线程情况下,一般在sht10_read()中调用2 次measure_ sht10()来等待测量完成,测量效率依赖2 次测量消耗的时间;但在Linux 驱动程序中,使用Tasklet 方式操作,2 次测量过程不会对其他线程产生影响,在有其他实时事件需要及时处理时(如网络,视频),可以更有效提高驱动运行效率,降低对其他实时处理产生的影响。
  4 温湿度传感器测试与验证
  驱动程序完成以后,需要相应测试程序验证驱动程序编写的正确性。由于驱动程序中不能对数据进行浮点数运算,所以测试程序必须将驱动程序传递来的数据进行浮点数运算才能得到相应的温湿度值。[page]
  4.1 温湿度传感器测试环境
  在实验室常温下,测试程序多次调用驱动程序中读温湿度的函数接口获得测试数据,来验证设计的正确和可靠。并考虑实验室内常温下,相对湿度与温度具有非线性关系,计算湿度值时需要考虑温度的补偿关系,其关系如图3 所示。

8.jpg

 

▲图3 SORH 转换到相对湿度

  为补偿湿度传感器的非线性以获取准确数据,并考虑实际温度与测试参考温度(25℃)不同,使用如下公式修正读数。
9.jpg 
  RHlinear 是温度修正系数,RHtrue 是相对湿度,SORH是传感器返回的湿度值。进行12bit 湿度检测时,参数取值如下表所示。

10.jpg

 

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

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

11.jpg

 

▲表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: %.2f'C ",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)。

12.jpg

 

▲图4 超级终端测试结果

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

13.jpg

 

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

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

上一篇:基于STM32原子战舰板内存管理源码
下一篇:stm32教你如何编译出LIB文件

推荐阅读最新更新时间:2024-03-16 14:01

用Arduino最小系统板作AVR单片机的编程器
用Arduino编程具有简单易学的特点,但要配合Arduino控制板使用,使得成本比较高,体积也大,而且除单片机电路以外的大部分电路只在编程时有用,在电子制作上使用后就是多余的了,造成了浪费。能不能不用Arduino控制板,直接想办法用Arduino给单片机编程呢?答案是肯定的,只要做一个Arduino最小系统板,配合ISP下载线USBtinyISP或USBasp 就可以给AVR单片机下载程序了,Arduino最小系统板有一个锁紧座,方便单片机插上和取下,下载好程序的单片机就可以取下装到目标板上去使用了。 Arduino最小系统板电路见下图,适用于对ATmega8、ATmega168、ATmega328等型号的单片机编程
[单片机]
用Arduino最小系统板作AVR<font color='red'>单片机</font>的编程器
单片机软硬件联合仿真解决方案便于系统调整
前言 传统的嵌入式系统中,设计周期、硬件和软件的开发是分开进行的,并在硬件完成后才将系统集成在一起,很多情况下,硬件完成后才开始进行实时软件和整体调试。软硬件联合 仿真 是一种在物理原型可用前,能尽早开始调试程序的技术。 软硬件联合仿真有可能使软件设计工程师在设计早期着手调试,而采用传统的方法,设计工程师直到硬件设计完成才能进行除错处理。有些软件可在没有硬件支持的情况下完成任务的编码,如不涉及到硬件的算法。与硬件相互作用的编码在获得硬件之前编写,但只有在硬件上运行后,才能真正对编码进行调试。通过采用软硬件联合 仿真 技术,可在设计早期开始这一设计调试过程。由于软件的开发通常在系统开发的后段完成,在设计周期中较早的开始调试有可能将
[电源管理]
<font color='red'>单片机</font>软硬件联合仿真解决方案便于系统调整
图形点阵式液晶显示模块与51单片机的接口设计
引 言 液晶作为一种显示器件,以其特有的优势正广泛应用于仪器、仪表、电子设备等低功耗产品中。以往的测控仪器的显示部分大都采用LED式液晶显示屏进行参数设定和结果显示,其显示信息量少、形式单一、人机交互性差、操作人员要求较高。而液晶显示器(LCD)具有功耗低、体积小、质量轻、超薄和可编程驱动等其他显示方式无法比拟的优点,不仅可以显示数字、字符,还可以显示各种图形、曲线、及汉字,并且可实现屏幕上下左右滚动、动画、闪烁、文本特征显示等功能;人机界面更加友好,使用操作也更加灵活、方便,使其日益成为智能仪器仪表和测试设备的首选显示器件。本文在介绍以ST7920为驱动器的WGM-12832液晶显示模块的引脚、结构、功能的基础上,详述了与AT
[单片机]
51单片机串口通信的注记
最近折腾51单片机,当然学到的都是比较基础的东西,可能我认为比较复杂的概念有 中断 和 串口通信 ,这篇主要是讲串口通信 使用的自然是山大王STC89C52RC的芯片来学习 串口通信主要是C51单片机的RXD 和TXD 与上位机进行通信,由于上位机一般是电脑,所以要TTL转成电脑能读出的RS232的电路来支持 一般使用MAX232 芯片 串口通信电路如下 之后就可以电脑的串口与这里的串口头子接了,注意 串口先要交叉一下 即电脑的TXD 对应下位机的RXD C51单片机串口通信模式有4种,最常用的是第一种 方式0 同步移位寄存器方式 ,一般用来扩展I/O口, 方式1 10位异步收发(8位数据),
[单片机]
51<font color='red'>单片机</font>串口通信的注记
一文了解msp430单片机的存储器组织
一般,在单片机中的Flash存储器用于存放程序代码,属于只读型存储器。而在MSP430些列的单片机中,都可以通过内置的Flash控制器擦除或改写任何一段的内容。另外,msp430的单片机内部还专门留有一段Flash区域(information memory),用于存放掉电后需要永久保存的数据。利用430内部的Flash控制器,可以完成较大容量的数据记录、用户设置参数在掉电后的保存等功能。 硬件介绍: 要对Flash读写,首先要了解MSP430的存储器组织。430单片机的存储器组织结构采用冯诺依曼结构,RAM和ROM统一编址在同一寻址空间中,没有代码空间和数据空间之分。 一般430的单片机都统一编址在0-64k地址范围中
[单片机]
一文了解msp430<font color='red'>单片机</font>的存储器组织
基于TRF6900单片机射频收发器电路设计
   TRF6900 是TI公司推出的单片 射频收发器 ,内部集成了完整的发射电路和接收电路,因而特别适合ISM频段内数据的双向无线传输。文中介绍了 TRF6900 的结构、原理、特性及应用电路。    TRF6900  是Texas Instruments公司推出的单片 射频收发器 芯片,其内部集成了完整的发射电路和接收电路。它的工作频率范围为850~950MHz,供电电压范围为 2.2~3.6V,射频输出功率高达+5bBm,而待机模式时的电流消耗仅在0.5μA~5μA之间,TRF-6900采用高吞吐率16-bit RISC结构,其最快速率可达8MIPS。另外,这种收发器还具有FM/FSK调制模式并采用三线制串行接口,因而可很方
[电源管理]
基于LPC2210和SZ1510的车载数字视频压缩记录系统设计
近些年来,计算机技术、多媒体技术和数据通信技术的发展飞速,促使数字视频的应用也越来越广(如视频监控、视频会议和移动电视等)。随后,各种压缩算法的研究使得数字视频的存储和传输极为方便,同时也相继出现了各种视频记录系统。本文设计的嵌入式视频记录系统,可以将摄像头拍摄到的模拟视频数据转变成数字视频数据,经压缩后存储在大容量的存储器上,并可通过专用的回放设备再现汽车行使的整个过程。该视频记录系统可用来记录汽车内各项仪表和前方外视景等视频信息及突发事件标记,它可以将汽车行使过程中的所有信息以数字视频的方式连续动态地记录下来。本系统可以和汽车黑匣子结合,以方便管理部门根据所记录的有关数据对车辆进行有效的管理,更能为事故后的分析提供准确的依据,
[单片机]
基于LPC2210和SZ1510的车载数字视频压缩记录系统设计
基于C8051单片机和FPGA实现导纳测量仪的系统设计
虚拟仪器的广泛应用,使得用户可以根据需求,设计自己的仪器系统。无源网络导纳测量仪即是虚拟仪器设计思想的一种具体运用,旨在实现对端口网络的导纳进行自动测量。测量仪是以C8051单片机为控制和处理核心,采用可编程逻辑器件EPF10K10,根据DDS原理产生信号源,将信号源连接到待测的网络上,对网络两端的电压和电流进行差分放大,使其输出电压尽可能达到ADC的最大输入电压,然后进行A/D采样,采样时,频率随信号频率而改变,一个周期内固定采32个点,用单片机的P1、P2直接接收数据,边采样边接收。对采样所得的电流、电压数据进行快速傅立叶变换(FFT),并分别求出其模值和相位,则导纳的模值为电流模值与电压模值之比,相位为电流与电压的相位之差。
[单片机]
基于C8051<font color='red'>单片机</font>和FPGA实现导纳测量仪的系统设计
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved