智能车制作
标题:
AD模拟转化成数字的时候总是比理论值多5
[打印本页]
作者:
道明似也
时间:
2011-3-13 08:56
标题:
AD模拟转化成数字的时候总是比理论值多5
#include <hidef.h>
#include "derivative.h"
unsigned int AD[8];
unsigned int p[8];
unsigned int i;
void SET_PLL()
{
CLKSEL=0X00;
PLLCTL_PLLON=1;
SYNR=2;
REFDV=1;
POSTDIV=0x00;
_asm(nop);
_asm(nop);
while(!(CRGFLG_LOCK==1));
CLKSEL_PLLSEL =1;
}
void AD_INIT()
{
ATD0CTL1=0x00; // 选择 AD 通道为外部触发 ,8 位精度 , 采样前不放电
ATD0CTL2=0x40; // 标志位自动清零,禁止外部触发 , 禁止中断
ATD0CTL3=0xc0; // 右对齐无符号 , 每次转换 8 个序列 , No FIFO, Freeze 模式下继续转
ATD0CTL4=0x05; // 采样时间为 4 个 AD 时钟周期 ,PRS=1,ATDClock=6MHz
ATD0CTL5=0x30; // 特殊通道禁止 , 连续转换 , 多通道转换,起始通道为 0 转换 4 个通 道
ATD0DIEN=0x00; // 禁止数字输入
}
void GET_VALUE()
{
while(!ATD0STAT0_SCF);
AD[0]=ATD0DR0L;
//AD[1]=ATD0DR1L;
//AD[2]=ATD0DR2L;
//AD[3]=ATD0DR3L;
//AD[4]=ATD0DR4L;
//AD[5]=ATD0DR5L;
//AD[6]=ATD0DR6L;
//AD[7]=ATD0DR7L;
ATD0STAT0_SCF=1;
}
void main()
{
PUCR_PUPAE=1;
DDRB=0XFF;
DDRA=0XFF;
PUCR_PUPAE=1;
PORTA=0XC4;
SET_PLL();
AD_INIT();
GET_VALUE() ;
for(i=0;i<8;i++)
{
if(AD[i]>180)
{
p[i]=1;
}
else
p[i]=0 ;
}
PORTB_PB0=p[0];
//PORTB_PB1=AD[1];
//PORTB_PB2=AD[2];
//PORTB_PB3=AD[3];
//PORTB_PB4=AD[4];
//PORTB_PB5=AD[5];
// PORTB_PB6=AD[6];
//PORTB_PB7=AD[7];
EnableInterrupts;
}
里面的注释是错误的 但是代码是我的想法,,但是测出来的电压总是比理论值多大概五。。。。。不知是否正常啊 大家解答一下
我是用滑动变阻器 测得。。
作者:
zhjb1
时间:
2011-3-13 15:37
你拿万能表进行比较,应该差不多。实际上如果抗干扰作的不好,5个bits的误差是可以的,不知道你控制精度需要这么高吗?我们只是一个范围即可。
欢迎光临 智能车制作 (http://111.231.132.190/)
Powered by Discuz! X3.2