zoukankan      html  css  js  c++  java
  • 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值的变化量,但是效果不是很明显,与平均值滤波的效果相近,可能在这个上面并不能体现的并不明显。

  • 相关阅读:
    SlideShare
    准备SCJP考试
    Sun的过去
    shardingjdbc基础教程
    上万页大数据量的分页查询方案
    shardingjdbc教程 看这一篇就够了
    微服务化的认识
    JDK9对String底层存储的优化
    水平分表
    深入理解Java中的字段与属性的区别
  • 原文地址:https://www.cnblogs.com/longbiao831/p/4556281.html
Copyright © 2011-2022 走看看