在这篇文章中,我们研究一下水流量传感器的工作原理,包括:
水流传感器的简短说明。
霍尔水流量传感器的工作原理。
如何使用水流传感器(硬件和代码)。
有关计算公式的详细信息
1. 什么是水流传感器(仪表)?
我们使用水流传感器来测量水流速。水流速是每单位时间通过的流体体积。人们经常使用水流传感器进行热水器自动控制、DIY 咖啡机、自动售货机等。
原理各异的流量传感器种类繁多,最常见的流量传感器是基于霍尔器件的。例如,最经典的水流传感器 YF-S401和 YF-S201 都依赖于霍尔传感器。
那么,霍尔水流量传感器是如何工作的呢?
2. 水流量传感器是如何工作的?
为了解释水流是如何工作的,我们打开盖子看一看。
YF-S401 的所有组件
水流量传感器工作原理
里面很简单。主要组件是霍尔效应传感器、涡轮和磁体。水从进水口流入,从出水口流出。水流驱动轮子转动,轮子上的磁铁也随之转动。磁场旋转会触发霍尔传感器,霍尔传感器输出高低电平方波(脉冲)。
水流量传感器工作原理
对于轮子的每一轮,流经的水量是一定量的,输出的方波数量也是如此。因此,我们可以通过计算方波(脉冲)的数量来计算水的流动。
3. 如何将水流传感器与stm32F10RB 一起使用。3.1 硬件连接
对于 YF 系列,有 3 根电线:
红色代表 Vcc
黑色 GND
黄色表示脉冲输出。
我们使用 一个引脚通过外部中断来检测水流量传感器输出的脉冲。
3.2 软件代码
当然,我们可以在 循环中中使用来读取水流量传感器的输出。每当读取高电平时,计数数字加 1。但是,这种方法不是实时的,并且程序每次执行都需要一定的等待时间,在此期间不会检测到新的脉冲。对于这种实时要求苛刻的应用程序,我们通常使用 interrupt。每当检测到脉冲的上升沿时,就会触发一次中断,计数加 1。
void FlowSetup(void) //初始化数据 { if(StrFlow.Ctr_Relay == 1) { currentTime = StrFlow.Cnt; cloopTime = currentTime; StrFlow.TotalmL = 0; } } void Flowloop (void) { currentTime = StrFlow.Cnt; // 每S计算流量,流速 if((StrFlow.SetmL) > 10 && (StrFlow.TotalmL> StrFlow.SetmL ) ) { GPIO_PinWrite (GPIOA, 8, Switch_Relay(false)); StrFlow.step = 1; return; } if(currentTime >= (cloopTime + 1000)) { cloopTime = currentTime; // Updates cloopTime StrFlow.QmL = (uint32_t)(StrFlow.Flow_freq *1000/(4*7990)); StrFlow.Flow_freq = 0; // Reset Counter StrFlow.TotalmL +=StrFlow.QmL; } }
我们可以通过串口调试工具在水流过时,将流量值打印到相应的窗口,
或者用OLED来显示。
水流传感器的计算公式
在代码部分,我们使用了下面的公式,那么这个公式是怎么来的呢?
YF 系列使用具有六个交替磁极的环形磁铁,因此每转一圈,都会产生三个低电平和三个高电平,即三个脉冲。
假设 YF-S401,每流出一升水,霍尔传感器就会输出 1450 个脉冲。
因此每次脉冲意味着 1/1450 升水流过。
我们将一定时间t(unit s)流经水流传感器的液体总体积取为(单位 L),检测到的脉冲总数为N。然后我们得到:
V_total(L) = N* 1/1450(L)
此外,流经水流传感器的流体总体积等于流速乘以时间(单位 s):
V_total(L) = Q(L/s)*t(s)
因此,我们得到:
N* 1/1450 = Q(L/s)*t(s) N/t = 1450 * Q(L/s)
N/t恰好是 frequency ,所以:
f = 1450*Q(L/s);
Q(L/s) = f/1450;