OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 8628|回复: 4

ADC的数值跳动的厉害

[复制链接]

6

主题

85

帖子

0

精华

高级会员

Rank: 4

积分
763
金钱
763
注册时间
2013-4-23
在线时间
119 小时
发表于 2015-6-6 14:36:35 | 显示全部楼层 |阅读模式
5金钱
       程序是原子的AD采样程序,没动,开发板是战舰开发板。 只是把AD接口接入了一个电位器,电位器两端分别接电源跟地。数值在10次平均值滤波的时候跳动幅度是20以内,100是10以内,200次就变成了上下浮动三,并且频率慢了许多。
        问:怎么样才能让AD采样极为精确。基本不变?
       看了一些卡尔曼的代码。太深奥没看懂。移植了几段,成功过一段,效果好但是太慢。快了以后效果依旧不好。所以还是想用点大家常用的办法滤波。
        这个会是板子的问题么?换个通道会解决这个问题么?




//主函数中的内容
int main(void)
{  

u8 buff[100]; 
u16 adc = 0;
float adc1 = 0;


delay_init();      
NVIC_Configuration();
uart_init(9600); 

Adc_Init();

OLED_InitIO();
OLED_Init();

 
BACK_COLOR =0x00;
POINT_COLOR = 0x0f;


while(1)
{
       adc = Get_Adc_Average(ADC_Channel_1,10); 
       sprintf((char *)buff," ADC:%d   ",adc);
       LCD_ShowString(0,1,buff);

}
}


//??????ADC
//???????????????ò?¨??????
//???????????????¨??0~3   
void  Adc_Init(void)
{
ADC_InitTypeDef ADC_InitStructure; 
GPIO_InitTypeDef GPIO_InitStructure;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_ADC1, ENABLE);  //????ADC1?¨???±??
 

RCC_ADCCLKConfig(RCC_PCLK2_Div6);   //?è??ADC·????ò×?6 72M/6=12,ADC×??ó?±??????????14M

//PA1 ×÷???????¨??????????                         
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; //????????????
GPIO_Init(GPIOA, &GPIO_InitStructure);

ADC_DeInit(ADC1);  //????ADC1,?????è ADC1 ???????????÷???è???±????

ADC_InitStructure.ADC_Mode = ADC_Mode_Independent; //ADC?¤×÷????:ADC1??ADC2?¤×÷??????????
ADC_InitStructure.ADC_ScanConvMode = DISABLE; //????×????¤×÷?????¨??????
ADC_InitStructure.ADC_ContinuousConvMode = DISABLE; //????×????¤×÷??????×???????
ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None; //×??????í??????????????·?????
ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right; //ADC??????????
ADC_InitStructure.ADC_NbrOfChannel = 1; //???ò???????ò×?????ADC?¨????????
ADC_Init(ADC1, &ADC_InitStructure); //?ù??ADC_InitStruct?????¨???????????????èADCx???????÷   

  
ADC_Cmd(ADC1, ENABLE); //???????¨??ADC1

ADC_ResetCalibration(ADC1); //??????????×?  
 
while(ADC_GetResetCalibrationStatus(ADC1)); //??????????×??á??

ADC_StartCalibration(ADC1); //????AD??×?
 
while(ADC_GetCalibrationStatus(ADC1)); //??????×??á??
 
// ADC_SoftwareStartConvCmd(ADC1, ENABLE); //???????¨??ADC1???í??×???????????

}  
//????ADC??
//ch:?¨???? 0~3
u16 Get_Adc(u8 ch)   
{
  //?è?????¨ADC?????ò×é?¨?????????ò???????ù?±??
ADC_RegularChannelConfig(ADC1, ch, 1, ADC_SampleTime_239Cycles5 ); //ADC1,ADC?¨??,???ù?±????239.5????      
  
ADC_SoftwareStartConvCmd(ADC1, ENABLE); //???????¨??ADC1???í??×???????????
 
while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC ));//????×????á??

return ADC_GetConversionValue(ADC1); //·???×??ü????ADC1???ò×é??×????á??
}

u16 Get_Adc_Average(u8 ch,u8 times)
{
u32 temp_val=0;
u8 t;
for(t=0;t<times;t++)
{
temp_val+=Get_Adc(ch);
delay_ms(5);
}
return temp_val/times;
}  


最佳答案

查看完整内容[请看2#楼]

首先,板子上的电源本来就不是很干净,噪声比较大,所以ADC采样结果肯定会有些波动; 其次,你的电位器引线这样散得很开,很容易感应到市电线路辐射的电磁场,所以工频干扰会很重,ADC结果肯定会存在50Hz周期波动; 要想得到较为稳定的ADC结果,可以考虑以下办法: 1、电位器引线紧密绞在一起; 2、电位器不要用板上的电源,可以用外部独立的低噪声电压基准,或者简单点就用2节干电池或一节锂电池,这样的电源才会比较干净没有噪 ...
MJM_天行健,君子以自强不息;地势坤,君子以厚德载物;
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

67

帖子

0

精华

初级会员

Rank: 2

积分
102
金钱
102
注册时间
2015-6-6
在线时间
2 小时
发表于 2015-6-6 14:36:36 | 显示全部楼层
首先,板子上的电源本来就不是很干净,噪声比较大,所以ADC采样结果肯定会有些波动;
其次,你的电位器引线这样散得很开,很容易感应到市电线路辐射的电磁场,所以工频干扰会很重,ADC结果肯定会存在50Hz周期波动;

要想得到较为稳定的ADC结果,可以考虑以下办法:
1、电位器引线紧密绞在一起;
2、电位器不要用板上的电源,可以用外部独立的低噪声电压基准,或者简单点就用2节干电池或一节锂电池,这样的电源才会比较干净没有噪声;
3、在ADC输入端对地接一个1~10uF的陶瓷电容,必要的话还应对电位器的电压进行射随缓冲。
三更有梦书当枕,千里怀人月在峰!
回复

使用道具 举报

1

主题

81

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3202
金钱
3202
注册时间
2015-3-29
在线时间
304 小时
发表于 2015-6-8 15:15:39 | 显示全部楼层
以前玩PIC单片机时候一点经验不知道对你有没有帮助。
电源或大或小都会有一些波动,以及一些电磁干扰。在显示AD的时候,可以连续采样50次,或者100次,然后取平均值显示,波动就会很小,显示值就不会乱跳了。fulcker万用表也是采用平均采样显示的。

可以参考下。
回复

使用道具 举报

6

主题

85

帖子

0

精华

高级会员

Rank: 4

积分
763
金钱
763
注册时间
2013-4-23
在线时间
119 小时
 楼主| 发表于 2015-6-10 01:22:10 | 显示全部楼层
回复【2楼】laidaihua:
---------------------------------
我试试
MJM_天行健,君子以自强不息;地势坤,君子以厚德载物;
回复

使用道具 举报

6

主题

85

帖子

0

精华

高级会员

Rank: 4

积分
763
金钱
763
注册时间
2013-4-23
在线时间
119 小时
 楼主| 发表于 2015-6-10 01:23:05 | 显示全部楼层
回复【3楼】xiaosong06:
---------------------------------
这个是采样十次取平均值,效果平平
MJM_天行健,君子以自强不息;地势坤,君子以厚德载物;
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-21 18:51

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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