智能车制作

标题: 电磁车采样问题 [打印本页]

作者: ╰〆学会珍惜    时间: 2014-3-21 20:57
标题: 电磁车采样问题
#include <hidef.h>      /* common defines and macros */
#include "derivative.h"      /* derivative-specific definitions */
/////////////////////////////PLL锁相环/////////////////////////
  unsigned char a,b;
void PLL_Init()
{

        //设置总线频率为24M
       
        //set BUS CLK=24M;
        //OSCCLK=16M;
        //SYNDIV=2;
        //REFDIV=1;
        //POSTDIV=0;
        //PLL CLK=2*16*(2+1)/(1+1)=48M;
        //VOC CLK=PLL CLK=48M;
        //f REF=16/2=8M
        //SYNR register=00000010B;
        //REFDV register=10000001B;
        //BUSCLK=48/2=24M
        CLKSEL=0X00;
        PLLCTL_PLLON=1;
        POSTDIV=0X00;
        SYNR=0X02;
        REFDV=0X81;
        _asm(nop);           //空操作,等待锁相环完成
        _asm(nop);        //空操作,等待锁相环完成
        while(CRGFLG_LOCK==0)
                ;
        CLKSEL_PLLSEL=1;
}



void AD_Init(void)    //对AD初始化 多通道连续转换
{
  ATD0CTL1=0x00;//无外部触发,八位精度,采样前不放电;
  ATD0CTL2=0xc0;//AD模块上电,快速标志位清零  
  ATD0CTL3=0xc4;//标志位自动清零,禁止外部触发,禁止中断。每次转换8个序列
  ATD0CTL4=0x02;//8位精度,1000 两个AD时钟周期 预分频数为5。AD=24/2/(2+1)
  ATD0CTL5=0x30;//右对齐,无符号,连续转换,多通道转换;
  ATD0DIEN=0x00;//对AD端口进行使能;
}


void AD_Data(void)         //采样并求转换结果的平均值
{
int i=0,j=0;

for(i=0;i<16;i++)             //连续采样20次
{
//采集AD0口数据
        while(!ATD0STAT2_CCF0)           //ATD0STAT2_CCF0为0,即通道0转换未完成,什么都不做,循环检测
        ;
        a+=ATD0DR0;       //否则,即ATD0STAT2_CCF0为1,转换完成,将转换结果累加到AD_Data_Sum[0]中
//采集AD1口数据       
        while(!ATD0STAT2_CCF1)           //ATD0STAT2_CCF1为0,即通道1转换未完成,什么都不做,循环检测
        ;
        b+=ATD0DR1;
}
  a=a/16;
          b=b/16;

}

void main(void) {

  PLL_Init();
  AD_Init();

  DDRB=0xFF;
  PORTB=0x00;
  EnableInterrupts;
for(;;)
{

  AD_Data();

}





   /* feeds the dog */
  } /* loop forever */
  /* please make sure that you never leave main */
在采样过程中数据总是跳动,怀疑是初始化问题,可也找不到结果!求大神解答


作者: 安之若命    时间: 2014-3-22 12:10
如果是在很小的范围波动的话,属于正常情况!




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