高级会员
- 积分
- 939
- 威望
- 431
- 贡献
- 316
- 兑换币
- 252
- 注册时间
- 2014-5-12
- 在线时间
- 96 小时
- 毕业学校
- 河海大学
|
void AD_Init(void)
{
ATD0CTL0=0x07; // 转换AD0~AD71
ATD0CTL1=0x40; //允许指定AD口做外部触发器入口,12位精度,采样前电容不放电//
ATD0CTL2=0x40; //禁止外部触发, 中断禁止
ATD0CTL3=0xc0; //右对齐无符号,每次转换6个序列, No FIFO, Freeze模式下继续转
ATD0CTL4=0x01; //765:采样时间为4个AD时钟周期,ATDClock=[BusClock*0.5]/[PRS+1]
ATD0CTL5=0x30; //连续多道轮流采样,从通道0开始//
ATD0DIEN=0x00; //禁止数字输入
}
//----------ADC转换部分---------------
void getValue(void)
{
while(!ATD0STAT2L_CCF0);
adValue[0][0]= ATD0DR0;
while(!ATD0STAT2L_CCF1);
adValue[1][0] = ATD0DR1;
while(!ATD0STAT2L_CCF2);
adValue[2][0] = ATD0DR2;
while(!ATD0STAT2L_CCF3);
adValue[3][0] = ATD0DR3;
}
/*********************************
加权递推平均滤波法 3电感滤波,队列长度为5
**********************************/
void AD_jzlb(void)
{
int i = 0,j = 5;
for(i=0;i<5;i++)
{
for(j=3;j>=0;j--)
{
adValue[i][j+1] = adValue[i][j];
}
}
getValue();
for(i=0;i<5;i++)
{
ad_finished[i] = 0.6*adValue[i][0] + 16*adValue[i][1]/75 + 8*adValue[i][2]/75 + 4*adValue[i][3]/75 + 2*adValue[i][4]/75; //加权平均,新值加权数大,旧值加权数小
//ad_finished[i] = adValue[i][0];
} //ad_finished[i] 0.75 i越小,权值越重,因为i越小时
}
在AD这里绕了好长时间了,现在似懂非懂的样子,AD采样假设三个电感,每个电感连接放大电路后连接一个通道,我认为纵向a[0][0],a[1][0],a[2][0],表示在哪一个通道的值,而横向a[0][0],a[0][1],a[0][2],....表示连续采样时的值。不知道这样理解是否正确?请大神指点
|
|