通过RC滤波器去噪

使用电阻和电容脱扣

在debounce via Software项目中,我们学习了如何用软件在电路中debounce按钮。解决这个问题的其他方法也存在。在这个项目中,我们将研究如何使用电阻和电容使按钮电路脱扣钢筋混凝土滤波器(阻容滤波器)。这里的关键部件是电容器,这是一种利用电荷储存能量的设备。在我们开始之前,了解电容器的工作原理是很重要的,因此可以通过相关材料链接阅读更多关于电容器的资料。电容器之所以能很好地去振,是因为它限制了电压在一段时间内变化的速度。本质上,电容器快速充电和放电超过每一个电压尖峰,平滑的按钮反弹。取决于电容充电的速度,按钮的反弹应该得到缓解。


库存

  • 1领导
  • 1两口的按钮
  • 1 220Ω电阻器(红色、红色、棕色)
  • 2个10kΩ电阻(棕色、黑色、橙色)
  • 1个10μF电解电容器

步骤1:规划赛道

要正确地断开按钮电路,我们不能单独使用一个电容器;我们还必须使用电阻器。在这个电路中,电阻和电容的组合称为电阻和电容的组合钢筋混凝土过滤器。钢筋混凝土滤波器可用来滤除不同频率的电变化。一个设计得当的钢筋混凝土过滤器可以用来过滤特定的声音频率(表示为电子信号)被发送到扬声器。然而,这有点超出了我们项目的范围。相反,我们将专注于充放电时间钢筋混凝土电路。我们可以通过选择适当的电阻和电容值来控制电压的变化速率,从而得到一个可行的时间常数。对于这个项目,我们将使用一个10KΩ电阻和一个10µF电容。有关时间常数以及R和C值如何确定的更多信息,请访问相关材料部分提供的链接。


第二步:建立赛道

选择了电阻器和电容值后,我们就可以开始把电路组装在一起了。我们将使用相同的电路,我们第一次使用的debouting via Software。在那个项目中,按钮的反弹会引起“噪音”,偶尔会造成领导暗淡地发光,而不是眨眼。增加我们的钢筋混凝土过滤器解决了这个问题。如图1所示,其中说明了修改电路的各个步骤。

修改电路

  1. 将电线从引脚7连接到按钮的右侧。
    • 注意:按钮的右侧对应于这里的“顶部”按钮。这意味着两个总是电连接的按钮腿是垂直方向的,以便它们跨越列之间的山谷。
  2. 将5V电源连接到按钮的限流电阻上。
  3. 将10µF电容和10 kΩ电阻连接到按钮右侧。
  4. 连接接地脚(接地)到电容器和电阻器的右侧

图1所示。具有RC滤波器的可训练延迟电路。


测试RC滤波器的去振特性

现在我们已经建立了电路,你可以测试它的衰减特性钢筋混凝土过滤器。将USB线插入你的chipKIT板,并使用debounce via Software中的代码编程:

const int btnPin = 7;//按钮引脚编号const int ledPin = 8;// LED引脚编号int currentLedState;//输出LED引脚的当前和先前状态int previousLedState;int currentBtnState;//当前和以前的状态输入按钮引脚int previousBtnState;无符号整型数;// LED状态上升边计数unsigned int lastDebounceTime;unsigned int debounceDelay;// void setup() {pinMode(btnPin, INPUT); pinMode(ledPin, OUTPUT); currentLedState = LOW; previousLedState = LOW; currentBtnState = LOW; previousBtnState = LOW; count = 0; lastDebounceTime = 0; debounceDelay = 50; Serial.begin(9600); } void loop() { currentBtnState = digitalRead(btnPin); if (currentBtnState != previousBtnState) { lastDebounceTime = millis(); // every time the button state changes, get the time of that change } if ((millis() - lastDebounceTime) > debounceDelay) { /* *if the difference between the last time the button changed is greater *than the delay period, it is safe to say *the button is in the final steady state, so set the LED state to *button state. */ currentLedState = currentBtnState; } // ********************* start functional code ************************************** // verification code, and a button press counter if ((previousLedState == LOW) && (currentLedState == HIGH)) { //count rising edges count++; Serial.println(count); } // ********************* end functional code ************************************** // set current states to previous states digitalWrite(ledPin, currentLedState); previousBtnState = currentBtnState; previousLedState = currentLedState; }

一旦你的董事会被编程,外部领导应该开始闪烁。

从电路中取出电容器;在电路有电的时候这样做是可以的。因为没有东西可以通过这个间隙,更多的电流将被分流通过电阻并联的电容。同样地,一旦电容器在电路中充电,就不允许任何电流通过它。在这一点上,电容器将本质上作为一个间隙。当你移开电容器后,按下按钮足够多次,最终会导致按钮弹跳,使领导暗淡地发光(而不是眨眼)。轻击或轻弹按钮有效地完成同样的事情。一旦你能够复制一致的反弹,试着把电容插回电路。一定要把电容器放回如图1所示的位置(电容器上的白色条纹端子接地).如果你用错误的极性重新连接电容器,它可能会损坏你的组件。有了电容的地方,你应该不能让按钮反弹,即使你轻弹它或轻拍它。

要了解电路的实际工作情况,请查看图2。它显示了按钮信号看起来像没有电容器从钢筋混凝土过滤器。在图3中,同样的信号被放大了100倍,这样你就可以清楚地看到按钮弹跳引起的噪音。最后,图4描述了电路中电容被替换后按钮信号的样子。

图2。无电容按钮信号。

图3。在100倍放大时,按钮信号出现反弹噪声。

图4。电容对按钮信号的影响。

正如你所看到的,电容器极大地限制了电压变化的速率,特别是与反弹噪声的大小相比。考虑到钢筋混凝土过滤器,我们的电容器肯定是太大的处理按钮噪音单独。这并不奇怪。的钢筋混凝土我们所选择的数值是为了减少弹跳噪音和任何其他由点击/轻击引起的噪音。电路是这样设计的,因为它更容易看到滤波器的效果。一个更小的电容器可以用来专门针对反弹噪声。