This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

MSP430F6638用AD10通道采集自身温度为什么采集的每块芯片的温度值相差很大

Other Parts Discussed in Thread: MSP430F6638

MSP430F6638用AD10通道采集自身温度为什么采集的每块芯片的温度值相差很大?

  • 您在测试时使用的程序是相同的?参考电压等也是一致的?能否给出稍微详细的信息?谢谢
  • 那个mcu内部的温度传感器,误差是比较大的,差一两度很正常。

    你测试的误差是多少?

  • 程序是相同的,参考电压是1.5V,换算公式IntDegC = ((temp - 1855)*667)/4096;
    详细程序:
    void Init_ADC_0(void)
    {

    REFCTL0 &= ~REFMSTR;
    ADC12CTL0 = ADC12ON+ADC12SHT1_8+ADC12REFON; // 打开ADC,设置采样时间,参考电压1.5V
    ADC12CTL1 =ADC12CSTARTADD_10+ADC12SHP+ADC12CONSEQ_0; // 选择存储器地址,使用采样定时器
    ADC12MCTL10 = ADC12SREF_1 + ADC12INCH_10; // 选择参考电压控制位,选择采样通道10
    ADC12CTL0 |= ADC12ENC; // 使能转换

    }

    /****************************************************
    功能:采集电池电压,结果在全局变量:float :test
    通道号0;采用均值滤波法,采集样本数counter (1~256)
    ****************************************************/
    void ADC_SUM(unsigned char counter)
    {

    unsigned long average;//均值滤波总和变量,当counter过大可能导致溢出
    float testing=0;//滤波后的测试值


    average = 0;
    testing=0;
    IntDegC =0;
    for(unsigned char j=0;j<counter;j++)//循环采集三次
    {

    ADC12CTL0 |=ADC12SC; // 开始转换
    delay(10);
    while (ADC12IFG ==BITA)//等待AD转换结束
    {

    average +=ADC12MEM10;//采集值叠加到均值滤波总和变量

    ADC12IFG&=~BITA;//清 ADC12IFG中断标志位

    }
    }
    testing=average/counter;//滤波后的测试值

    //IntDegC = ((testing - 1855)*667)/4096*10;
    //IntDegC = (testing/4096*1500 - 680)*(1/2.25);//放大十倍
    IntDegC = ((temp - 1855)*667)/4096;
    LCD_CLEAR(); //清所有显示
    show_int(IntDegC ); //显示 温度值
    delay(1000);
    }
  • 测试了几块芯片,误差挺大的,有两块芯片相差十二度左右,有两块相差五六度
    程序是这样的:
    void Init_ADC_0(void)
    {

    REFCTL0 &= ~REFMSTR;
    ADC12CTL0 = ADC12ON+ADC12SHT1_8+ADC12REFON; // 打开ADC,设置采样时间,参考电压1.5V
    ADC12CTL1 =ADC12CSTARTADD_10+ADC12SHP+ADC12CONSEQ_0; // 选择存储器地址,使用采样定时器
    ADC12MCTL10 = ADC12SREF_1 + ADC12INCH_10; // 选择参考电压控制位,选择采样通道10
    ADC12CTL0 |= ADC12ENC; // 使能转换

    }

    /****************************************************
    功能:采集电池电压,结果在全局变量:float :test
    通道号0;采用均值滤波法,采集样本数counter (1~256)
    ****************************************************/
    void ADC_SUM(unsigned char counter)
    {

    unsigned long average;//均值滤波总和变量,当counter过大可能导致溢出
    float testing=0;//滤波后的测试值


    average = 0;
    testing=0;
    IntDegC =0;
    for(unsigned char j=0;j<counter;j++)//循环采集三次
    {

    ADC12CTL0 |=ADC12SC; // 开始转换
    delay(10);
    while (ADC12IFG ==BITA)//等待AD转换结束
    {

    average +=ADC12MEM10;//采集值叠加到均值滤波总和变量

    ADC12IFG&=~BITA;//清 ADC12IFG中断标志位

    }
    }
    testing=average/counter;//滤波后的测试值

    //IntDegC = ((testing - 1855)*667)/4096*10;
    //IntDegC = (testing/4096*1500 - 680)*(1/2.25);//放大十倍
    IntDegC = ((temp - 1855)*667)/4096;
    LCD_CLEAR(); //清所有显示
    show_int(IntDegC ); //显示 温度值
    delay(1000);
    }
  • 1855和667两个数是怎么来的?

    在msp430内的TLV的存储区域,有内部温度传感器的校准数值。请用这些参数进行校准