从带有两个输入的机械水表计数脉冲

时间:2016-11-02 13:18:44

标签: c microcontroller stm32

我想用STM32L微控制器计算机械水表的脉冲数。水表的输出来自两个REED开关。

开关的操作解释如下:

  • 两个簧片开关分别在寄存器上运行时装在指针或齿轮上的磁铁“ON”或“OFF”,但不能同时“接通”。
  • 两个簧片开关在一轮指针中操作两个“ON”和两个“OFF”/齿轮意味着一个信号输出。

如何读入两个输入并能够计算C中的脉冲数?注意:1脉冲= 100升。

2 个答案:

答案 0 :(得分:0)

我不确定你真正在问什么,因为无论你是民意调查还是使用边缘触发的中断,你似乎都会这么简单。主要问题是去除开关信号。对于去抖动,您应该确定您的仪表的最大流量,您不需要直接关注,但它可以让您计算最大开关周期。使用最小开启或关闭时间的一些重要部分来执行去抖动。

答案 1 :(得分:0)

将两个开关分开180度,使得一次只能制作一个开关,就是不需要开关去抖动。

实际上,代码需要更复杂,但基本算法可以用这个来表示:

while(1) {
    while(switchA() == 0);          // wait for switch A to be made
    litres += 100;                  // clock up unit volume
    display(litres);                // tell the user
    while(switchB() == 0);          // wait for switch B to be made
}

当磁簧靠近磁铁时,来自簧片开关的脉冲数无关紧要 - 除了第一个脉冲之外的所有脉冲都会被忽略,因为算法会查看另一个开关。