打印
[嵌入式linux]

单片机AD采集正弦波怎么判断频率?

[复制链接]
1003|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
飞翔浚流|  楼主 | 2020-12-14 14:55 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
现在通过运放把交流电输入给单片机PIC16F877A的AD口,程序代码是汇编,故没怎么看懂,程序中这样写的好像是判断采集次数来判断波形是50HZ或者60HZ,而且为了判断交流电的幅值通过累加后与一固定值做比较的,AD是10位AD故程序中采集的值与0x7f差的绝对值累加和与一数值做比较,请问这是什么道理?因为AD是10位且采样的时候运放把交流波形抬到5V的中点左右,即交流电的0V与2.5V相重合,故采集到的值0X7F做减法我可以理解,但不明白的如下:运放电路图和运放输出到AD口的电压波形如图所示。但疑问如下
1.程序中每400US处理AD程序一次,且通过AD采集的次数与24做比较来判断波形是50HZ或者60HZ 这是什么道理?
2.为什么每次采集的值累加和与一固定值做比较来判断输入电压的幅值是220V或者380V

程序中有段注释 如下
;(半周期采样幅值累加值 < #0x0350)  
请问0x0350是怎么得来的?

我们的这款产品是PIC 汇编看着太长,请问单片机怎么判断交流电的频率和幅值?谢谢!D:\KP-LS800\UPS论坛提问

使用特权

评论回复

相关帖子

沙发
nstel| | 2020-12-14 15:28 | 只看该作者
是FFT算法。

使用特权

评论回复
板凳
LcwSwust| | 2020-12-14 15:39 | 只看该作者
一般来说,要判断50HZ、60HZ,应当是从过零点之间的时间差来判断,
也可能是其它思路,比如50Hz波形,每隔20ms采到的点的值应当相差不大,或者将一周期内的值累加应接近0.
半周期采样幅值累加,自然可用于区分电压值,可以通过实测来取得阀值,比如接入220V得到一个值,接入380V得到另一个值,然后取个中值可能就是0x0350。

使用特权

评论回复
地板
viphotman| | 2020-12-24 17:37 | 只看该作者
直接用AD采一下各种状态的值,再取中间值,试试;

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

6

主题

28

帖子

0

粉丝