智能车制作
标题:
电磁车采样问题
[打印本页]
作者:
╰〆学会珍惜
时间:
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