搜索
bottom↓
回复: 17

单片机软件对固定高频波形低占空比滤波算法探讨与求助,呼叫高手

[复制链接]

出0入0汤圆

发表于 2020-5-7 09:12:38 | 显示全部楼层 |阅读模式
    如图,我需要软件读端口,目前用间隔10ms 采样50次,检测到端口翻转就重新 计时,批量生产时,总是出现很多天偶尔 检测到持续的500MS高电平(这是重点,能每次10ms检测到高电平);
但是实际波形是下图所示,约15kHZ,周期66.66us左右;

    有人说采用固定10ms采样5次即50ms ,记录高低电平次数,低电平次数>高电平次数即认为是低电平,这种读到持续电平的概率降低到 10/1000,但是不理解,欢迎大家探讨;
另外,还有什么办法保证过滤掉其他不规律的杂波呢?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

你熬了10碗粥,别人一桶水倒进去,淘走90碗,剩下10碗给你,你看似没亏,其实你那10碗已经没有之前的裹腹了,人家的一桶水换90碗,继续卖。说白了,通货膨胀就是,你的钱是挣来的,他的钱是印来的,掺和在一起,你的钱就贬值了。

出0入0汤圆

发表于 2020-5-7 09:23:26 | 显示全部楼层
本帖最后由 lcw_swust 于 2020-5-7 09:25 编辑

15kHZ,150个周期就是10ms,完全有可能每次采到高电平。
采样频率不能与信号的频率成整数倍,可以比它高,或使用有变化的采样时间,如10.001ms,10.003ms等等。
话说你这采样率这么低怎么得到占空比?

出0入0汤圆

 楼主| 发表于 2020-5-7 11:46:47 | 显示全部楼层
lcw_swust 发表于 2020-5-7 09:23
15kHZ,150个周期就是10ms,完全有可能每次采到高电平。
采样频率不能与信号的频率成整数倍,可以比它高,或 ...

这个频率每台机器不是固定的,是一个范围,比如10k~20k,高频变压器产生的,干扰耦合进去到MCU的某个输入端口;
变周期(频率)采用应该可以降低碰到高电平的概率,但是实现起来还非常麻烦
除非采样周期够快,但是单片机就全部陷进去采样了,不可取;

硬件加电容更加容易可行,加比较器效果更好,估计可行。

出0入0汤圆

 楼主| 发表于 2020-5-7 11:50:12 | 显示全部楼层
lcw_swust 发表于 2020-5-7 09:23
15kHZ,150个周期就是10ms,完全有可能每次采到高电平。
采样频率不能与信号的频率成整数倍,可以比它高,或 ...

我只是读电平,不采样占空比,这个窄的是干扰信号,正常是持续高电平或低电平。
但是发现有干扰信号,我想通过软件过滤掉,这样不用动硬件;

出0入0汤圆

发表于 2020-5-7 12:05:06 | 显示全部楼层
duxingkei 发表于 2020-5-7 11:46
这个频率每台机器不是固定的,是一个范围,比如10k~20k,高频变压器产生的,干扰耦合进去到MCU的某个输入 ...

哦,看来RC滤波最有效。

出0入0汤圆

发表于 2020-5-7 13:35:18 | 显示全部楼层
楼上高手! 这种需求用纯电路做更有效且更可靠,用单片机貌似有点浪费了。我大概提供个思路吧(没有细想):用RC积分电路加比较器实现,算好R值和C值,只要高电平持续一定时间,电容就充电到一个阈值以上,然后比较器翻转,低电平的时候电容立刻把电量卸掉。这种积分电路的好处就是可以平滑掉瞬间的高频干扰。以前我也是啥都喜欢用单片机干,现在慢慢觉得很多事情用纯电路解决更简单可靠且成本更低。

出0入0汤圆

 楼主| 发表于 2020-5-7 14:51:07 | 显示全部楼层
Tekin 发表于 2020-5-7 13:35
楼上高手! 这种需求用纯电路做更有效且更可靠,用单片机貌似有点浪费了。我大概提供个思路吧(没有细想) ...

确实,同意楼上

如果用软件去滤除这种高频杂波,总会碰到错误检测,只是概率问题,用RC +比较器配合软件滤波,几乎可以杜绝这种干扰。

出0入0汤圆

发表于 2020-5-7 16:19:22 | 显示全部楼层
楼主这个简单,软件上改变时间间隔就行。

1,2ms到,读一次,
2,4ms到,读一次,
3,7ms到,读一次。
这样。可以去掉固定频率的干扰。

我现在的按键都是改成这样的来读取了。不再是固定间隔。

出140入158汤圆

发表于 2020-5-7 16:25:28 | 显示全部楼层
估计您这个是变频器的载波干扰,是读接近开关的输出吗? 解决办法极度简单,1K+103电容

出140入158汤圆

发表于 2020-5-7 16:27:20 | 显示全部楼层
当然软件滤波也可以,不过得把采样率提高。

出0入0汤圆

 楼主| 发表于 2020-5-7 23:12:13 | 显示全部楼层
amigenius 发表于 2020-5-7 16:27
当然软件滤波也可以,不过得把采样率提高。

CPU频率跟不上,CPU利用率肯定超高,干不了别的事了

出0入70汤圆

发表于 2020-5-8 10:41:55 | 显示全部楼层
用单片机完全可以做到很漂亮。一般的单片机都有定时器/计数器的输入捕捉功能,用它来捕捉上升沿和下降沿,中断里把计数器的计数值记下来就可以获得事件发生的精确时刻,精度取决于计数器的计数频率。

出0入0汤圆

发表于 2020-5-8 11:26:56 | 显示全部楼层
你的采样率才100hz,理论只能有效监测50hz的信号,所以应该加个50hz的低通滤波器

出0入0汤圆

 楼主| 发表于 2020-5-8 23:28:11 | 显示全部楼层
PaulDE 发表于 2020-5-8 10:41
用单片机完全可以做到很漂亮。一般的单片机都有定时器/计数器的输入捕捉功能,用它来捕捉上升沿和下降沿, ...

嗯,这个可以实现

出0入0汤圆

发表于 2020-5-9 17:01:59 | 显示全部楼层
PaulDE 发表于 2020-5-8 10:41
用单片机完全可以做到很漂亮。一般的单片机都有定时器/计数器的输入捕捉功能,用它来捕捉上升沿和下降沿, ...

干得漂亮  

出0入0汤圆

发表于 2020-5-9 17:26:53 来自手机 | 显示全部楼层
有种滤波器叫陷波器,可以硬件也可以软件实现。大过用滤波方面处理你的这个信号,要阶数较高才能达到目的。

出0入131汤圆

发表于 2020-5-9 17:34:57 | 显示全部楼层
放到主循环 while(1) 里面去读不就行了嘛,每个循环读一次。不要定时中断里面去读。

还需要个时间计数器,如果连续50ms内读的电平都一样,则说明这个信号稳定了,如果读到相反的状态,就复位时间计数器,从新计时。

so easy

出0入0汤圆

发表于 2020-5-10 08:12:40 | 显示全部楼层
asj1989 发表于 2020-5-9 17:34
放到主循环 while(1) 里面去读不就行了嘛,每个循环读一次。不要定时中断里面去读。

还需要个时间计数器 ...

用while(1)最大的问题在于每次循环的时间不固定,定时器50ms中断后,内存中会保存很多数据,最后还是要做数字滤波。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-9-28 09:22

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表