ES32H040x水位检测水位检测原理

在洗衣机家电中,一个可靠的水位检测系统是必须的。

常用的洗衣机水位信号状态有空桶,低水量,中水量,高水量,满水五种水位信号,水位检测电路将不同信号给至洗衣机的控制系统,以备洗衣机下一步的动作。

传统的常用洗衣机的检测系统如下示意图:

标压和低压内存性能测试(工程师笔记ES32H040x水位检测)(1)

如图示,当洗衣机中的水进入气路时,气路中的空气受到挤压,挤压程度与洗衣机里水位高低有直接的关系。

与气路相接的传感器模块其实为一个LC电路,气压会推动磁芯棒进入线圈,从而改变线圈上的电感L值。

此系统配合传统芯片4069(反向器)构成震荡电路,水位的变化会让磁芯产生位移,从而导致电感L值变化,进而引起系统LC震荡电路的频率变化,震荡电路经经微控制器MCU检测出频率的变化从而反算出水位位置。

ES32H040x系列产品是东软载波微电子推出的一款集成了水位检测电路的32位M0 MCU。

芯片中集成了上述类4069的电路,使得洗衣机上的水位传感器能够自主震荡起来。

标压和低压内存性能测试(工程师笔记ES32H040x水位检测)(2)

如何使检测结果更准确

接下来的内容将介绍怎样使得检测的结果更准确,怎样可以做到检测10档水位的检测,做到10档的水位检测需要满足什么条件,以及如何实现。

标压和低压内存性能测试(工程师笔记ES32H040x水位检测)(3)

首先分析几种主流传感器,主要区别为检测中心频率的不同,有20KHz的也有40KHz的,在不同水位的条件下,频率有一定的偏移,因此影响水位检测精度的主要参数为测量震动频率的系统时钟的精度,以及测量精度和计算精度。

从市面上几种传感器参数看,难度最大的为一个能检测10 2级水位的传感器,我们这里以此传感器为标本提取参数,以此水位传感器反推对我们的的MCU的时钟精度要求。

其中一水位传感器参数如下:

水位状态

检测频率

L0(空桶)

41.2 KHz

L1

40.6 KHz

L2

40.3 KHz

L3

40.0 KHz

L4

39.7 KHz

L5

39.5 KHz

L6

39.3 KHz

L7

39.1 KHz

L8

38.9 KHz

L9

38.7 KHz

L10

38.5 KHz

补水

38.7 KHz

最小档位差为0.2KHz,因此能可靠区分出来需要0.1KHz以内的精度,40K的频率控制在正负0.1KHz,有此反推,24M OSC精度需要控制在正负0.1×24M/40K=60KHz,24M OSC精度换算为120K/24M=0.5%,24M OSC需要控制为正负0.25%。

采用另一块传感器仅五档(3 2档)水位参考:

水位状态

检测频率

L0 (初始水位)

42.3 KHz

L1

41.7 KHz

L2

41.2 KHz

L3

40.8 KHz

L4 (溢水)

36.5 KHz

同样原理换算至24M精度需求为0.45K/40K=1.125%以内,24M OSC需要控制为正负0.56%。

水位检测模块为保证水位检测精度,需要控制OSC精度。目前主流MCU内部晶体很难控制在这个数值范围内,一般内晶的误差会超过1%。

不排除档位少的传感器,在经过空桶校准后可用的情况,但从技术角度很难控制,所以用来做水位检测还是建议使用外部晶振(外晶精度一般在正负20PPM,精度足够)。

采用40K的传感器,每个波形的周期大致为25uS。此时必须使用高频率的时钟来计数运算,从而提升测量的精度。

ES32H040x的主频最高可以达到48MHz,这样水位传感器的一个周期可以计数25×48=1200,如果计数多1或少1,反推过来的频率产生的误差为(以少1为例)48×1000000us/1199=40033.36因此在MCU系统中测量周期的计数误差会是33Hz的整数倍。

以上述10档水位传感器的标准,误差不能超过100Hz,因此周期计数范围波动不能超过3,这时候的MCU的舍入误差影响也是比较大的。

我们可以从以下几个方面,继续控制采样计数的精度:1.采样多次求平均值。2.一次计很多次脉冲。3.计算时注意保留小数部分。

采用多次求平均的ES32H040x的实现:ES32H040x支持水位检测模块输入后通过外设互联后触发一个16位TIMER的捕捉中断服务,用来捕捉脉冲的周期,然后经多次采样后再平均。此种方式程序简单,但会导致中断频繁,占用MCU大量运行资源,并不建议使用。

建议方式一:

使用DMA传输数据,多次采样仅触发一次中断。

例如,使用DMA传输捕获到的水位数据,且每8个脉冲执行一次捕获采样(周期×8),采样1001次后DMA中断,总共得到1000个数据(8000个脉冲),此时的时间消耗为8/40 =200MS。然后进行数据处理,按大小排序后取中间的800个数据再取平均值。

注意数据量较大的除法要保留小数部分;使用浮点数运算,以免产生求整数的舍入误差;最终的结果保留至小数点后2位数据。

建议方式二:

增加每一次捕获采样捕获的脉冲数。如上例每8个脉冲执行一次捕获采样,虽然芯片的捕获功能不足以捕获8000个脉冲执行一次捕获采样,但可以用另一种方式实现。

同样也是使用DMA功能,用来采8000个脉冲后产生中断结束一次批量采样,只是要使用另外一组定时器用来计数。

从接到第一帧数据中断开始计时,计8001个脉冲的周期内的OSC个数。

使用16位的定时器,进定时中断时把计数转存在一个长型变量里进行累加,这样当DMA中断时(8000个脉冲完成)长型变量里计数 现有定时器中的计数值为8000个脉冲的OSC个数,再然后直接除去8000,计数周期值注意采用浮点数保留2位小数。

经过以上处理得到的结果将是一个稳定的数据。8000个脉冲周期仅200MS,对洗衣机来说每秒或几秒钟一次的数据频次已经足够。并不会导致采样多次造成的数据输出时间过长。

总结

ES32H040x芯片的水位检测模式分二线制与三线制,无论哪种方式,上述的计算方式都适用。

另外,ES32H040x具有128K Byte Flash,8K Bytes Ram空间,LQFP48封装,31路增强型触摸检测通道,支持LCD 与LED显示驱动,16通道12位ADC及多路TIMER,RTC功能,2路IIC,2路SPI,1路UART,2路USART,1路LPUART。

,