当前位置: 首页 > news >正文

免费网站建设方案网站开发 百度网盘

免费网站建设方案,网站开发 百度网盘,wordpress社交旅游,空间 网站在我们的产品中经常会遇到温湿度检测的需求。可以用于检测温湿度的传感器元件也有很多。我们经常使用的SHT各系列数字温湿度传感器来实现应用需求。在这里我们将设计并实现SHT3x系列温湿度传感器的驱动。 1、功能概述 SHT3x系列温湿度传感器是适用于各种应用的高品质湿度传感…在我们的产品中经常会遇到温湿度检测的需求。可以用于检测温湿度的传感器元件也有很多。我们经常使用的SHT各系列数字温湿度传感器来实现应用需求。在这里我们将设计并实现SHT3x系列温湿度传感器的驱动。 1、功能概述 SHT3x系列温湿度传感器是适用于各种应用的高品质湿度传感器。SHT3x温湿度传感器系列结合了多种功能和各种接口适合各类应用。 1.1、硬件描述 SHT3x建立在全新和优化的CMOSens®芯片之上进一步提高了产品可靠性和精度规格。SHT3x提供了一系列新功能如增强信号处理、两个独特和用户可选I2C地址、一个可编程温湿度极限的报警模式以及高达1 MHz的通信速度。SHT3x系列温湿度传感器的引脚排布及说明如下图所示 SHT3x系列温湿度传感器适用于2.15至5.5 V的宽电源电压范围。电源插脚必须与一个100nf电容解耦该电容应尽可能靠近传感器。 SCL和SDA线都是开放式I/O带有到VDD和VSS的二极管。它们应该连接到外部上拉电阻。I2C总线上的设备必须只驱动线路到地面。外部上拉电阻必须把信号高。上拉电阻可能包括在微控制器的I/O电路中。SHT3x系列温湿度传感器接线方式如下图 SCL用于同步微控制器与传感器之间的通信。时钟频率可以自由选择在0到1000千赫之间。支持根据I2C标准伸缩时钟的命令。SDA引脚用于在传感器之间传输数据。频率高达400khz的通信必须满足I2C快速模式标准。 1.2、信息通讯 SHT3x系列温湿度传感器支持I2C快速模式(频率高达1000千赫)。可以通过适当的用户命令启用和禁用时钟拉伸。 向传感器发送一个命令后传感器需要最少等待1ms的时间才能接收到另一个命令。所有SHT3x命令和数据都映射到16位地址空间。此外数据和命令由CRC校验和保护。这增加了通信的可靠性。传感器的16位命令已经包含一个3位CRC校验和。传感器发送和接收的数据总是由一个8位CRC来完成。在写方向上必须传输校验和因为SHT3x只接受后面跟着正确校验和的数据。在读取方向上由主程序读取和处理校验和。 SHT3x系列温湿度传感器可以通过ADDR引脚设置设备的通讯地址。请注意I2C地址是通过I2C读写头的7个msb表示的LSB在读写操作之间切换。具体的地址如下 1.3、数据转换 测量数据总是以16位无符号整数的形式传输。这些值已经线性化并补偿了温度和电源电压的影响。可以使用简单的公式将这些原始值转换为物理量值。相对湿度换算公式(结果为%RH) 温度转换公式(结果为摄氏度和华氏度) SRH和ST分别表示原始传感器输出的湿度和温度。只有当SRH和ST用十进制表示时这些公式才能正确工作。 2、驱动设计与实现 我们已经了解了SHT3x系列温湿度传感器基本技术特性接下来我们进一步考虑如何设计并实现SHT3x系列温湿度传感器的驱动。 2.1、对象定义 在使用一个对象之前我们需要获得一个对象。同样的我们想要SHT3x系列温湿度传感器就需要先定义SHT3x系列温湿度传感器的对象。 2.1.1、对象的抽象 我们要得到SHT3x系列温湿度传感器对象需要先分析其基本特性。一般来说一个对象至少包含两方面的特性属性与操作。接下来我们就来从这两个方面思考一下SHT3x系列温湿度传感器的对象。 先来考虑属性作为属性肯定是用于标识或记录对象特征的东西。我们来考虑SHT3x系列温湿度传感器对象属性。作为一个I2C总线设备设备地址用于标识设备在总线上的唯一性所以我们将设备地址作为SHT3x对象的一个属性。对于每一个SHT3x设备都有一个电子标识码它是标识SHT3x设备个体的东西所以我们将其作为SHT3x对象的属性。此外温湿度的当前值标识了当前的状态我们将其作为两个属性。还有SHT3x的状态寄存器也是记录SHT3x配置及工作状态的所以我们也将其作为SHT3x对象的属性。 接着我们还需要考虑SHT3x系列温湿度传感器对象的操作问题。作为数字通讯设备我们向其发送数据和从其接收数据都是必要但接收与发送数据依赖于所处的硬件平台所以我们将发送数据与接收数据作为SHT3x对象的两个操作。基于时序操作的需要在通讯过程中需要作延时处理但如何实现延时依赖于具体的硬件平台所以我们也将延时处理作为SHT3x对象的一个操作。 根据上述我们对SHT3x温湿度传感器的分析我们可以定义SHT3x温湿度传感器的对象类型如下 /* 定义SHT3x对象类型 */ typedef struct SHT3xObject{uint8_t devAddress;           // SHT3x对象的地址SHT3xStatusRegister status;          // SHT3x状态及存期的值uint32_t serialNumber;        // SHT3x对象的序列号float temperature;float humidity;void (*Delayms)(volatile uint32_t nTime);       //延时操作指针void (*Receive)(uint8_t devAddressuint8_t *rDatauint16_t rSize);    //接收数据操作指针void (*Transmit)(uint8_t devAddressuint8_t *tDatauint16_t tSize);   //发送数据操作指针 }SHT3xObjectType; 2.1.2、对象初始化 我们知道一个对象仅作声明是不能使用的我们需要先对其进行初始化所以这里我们来考虑SHT3x系列温湿度传感器对象的初始化函数。一般来说初始化函数需要处理几个方面的问题。一是检查输入参数是否合理二是为对象的属性赋初值三是对对象作必要的初始化配置。这里我们就从这几个方面入手设计SHT3x系列温湿度传感器对象的初始化函数。 /* SHT3x对象初始化 */ SHT3xErrorType SHT3xInitialization(SHT3xObjectType *shtuint8_t addressSHT3xTransmit transmitSHT3xReceive receiveSHT3xDelayms delayms){SHT3xErrorType errorSHT3X_NO_ERROR;if((shtNULL)||(transmitNULL)||(receiveNULL)||(delaymsNULL)){return SHT3X_PARM_ERROR;}sht-Transmittransmit;sht-Receivereceive;sht-Delaymsdelayms;sht-temperature0.0;sht-humidity0.0;if((address0x44)||(address0x45)){sht-devAddress(address1);}else if((address0x88)||(address0x8A)){sht-devAddressaddress;}else{sht-devAddress0;error|SHT3X_PARM_ERROR;}sht-status.word0;error|SHT3xReadStatusRegister(sht);if(errorSHT3X_NO_ERROR){error|SHT3xReadSerialNumber(sht);}return error; } 2.2、对象操作 我们已经完成了SHT3x系列温湿度传感器对象类型的定义和对象初始化函数的设计。但我们的主要目标是获取对象的信息接下来我们还要实现面向SHT3x温湿度传感器的各类操作。 2.2.1、单次测量 SHT3X温湿度传感器有一种单次测量模式。这种模式只按我们规定的方式运行一次测量通信序列由一个启动条件、I2C写标头和一个16位测量命令组成。在传感器完成测量后通过发送一个START条件和一个I2C读标头主控可以读取测量结果。具体的格式如下 根据这一单次数据测量并读取的流程图我们可以很方便的得到单次读取SHT3X温湿度传感器数据的程序。 /* 获取一次性采集 */ SHT3xErrorType SHT3xGetSingleShotData(SHT3xObjectType *shtSHT3xRepeatability repeatabilitySHT3xMode mode) {SHT3xErrorType errorSHT3X_NO_ERROR;uint8_t data[6];uint16_t tempCode;uint16_t humiCode;SHT3xCommands commands[2][3]{{CMD_MEAS_CLOCKSTR_H  // 单次数据采集模式时钟延展高重复性CMD_MEAS_CLOCKSTR_M  // 单次数据采集模式时钟延展中重复性CMD_MEAS_CLOCKSTR_L  // 单次数据采集模式时钟延展低重复性}{CMD_MEAS_POLLING_H   // 单次数据采集模式轮询高重复性CMD_MEAS_POLLING_M   // 单次数据采集模式轮询中重复性CMD_MEAS_POLLING_L   // 单次数据采集模式轮询低重复性}};SHT3xWriteCommand(shtcommands[mode][repeatability]);if(modeMODE_CLKSTRETCH){sht-Delayms(1);}else if(modeMODE_POLLING){sht-Delayms(20);}sht-Receive(shtdata6);error|CheckCRC8ForSHT3x(data[0]2data[2]);error|CheckCRC8ForSHT3x(data[3]2data[5]);if(errorSHT3X_NO_ERROR){tempCode(data[0]8)data[1];humiCode(data[3]8)data[4];sht-temperatureCalcTemperatureValue(tempCode);sht-humidityCalcHumidityValue(humiCode);}return error; } 2.2.2、周期测量 SHT3X温湿度传感器还有一种周期性检测数据的方式。这种方式先将SHT3X温湿度传感器配置为周期获取模式。在这一模式下就可以周期获取数据了。周期获取数据的格式如下图 根据上述周期读取数据的字节顺序图我们可以编写周期获取的程序如下 /* 读取周期性采集的数据 */ SHT3xErrorType SHT3xFetchPeriodicMeasurmentData(SHT3xObjectType *sht) {SHT3xErrorType errorSHT3X_NO_ERROR;uint8_t data[6];uint16_t tempCode;uint16_t humiCode;SHT3xWriteCommand(shtCMD_FETCH_DATA);sht-Delayms(1);sht-Receive(shtdata6);error|CheckCRC8ForSHT3x(data[0]2data[2]);error|CheckCRC8ForSHT3x(data[3]2data[5]);if(errorSHT3X_NO_ERROR){tempCode(data[0]8)data[1];humiCode(data[3]8)data[4];sht-temperatureCalcTemperatureValue(tempCode);sht-humidityCalcHumidityValue(humiCode);}return error; } 2.2.3、系统复位 对于SHT3X来说系统复位包括的内容比较多有接口复位、软件复位、广播复位和硬件复位引脚复位。这里我们需要考虑的主要是软件复位其操作方式如下图 根据上图我们可以很轻松的实现软件复位操作。 2.2.4、内部加热器 SHT3x配备了内部加热器但仅用于可靠性检查。加热器可以通过命令开关控温范围大约在几度范围之内。其状态可在状态寄存器中查看默认加热器是关闭。器操作命令如下 但是不建议操作加热器。 2.2.5、状态寄存器 状态寄存器包含有关加热器运行状态、警报模式以及最后一个命令的执行状态和最后一个写序列的信息。读取状态寄存器的命令如下所示 状态寄存器的第15、11、10、4位等是我们关系比较多的这些报警标志位可以通过命令清楚。根据上述数据字节流图我们可以得到读状态寄存器的函数如下 /* 读取状态寄存器的值 */ SHT3xErrorType SHT3xReadStatusRegister(SHT3xObjectType *shtSHT3xStatusRegister *status) {SHT3xErrorType errorSHT3X_NO_ERROR;uint8_t sta[3];SHT3xWriteCommand(shtCMD_READ_STATUS);sht-Delayms(1);sht-Receive(shtsta3);error|CheckCRC8ForSHT3x(sta[0]2sta[2]);if(errorSHT3X_NO_ERROR){status-word(sta[0]8)sta[1];}else{status-word0;}return error; } 3、驱动的使用 我们已经设计并实现了SHT3x温湿度传感器驱动接下来我们还需要对这一驱动进行验证所以我们要基于此驱动设计一个简单的应用。 3.1、声明并初始化对象 使用基于对象的操作我们需要先得到这个对象所以我们先要使用前面定义的SHT3X温湿度传感器对象类型声明一个SHT3X温湿度传感器对象变量具体操作格式如下 SHT3xObjectType sht3x; 声明了这个对象变量并不能立即使用我们还需要使用驱动中定义的初始化函数对这个变量进行初始化。这个初始化函数有很多的输入参数要求如下 SHT3xObjectType *sht待初始化的SHT3X uint8_t address设备地址 SHT3xReceive receive接收数据函数指针 SHT3xTransmit transmit发送数据函数指针 SHT3xDelayms delayms毫秒延时函数指针 对于这些参数对象变量我们已经定义了。设备地址则根据实际的使用地址输入即可。主要的是我们需要定义几个函数并将函数指针作为参数。这几个函数的类型如下 /* 毫秒延时函数指针类型 */ typedef void (*SHT3xDelayms)(volatile uint32_t nTime);/* 接收数据函数指针类型 */ typedef void (*SHT3xReceive)(SHT3xObjectType *shtuint8_t *rDatauint16_t rSize);/* 发送数据函数指针类型 */ typedef void (*SHT3xTransmit)(SHT3xObjectType *shtuint8_t *tDatauint16_t tSize); 对于这几个函数我们根据样式定义就可以了具体的操作可能与使用的硬件平台有关系。我们的应用基于STM32F4平台实现接下来将基于我们的平台实现这些函数。具体函数定义如下 /*从SHT3X接收数据*/ static void ReceiveFromSHT3x(SHT3xObjectType *shtuint8_t *rDatauint16_t rSize) {HAL_I2C_Master_Receive(sht3xi2c sht-devAddressrData rSize 1000); }/*向SHT3X传送数据*/ static void TransmitToSHT3x(SHT3xObjectType *shtuint8_t *tDatauint16_t tSize) {HAL_I2C_Master_Transmit(sht3xi2csht-devAddresstDatatSize1000); } 对于延时函数我们可以采用各种方法实现。我们采用的STM32平台和HAL库则可以直接使用HAL_Delay()函数。于是我们可以调用初始化函数如下 SHT3xInitialization(sht3x0x88TransmitToSHT3xReceiveFromSHT3xHAL_Delay); 其中0x88为设备地址。 3.2、基于对象进行操作 我们定义了对象变量并使用初始化函数给其作了初始化。接着我们就来考虑操作这一对象获取我们想要的数据。我们在驱动中已经将获取数据并转换为转换值的比例值接下来我们使用这一驱动开发我们的应用实例。 /*获取温湿度计数据*/ void SHT3xMeasureData(void) {float humidity;float temperature;SHT3xErrorType errorSHT3X_NO_ERROR;SHT3xStatusRegister status;error|SHT3xReadStatusRegister(sht3xstatus);if(error!SHT3X_NO_ERROR){return ;}if(status.bit.ResetDetected){SHT3xClearStatusRegister(sht3x);SHT3xStartPeriodicMeasurment(sht3xREPEATAB_HIGHFREQUENCY_1HZ);}error|SHT3xFetchPeriodicMeasurmentData(sht3x);if(errorSHT3X_NO_ERROR){temperaturesht3x.temperature;humiditysht3x.humidity;} } 4、应用总结 我们已经设计并实现了SHT3x温湿度传感器的驱动程序也使用这一驱动程序实现了读取SHT3x温湿度传感器温度、湿度数据的简单应用。经我们测试所得到的结果是符合我们期望的这也说明驱动程序的设计是成功的。 在使用驱动时还需注意在做初始化配置时对状态寄存器的写操作需注意不得变更预留位且相关的预留位的默认值以后可能会改变。因此在进行任何写用户寄存器的操作之前必须先读预留位的默认值。而且在初始化配置时还要注意SHT3X 中OTP功能默认为禁止状态且不推荐用户使用。 因为SHT3x温湿度传感器采用的是标准I2C接口所以在驱动设计中没有考虑硬件接口相关的内容。我们只专注于SHT3x温湿度传感器的配置与操作。所以在使用驱动程序时无论是使用硬件I2C收发控制器还是使用GPIO模拟的软件收发控制都需要单独做相应的配置。 欢迎关注
http://www.pierceye.com/news/852465/

相关文章:

  • 国外的购物网站有哪些安徽省住房和城乡建设厅官方网站
  • 网站策划需要什么能力网页游戏平台软件
  • phpmysql网站开发网络结构
  • 微官网和移动网站区别论坛网站建设多少钱
  • 怎么做公司网站优化凡科h5登录入口
  • 做电影网站如何推广方案房产网络平台
  • 站长工具 seo查询python爬数据做网站
  • 网站 底部医院网站建设的要求
  • asp网站静态化seo关键词排名优化软件怎么选
  • wordpress apache版本北京seo招聘
  • 南京玄武网站建设信息服务公司的经营范围有哪些
  • 旅游网站建设与翻译wordpress 显示作者
  • 网站建设与维护报告总结国家外汇管理局网站怎么做报告
  • 南沙区网站建设网站开发人员薪酬
  • 设计外贸英文网站简述网站开发的流程
  • 电商网站设计是干什么的如何建设cpa影视网站
  • wordpress设置阅读全文什么是seo搜索引擎优化
  • 网站名重复网站建设的经验之谈
  • 网站优化软件排名器有含义的公司名
  • 像wordpress一样的网站吗老徐蜂了网站策划书
  • ps做网站首页效果特效wordpress无法修改密码
  • 蚌埠网站设计一句话宣传自己的产品
  • 织梦开发供需网站杭州互联网企业排名
  • 网站结构分析关键词林俊杰的寓意
  • 网站备案 超链接青岛胶南做网站的
  • 国内ui做的好的网站网站底部 图标
  • 网站开发维护人员天津微外卖网站建设
  • 保定网站建设推广公司怎么样雄安优秀网站建设
  • 上海集团网站建设做网站用asp好吗
  • h5网站建设价格wp-wordpress