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.

[参考译文] CCS:我无法持续读取温度值。

Guru**** 2539500 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/578286/ccs-i-could-not-read-temperature-value-cnsistently

工具/软件:Code Composer Studio

您好,

我正在尝试获取温度值,但有时它可以正常工作,但之后的数据是不相关的。首先,我使用ADC读取电压读数,然后读取温度读数

1.使用 以下代码读取电压。

ref_a_disableReferenceVoltageOutput();
ref_a_enableReferenceVoltage();
ref_a_setReferenceVoltage (REF_A_VREF2_5V);
ADC14_setResolution (ADC_14BIT );

/*初始化ADC (SMCLK)*/
ADC14_enableModule();
ADC14_INITModule (ADC_CLOCKSOURCE_SMCLK,ADC_PREDIVIDER_1,ADC_DIVIDER_1,0);

/*配置ADC内存*/
ADC14_enableReferenceBurst();
ADC14_configureSingleSampleMode (ADC_MEM0,TRUE);

/*配置采样计时器*/
ADC14_enableSampleTimer(ADC_AUTOMATICATE_IREDATE);

/*启用中断*/
ADC14_enableInterrupt (ADC_INT0);


ADC14_configureConversionMemory (ADC_MEM0,ADC_VREFPOS_INTBUF_VREFNEG_VSS,
ADC_INPUT_A1,FALSE);
/*启用/切换转换*/
ADC14_enableConversion();
ADC14_toggleConversionTrigger();
//i=0;
//while (i<=12)

UINT64_t status = ADC14_getEnabledInterruptStatus();
ADC14_clearInterruptFlag (状态);

IF (ADC_INT0和状态)

//vlg[i]= ADC14_getResult(ADC_MEM0);
vlg =((ADC14_getResult(ADC_MEM0)*2.5f)/ 1.6384万)*2)*100;
//I++;
}
}
ADC14_disableConversion();

然后我 使用读取温度,代码如下所示

 

浮动温度;
uINT16_t ltempC =0;
uINT32_t cal30,cal85;
/*将参考电压设置为2.5 并启用温度传感器*/
ref_a_setReferenceVoltage (REF_A_VREF2_5V);
ref_a_enableReferenceVoltage();
ref_a_enableTempSensor();

/*在温度传感器已布设的情况下初始化ADC (MCLK/1/1)*/
ADC14_enableModule();
ADC14_INITModule (ADC_CLOCKSOURCE_MCLK,ADC_PREDIVIDER_1,ADC_DIVIDER_1,
ADC_TEMPSENSEMAP);
/*重复配置ADC内存(ADC_MEM0 A22 (温度传感器)
*模式)。
*/
ADC14_configureSingleSampleMode (ADC_MEM0,TRUE);
ADC14_configureConversionMemory(ADC_MEM0,ADC_VREFPOS_INTBUF_VREFNEG_VSS,
ADC_INPUT_A22,FALSE);
/*为TBD */配置采样/保持时间
ADC14_setSampleHoldTime (ADC_PULSE_WIDES_192,ADC_PULSE_WIDES_192);
/*在自动迭代模式下启用采样计时器并中断*/
ADC14_enableSampleTimer(ADC_AUTOMATICATE_IREDATE);
ADC14_enableInterrupt (ADC_INT0);
/*触发样本开始*/
ADC14_enableConversion();
ADC14_toggleConversionTrigger();
/*进入睡眠状态*/
//i=0;
//while (i<=21)

UINT64_t status = ADC14_getEnabledInterruptStatus();
ADC14_clearInterruptFlag (状态);

IF (状态和ADC_INT0)

cal30 = sysctl_getTempCalibrationConstant (sysctl_2_5V_REF,
sysctl_30_degrees_C);
cal85 = sysctl_getTempCalibrationConstant (sysctl_2_5V_REF,
sysctl_85_degrees_C);

Temp =(浮点)(((Int32_t) ADC14_getResult (ADC_MEM0)- cal30)*(85 - 30))
/(cal85 - cal30)+ 30.0f;
ltempC =温度;
//tempF = tempC * 9.0f / 5.0f + 32.0f;
}
}
ADC14_disableConversion();

典型的温度传感器传输功能如图20-10所示。 此处所示为传输功能
只是一个示例。 需要校准以确定特定设备的相应电压。
µs温度传感器时,"采样周期必须大于5 ̊ C "。 温度
传感器偏移误差可能较大,必须针对大多数应用进行校准。 温度校准
这些值可用于TLV描述符中(请参阅特定于设备的数据表以了解位置)。

上述文本 位于 MSP432P4xx系列 技术参考手册中,页码为662 。我有疑问 的是 "采样周期必须大于5 µs "的含义是什么。

为我提供一些解决方案以获得一致的温度值。

谢谢,顺祝商祺

Praveen Kumar G.

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好,
    我将尝试更详细地了解这一点。 用于获取ADC14的MCLK频率是多少? 这是默认的3MHz (64us采样时间)吗?

    谢谢!
    Chris
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好Praveen:

    您的代码与 此示例代码非常相似 ,但有一些关键差异。  也许您可以浏览该示例并找出仍需要实现哪些差异才能使代码正常运行?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Praveen,

    我很好奇,示例代码是否对您有所帮助?  如果你需要问更多问题,我就在这里。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    谢谢 John P. Morrison

    代码对我很有用,非常感谢。

    谢谢(敬上)

    Praveen。