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.

[参考译文] MSP430L092:温度传感器问题

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/672279/msp430l092-temperature-sensor-issues

器件型号:MSP430L092

您好!

我们正在一个项目中使用 MSP430L092、该项目要求频繁测量器件温度 、以便能够适当地调整其他传感器值。  在对温度传感器进行一些测试时、我提出了几个问题。  首先、该值似乎会发生漂移、这取决于 ADC 配置。  第二、当使用公式将 ADC 值转换为温度时、我的值甚至不接近于器件的环境温度。  下面是我正在使用的测试程序:

#include "msp430.h";#define controlled include file

name main;模块名称

public main;使主标签可见

;在该模块之外



#define true 1

#define false 0



;

中断矢量

;

ORG 0FFE0h

DC16 INVINT;无效中断--只返回

DC16 INVINT; 无效中断--只返回

DC16 INVINT;无效中断--只返回

DC16 INVINT;无效中断--只返回

DC16 INVINT;无效中断--只返回

DC16 INVINT;I?O 端口 P2 (P2IFG.0至 P2X.3)

DC16 INVINT;Timer0_A3 (TA0CCR1 CCIFG1

;中断 DC16 INVINT) Timer0_A3 (TA0CCR0 CCIFG0)-发送中断

DC16 INVINT;I/O 端口 P1 (P1IFG.0至 P1IFG.6)

DC16 APOLINT;A-POOL (CxIFG)

DC16 WDTIRQ;WDTIFG

DC16 INVINT;Timer1_CCR1

CC16 INCC16 (TAMIFG

CC1) NCC16 CC1 NMI 中断 CC1 (CC1)

系统 NMI (SVMIFG、VMAIFG)

DC16初始化;复位矢量地址



RSEG CSTACK;段



RSEG DATA16_Z

TempLog DS8 50的预先声明;温度存储区域

RSEG 代码;将程序置于'code'段

初始化:MOV #SFE (CSTACK);SP;设置堆栈

主:NHOLD+WDTV;WDTW 主程序

停止看门狗计时器



;清除日志

MOV.W #50、R13

MOV.W #TempLog、R14

Clear1

MOV.B #0、0 (R14)

Inc. W R14

DEC.W R13

JNZ Clear1



;

设置时钟

;

MOV.W #CCSKEY、&CCSCTL0;解锁 CCS

Clock1 MOV.W R13 OFW CLF;清除启动



时钟;SFIFG #0、SFIFG 0、SFIFG、SFIFG 0 振荡器标志?

JNZ Clock1

MOV.W #0000h、&CCSCTL4;将 ACLK、SMCLK 和 MCLK 设置回 HFCLK

MOV.W #DIVA_0+DIVS_0+DIVM_0、&CCSCTL5;ACLK/1 (1000 KHz)、SMCLK /1 (1000 KCLK)(1000 KCLK)、

CCTRL



0和 MOCLK 0的默认值;以及1000 KCLK 0的默认值和 MOCLK 值(1000 KCLK

);将1000 KCLK 和 MOCLK 值转换为0)。 指向日志存储区域开始



的指针 TESTRX0

;开始配置 A-POOL 寄存

器 MOV.W #0、&APCTL

MOV.W #REFTSEL、&APTRIM

MOV.W #TMPSEN、&APVDIV;启用温度传感器

MOV.W #CMPL+DBON+CONV+APTRS+APSW+APSW+4;

启用温度传感器 MOLDC+APSW+APSW_4;进行参考测量



;APCTRLSW+APSW+EMCL_4、APSW_4、APSW_IN_IN_TREMCLSW_4、APSW_IN_TREMCLSW_4;启用温度转换

设置信道和开始转换

#else

MOV.W #OSEL+oden+APPSEL_5+APNSEL_4、&APCTL;设置信道和开始转换

#endif

MOV.W #0、&APIFG

MOV.W #0、&APINT

BIS.W #RUNSTOP+CBSTPSTPSR+APCTL、&APCTL;

如果







已完成转换,则使用#TRIFG 标志#TOP0+ TOP0+ TOP0+ TOP0+ TOP0;如果已完成,则使用中断#APESTRG0+ TOP0+ TOP0+ TOP0+ TOP0+ TOP0+ TOP0+ TOP0+ TOP0+ TOL

在启用中断

#endif

MOV.W &APINT、R10

MOV.B R10、0 (R14)的情况下输入 LMP0;获取传感器数据并记录

其事件 W R14;碰撞日志指针

DEC.W R13;查看是否完成

JZ TESTRX3

MOV.W #10000、R12

调用#delay; 提供一点延迟来模仿正常采样

#if true

JMP TESTRX1

#else

JMP TESTRX0

#endif

TESTRX3

JMP $;完成后锁定在此





;

; delay

;

;;用于软件延迟

;输入时:

; R12=计数(1=100.0usec);



;*********

延迟推送 W R10

推送 W R12

Delay2 MOV.W #8、R10

Delay3

NOP

NOP

DEC.W R10

JNE Delay3

NOP

NOP



NOP

NOP NOP

DEC.W R12

JNE Delay2

POP.W R12

POP.W R10

RET



;

;系统中断功能

;*********



;*********

;*

;*未使用/无效中断处理

;*

;*********

INVINT NOP

RETI







;*

;*看门狗定时器中断处理

;*

;*********

WDTIRQ NOP

RETI







;*

;*用户 NMI 中断处理

;*

;*********

USERNMI NOP

RETI







;*

;*系统 NMI 中断处理

;*

;*********

SYSTEMNMI

NOP

RETI



;*********

;*

;* APOOL 中断处理

;*

;*********

APOLINT

NOP

MOV.W #0、&APIFG;清除中断标志

BIC.W #LPM0 (SP);修改 SP 使其进入激活模式

RETI





结束 

在测试过程中、我在样本之间延迟大约1秒、以帮助模拟将在应用中使用的实际温度采样率(每分钟1个样本、但获得的结果与我在此处进行的测试类似)。  如果我使用 APPSEL_5+APNSEL_4、温度漂移会向上。  典型 ADC 值如下所示:

00 A4 A3 A4 A4 A5 A4 A5 A5 A5 A5 A5 A5 A5 A6 A6 A6 A6

A7 A7 A7 A7 A7 A7 A8 A8 A9 AA A9 aa A9 aa A9 aa A9 aa A9 aa aa aa A9 aa aa aa aa aa aa A9 aa

AB AA AB AB AB AC AD AE AD AD AD AD AD AD AD A AD

Ae

如果我使用 OSWP+APPSEL_4+APNSEL_5配置、值会向下漂移、如下所示:

00 A7 A8 A7 A7 A7 A7 A6 A6 A6 A6 A6 A6 A6 A6 A6 A6 A6

A5 A4 A4 A5 A2 A3 A3 A3 A3 A2 A3 A2

A2 A2 A2 A1 A2 A1 A2 A2 A2 a0 A1 a0 a0 a0 a0 a0 a0 a1 9f

A0 9f

无论是轮询 ADC 转换还是使用转换完成中断、似乎没有什么不同。  无论我是复位所有配置参数还是复位上面代码中显示的子集、似乎也没有什么不同。  这种漂移的原因是什么?可能的解决方案是什么?

在第二个问题上、使用 MSPL092示例代码中的公式:

degC =((((ADCValue - 179)* 125)/58)+ 30

如果值为0xA7、则得出的温度为-2摄氏度、这不是器件的温度。  我知道该公式源自

Vsensor = Voffset25 + TCsensor*(Ta - 30)

这来自 MSP430L092数据表的第30页。  首先、我是否正确进行了计算?  其次、假设我是、那么对于我的系统、Voffset25和/或 TCsensor 的值必须不同。  如何找到这些值?  最后、如果我使用的公式正确且我使用正确、则意味着 ADC 值中的每个阶跃都对应于~2.1摄氏度阶跃、这对于我们的目的而言不够敏感。  因此、我希望我做了一些错误、或者有一种方法可以调整该传感器的灵敏度。

期待您提供任何帮助。

此致、

Robert Buchanan

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

    我已经能够使用我们的 C 和汇编示例复制您观察到的行为。 现在、我没有对这种行为的解释、但我将与我们的内部团队合作、寻求解决方案。 感谢您的耐心等待!

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

    [引用用户="Robert Buchanana">我们在 一个项目中使用 MSP430L092、该项目要求频繁测量器件的温度 、以便能够适当地调整其他传感器值。  同时使用温度传感器进行一些测试[/quot]

    您似乎对 PCB 组件的环境温度感兴趣、而不是对 MCU 感兴趣。 如果是这种情况、使用 MCU 的内部传感器可能不是您的最佳方法。 请尝试改用专用温度传感器。 TI 有一个很好的选择 http://www.ti.com/sensing-products/temperature-sensors/products.html

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

    尊敬的 Mike:

    感谢您提供信息。  我们已在其他单位使用了外部温度传感器、但对于该特定单位、我们需要将尺寸和组件数量保持在最小值。  我们选择此处理器的原因之一是内部温度传感器。  考虑到单元的尺寸、我们认为测量处理器与电路板温度之间的差异不大。  遗憾的是、我们没有可用的引脚来连接外部温度传感器、而不必从外部对其他传感器之一进行多路复用。

    此致、

    Robert Buchanan

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

    我还没有能够解释测量中的振荡、但我想了解您的应用所需的精度。 您能否详细说明您尝试使用此温度传感器实现的精度程度?

    MSP430L092中的传感器相对不准确、并且在程序执行开始时校准时效果最佳。 如果可能、我建议查看外部温度传感器。 也许您可以使用具有 SPI 接口的传感器、该接口可以连接到现有的 SPI 总线上、以减少对 GPIO 的影响、甚至可以是单线接口。

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

    在其他应用中、我们已将温度记录到十分之一摄氏度。我将不得不与客户和设计人员核实、以了解该装置的实际要求。 我们将了解是否能够实现外部传感器、还将了解如何尝试对温度读数求平均值、以查看我是否有处理器时间执行该操作以及它是否能为我们提供更准确的读数。 我将在本周的剩余时间内离开、因此我将有时间在下周再深入了解这一点。 但我会告诉你我会得到什么。

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

    您是否能够更好地了解应用的温度精度要求? 我认为内部温度传感器无法达到精度的十分之一。 对于这种精度、我强烈建议使用外部传感器。

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

    您好 Caleb、

    很抱歉、我不得不尝试退出另一个系统。  我确实发现、我有足够的处理时间来对温度以及我们需要的其他两个传感器进行采样。  我在系统中添加了每秒对温度进行采样的逻辑、然后对每分钟的数据进行平均值计算。  我应该在今天或明天进行测试。  如果这不起作用、我们只需从该系统中移除温度、然后在下一个版本中将其替换为不同的处理器。

    因此、我将继续并关闭它。

    感谢您的支持、

    Robert Buchanan