总结——调试STM32F103ZET6及外围传感器_电路图设计问题+SHT10温湿度传感器

1.电路图设计问题

(1)2016-11-02:SHT10温湿度传感器的DATA引脚未接10K上拉电阻到VCC3.3,造成数据读不出。

(2)2016-11-02:电路图中的USB转USART模块中CH340G芯片的2脚为TXD,应该接STM32F103ZET6的US1_RX,3脚为RXD,应该接STM32F103ZET6的US1_TX,原电路图中正好画反了。

(3)2016-11-13:P5的6脚和P5的7脚接反了,实际板子上6脚->US2_TX  7脚->US2_RX

(4)2016-11-06:添加RTC_Init()函数,RTC初始化,必须初始化RTC外部32.678K晶振才能起震工作;此电路板32.678K晶振并联的电阻为10M才正常起震。

(5)示波器看传感器时序时有两种方法:1.看某个固定的函数时序时可以采用程序中写while(1)的方式;2.看整个时序时可以采用示波器上的trigger功能,调整触发值为3.3V以下,然后触发方式为单次,点击RUN后便停在有波形的位置。

(6)学习到AutoFlowchart和Source Insight 3的使用,可以更直观的查阅代码和跟踪代码。

开发代码地址

2.SHT10温湿度传感器

以下为SHT10的参考资料:STM32 SHT10温湿度传感器的信号采集  SHT20技术手册

  首先讲讲SHT10这款温室度传感器。SHT1x(包括SHT10,SHT11和SHT15)属于Sersirion温湿度传感器家族中的贴片封装系列。更之前我讲过的DHT11这款温湿度传感器相比,体积小了许多,特别适合用于产品中。SHT10温湿度传感器包括一个电容性聚合体测湿敏感元件、一个用能隙材料制成的测温元件(文绉绉的),传感器内部有一个精度高达14为位的A/D转换器,适应串行接口电路实现无缝连接。该产品具有品质卓越、响应速度速度快,抗干扰能力强、性价比高等优点。

     1、接口定义:

  SHT10的接口定义如下图所示:

                                                             

esp32晶振_esp32晶振


           如上图所示,1脚为GND,4脚为VDD。它的供电电压范围为2.4~5.5V,建议的电压为3.3V,在电源引脚(VDD、GND)之间必须加上一个0.1uf的电容,应于去耦滤波用。它的2脚DATA为数据引脚,3脚SCK为时钟控制引脚,没有发现这两个引脚很像IIC所使用的引脚功能?没错,这个传感器确实可以认为是IIC接口,但是又有却别。该传感器不能按照IIC的协议编址,但是,如果IIC总线上没有挂接别的元件,传感器可以直接连到IIC总线上,但是单片机必须按照传感器的协议工作。传感器与单片机的接线如下图所示:

                                    

esp32晶振_寄存器_02



    2、传感器的通讯

      

     2.1、“启动传输”时序

用一组“启动传输”时序来完成数据传输的初始化。它包括:当SCK时钟高电平时DATA翻转为低电平,紧接着SCK变成低电平,随后是在SCK时钟高电平,随后是在SCK时钟高电平DATA翻转位高电平。时序如下:


                       

esp32晶振_寄存器_03



     2.2、复位时序

如果与SHT1x 通讯中断,可通过下列信号时序复位:当DATA 保持高电平时,触发SCK 时钟9 次或更多。时序图如下:

                    

esp32晶振_引脚_04


    2.3、命令集

传感器的命令包含三个地址位(目前只支持000,这就是他只能挂接在空闲的IIC总线上的原因)和五个命令位。。SHT1x 会以下述方式表示已正确地接收到指令:在第8 个SCK 时钟的下降沿之后,将DATA 下拉为低电平(ACK 位)。在第9 个SCK 时钟的下降沿之后,释放DATA(恢复高电平)。命令集如下:

                            

esp32晶振_数据_05



     2.4、温湿度测量

发布一组测量命令(‘00000101’表示相对湿度RH,‘00000011’表示温度T)后,控制器要等待测量结束。这个过程需要大约20/80/320ms,分别对应8/12/14bit 测量。确切的时间随内部晶振速度,最多可能有-30%的变化。。SHT1x 通过下拉DATA 至低电平并进入空闲模式,表示测量的结束。控制器在再次触发SCK 时钟前,必须等待这个“数据备妥”信号来读出数据。检测数据可以先被存储,这样控制器可以继续执行其它任务在需要时再读出数据。

在收到CRC 的确认位之后,表明通讯结束。如果不使用CRC-8 校验,控制器可以在测量值LSB 后,通过保持ACK高电平终止通讯。在测量和通讯完成后,SHT1x 自动转入休眠模式。


    2.5、状态寄存器

SHT1x 的某些高级功能可以通过给状态寄存器发送指令来实现,如选择测量分辨率,电量不足提醒,使用 OTP 加载或启动加热功能等。状态寄存器度、写如下:



esp32晶振_引脚_06



状态寄存器写




esp32晶振_寄存器_07



状态寄存器读



状态寄存器的具体描述如下表所示:




esp32晶振_esp32晶振_08




测量分辨率:默认分辨率 14bit (温度) 和 12bit (湿度) 可以被降低为 12 和 8bit. 尤其适用于要求测量速度极高或者功耗极低的应用。


电量不足检测功能:在电压不足 2.47V 发出警告。精度为±0.05 V。


加热:可通过向状态寄存器内写入命令启动传感器内部加热器.。加热器可以使传感器的温度高于周围环境 5 – 10°C12 。功耗大约为 8mA @ 5V 。


OPT加载:开启此功能,标定数据将在每次测量前被上传到寄存器。如果不开启此功能,可减少大约 10ms的测量时间。


上面的寄存器如果没有什么特殊要求或应用于特定的场合,则无需配置,选择默认就可以了。



     2.6、通讯过程


传感器的通讯过程为:发送”启动传输“时序,初始化传感器——>发送命令——>等待传感器应答,及测量结束——>接收传感器的16位数据值——>接收8为的CRC校验数据——>休眠,等待下一次传输开始。


传输的过程的测量时序可以由下图示意:



esp32晶振_esp32晶振_09



  上图中 TS = 传输开始, MSB = 高有效字节,LSB =低有效字节, LSb = 低有效位。


下面举个实际测量时的相对湿度测量时序例子。时序如下:



esp32晶振_数据_10



这张图可以知道:我们接收到的数据数值为”0000 0100 0011 0001“ = 1073 = 35.50% RH (位含温度补偿),至于怎么计算的,请接着往下看。



      2.7、信号转化   


       2.7.1 温度的转化


设T 2 1 SOt为从传感器上读出来的测量数值,我们需要用下面的公式将测量数值转换成整整的温度值。


T = d1 + d2 * SOt  (其中d1,d2的值根据实际情况选择,选项如下)




esp32晶振_寄存器_11




      2.7.2 湿度的转换 


湿度的转换公式如下:

esp32晶振_寄存器_12

。其中湿度的转化参数如下选择:根据采样的精度不同而不同。



esp32晶振_寄存器_13



99%以上的湿度已经接近饱和必须经过处理显示100%RH13.请注意 湿度传感器对电压无依赖性。测量值与相对湿度的转化如下图所示:



esp32晶振_esp32晶振_14



  相对湿度根据上面的参数与公式算出来之后,还需要考虑当前环境温度而进行适当的补偿。补偿的公式及其参数选择如下:



esp32晶振_esp32晶振_15




       2.7.3、露点的计算


露点的定义:露点温度指空气在此温度下能保持最多的水汽,当温度冷却到露点,空气变得饱和,就会出现雾、露或霜。


SHT1x 并不直接进行露点测量,,但露点可以通过温度和湿度读数计算得到.。由于温度和湿度在同一块集成电路上测量,SHT1x 可测量露点。 一块集成电路上测量,SHT1x 可测量露点。 下面直接给出结论性的露点计算公式了。


LogEW=(0.66077+7.5*T/(237.3+T)+(log10(RH)-2)         


露点:Dp=((0.66077-logEW)*237.3/(logEW-8.16077)         


例如:RH=10% T=25C  ->EW=23.7465->露点=-8.69℃


  RH=90% T=50C  ->EW=92.4753->露点=47.89℃