你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

模拟量在零点有误差

[复制链接]
shidalin123 提问时间:2019-12-18 17:23 /
刚才发的贴子感谢两位大神的帮忙已经好使了,可是又出现了新的问题,麻烦大家再帮忙看一下。由于我检测的是交流电,所以先通过1:2000的电流互感器变成小电流,再通过叠加1.65V的直流电把模拟量送进单片机。
模拟量换算部分的程序如下:
float Get_ADC(u32 channel){
        u32 j;
        float temp,Rms,youxiao;  
        Rms=0;
        temp = 0;
        youxiao = 0;
        for(j=0;j<SAMPLS_NUM ;j++){               
                youxiao = ADC_SourceData[j][channel]*3.3/4095;//ADC输入量
                temp=(youxiao-1.65)*(youxiao-1.65);  //减去1.65V的直流分量
                Rms+=temp;
        }
        Rms=sqrt(Rms/SAMPLS_NUM);
  return Rms;               
}

void DMA1_Channel1_IRQHandler(void){
        u32 xxx;
        if(DMA_GetITStatus(DMA1_IT_TC1) != RESET){               
                ADC_Cmd(ADC1, DISABLE);       
                currentA = Get_ADC(1)*2000;//电流换算
                currentB = Get_ADC(2)*2000;
                currentC = Get_ADC(3)*2000;
                ADC_Cmd(ADC1, ENABLE);
        }
        DMA_ClearITPendingBit(DMA1_IT_TC1);
}

在没有外部交流信号输入的时候,模拟量检测的是直流1.65V,但是实际结果显示的是youxiao在1.648--1.651之间波动,导致Rms的结果变成0.002或0.001,再通过2000的比值换算后值就变成了1或2,不为0。
有什么办法能消除这种在零点的误差吗?
收藏 评论13 发布时间:2019-12-18 17:23

举报

13个回答
wenyangzeng 回答时间:2019-12-18 17:52:04
可以使用软件数字滤波来解决
shidalin123 回答时间:2019-12-18 17:55:08
wenyangzeng 发表于 2019-12-18 17:52
可以使用软件数字滤波来解决

能说具体一点吗
mylovemcu 回答时间:2019-12-19 09:11:26
刚算了一下  1.648-1.651转换完的数据是2045-2049之间  这个数据就算外部电压是理想的1.65也就差不多是这个精度  这算可以的了  问题就是单片机的AD精度  要想提高精度  楼上说的数字滤波是一种思路  具体效果啥样不清楚  再一个方法就是外挂一个AD转换芯片  16位以上的就没问题了  可以先尝试第一种方案  不行的话  用第二种方案

评分

参与人数 1蝴蝶豆 +2 收起 理由
STMCU + 2

查看全部评分

tanic 回答时间:2019-12-19 09:20:28
别挣扎了,方案问题,精度不够
tanic 回答时间:2019-12-19 09:22:51
首先要明确你们的监测范围,和监测精度,再设计电路,1:2000你觉得能满足你们的需求吗?,不能就设计
1:20:200:2000 单个档位,软件根据实际情况选择一个档位处理
shidalin123 回答时间:2019-12-19 16:36:35
tanic 发表于 2019-12-19 09:22
首先要明确你们的监测范围,和监测精度,再设计电路,1:2000你觉得能满足你们的需求吗?,不能就设计
1:20: ...


shidalin123 回答时间:2019-12-19 16:37:19
mylovemcu 发表于 2019-12-19 09:11
刚算了一下  1.648-1.651转换完的数据是2045-2049之间  这个数据就算外部电压是理想的1.65也就差不多是这个 ...

嗯 软件用了试了几种滤波 都没什么效果。
shidalin123 回答时间:2019-12-19 16:38:08
tanic 发表于 2019-12-19 09:22
首先要明确你们的监测范围,和监测精度,再设计电路,1:2000你觉得能满足你们的需求吗?,不能就设计
1:20: ...


shidalin123 回答时间:2019-12-19 16:38:42
tanic 发表于 2019-12-19 09:20
别挣扎了,方案问题,精度不够

嗯嗯 好的 谢谢 我挣扎了很久 放弃了 各种滤波 根本就没用
butterflyspring 回答时间:2020-1-6 14:38:14
MCU内置的主次比较型AD的转换结果跟很多因素有关,所以末尾数跳动是很常见的。楼主做的精度已经很不错了。当然如果应用需要更加稳定的结果,是需要改动硬件设计了,或者牺牲一点精度
天臆弄人 回答时间:2020-1-7 09:13:05
3.3 / 4096 =0.000 805 66v

精度有1mv的,理论上10mv的精度是可以达到的1.65V,为什么会这么抖动不知道硬件哪有问题,
天臆弄人 回答时间:2020-1-7 09:14:52
其实大部分的测量 0点都是有燥声的,想办法软件去掉0
Glenxu 回答时间:2020-1-10 16:53:12
任何采集都是有误差的,你说的为题不属于误差。
以上有提到过:采用软件滤波对付随机小干扰,一阶惯性滤波足以。

所属标签

相似问题

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版