[求助] 我用的MSP430F235编的AD转换程序,得到的转换结果很不稳定。希望各位大虾帮帮忙。

hfmutou   2011-7-24 21:00 楼主

程序如下,主要用来调试新焊的板子上430的ad转换功能。

#include"MSP430x23x.h"
int AD_TEMP = 0;

/************************A/D转换初始化*********************/
void Init_Adc(void)
{
   P6SEL |= 0x08;                 //选择P6.3选择第二功能A3
   ADC12CTL0 |= ADC12ON + SHT0_2; //采样保持时间为16个ADC12CLK,采样时间4*t*4;
   ADC12CTL0 |= REF2_5V+REFON;    //给DAC用内部2.5V参考源

   ADC12CTL1 |= SHS_0 + SHP;              //SAMPCON信号选择为采样时序电路产生的信号
   ADC12CTL1 |= CSTARTADD_0;      //转换存储器地址位,选择单次转换的地址

  ADC12MCTL0 |= INCH_3+SREF_0;          //选择转换通道为A3

   ADC12CTL0 |= ENC;              //ADC转换允许
   ADC12CTL0 |= ADC12SC;
}

void main(void)
{
  float VD = 0.0;
 
  WDTCTL=WDTPW+WDTHOLD; //停止看门狗

  Init_Adc();

  while(1)
  {   
   P5OUT |= BIT1; P5OUT |= BIT2;
  
   ADC12CTL0 |= ADC12SC;
   while((ADC12IFG & BIT0)==0); //等待转换完成ADC12IFG.0
   for(int i = 1; i<500;i++)  {}   //加的小延时
 
   AD_TEMP = ADC12MEM0;        //读取存储器里的值
  
   VD= (float)(AD_TEMP)*2.5/4095;  //还原成模拟量
  
   if(VD>=0.5){P5OUT = 0x00;}    //无关紧要的部分,以前程序里的用于点亮指示灯的
   
  }
}
////////////////////////////////////////////////////////////////////////////////////////////////////////
结果是模拟输入电压是1v时,AD_TEMP(即ADC12MEM0)的值为1294,1196,1365,1151,1138,1277.这好像根本不对。补充下,模拟输入量是直接与单片机管脚相连的,中间无其他部分。

回复评论 (4)

自己顶啊

各位大神帮帮忙啊,拜谢
点赞  2011-7-25 09:52
去耦电容接下
点赞  2011-7-25 13:36
这个没试,还有其他原因吗
点赞  2011-7-26 20:25

回复 楼主 hfmutou 的帖子

用示波器先看下,这个值应该是多少?还有您的信号是恒定值吗?还是个曲线?
点赞  2011-7-28 19:38
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复