adc调试

根据霍尔原件的特征曲线图:

 

从图中可以看出霍尔原件的输出与输入的关系是线性变化的,变化的公式是Uout=0.0625Iin+2.5;这样就能根据输出电阻的阻值获得当前电容的电压。

 

程序实现:

#define CAP_Max 235u       //电容电压最大值235V

#define CAP_Num 32u //电容电压采集个数

#define Precision 8192u //13位精度

#define In_Res 50u //输入电阻50k

#define ADCOffset Precision/5 //ADC测量偏差 0.02*Precision*10

 

U16 Get_Cap_Value_Mv(uint32_t ADC_Value)

{

int tmp = 0;

if(ADC_Value<2.5/3.3*Precision) //2.5/3.3*Precision 是2.5V对应的ADC

return 0;

//u=((ADC_Value*3.3/4096-2.5)*10000/625*50) 24表示24K电阻

//u%=u/Ud*100 Ud为电容最大值

tmp = ADC_Value*33-25*Precision-ADCOffset;

tmp = 10000*tmp/(CAP_Max*Precision*625/(10*In_Res));

// tmp = ADC_Value*33-204800-1639; //204800=2.5*8192*10 1638=0.02*8192*10

// tmp = 10000*tmp/(CAP_Max*10039); //8192*625/1000/51=10039

return (tmp&0xFFFF);

}

上面的程序是将ADC的测量值转换为电量的百分比,其中ADCOffsetADC存在的偏差,当前偏差为0.02

u16 filter(void)

{

u8 i;

uint32_t Sum=0;

for(i=0;i<CAP_Num;i++)

{

Sum+=CAP_Adc_List[i];

}

Sum>>=1;

return  (u16)Sum/8;

}

程序filter是滤波函数

程序采用过采样的方法提高采集精度来达到降低ADC值的变化量,但是效果不是很明显,与平均值滤波的效果相近,可能在这个上面并不能体现的并不明显。

转载于:https://www.cnblogs.com/longbiao831/p/4556281.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值