新闻中心

EEPW首页 > 牛人业话 > 电容添加三思而行,加错便会后患无穷

电容添加三思而行,加错便会后患无穷

作者:山竹君时间:2019-10-11来源:电子产品世界收藏

据说在中国,评上了副高职称就算是高级知识分子了。老衲不才,忝列高知一载有余,才慢慢体会到,真正的研发工作需要有一种“理论指导实践,举一便能反三”的范儿。

本文引用地址:http://www.eepw.com.cn/article/201910/405653.htm

比如加这个貌似简单的问题,老衲的同事就栽了好几个跟头。在的加或不加、当加多少的问题上,他并没有遵从理论指导实践的方针路线,而是想当然地瞎干蛮干,事后也只长教训不长经验,碰到其它的场合不能举一反三。

1570772350308480.jpg

现在把它们分享出来,供各位瓜友拍砖。

1

饿了要吃馍,渴了找水喝,有干扰的地方就要加滤波,这种朴素的经验简明有力,深入人心。但是这里面的道道儿还很多,所以有的时候还是会翻车。

几年前,老衲做了个简单的器,控制算法需要用到电机转速信息。

由于使用场景比较简单,电机转速传感器选用的是成本低廉的霍尔传感器,电机每转一周,该传感器输出4个周期的脉冲信号。虽然分辨率比每周都要输出上千个脉冲的QEP单元要低很多,但足以满足应用要求。

电机转速最高每分钟3000转,相当于每秒钟转50圈,对应200个脉冲信号。老衲采用了脉冲计数法计算电机转速,统计一秒内的脉冲个数,根据脉冲个数计算每秒钟转多少圈,然后再换算到每分钟多少转即可。

在这里,我采取了“滑动时间窗”法,将一秒钟分成五个时间窗,两个统计周期之间的时间错位为200毫秒,而不是1秒,这种方式可以增加转速的实时性和准确性。如果瓜友们对这种方法比较感兴趣,可以自行上网查阅,本文篇幅有限,不再赘述。

在这里,脉冲个数的统计很关键。数字脉冲都有上升沿和下降沿,根据这种特性,老衲采用了中断触发方式统计脉冲个数。

显然,如果脉冲输出线上有毛刺,便可能误触发中断,造成统计转速大于实际转速。基于这种朴素的认识,老衲的硬件搭档小A在脉冲输出线上加了个RC滤波。

RC滤波电路如此常见,以至于老衲根本意识不到它还能出问题。

2

老衲一边操作着信号发生器输出方波信号,一边通过仿真器观察一秒内的脉冲统计个数。

但是我很快发现,随着信号频率的增加,脉冲采集功能居然慢慢失效了。架上示波器,发现脉冲数据线上原本陡峭的信号沿变成了缓缓的山坡,从波形上来看,信号还没有爬到山顶就落了下来。

虽然这种情况并不多见,但是天资平平的老衲还是马上意识到这种爬不上去的波形显然是RC网络造成的。在这里,有必要先给大家普及一下RC网络对信号的“延迟作用”。

RC滤波是个延迟环节,延迟时间取决于时间常数(即R*C),以RC滤波网络的输入输出来看,RC时间常数表示的是输出信号电平达到输入信号电平的0.632倍所需的时间。根据计算,经过2个时间常数,输出达到输入的0.86倍,经过3个时间常数,输出达到输入的0.95倍。。一般经过3-5个时间常数后,输出就基本达到了输入电平。

但是现在的波形,脉冲信号经过RC滤波后还没有充到最高电平就开始放电了,显然是因为RC时间常数设置得太长了!

待我把小A叫过来后,他跟我讲述了电容的奇葩计算方法,当时老衲就震惊了。小A说:“最大脉冲频率为200Hz,按照香农采样定理,只要将滤波频率设定在400Hz以上,便可以收到滤波、采样的双重功效。他将滤波频率设定为500Hz,采用普通的RC滤波形式,于是他将R设定为2k、C设定为1uF。”

1570772374854231.jpg

3

嚯,把采样定理都搬出来了,似乎无法从理论上反驳,一开始也把老衲唬的一愣一愣的。但是仔细想想,小A显然混淆了方波脉冲频率和信号最大频率的概念!

234.jpg

采样定理针对的是信号最大频率,但是这里的信号是方波脉冲信号,脉冲频率为200Hz不等于信号中的最大频率成分为200Hz,从理论上讲,数字脉冲包含无穷的信号频率,200Hz只是基波频率,还有二次谐波、三次谐波......

实际上,根据傅里叶变换的知识,等周期、占空比为50%的脉冲信号为“半波信号”,没有偶次谐波分量,只有奇次谐波分量。即该信号有200Hz、600Hz、1000Hz......等正弦分量,其中,三次谐波分量和5次谐波分量还占有比较大的比重。而且,就像在《信号与系统》这门课程的教科书里讲的那样,如果要在实际工程中应用香农定理的话,最好把采样频率设为最大频率的3-5倍,没有按照2倍信号最大频率应用香农定理的。

不过,这里显然不是采样定理的用武之地。要想在理论上解释小A的错误,还得回到RC网络的延迟作用上来。

1570772422454079.gif

按照RC网络时间常数的延迟作用,根据小A的RC取值,时间常数τ=0.002秒,200Hz的方波信号高电平持续0.0025秒,低电平持续0.0025秒,都大大小于2个时间常数,也就是说,当输入高电平持续时间结束时,输出电平还远没有有达到输入电平的0.86倍,经过估算大概还不到0.7倍。

但是按照CMOS电平理论,对于5V信号,4.5-5V之间的信号才会准确地被认定为高电平,0-0.5V之间的确定为低电平。故而,输入高电平持续时间结束时,MCU还没有被触发上升沿中断,所以脉冲采集功能才失效的。

所以,这里真要滤波的话,要把RC时间常数至少设置为高电平持续时间的三分之一到五分之一,按照五分之一计算,时间常数τ=0.0005秒,可以将R设定为5k、C设定为0.1uF。

老衲把小A讲晕后,让他调换了电阻和电容,再次测试果然就没有问题了。

4

但是电容并不是万能的,也并非非用不可。有时候,反而需要在“应该滤波”的地方去掉电容,才能满足具体功能的要求。

比如前两年做了一个遥控器,在接收遥控信号时,便遇到了电容的取舍问题。

还是类似的脉冲信号采集,只是这一次不是统计脉冲个数了,反而需要统计高电平的持续时间、低电平的持续时间,而且信号也不是方波信号了,而是曼彻斯特信号,即以“两高一低”或“两低一高”来表示数字位0和1,这里的“两高一低”指的是两个时间单位的高电平和一个时间单位的低电平。时间单位因遥控器和遥控协议而异,这里测试时为125us。

既然是数字信号采集,既然信号线上可能会受到电磁辐射干扰的影响而出现毛刺,加个电容滤下波似乎也是应有之义。

而且这里的遥控信号的高低电平持续时间都很短,所以老衲采用的RC时间常数很小,R=1k,C=1nF,显然,时间常数τ=1us,已经是一个比较小的数字了,按理说既能起到适当的滤波作用,也基本不会破坏信号的波形。

但是这次,事情却没有那么简单了。因为我发现,加了个RC滤波网络之后,遥控信号有时就接收不准了。

1570772444612591.jpg

正如上面所说,这次要采集的是高电平持续时间和低电平持续时间,既然接收不准了,老衲隐隐约约地觉得,尽管从理论计算上没什么问题,但是这里加的电容显然会破坏电平持续时间的判断。

于是,我把电容取了下来。再一次测试,好使了!

理论计算没问题,加了电容,三个时间常数(3us)后就能触发上升沿中断,对于125us来说,也是一个很小的误差,老衲在程序里已经给出了足够的余量(100us-150us均视为1个时间单位),完全可以“忽视”掉这种误差。

但是无情的事实就摆在面前,用仿真器存储多个高低电平持续时间,确实发现了一些“不标准”的时间长度。显然,老衲忽略掉了什么!

5

小A在一旁沉浸在“苍天啊,大地啊”的哀怨中,老衲却忽然意识到了一个问题:信号线和地平面之间的电容是不是不只有自己所添加的这个1nF!

看着在各个电源(VCC-12V/VCC-5V/VCC-3.3V)入口处的电容,老衲醒悟了过来,电容无处不在,当你接了一个1nF到地平面上时,你也就将信号线纳入了无比苍茫的大地,这里地平面的电容也许是动态的,才造成只会个别得影响、而不是影响所有的高低电平。

这就了然了!不是这个1nF的电容自己有问题,而是把它接进来,就开启了潘多拉的盒子。它后面还跟着一个不断起伏变化的地平面上的电容簇,它就像隐藏在黑幕中的猎人,随时对着遥控信号线射出一记冷枪!

后记

理论指导实践不是一句空话,当理论和实践不相符时,我们要反躬自省,是不是有哪些因素没有考虑到?比如对于电容,我们就应该深深牢记:电容添加三思而行,加错便会后患无穷!



关键词: 电容 电机控制

评论


相关推荐

技术专区

关闭