刚才发的贴子感谢两位大神的帮忙已经好使了,可是又出现了新的问题,麻烦大家再帮忙看一下。由于我检测的是交流电,所以先通过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。 有什么办法能消除这种在零点的误差吗? |
能说具体一点吗
评分
查看全部评分
1:20:200:2000 单个档位,软件根据实际情况选择一个档位处理
嗯 软件用了试了几种滤波 都没什么效果。
嗯嗯 好的 谢谢 我挣扎了很久 放弃了 各种滤波 根本就没用
精度有1mv的,理论上10mv的精度是可以达到的1.65V,为什么会这么抖动不知道硬件哪有问题,
以上有提到过:采用软件滤波对付随机小干扰,一阶惯性滤波足以。