找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 671|回复: 6
打印 上一主题 下一主题
收起左侧

请教STM32单片机测试交流电

[复制链接]
跳转到指定楼层
楼主
ID:1107043 发表于 2024-9-10 15:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
各位大佬们。目前本人电路采用了ADS8689的AD采集芯片。目前测试的直流电压都是可以的。在测试到交流时遇到了麻烦;
在测试交流时,得到的AD值一直波动,用了目前用均值滤波,还是达到不了效果
请问有什么办法么
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:344848 发表于 2024-9-10 20:30 | 只看该作者
测交流电通常使用真有效值芯片AD763,它在多款数字万用表中得到应用。
AD736.pdf (217.81 KB, 下载次数: 8)
回复

使用道具 举报

板凳
ID:267719 发表于 2024-9-11 09:26 | 只看该作者
可以直接用STM的ADC采集啊,1%精度还是可以满足的。原理是每个20ms内均匀采集64个点(每秒3200个adc),再多就要看MCU任务重不重了。根据这64个点计算RMS值(可以用均方根或FFT)。
回复

使用道具 举报

地板
ID:628113 发表于 2024-9-11 10:14 | 只看该作者
有 一种电力系统 用的 专门的 [计量芯片] , 可以极为方便直接输出转换后的值, 接口 UART 或 SPI .
唯一问题是, 好像仅适用于 50HZ 工频交流电。
例如:
HLW8110 / HLW8112
回复

使用道具 举报

5#
ID:1034262 发表于 2024-9-11 11:54 | 只看该作者
使用20KHz采样,采样时间为20ms的整数倍,计算均方值。
回复

使用道具 举报

6#
ID:1131713 发表于 2024-9-11 12:27 | 只看该作者
楼主既然测交流还不让电流变动,那是要测什么呀,RMS? 这个是要采集的数据计算出来的,不是这个ADC直接采出来的
回复

使用道具 举报

7#
ID:1107043 发表于 2024-9-11 17:32 | 只看该作者
感谢各位的解答。目前问题暂时解决,用的是EWMA滤波公式
把得到的ADC都减去零点值,取他们的平恒值
/**********************************滤 波**********************************************/
float alpha = 0.9;         // 初始滤波系数
float blpha = 0.9; // 初始第二次滤波系数
float min_alpha = 0.1; // 最小滤波系数
float min_blpha = 0.1; // 最小第二次滤波系数
float alpha_decay = 0.1; // 系数衰减步长
float blpha_decay = 0.1; // 第二次系数衰减步长

float filtered_value = 0, red_value = 0; // 初始化滤波值
float previous_value = 0; // 存储上一个值,用于计算变化量

/************************************************************************/
// EWMA滤波公式
int process_integer_data(int new_value)  
{
        // 计算当前值与上一个值的差异
        uint16_t change = fabs(new_value-previous_value);
        previous_value = new_value;
       
        // 动态调整滤波系数
    if (change < 0.1) { // 假设小于0.01表示稳定
        alpha = 0.09;
        blpha = 0.09;
    } else {
        alpha = 0.8; // 可以增加一些系数以便于快速响应变化
        blpha = 0.8;
    }

    // 应用滤波
    filtered_value = alpha * new_value + (1 - alpha) * filtered_value;
    red_value = blpha * filtered_value + (1 - blpha) * red_value;

        return (int)(red_value + 0.5); // 返回滤波后的值
}
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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