此内容由EEWORLD论坛网友骑IC看MCU原创,如需转载或用于商业用途需征得作者同意并注明出处
USS模块,即Ultrasonic sensing syolution, 超声波感知模块。这个资源设计主要面向表类市场,主要是水表和气表,因为目前的水表,气表等大多采用机械式的方式,但是损耗,精度,量程等都很难满足现在发展的需求,故USS模块借助这先进的理论及算法,在水表和气表方面表现很突出,下分别针对水表和气表两个方面对USS模块进行分析。
目前MSP430集成USS模块的MCU有MSP430FR6047(面向水表),MSP430FR6043(面向气表及水表,主要针对气表)。
Section 1:使用MSP430FR6047去设计智能水表。
先看一下FR6047的资源及内部功能介绍:
先看一下资源框图,主要的模块也就是多路一个USS Subsystem,同时内部会有LEA子系统,主要用于USS相关的算法计算。
首先,我们分析一下超声波检测的原理:
超声波检测,和测距原理差不多,都是基于声波在空气/水中的传播为基础的,如下图所示,在通水的管道中如下安装:
常用安装方式如上图四种,探头和接收模块在一器,因此会有两个探头T12和T21,T12发送声波,T21去感知,然后T21发送声波,T12去感知,通过这种方式便可以计算出管道内的流速,从而计算水量。理论分析如下:
换能器(也即是探头,将电能转换成声波,或者将声波转换成电信号,因此叫换能器)1和换能器2与管道成一定角度相对放置,图中V为流体的流速,∅是换能器安装过程中与管道的夹角,D为管道的内直径,L是两个换能器的距离,C为声波在介质中的传播速度。则根据上图所示,可以得到以下公式:
然后进行公示的转换可以得到下面的公式:
好了,到这一步,我们也就把超声波测距的原理及我们需要去测量的变量计算出来了。
首先对于公式中Area这一部分,就是个常数,跟实际管道的尺寸,安装有关系,所以这一块不需要我们考虑。我们需要测量的就是相对飞行时间delta T和绝对飞行时间T12和T21了。
后面将正式进入USS模块的使用讲解了。由于USS模块个MCU内部其他资源不相同,因为这个模块比较难,内部寄存器配置等和实际测量出来的效果相关度很大,同时如何根据发送的超声波及接受到的回波去计算绝对飞行时间和相对飞行时间需要算法的配合,因此TI提供了一个GUI上位机,同时这个GUI可以根据配置生成MSP430的软件程序,直接能给出绝对飞行时间和相对飞行时间。因此本此讲解不会介绍USS寄存器级别的配置程序,而是讲解如何使用TI提供的资源去开发自己的水表、气表产品。
首先,你需要一个TI的MSP430 EVM板:EVM430-FR6047
就这个卵样子的一块板子,上面包含了下载器电路,串口电路,LCD电路,超声波信号调理电路等,反正一句话,有了它,配合上换能器,你就能放飞自我去测量水的流速和流量。
接上面一句话,换能器? 什么东东。也就是超声波的探头了,不过是收发一体的,长这个样子:
一种压电陶瓷产品,注意 这个东东 有技术含量呦,不是每家公司做出来的都能有很好的精度和一致性的,想了解关于换能器的技术细节,夸克去吧,我也不会。。。。
然后呢,在有了这两个宝贝之后,按照下图所示连接,下图中将两个换能器放在管道内了。
这样就搭建好了我们实验的硬件条件,EVM板,换能器,那么首先我们来分析以下这个EVM板主要的电路图吧。附上详细的电路图连接:
http://www.ti.com/lit/zip/slar139
其他电路都比较简单,主要是最小系统电路及LCD显示灯,我们这里主要讲两块电路:
- 与上位机GUI通信
这一块也比较简单,但是这里注释一点,如下图所示,与PC端连接是使用的USB接口,但是MSP430FR6047与上位机通信支持I2C接口和UART接口,因为中间使用了一个HID bridge。你在板子上可以看到J1接口处,利用跳线帽可以选择使用哪个接口,但是 注意 强烈建议你使用I2C接口,因为速度快,稳定,如果你使用UART接口的话,可能后面会出现ADC波形不能实时更新的情况,而且这个UART口TI说可以使用,但是我研究发现内部去当程序可能有点bug,因此,使用I2C接口,使用I2C接口,使用I2C接口,重要的事情说三遍。
- 超声波的发送接收电路
如上图所示这一快是USS测量电路,CH_OUT接了一个200R电阻后驱动换能器,CH_IN则需要接一个电容接到换能器上,目的是为了隔离直流信号。USSXOUT和USSXIN需要接一个晶振,这里推荐8MHz,后面再GUI中需要配置。
硬件环境搭建完知乎,我们开始准备软件方面的工作,软件方面主要包括两块:上位机GUI和Code,这两块TI都是提供的。连接如下:
http://software-dl.ti.com/msp430/msp430_public_sw/mcu/msp430/USSSWLib/USSSWLibWater/latest/index_FDS.html
在这个页面中,你能看到两个内容:
GUI(USSSWLib) 和 Code
把这两个下载下来进行安装,安装正常后可以看到以下两个内容:
GUI : 这个就是上位机应用了,用来我们调试修改参数使用的
CODE: 这个是TI提供的程序,可以在CCS或者IAR编译环境中进行编译,其中包含一些Lib文件,即只能使用,不能看源文件。
注意一个点:安装GUI时需要JAVA JRE 1.7以上的环境支持,没安装的给安装以下,连接如下:
https://www.java.com/en/download/
同时CODE也需要CCS及IAR相应版本才能正常导入编译,下图中给的信息可以在GUI安装后的文件夹中一个html网址文件看到,具体和版本不同也不相同,因此具体看你使用的哪个版本。
首先,为了连接GUI,需要先对EVM中的FR6037下载程序,程序在安装后的以下路径:
下载工具可以使用CCS指定下载文件或者UniFlash.然后进行上位机的连接操作:
在option中选择FR6047 水表,然后OK。
再点击Communications中的connect,如下图所示,下面有这个标记表明连接成功。这时你就可以对MCU内部参数进行配置和调试了。
下面我们来分析以下每个参数代表的意思:
- Transmit frequency: 换能器工作频率,一般水表的再1MHz这个时换能器的参数。
- Gap between pulse start and ADC capture: 从发送脉冲波到开启ADC采样的时间。
- Number of Pulses: 发送的脉冲个数,这个脉冲是去启动换能器去发送超声波信号的。
- UPS and DNS Gap: 通道1发送 到通道2发送之间的间隔。
- UPS0 to UPS1 Gap: 一个通道发送脉冲波的时间间隔。
- GUI Based Gain Control: 基本放大增益,MCU内部有一个可调的放大器,用于放大接收到的回波信号的。
- Meter Constant: 水表常数,就是前面原理中所计算的那个Area常数,这个建议大家还是通过测试得到,因为计算的太理想化,误差较大。
然后让我们看第二页:Advanced Parameters
这一块里面也有一堆参数,但是我就不每个都讲了,大家可以从这个链接中看到每个参数的含义:
这个文件 :C:\ti\msp\USS_02_30_00_03\USS\docs\UserGuide\UserGuide\ch_config.html
PS:可能根据你安装的位置不同,有所区别。
说一下主要的参数:
- USSXT:就是前面硬件电路中提到的接的晶振频率,8000KHz = 8MHz
- Signal Sampling Frequency : ADC的采样频率,采样频率越高 波形越详细,但是占用内存越大,默认即可。
- Capture Duration : ADC采样的时间,这个和脉冲数有关系,如果脉冲数多了 这个需要放大一点,保证能猜到完成的回波形状。
- 其他的参数无非是一些算法选择,零漂设置,启动ADC PGA时间等一堆,建议大家 直接默认。
参数配置完之后,可以看到下面五个按键:
- Request Update :讲参数更新到MCU中
- Save Configuration :保存参数
- Load Configuration :加载参数
- Reset Values :复位参数设置
- Generate Headers:生成头文件
这些里面可能需要讲的一个就是生成头文件了,点击后,你会发现生成了下面三个文件,这三个文件起始就是你配置的参数,讲这三个文件替换掉CODE中相应的文件 编译下载就可以更新到MCU内部了。
下面我们说一下GUI其他界面:
如下图所示是Waveforms界面,可以实时显示绝对飞行时间和相对飞行时间以及水的流量。
点击进入ADC Capture界面,这个界面比较关键,这个显示的额就是接收到的超声回波,这个波形的好坏决定了检测的精度。如下图所示:
这个波形就比较好,显示了T1发送T2接收和T2发送T1接收的波形,一般情况下纵坐标需要在几百以上,这样有利于算法检测。可以看出,得到的回波,首先是换能器起振最后完全震荡起来,最后关闭的过程,利用这个过程,我们就可以计算绝对飞行时间和相对飞行时间了。
其他的界面,使用到的频率比较低,我就不介绍了,大家有兴趣的话,可以在GUI及CODE这两个安装目录中找到相关的网页文件。PS:推荐大家看官方文件,比较详细而且权威。
下面 我们讲以下这个USS测量模块的算法思想:
TI的EVM-FR6047计算出来的流量精度很高,高于目前市场上的几块相似产品,核心有两块:
- FR6047单芯片解决方案,讲很多超声波发送接收电路集成到了芯片中,稳定,精度高。
- 算法:求解相对飞行时间的算法较为精确。(这一块具体实现是lib文件,源程序不对外开放,但是用户可以使用)
首先,求绝对飞行时间,也就是T12和T21,就是发送超声波开始计时,收到超声波回波后结束计时,记录下这个时间差,核心载入如何检测到回波,这个TI算法采用检测回波包络的方法,一般检测到包络的峰值点50%即可认为检测到了回波。这个算法很正常,中规中矩。
其次,对于相对飞行时间,delta T = T12 – T21,如果使用上面计算出来的T12和T21带进去计算,会导致出现累计误差,精度较低,因此TI采用了相似性计算的方法去计算这个delta T。
如上图所示,收到两个回波后,首先先对回波进行处理,拟合三角函数关系,然后讲两个回波进行相似度计算,找到最大相似的点,这个时刻两个波形的横坐标只差即可得到相对飞行时间。
好了,MSP430FR6047的水表解决方案的大致内容已经全部描述完了,总结一下:
- 你需要EVM-FR6047板子,换能器,硬件
- 你需要安装GUI COD程序
- 在GUI上进行参数设置(一般默认就行),然后可以生成头文件,替换到code中的文件,编译下载就可以开发自己的产品
最后一句建议,关于这些 有哪些不懂的 第一反应要去查看GUI和CODE安装目录,里面有好几个网页文件,网页里信息很多,讲的很详细,而且很权威,总的一句话 官方文件比什么第三方都好!
Section 2:使用MSP430FR6043去设计智能气表。
上面对MSP430FR6047使用方法讲的比较详细了,FR6043方法基本相同,不同点我会着重讲一下,其他步骤直接参考FR6047的水表配置。EVM430-FR6043
首先软件需要下载的:
http://software-dl.ti.com/msp430/msp430_public_sw/mcu/msp430/USSSWLib/USSSWLibGas/latest/index_FDS.html
GUI : 和FR6047一样的。
CODE Link :http://software-dl.ti.com/msp430/msp430_public_sw/mcu/msp430/USSSWLib/USSSWLibGas/latest/exports/UltrasonicGasFR6043_02_30_00_01_windows_installer.exe
硬件板子呢,长这个样子:
连上气表换能器之后呢,是这个样子:
讲一下区别:
FR6043内部的超声波USS模块支持扫频功能,何为扫频功能呢:也就是给换能器驱动的频率在变化,有个范围,可以在GUI中设置,这个也就是为什么FR6043既能做水表也能做气表的原因。因为超声波在空气总衰减比较快,所以固定频率的话 效果较差,当然了,也有内部USS设计的区别,不仅仅是这个点。
主要区别:硬件电路图:http://www.ti.com/lit/pdf/tidrys5
我们只看超声波发送采集这一块:
你会发现,虽然有两路通道CH0和CH1,但是实际电路中使用了模拟开关切换的,仅仅使用了CH0,估计这个是处于一致性的考虑吧,这样能保证驱动两个换能器和接收波形是电路走线一致,减少误差吧。
其次使用上位机时 也有点区别:如下图所示,这里要选用F1 to F2 Sweep,即扫频功能,一般气表换能器的工作频率时200KHz和500KHz,因此针对200KHz的可以设置成180-220扫频。
然后其次就是在生成头文件过程中,生成的文件不再是水表那种三个文件,好像没有三个,具体看实际结果吧,不够最后操作都是一样的,替换掉CODE中对应的文件,编译下载到MCU中。
PS : 附上一些问题的解决方法:
- ADC波形不对:看看换能器正负有没有接反,波形有多大,换能器有没有起振,用示波器测一下驱动波形看看是否正确。
- 得不到正确的TOF:参数配置,参数配置,不能乱配,在安装目录里有网页文件描述每个参数的范围,同时每个参数之间也有协调,比如脉冲数和采样时间。
- ADC波形:这个有三个变量:发送到采样时间间隔,脉冲数,采样时间。根据波形判断哪个参数不合适,这个分析起来很简单。
- 连接不上GUI,看看程序有没有下载错,板子上I2C先有没有接,GUI中MCU类型及表的类型有没有选错。
- LCD不显示:这个程序中关闭了LCD显示,因此不显示正常,你可以自己修改程序开启。