智能车制作

标题: AD [打印本页]

作者: 244880113    时间: 2015-2-21 22:49
标题: AD
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],....表示连续采样时的值。不知道这样理解是否正确?请大神指点


作者: 支点305    时间: 2015-2-21 23:38
对..程序中是四个电感 i表示每个通道 j表示每次采样




欢迎光临 智能车制作 (http://dns.znczz.com/) Powered by Discuz! X3.2