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.
我们 正在尝试确定 用于 LP-MSPM0G3507器件上温度传感器的出厂调整的正确基准电压值。
我们 根据 第103页的 TRM 第2.2.5节所述的读数计算温度。
假定出厂调整是在 VRSEL=0h (VDDA=3.3V)下完成 的(如数据表第7.13节中所述)、当在室温下读取 ADC 时、会得到 -15°C 低于室温的值。 不过、如果我们假设 ADC 调整参考为3.45V、如 driverlib 示例中所述、则室温读数产生室温值。 这些结果表明出厂调整的正确基准电压为3.45V、但这与数据表不一致。
以下摘自 Driverlib 示例、其网址为: mspm0_SDK_1_10_01_05 \examples\nortos\LP_MSPM0G3507\driverlib\adc12_internal_temp_sensor_mathacl\ ADC12_internal_temp_sensor_mathacl.c , LINE 74
我还看到、数据表的两个部分中的信息似乎存在冲突。 在第8.13节中、针对出厂调整温度显示了 VRSEL=2h (内部1.4V VREF)、但是在第7.13节中规定了 VRSEL=0h (VDDA=3.3V)。
请 回答 以下问题:
您好
基准应为3.3V。
您是否已在室温下进行验证、确认其温度约为30C 或25C?
您可以使用此代码
#define TEMP_SENSE0 0x41C4003C
Volatile uint16_t gAdcResult、temp_trim;
浮点 Vsamp、Vtrim、Tsamp;
gAdcResult = DL_ADC12_getMemResult (ADC12_0_INST、DL_ADC12_MEM_IDX_0);
TEMP_TRIM =*(uint16_t *) TEMP_SENSE0;
Vsamp =(3.3/4096)*(((float) gAdcResult - 0.5);//3.3是电源、它取决于您的硬件板。
VTRIM =(3.3/4096)*((float) temp_trim - 0.5);
Tsamp =-(1/0.00175)*(Vsamp - Vtrim)+ 30;
您好、Gary。 您提供的代码示例不完整、因此我按照以下内容进行了修改。 我还使用了随附的 SysConfig 文件使其正常工作。 总之、结果与之前报告的结果相同。 使用以下代码、我的 launchpad 上的 Tsamp 读数介于5和6摄氏度之间、这比我办公室的室温低得多。 但是、如果我将 Vtrim 计算更改为这样:
Vtrim =( 3.45 /4096)*(((float) temp_trim - 0.5);
则读数为21至22摄氏度 、这是合理的。
#include "ti_msp_dl_config.h" volatile bool gCheckADC; int main(void) { SYSCFG_DL_init(); NVIC_EnableIRQ(ADC12_0_INST_INT_IRQN); #define TEMP_SENSE0 0x41C4003C volatile uint16_t gAdcResult, temp_trim; volatile float Vsamp, Vtrim, Tsamp; while (1) { gCheckADC = false; DL_ADC12_startConversion(ADC12_0_INST); while (false == gCheckADC) { __WFE(); } DL_ADC12_stopConversion(ADC12_0_INST); gAdcResult = DL_ADC12_getMemResult(ADC12_0_INST, DL_ADC12_MEM_IDX_0); temp_trim = *(uint16_t *)TEMP_SENSE0; Vsamp = (3.3/4096) * ((float)gAdcResult - 0.5); //3.3 is the power supply, it depends on your hardware board. Vtrim = (3.3/4096) * ((float)temp_trim - 0.5); Tsamp = - (1/0.00175)*(Vsamp - Vtrim) + 30; __BKPT(0); //debug } } void ADC12_0_INST_IRQHandler(void) { switch (DL_ADC12_getPendingInterrupt(ADC12_0_INST)) { case DL_ADC12_IIDX_MEM0_RESULT_LOADED: gCheckADC = true; break; default: break; } }
尊敬的 Ruben:
我们的工厂校准将使用 VDDA 作为基准、该基准应该是3.3V。 但是、从示例中、当使用3.45值而不是3.3时、我也可以获得更准确的读数。
明天我将进行一些测试、通过手动校准来验证我在 launchpad 上看到的内容(我将采用单次转换 ADC 示例、并将其更改为执行与校准相同的操作、然后与存储的值进行比较)。
此致、
卢克
尊敬的 Ruben:
您可以从器件向我发送顶部丝印吗? 通过这些信息、我可以告诉您此器件来自哪个批次。
在首次采样和器件预发布之间调整校准程序。 目前、我测试的 LaunchPad 在校准程序调整之前处于该状态。 对于我的 LaunchPad、 温度校准值为0x2FE (温度传感器校准位置为0x41C4003C)。 进行固定校准时、值的范围将介于0x31B-0x320之间。
对于更改 qVtrim 值:
//change qVTrim = _IQ15div(_IQ15mpy((_IQ15(DL_SYSCTL_getTempCalibrationConstant()) - _IQ15(0.5)), _IQ15(3.45)), ((uint32_t)(1) << 27)); //to qVTrim = _IQ15div(_IQ15mpy((_IQ15(0x31B) - _IQ15(0.5)), _IQ15(3.3)), ((uint32_t)(1) << 27));
此致、
卢克
在 LaunchPad 上、MSPM0G3507 64引脚具有以下标记(另请参见随附的图像):
33CKTCW G4
M0G3507S
X 修订版 B
在定制 板上、采用32引脚封装:
MSPM0
G3507S
TIX338B
ATL8 G4
在 所有这些板上、只有在我们 按照您列出的第一个公式使用 Vtrim = 3.45V 时、读数才有意义。
尊敬的 Ruben:
LaunchPad 与我的 LaunchPad 相同、因此会在校准更新之前完成。 我现在要为您检查32引脚封装。
此致、
卢克
尊敬的 Ruben:
32引脚型号也来自首次采样、因此温度传感器校准不会发生变化。 测试的临时权变措施是进行手动校准或对值进行硬编码。 完整发布至市场的器件将具有适当的温度传感器校准值。
此致、
卢克