TC264 ADC采集电磁传感器的数据进行处理。
/*************************************************************************
* 函数名称:void InductorDispose(void)
* 功能说明:读取ADC值并进行处理
* 参数说明:无
* 函数返回:无
* 修改时间:2020年12月27日
* 备 注: ADC悬空不为零,随机的
*************************************************************************/
void InductorDispose(void)
{
char txt[200];
char i = 0;
Magnetic = 0;
AloneADC[0] = ADCWeighted(ADC0);//读取每一次的电感值
AloneADC[1] = ADCWeighted(ADC1);
AloneADC[2] = ADCWeighted(ADC2);
for(i=0;i<InductorNum;i++)
{
if(AloneADC[i]<adc_min[i])//刷新最小值
adc_min[i] = AloneADC[i];
else if(AloneADC[i]>adc_max[i])//刷新最大值
adc_max[i] = AloneADC[i];
adc_error[i] = (AloneADC[i] - adc_min[i]) *100 / (adc_max[i] - adc_min[i]);//求偏差并进行归一化处理
}
Magnetic = adc_error[0]+adc_error[1]*10+adc_error[2]*100;//通过偏差的加权相加来确定磁场强度
//转换结果为字符串,串口发送或者屏幕显示
sprintf(txt,"[0]:%05d [1]:%05d [2]:%05d\n error[0]:%05d error[1]:%05d error[2]:%05d\n Magnetic:%05d \n",
AloneADC[0],AloneADC[1],AloneADC[2],adc_error[0],adc_error[1],adc_error[2],Magnetic);
//串口发送到上位机
UART_PutStr(UART0,txt);//AN0--AN7十进制数据输出到上位机
}
/*************************************************************************
* 函数名称:void WeightedRecursive(ADC_Channel_t ch)
* 功能说明:采用加权递推滤波方法读取ADC的值
* 参数说明:ch : ADC通道
* 函数返回:经过滤波之后的ADC值
* 修改时间:2020年12月27日
* 备 注:
A、方法:是对递推平均滤波法的改进,即不同时刻的数据加以不同的权通常是,越接近现时刻的数据,权取得越大。给予新采样值的权系数越大,则灵敏度越高,但信号平滑度低
B、优点:适用于有较大纯滞后时间常数的对象和采样周期较短的系统
C、缺点:对于纯滞后时间常数较小,采样周期较长,变化缓慢的信号不能迅速反应系统当前所受干扰的严重程度,滤波效果差
*************************************************************************/
unsigned short ADCWeighted(ADC_Channel_t ch)
{
unsigned short coe[10] = {1,2,3,4,5,6,7,8,9,10};//加权的值
unsigned short sum_coe = 1+2+3+4+5+6+7+8+9+10;
unsigned short adcnum[10];
unsigned short sum=0,i;
for(i=0;i<10;i++)
{
adcnum[i] = ADC_Read(ch);
sum = adcnum[i] * coe[i];
}
return (sum/sum_coe);
}
原文:https://www.cnblogs.com/wleaf/p/14200854.html