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.

[参考译文] TM4C123GH6PGE:内部温度传感器读数低10度

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/565151/tm4c123gh6pge-internal-temperature-sensor-reads-10-degrees-low

器件型号:TM4C123GH6PGE
主题中讨论的其他器件:REF5030

您好!

我不明白为什么温度读数比预期低大约10摄氏度。 (我知道数据表显示精度为+/-5degC)。

我的房间环境温度约为22摄氏度。 我的处理器位于功耗极低的电路板上、触摸时甚至不热。 我希望内部温度传感器读数至少为25摄氏度、但它明显地为我提供了大约15摄氏度的温度。 在多个不同的电路板上是相同的。 我已使用红外温度计检查封装温度、该温度计的读数约为24摄氏度。

下面是用于初始化 ADC 的代码、然后是用于读取温度的代码、该代码在我的应用中每秒运行一次。

是否有人可以发现错误或提出解释?

谢谢你。

Richard

void initTemperature (void)(空)

      ROM_SysCtlPeripheralEnable (SYSCTL_Periph_ADC1);
      while (!(ROM_SysCtlPeripheralReady (SYSCTL_Periph_ADC1)));   //等待外设就绪

      ///ROM_ADCReferenceSet (ADC0_BASE、ADC_REF_EXT_3V);
      ROM_ADCReferenceSet (ADC1_base、ADC_REF_INT);
      //需要丢弃温度传感器的前3个样本-勘误表
      ROM_ADCSequenceDisable (ADC1_base、2);                                        //禁用序列、然后再更改它
      ROM_ADCSequenceConfigure (ADC1_base、2、ADC_TRIGGER_PROCESSOR, 1);                   //选择处理器(软件)触发器
      ROM_ADCSequenceStepConfigure (ADC1_BASE、2、0、ADC_CTL_TS);                       //
      ROM_ADCSequenceStepConfigure (ADC1_BASE、2、1、ADC_CTL_TS);                       //
      ROM_ADCSequenceStepConfigure (ADC1_base、2、2、ADC_CTL_TS);                       //
      ROM_ADCSequenceStepConfigure (ADC1_base、2、3、ADC_CTL_TS | ADC_CTL_IE | ADC_CTL_END);   //
      ROM_ADCIntClear (ADC1_BASE、2);                                              //清除中断状态标志
      ROM_ADCSequenceEnable (ADC1_BASE、2);                                        //使能序列


从            数据表中#define OFFSET 147 //
#define 乘法   器247      //75*3.3V   参考

uint32_t ADC1_value[8];
uint32_t raW_temp;
uint8_t 温度、last_temperature;

uint8_t getTemperature (空)

   uint8_t chng;

   ADCProcessorTrigger (ADC1_base、2);             //触发
   while (!ADCIntStatus (ADC1_base、2、false)      )//等待完成
   {
   }
   ADCIntClear (ADC1_BASE、2);                    //清除 ADC 中断标志
   ADCSequenceDataGet (ADC1_BASE、2、ADC1_VALUE);  //读取 ADC 值

   RAW_temp = ADC1_VALUE [3];

   温度=(uint8_t)(偏移-((乘法器* raW_temp)>> 12));   //温度、单位为摄氏度

   Chng = 0;
   if (temperature!= last_temperature){
      LAST_TEMRATURE =温度;
      Chng = 1;
   }

   返回 chng;


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

    在理想测试条件下、片上温度传感器的变化为+/-5C。 在温度受控环境下、我在+/-3C 区域进行了同样的测试。 许多测试结果取决于片上活动和电压基准源精度。 使用的电压基准是多少?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Amit、您好!
    VREF+连接到 VDDA、VREF-连接到 GND。 我已经验证了在 ADCReferenceSet ()中选择 ADC_REF_INT 还是 ADC_REF_EXT_3V 不会产生任何影响。 我对+/-5degC 非常满意、但它需要可信!
    谢谢、
    Richard
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    你好 Richard

    使用外部基准时、您需要具有温度补偿电压基准器件(REF5030)等器件。 使用该函数是不够的。 当使用 VDDA 作为内部或外部3V 的基准配置时、不会产生任何影响、因为源是相同的。 由于 VDDA 用于器件中的多个模块、因此很可能会将片上噪声耦合到 ADC 基准源、从而导致这种变化。 您是否还测量了电压 VDDA、以确保其为3.300V
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Amit、您好!
    是的、我们有一个单独的稳压器(LM1117MPX-3.3)生成 VDDA、我在该特定板上的处理器引脚处测量该电压为3.294V。 片上噪声很可能会导致温度读数随机变化、而不是我想得到的固定偏移。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    你好 Richard

    嗯、你刚好是固定偏移。 这不应该发生。 此部件显示的是行为还是每个部件显示的都是相同的行为?

    此外、如何为 VDDA 和 VREF+电源引脚放置电容器?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    过去(此处)曾报告过这种情况、(其他) ARM MCU 论坛网站也注意到了这种情况。

    我们注意到您采用 ADC_1进行测量-可能会快速切换到 ADC_0 -至少-证明您感兴趣?

    进一步-执行此温度感测时是否运行其他代码?   也许将运行代码限制为"仅 MCU 温度感测"可提供见解。

    最后- MCU (驱动) ADC 输入的状态是什么?   它们是否始终处于活动状态-是否驱动缓冲电路-是否所有模拟输入信号都具有 IN 规格-?

    和"上一页"-您是否在紧密放置的情况下包含了适当的 MCU 电源旁路电容器、并遵循了"高频 PCB 布局指南?"   (部分由该供应商提供)

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

    基准引脚上有局部电容器、一些重要的电容?

    [引用 user="Richard alind"]片上噪声很可能会导致温度读数随机变化、而不是我想得到的固定偏移。

    噪声可以通过二极管耦合实现固定的偏移。

    您是否还检查了温度传感器的勘误表?

    Robert

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

    感谢您的意见-很有趣、如果您知道其他人已经看到了这一点、我将搜索一下是否有解释或解决方法。

    ADC_0用于监控板上的14个其他模拟电平、但我假设可以交换 ADC_0和 ADC_1。

    它是一个带有中断(2个定时器和 UART)的"单线程"应用、因此有可能其它代码正在运行。 我将尝试在读取周围禁用全局中断。

    ADC 输入全部由运算放大器主动驱动。 这些器件具有3.3V 的二极管、以确保它们在开关打开/关闭期间不超出规格。 在正常使用情况下、它们都符合规格。

    电路板布局通过在每个电源引脚上紧密放置的电容器来正确完成、所有电容器在示波器上看起来都非常干净。

    结果在我们迄今制作的60多个电路板上是一致的。

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

    让我尝试将您的代码移植到我的 LaunchPad。 我需要的一个信息是正在使用的系统时钟?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    谢谢 Amit、
    ROM_SysCtlClockSet (SYSCTL_SYSDIV_4 | SYSCTL_USE_PLL | SYSCTL_OSC_MAIN | SYSCTL_XTAL_25MHz);
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [引用 user="Richard aland"]是的,我们有一个单独的稳压器(LM1117MPX-3.3)生成 VDDA,我在该特定板上的处理器引脚上测量到它为3.294V

    您是否使用示波器检查过它?

    Robert

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

    我能够再现您在使用温度传感器时观察到的问题。 在热流条件下、芯片温度稳定、该值在该范围内。 在热流之外、该器件显示较低的裸片温度。 遗憾的是、没有相同的解决方案。 只要您可以检查程序报告的温度是否遵循加热/冷却曲线、就需要忽略片上温度传感器的不准确性。 如果希望获得更高的精度、则建议使用片外温度传感器。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    我们尝试了类似的方法、但使用了 LX4F。 (也对3个 LM3S 进行了测试)、并且-这些 MCU 的结果-未进入或刚刚超出 ±5°C 规格。 (我们注意到 LM3S 具有(仅) 10位 ADC)

    关于 Amit 在热流条件下的结果-这是否表示、"增加预热持续时间(MCU 处于偏置状态-不是处于未加电状态)会使裸片温度升高到符合规格?"

    另请注意-随着新器件版本的发布、可能会有新的和/或与上述规格的进一步偏差。

    如海报 Robert 所述-"设计专用、外部温度传感器"通常证明是"真正"需要了解!"的人的理想选择

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

    [引用 user="CB1"]
    如海报 Robert 所述-"专为用途而设计的外部温度传感器"通常证明是"真正"需要了解!"[/引述]的人的理想选择

    我最初决定使用外部传感器、这是因为没有有关传感器到环境的热阻的文档。 温度传感器勘误表提供了使用外部传感器的进一步原因、以及较大的固有误差(基准误差和 A/D 误差会使误差变得更加复杂)。

    我得出的结论是、使用板载传感器的唯一原因可能是测量裸片温度以警告/防止超过 TJMax。 然而、虽然未记录功耗、但似乎不太可能出现明显的温升、并且也未记录传感器与结温的耦合程度。 在实际电路板上、封装的温升很小、即使超过了 TJMax、也没有明显的纠正措施、因此绝不会有使用它的严重诱惑。

    Robert

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

    请允许我在这里留下一个帖子,以便我能够更容易地找到有关这一问题的任何未来考虑--因为我以前也面临同样的问题。

    我的电路板通常报告的温度也比预期的低~8 oC。 我们提供了外部温度传感器、因此板载温度传感器并不相关。 我们仍然讨论过、过去和那时的结论是"它应该起作用了..."。 它没有。

    浪费资源? 不会! 他们添加了内部传感器、以便开发人员在其初始学习阶段可以看到 ADC 中的一些内容! (当然、会有人认为他们做了一些错误、因为显示的数字是关闭的...) 或者可能用于随机数生成?  )

    谢谢!

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

    总之、我们必须接受内部温度传感器不符合数据表中规定的+/-5degC 精度。

    这并不是一个真正的问题、只是作为一名设计人员、我需要能够依赖数据表、作为开发人员、我怀疑我的实施方案是否满足规格、我浪费了大量时间对其进行跟踪。

    在我的设计中、我将测量并报告3个 Tivas 上的温度、作为系统状态监视器的一部分。 例如、如果传感器读数超过70摄氏度、我可以更改此值以报告"温度误差"。

    谢谢、此致、
    Richard
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    如果对其他人有所帮助、我将此校正添加到温度读数中...

    针对内部温度传感器误差的 if (温度< 15)//猜测校正
    温度+=10;
    否则{
    if (温度< 55){
    温度+=(10 -((温度-15)>> 2));



    如果温度低于15摄氏度、则会增加10。
    如果温度高于55摄氏度、则不会增加任何功率。
    它在这些值之间以线性方式重新分频。

    我必须强调的是,这完全是猜测,我只能用热风枪和冷冻机喷雾来测试它,但它似乎对我的应用来说已经足够好了。

    此致
    Richard
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    PS 我本以为经常需要展示软件的论坛会保留选项卡!
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    你好 Richard

    请注意、这是片上温度。 因此、70C 片上温度会因环境温度而异、具体取决于热阻的高低、
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Richard、使用过去的代码选项。 从而实现更好的显示效果。

    单击"使用 RTF 格式"、然后单击 按钮

    Robert
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    根据放置细节、该温度也可能与裸片温度没有很好的相关性。 我没有看到有关传感器行为的文档。

    Robert