标题: 用msp430g2553写的ad测量电压的程序 [打印本页]

作者: 嘎嘎嘎646    时间: 2018-1-18 20:54
标题: 用msp430g2553写的ad测量电压的程序
用msp430g2553写的ad测量电压的程序,实际调试的时候ADC10MEM里面确实是有值的,但是转化成电压值的时候一直都不能转换,求大佬帮忙看一下,或者提供一个可以用的程序。我接的是差不多1.2v的电池,所以检测到的电压大于1的时候P1.0会亮,但是实际上一直为我赋的初始值。
void ADC10_Init(void)
{
        ADC10CTL1 |= CONSEQ_2; //单通道重复采样模式
        ADC10CTL0 |= SREF_1+REFON+REF2_5V;//选择内部参考源2.5V,打开基准源
        ADC10CTL0 |= ADC10SHT_3+MSC; //过采样率设置为64个采样周期,打开AD转换
        ADC10CTL1|= ADC10SSEL_1+ADC10DIV_1+SHS_0; //ACLK2分频为采样时钟,用ADC10SC触发采集
        ADC10CTL1 |=INCH_4; //选择通道A1
        ADC10CTL0 |= ADC10ON+ADC10SR+REFBURST; //开启ADC10
        ADC10AE0 |= 0x10; //开启外部通道A1
}
unsigned long ADSample()//取样
{
        int i=0;
        unsigned long ADC10_Result;
  ADC10_Init();
  for( i=0;i<8;i++)
  {
          ADC10CTL0 |=ENC+ADC10SC; //开始转换
          while((ADC10CTL0 &ADC10IFG)==0); //等待ADC10IFG标志变高(转换完成)
                    ADC10_Result+=ADC10MEM; //读取采样结果
  }
  AD_Result=AD_Result>>3;
  return ADC10_Result;
}

unsigned long DC_Result()
{
        unsigned long dc_result,dc_sample;
        dc_sample=ADSample()/8;
        dc_result=dc_sample*2.5/1023;//计算电压值公式
        return dc_result;
}

int main(void)
{
    WDTCTL = WDTPW | WDTHOLD;        // Stop watchdog timer
    unsigned long dc_result;
    P1DIR|=BIT0;
    dc_result=DC_Result();
    if(dc_result!=0)
            P1OUT|=BIT0;
    else
            P1OUT&=~BIT0;
        return 0;
}



作者: wbwshuai    时间: 2019-12-1 22:36
这其实和温度采样一个道理
作者: f556    时间: 2019-12-2 01:44
我的公式,Vref不一样,取值不一样
ADC_Vol1= ((unsigned long)ADC10MEM)*2*252/1023;   
    //Nadc=1023*[(Vin-VR-) /(VR+ - VR-)],ADC0Bh:Vin=Vcc/2,VR见SREF_1
    //VR见SREF_1,Nadc=1023*[(Vin-VR_)/(VR+ - VR_)],ADC0Bh:Vin=Vcc/2;VR见 SREF_1 ;终值Vcc=N*2*1.5/1023
上边公式,整形运算注意先扩大10、100倍再除,这是基本常识。比如:1/2=0,不是0.5




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1