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.

[参考译文] MSP-EXPCC430RFX:通过 cc430f5137的内部温度传感器在64c 内测得温度!

Guru**** 2504445 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/805835/msp-expcc430rfx-the-temperature-is-measured-64c-by-internal-temperature-sensor-of-cc430f5137

器件型号:MSP-EXPCC430RFX

 CAL_ADC_20T30=1029、CAL_ADC_20T85=1896。 温度通过数据表 IntDegC =(SavedADC12MEM0-CAL_ADC_20T30)*((85-30)/(float)(CAL_ADC_20T85-CAL_ADC_20T30))+30;IntDegC = 64 (运行程序)中提供的公式计算。

#include "msp430.h"
#include "hal_adc.h"

volatile signed int SavedADC12MEM0 = 0;
volatile unsigned long SavedADC12MEM1 = 0;

volatile signed int IntDegC、IntDegF;
volatile unsigned long Vcc = 0;

unsigned char exite_active_fy_found_adc12 = 0;volate_adc_adc_adc_20c_degc

= 0


;tature_adc = 0;tature_deg30;tal/ atfloat = 2030 手动对
//温度传感器进行25C [RoomTemp]校准以替换故障30C 校准值。
//--ADC 软件温度校准常数、ADC27勘误表的权变措施
//关于温度校准常数的问题,存储在 INFOB

中//如果默认校准值出现故障

#ifdef __TI_Compiler_version__/
如果使用 CCS 编译
器#pragma DATA_SECTION (adcTempCalibration、".infoB"),执行手动软件校准;
adc25int

#Elif __IAR_systems_icc_
//如果使用 IAR 编译器
#define INFOB _Pragma ("location="INFOB\")
INFOB __NO_init int adcTemp25Calibration;
#endif

/******** //**
*@brief 打开并初始化 ADC12,以便
* 采样温度、Vcc
*
@param none
*
*@return none
/
void HalAdcInit (void)
{
//通道序列、一次、ADC12CLK=MODOSC
UCSCTL8 |= MODOSCREQEN;
REFCTL0 &=~REFVSEL_3;
REFCTL0 |= REFVSEL_1 + REFON; //配置内部2.5V 基准
__delay_cycles (1900); //基准稳定的延迟

ADC12CTL0 &=~ADC12ENC; //确保 ENC 被清除
ADC12CTL0 = ADC12ON + ADC12SHT0_15 + ADC12MSC;
ADC12CTL1 = ADC12SHP + ADC12CONSEQ_1 + ADC12SSEL_0;
ADC12CTL2 = ADC12RES_2;
ADC12MCL1 = ADC12CONE_1 = ADC12C12EOS 通道
+ ADC12C12C12SSEL_0;ADC12CE_ADC12MCTEF 通道
+ ADC12REF_ADC12REF_ADC12MCTL1;ADC12REF_ADC12REF_ADC12REF_ADC12REF_

CAL_ADC_20T30 =(*(int *) 0x01A1E);//ADC 温度校准常量(对于2.0V ref
) CAL_ADC_20T85 =(*(int *) 0x01A20);

if (((unsigned int) adcTemp25Calibration)== 0xFFFF)
{
M =(85-30)/(float)(CAL_ADC_20T85 - CAL_ADC_20T30);//计算斜率
C = 85 - m*CAL_ADC_20T85;
}
否则
{
//计算25°C 室温下的斜率
//CAL_ADC_20T30 = adcTemp25校准;
M =(85-25)/(float)(CAL_ADC_20T85 - adcTemp25Calibration);//计算斜率
C = 85 - m*CAL_ADC_20T85;
}




/******** //**
*@简约返回光传感器采样值(摄氏度)
*
*@param none
*
*@return lightSensorValue 光传感器 ADC 采样值
/

int HalAdcGetTempRaw (void)
{
return SavedADC12MEM0;
}

/******** //**
*@简约返回光传感器采样值(摄氏度)
*
*@param none
*
*@return lightSensorValue 光传感器 ADC 采样值
/
无符号长整型 HalAdcGetTempDegC (void)
{
return IntDegC;
}

/******** //**
*@简略返回光传感器采样值(华氏度
)*
@param none
*
*@返回光传感器值 光传感器 ADC 采样值
/
无符号长整型 HalAdcGetTempDegF (void)
{
return IntDegF;
}
/******** //**
*@简约返回光传感器采样值
*
*@param none
*
@return lightSensorValue 光传感器 ADC 采样值
/
无符号长整型 HalAdcGetVcc (void)
{
return Vcc;
}
/******** //**
*@简要关闭/禁用 ADC12。
*
*@param none
*
*@return none
/
void HalAdcShutDown (void)
{
//关闭 ADC 模块和内部基准
ADC12CTL0 &=~ADC12ENC;
ADC12CTL0 = 0x00;
ADC12IE = 0x00;
REFCTL0 &=~REFON;
}



/******** //**
*@简要将 ADC 读数转换为 Vcc & Temp。
*
*@param none
*
*@return none
/void
HalAdcConvertTempVcc (void)
{
IntDegF = 10*(SavedADC12MEM0*m + c)*((float) 9/5)+ 320;
IntDegC = 10*(SavedADC12MEM0*m + c);
Vcc =(SavedADC12MEM1 * 40)------------------


*/
******** //**
*@brief 启动 ADC 转换。
*
*@param none
*
*@return none
/
void HalAdcStartRead (void)
{
ADC12IFG = 0x00; //清除所有 ADC12通道 int 标志
REFCTL0 |= REFON; //打开 ADC12基准
_DELAY_CYCLES (1900); //参考稳定的延迟
ADC12IE = BIT1; //启用存储器1中断
ADC12CTL0 |= ADC12ENC | ADC12SC; //开始转换
}
/********* //**
*@brief 设置使从
*退出活动 CPU 模式的标志 ADC12 ISR。
*
**@param quit
*
- 1 -从 ADC12 ISR 退出有效
*- 0 -在退出 ADC12ISR 时保持在 LPMx 中
*
@返回无
/void
HalAdcSetQuitFromISR (无符号字符 quit)
{exit_active_from_ADC12=
quit;
}/*---------------

*/
#pragma vector=ADC12_vector
__interrupt void ADC12_ISR (void)
{


ADC12CTL0 &=~ADC12ENC; //禁用 ADC12转换
REFCTL0 &&~REFON; //禁用引用(如果启用)

SavedADC12MEM0 = ADC12MEM0; //保存采样数据
ADC12MEM1 = ADC12MEM1;

如果(EXIT_ACTIVE_FIT_ADC12)
_BIC_SR_REGISTER_ON_EXIT (LPM3_BITS);


}

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

    我建议从我们提供的示例代码开始、该示例代码用于对 A10温度进行采样并将其转换为 C 或 F。这可以在下面的示例代码中找到。 示例为 cc430x513x_ADC12_10.c

    www.ti.com/.../slac458

    此外、下面的线程还提供了一些有关校准温度的良好信息和代码片段。 在该主题中、有一个勘误表、其中某些器件的温度传感器校准数据不正确。 如果您的设备受到影响、您需要手动校准。 我还提供了指向下面勘误表的链接。 ADC29是参考的勘误表。

    e2e.ti.com/.../100297

    www.ti.com/.../slaz094aa.pdf
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    谢谢你。 如何手动校准传感器?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    例如。 测得的温度为65c、而实际温度为25c 那么、我只需要减去40c? IntDegC =(SavedADC12MEM0-CAL_ADC_20T30)*((85-30)/(float)(CAL_ADC_20T85-CAL_ADC_20T30))+30-40?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Li、

    正确、在校准点、您需要输入使用某个参考传感器测量的实际温度。