TI中文支持网
TI专业的中文技术问题搜集分享网站

msp430f4152的AD

编译器:IAR430 5.20
代码为:

#include <msp430.h>
#include "adc10.h"
#include "basictimer.h"

unsigned short tadc[2] = {0};

//A0 A1 A7
//p7.4 p7.5 p6.7
//多通道 多次采样
void init_adc10(void)
{
        ADC10AE0 |= 0x03;    // A1/A0, repeat multi channel
        ADC10AE1  = 0;
        ADC10CTL0 = ADC10SHT_2 + /*REF2_5V*/ + REFON + MSC + ADC10ON + ADC10IE; // ADC10ON, interrupt enabl  参考电压选1.5V
        ADC10CTL1 = CONSEQ_3 + INCH_1;     // A1/A0, repeat multi channel
        
        ADC10DTC0 = 0; //数据传送控制寄存器0 ADC10DTC0设置为默认模式:单传送块模式,单块传送完停止
        ADC10DTC1 = 2; // 4 conversions
        //当多通道采样时,先采高的通道,再采低的通道。即A3的结果存储到Control_Val[0],A0的结果存储到Control_Val[3],由于A1、A2没有使能,所以在A2、A1的结果分别存储到Control_Val[1],Control_Val[2]的是不定的。存储顺数也是按照这个方式存储的。
}

void adc10(void)
{
        ADC10CTL0 &= ~ENC;                      //ADC不使能

    while (ADC10CTL1 & BUSY);               // Wait if ADC10 core is active  ???

    ADC10SA = (unsigned int)tadc;
    ADC10CTL0 |= ENC + ADC10SC;             // Sampling and conversion start   ADC??,???? ADC10SC??????
        close_key();
        __bis_SR_register(CPUOFF + GIE);        // LPM0, ADC10_ISR will force 
        open_key();
}

void close_adc10(void)
{
        return;
        ADC10CTL0 &= ~ENC;                      //ADC不使能,其他控制位必须在ENC为0时才可修改
        while (ADC10CTL1 & BUSY);               // Wait if ADC10 core is active  ???
        
        ADC10AE0 = 0;
        ADC10CTL0 = 0;
        ADC10CTL1 = 0;
        
        ADC10DTC0 = 0;
        ADC10DTC1 = 0;
}

#pragma vector=ADC10_VECTOR
__interrupt void ADC10_ISR(void)  //中断响应以后,中断标志位自动清零
{
        //ADC10CTL0 |= ENC + ADC10SC;
        //ADC10SA = (short)(tadc);
        __bic_SR_register_on_exit(CPUOFF);        // Clear CPUOFF bit from 0(SR)
}

图:

问题:采样的AD值总是真实值的一半,怎么回事?

qingmin zhang:

谁知道呀

qingmin zhang:

专家呢?

qingmin zhang:

回复 qingmin zhang:

挺长时间了,没有回答。又有客户要一个类似的东东,发现msp430f4152的AD只有9位,这是什么原因?

kqian0327:

回复 qingmin zhang:

你好,

三个问题影响你的采样精度,应该和程序的关系不大。

第一,温飘,采样0V电压,ADC的值为多少。

第二,PCB的走线引入干扰,把你的PCB贴出来吧。

第三,REF参考电压,你使用的内部参考电压,并不准,你可以输出内部参考电压,你可以发现并不是完整意义的2.5V或者1.5V,你可以输出用示波器万用表测量,所以你需要做补偿。

Jason Guo:

你好,

另外可以用示波器看看XY处实际的波形。 R5/C5和R6/C6的滤波电路会使相位滞后,你看看是不是本身X,Y处电压由于C5C6的充放电引起的误差。

一般REF的误差不会大到一半那么多。简单的方式是先拿掉C5C6看看测试结果。

qingmin zhang:

回复 Jason Guo:

原因知道了,是配置错误,应该是:

ADC10CTL0 = SREF_1 + ADC10SHT_2 + /*REF2_5V*/ + REFON + MSC + ADC10ON + ADC10IE + ADC10SR;

qingmin zhang:

回复 qingmin zhang:

谢谢各位了

赞(0)
未经允许不得转载:TI中文支持网 » msp430f4152的AD
分享到: 更多 (0)