如何清理嘈杂的信号?

电器工程 图片 脉宽调制 噪音
2022-01-04 05:48:09

我正在通过 PIC16F684 控制 4 针 PWM PC 风扇,风扇速度由接近传感器的 ADC 读数驱动。这一切正常。

我最初并不打算使用风扇的转速计输出,但由于它可用,我一直在用我的'示波器监控它,只是为了看看我在接近度和风扇速度之间的映射是否正常工作。

现在,我注意到的是,当 PWM 以 100% 的速度运行风扇时,转速信号(这是一个通过 10K 电阻上拉的开漏极)非常干净:

快速清洁

但是,当我以低于 100% 的速度运行时,它会很吵:

肮脏的

放大噪音:

快速脏放大

我猜它受到 PWM 信号的影响,但我想了解为什么以及如何在将来有必要时对其进行清理。我真的很感兴趣当你看到这样的噪音时你应该做什么,你如何找到原因以及如何“修复”它。示波器成功触发了,所以我想知道我是否只是将它馈送到 PIC (RA2) 上的外部中断引脚,这是一个具有 CMOS 电平的施密特触发器输入,然后我就不会“看到”噪音,我例如,可以从另一个引脚回显干净的信号以使 LED 或其他东西褪色。

那么有人可以概括地解释如何识别和纠正噪声信号吗?或者,如果这太广泛了,也许只是这个特殊的问题?此外,如果我的电路有任何问题,也很高兴知道。在下面的示意图中,我显示的信号是电路左侧的 TACH 输入:

示意图

更新
在@MichaelKaras 和@techydude 的有用建议之后,我通过将Q2 完全从电路中移除并直接将风扇接地来排除Q2 是任何问题的根源。对噪音没有明显影响。

因此,我随后对 RA2 上的外部中断进行了编码,以从备用引脚(在本例中为 RA1)回显“已清除”信号,这有很大帮助,但由于错误中断仍然闪烁。(所以我将中断设置为捕获上升沿,然后在触发时切换到下降沿,反之亦然,相应地设置/重置 RA1)。

但是,在 R3 上添加一个 100nF 电容器(作为@techydude 建议的一部分)之后,我现在得到了更稳定的输出。下面的截图是通过施密特触发的 RA2 输入和 RA1 上的重新输出进行清洁后的 TACH 信号:

快速清洁

4个回答

关于您的原理图:

一切看起来都很好,你可以将R2增加到10k甚至100k,MOST的电容很小,FAN的旋转惯性比MOST的关闭延迟要大得多,甚至可能有1M。这样你的 100R 的位置就无关紧要了,而且你不会浪费任何 mA。如果您从不将 de uC 置于复位状态,从技术上讲甚至根本不需要,因为您的 uC 会主动将其拉高或拉低。

对于 PWM 信号,您可以查看数据表是否允许外部上拉至 12V,尽管我怀疑这两种方式都会产生很大的不同。

关于噪音:

编辑:我误读了你的千赫图,如果你想到它,那是愚蠢的,它是赫兹。我的一些故事会发生一些变化(例如关于数字工作需要 MHz 的讨论),但总体思路仍然存在。

我将保留整个帖子,但是对于具有 30kHz 噪声的 100Hz 信号,而不是具有 >5MHz 噪声的 100kHz(也没有真正意义,是吗?),您可能会增加与电容器相互作用的电阻器增加 10 倍,并将电容器增加 50 至 100 倍。在所有示例中,这将使您的滤波频率降低 1000 倍。但也可以将电容器增加 10 到 20 倍,以获得更锐利的边缘或更快的响应信号,因为 30kHz 与 100Hz 相差甚远。

所以考虑这篇文章是为高频而写的,并缩小这些想法,使它们更容易实现!(尤其是 3 中的数字拒绝。)

编辑结束

由于您通过降噪方法制作了一个很好的用例,我将尝试制作一个适用于您的情况的用例。

对于任何阅读的人,请注意:

这仅与数字信号上的噪声有关

在数字信号中,您可以假设只有两个电压您对“开”和“关”感兴趣。介于两者之间的任何事情都是毫无意义的,属于噪音或错误。在模拟信号中,您需要了解每个电压电平,并且需要对负载 C、L 等进行一些实际滤波。

信号中的一个问题是高电平的负噪声尖峰和低电平的正噪声尖峰非常接近,所以一个简单的标准触发器,即使是可调电平也不能绝对保证你永远不会得到使困惑。


您的选择:

  1. 改变偏见
  2. 更改电压电平
  3. 添加“慢”滞后
  4. 过滤掉噪音

1. 改变偏见:

正面有非常低的负面尖峰,那是因为你的引体向上无法从噪音中获胜。您可以尝试的最简单的方法是降低阻力。存在这样的风险,这只会增加关闭信号的尖峰,因此这可能并不总是有效。但是很有可能它会给你一些尖峰之间的空间来设置一个简单的滞后。

2. 改变电压等级

如果风扇允许,您可以轻松地将 Tacho 更改为更高的电压电平并添加中间状态:

示意图

模拟此电路- 使用CircuitLab创建的原理图

现在,高尖峰和低尖峰之间可能有足够的空间来确保 MOST 始终开启,即使存在负尖峰并且始终关闭,即使存在正尖峰也是如此。在新情况下可能需要一些二极管、齐纳二极管或电阻器才能获得设定点,但如果负信号上的尖峰保持不变,它们不应该触发 MOSFET,只要你不将其替换为栅极阈值低于 2V 的器件。

3.添加“慢”滞后:

当您知道尖峰噪声信号至少比您感兴趣的信号大一个数量级时,这是一种常用的技巧。它会稍微延迟信号,因此不能在精确时刻的情况下使用开/关变化很重要。

但是对于您只想知道它的形状或频率的信号,这是一种非常稳健的方法。它基本上在电压超过阈值时开始触发,但只有在它停留在那里时才会完成该动作。有很多方法可以构建一个。

您可以在控制器中执行此操作(这在组件计数方面最简单):您可以在侧面触发,然后以足够的速度采样更多的值以查看噪声尖峰之间的高点,但不要因为错过整个低点而感到困惑。然后根据对信号和噪声的了解做出预定义的判断。例如,如果您可以在 10MHz 采样,您可以捕获 50 个采样并确保如果您采用多数规则,则不会忽略 100kHz 的最高频率。即:至少需要 25 低才能使其实际低。您的尖峰非常细,而且大部分时间都是原始信号,因此可以正常工作,但是可以调整多数的数量。这也适用于 1MHz 和 6 或 7 个样本,但它不会占实际多数,因此那里可能再次存在一些风险。

您也可以在外部执行此操作: 但它已经比添加简单过滤器复杂得多,尤其是当您使用 uC 查看结果时,其输入中已经存在一些滞后。但是想想很有趣,所以让我们:

示意图

模拟这个电路

U1 是任何合适的运算放大器或比较器。比较器是更好的切换器,通常具有更好的摆幅,但对于 sub-MHz,具有不错的轨/轨摆幅的运算放大器将很容易做到。

虽然这种类型的滞后可以用至少一个电阻来构建,但这种滞后更容易解释,因此更容易修改。

首先想象一下没有电容器的情况:

首先,看到电阻分压器受 U1 输出的影响,它会通过 20kOhm 的视在电阻将其拉低或高一点。假设U1的正输入是1.1V的电压,输出为0时向下取整,输出为5V时向上取整为3.9V。

如果稳态启动转速计输入为高电平,由于转速计输入的反相特性,U1 的输出将为低电平。因此,由于额外的上拉电阻,负输入将约为 2.3V。由于正输入仅为 1.1V,因此输入需要降至 2.2V 以下,以使负输入看到较低的电压并使输出翻转。

当输出翻转时,负输入会看到3.6V(因为此时输入信号是2.2V,U1的输出是5V,所以它们的中间,由10k电阻制成约3.6V),但正输入将从 1.1V 翻转到 3.9V,因此负极仍低于正极输入,输出将保持 5V。

如果信号现在迅速“中止”并重新翻转,U1 的输出将很快再次恢复,但尖峰已经下降到 2.2V 以下,所以这总比没有好。

如果信号进一步下降到 0,稳定的情况只会变得更强,负输入将下降到 2.5V(因为我们假设 FAN 的转速计足够强,可以下拉),正输入将保持在 3.9 左右五。

现在信号需要升高到 2.7V 以上才能使输出反向翻转。很可能 95% 的峰值已经被忽略了。

添加电容:

使用电容器,输入信号需要提供足够的能量,以便有足够的时间对电容器进行充电或放电。实际上,这已经是一个 RC 过滤器。任何快速下降然后恢复的尖峰都无法使电容器放电。

C 的值当然取决于源信号和噪声信号。对于 100kHz 源信号与 1us 尖峰持续时间,我将球停在 510pF 上,但我并没有真正做太多的数学运算,这只是基于 RC 时间的直觉,这可能接近可行的方法。

4.过滤掉噪音

这有点像过滤模拟信号。您可以使用简单的 RC 网络,如上一节所述:

示意图

模拟这个电路

由于噪声尖峰等于或小于 1us,它们不会对电容器上的电压产生非常显着的变化,因为其 RC 时间为 5us。这意味着尖峰中的能量被拉平到平均水平。由于您看到尖峰的高点和低点,平均值甚至可能非常接近 0V 和 5V,但这只能通过更好的图片或实验来说明。由于您将其馈送到 uC 引脚,因此 RC 时间可能足以将其视为高电平或低电平。由于上拉电阻引起的充电慢于放电,这将产生小的失真。对值进行一些调整可能会产生可以忽略不计的结果。

如果这还不够,您可以添加更多组件,但是当您的主要噪声比您的信号“快”至少 10 倍时,您很快就会过度使用它。

您可以添加一个与电阻串联的 4.7uH 电感器,以平滑更多高频侧翼,甚至可能是 10uH。

但老实说,在“将其馈送到 uC”的情况下,在您的信号中尝试 L 的唯一原因是找到一个平衡,其中 R 大,C 小,L 只是有助于平滑一些侧面,因此 R2/R1 将足够小以忽略上升和下降时间的差异。例如 33k 的 R1、150pF 的 C 和与 56uH 的 R1 串联的 L。或者可能是铁氧体磁珠而不是电感器,这在一定程度上取决于尖峰的锐度。

但我会说,我已经想多了。

来自风扇转速计的这种噪声很常见,因为风扇中产生转速计输出的电路(通常包括霍尔效应传感器)本身会在您的 PWM 频率(当您的 PWM 输出处于其他任何状态时)被斩波开/关大于 100%-On),而不仅仅是电机本身的电源。当然,它们会有一些电容来平滑该电路的供电,但是假设有一个 12V 风扇电源,只要有足够的电容在最小 PWM 关闭周期之间保持几伏,就足以驱动霍尔-影响传感器和上拉转速计输出(如果风扇在转速计输出上包括自己的上拉),以提供可恢复的输出信号。是的,当你对他们的电源进行 PWM 时,风扇会很乱。一些风扇提供独立于 +12V 电源的 PWM 速度输入。

您的 PWM 似乎约为 27kHz。所以在这种特定情况下的好处是你的转速计输出@ 100% 输出看起来大约是 800Hz,这是你的 PWM 频率的 < 1/30,所以过滤这个转速计输出以消除大部分 PWM 噪声是容易且值得做。这里已经很晚了,所以我通过 CBF 进行计算,但是因为它是漏极开路的,而且它是你的上拉电源电压(在风扇中)被 PWM 干扰,转速计和 +12V 轨道之间的一个上限(不是 PWM风扇驱动电路的输出)可能是比转速计接地帽更好的选择。试试看。从适当电压的 100n 陶瓷帽开始,看看它的外观。

使用 PIC 上的 Schmigger 输入,您甚至可以在不对该转速输出进行任何过滤的情况下将其放入您的 PIC 中,但您拥有的频率差异可以轻松地让您在清理它方面走很长一段路向上。

您处理来自风扇的转速计信号的一个可能问题是:如果风扇内部使用 10k 将其拉到 +12(有些会,有些不会)并且您还会将转速计信号拉到您的+5V 轨,那你实际上是把它拉下来了!有多种电路配置可以解决这个问题,具体取决于风扇电源电压、上拉的强度等。尝试用万用表测量它并告诉我们。

TACH 信号上可能的噪声源可能是由于 IRF150 FET 的导通阻抗不够低。这可能是由于 FET RdsON 相当高或 FET 在提供的栅极驱动电压下没有完全导通。

当风扇电流随着 PWM 信号打开和​​关闭时,FET 电阻上会出现下降,这会导致风扇的“GND”参考电压上下波动,并转化为 TACH 信号上的噪声。

您可以通过将示波器 GND 引线放在 FET 漏极上然后查看 TACH 信号来检查我所描述的效果是否属于这种情况。信号看起来会干净很多。

解决方案是在提供系统提供的栅极驱动器时选择 RdsON 低得多的 FET。

另一个可能的想法是使用 P-FET 来切换风扇的 +12V 引线而不是 GND 引线。

请注意,您使用的栅极电阻器布置确实会导致您失去一些潜在的栅极驱动。将 1K 电阻移到 100ohm 的另一侧。

这听起来像是低通滤波器的工作。您需要将 f 1的有用信号保持在 1 kHz 左右,并去除 f 2的有问题的信号,使其接近 25 kHz。截止频率可以选择为f 1和 f 2的几何平均值(次优但简单):

f c =sqrt(1*25) = 5 kHz。

假设一个简单的 RC 滤波器就足够了,并且 TACH 电路中已经有了电阻(R 3 = 10 kOhm),则应计算适当的电容值以匹配 5 kHz时间成本

在此处输入图像描述

C = 1/(2 * pi * fc * R)=1/(6.28 * 5000 * 10000)=3.2*10 -9 F。

所以你需要做的就是在 TACH 线和地之间焊接一个 3nF 的电容。它将高频噪声衰减 20 倍或更多,这对于您的应用来说应该足够了。