打印
[技术手册]

芯源MCU内置温度传感器原理

[复制链接]
手机看帖
扫描二维码
随时随地手机跟帖
21
通过内置温度传感器,可以根据实时温度变化,灵活地调整系统控制参数,以达到更好的控制效果。

使用特权

评论回复
22
janewood| | 2023-6-10 12:38 | 只看该作者
芯源MCU内置温度传感器精度是多少?

使用特权

评论回复
23
robincotton| | 2023-6-10 13:20 | 只看该作者
MCU内置温度传感器是指在微控制器芯片内部集成有一个温度传感器模块,可以对芯片内部温度进行实时监测和反馈。

使用特权

评论回复
24
belindagraham| | 2023-6-10 17:56 | 只看该作者
无需考虑外部传感器的布局、安装和连接等问题,节约了设计时间和成本。

使用特权

评论回复
25
chenqianqian| | 2023-6-11 19:37 | 只看该作者
内置温度传感器就是接到内部ADC通道上的。

使用特权

评论回复
26
OKAKAKO| | 2023-6-11 21:05 | 只看该作者
内置温度传感器更好的检测MCU温度数据有利于功耗的控制

使用特权

评论回复
27
lulugl| | 2023-7-19 21:36 | 只看该作者
是芯片内部的温度,还是反映环境的温度呀?

使用特权

评论回复
评论
pssyx 2023-7-20 09:26 回复TA
芯片内部的温度,与环境温度密切相关。 
28
zhanan| | 2023-7-22 09:35 | 只看该作者
本帖最后由 zhanan 于 2023-7-22 09:41 编辑

用户手册中描述(L052为例):
23.10  温度传感器
CW32L052 内置温度传感器模块,传感器的输出电压随温度变化,设置 ADC 模块的采样通道为内部温度传感器,通过 ADC 测量结果可计算得到当前的环境温度。
温度传感器默认处于关闭状态,通过设置控制寄存器 ADC_CR0 的 TSEN 位域为 1,使能温度传感器。
环境温度计算公式如下:
环境温度 = T0 ×0.5 + 0.0924 × Vref ×( AdcValue – Trim )
其中:
Vref 是当前 ADC 模块的参考电压,取值为 1.5V 或 2.5V。
T0 是8位的初始校准温度值,记录在芯片的FLASH存储器中,其地址是0x0010  0A09,单位是0.5摄氏度,
读取出来的值需要除以 2,才是实际的温度。
AdcValue 是 ADC  模块测量温度传感器输出电压的 ADC 转换结果,取值范围为 0 ~ 4095。
Trim 是 16 位的校准值,计算时需要从芯片的 FLASH 存储器中读出,其存放地址如下表所示……

问题:Trim 值比 AdcValue 可能小,也可能大,大的话( AdcValue – Trim )的结果是负数。上述公式是数学意义上的公式,非编程公式。编写手册时,最好能写清楚这一点。详见  https://bbs.21ic.com/icview-3274294-1-1.html

使用特权

评论回复
29
zhanan| | 2023-7-22 09:59 | 只看该作者
@pssyx 库文件温度计算公式是错的
/**
* @brief
*        读取ADC参考电压1.5V时的温度传感器的测量温度
*
* @param fAdcTsDegree
*/
void ADC_GetTsVref1V5(float *fAdcTsDegree)
{
    uint16_t u16AdcResult;
    uint8_t temp1;
    uint16_t temp2;
    temp1 = *((uint8_t*) (ADDR_T0));
    temp2 = *((uint16_t*) (ADDR_TRIM_1P5));
    /*Caution: Must select ADC_GetSqr0Result()~ADC_GetSqr7Result() instead of ADC_GetConversionValue() if using ADC_SQR convertion.
    * ADC single channel convertion is default.
    */
    u16AdcResult = ADC_GetConversionValue();
    //ADC_GetSqr0Result(&u16AdcResult); //Using ADC_SQR0.
    //ADC_GetSqr1Result(&u16AdcResult); //Using ADC_SQR1.
    //ADC_GetSqr2Result(&u16AdcResult); //Using ADC_SQR2.
    //ADC_GetSqr3Result(&u16AdcResult); //Using ADC_SQR3.
    //ADC_GetSqr4Result(&u16AdcResult); //Using ADC_SQR4.
    //ADC_GetSqr5Result(&u16AdcResult); //Using ADC_SQR5.
    //ADC_GetSqr6Result(&u16AdcResult); //Using ADC_SQR6.
    //ADC_GetSqr7Result(&u16AdcResult); //Using ADC_SQR7.
    *fAdcTsDegree = temp1 * 0.5f + COEFF_TS * 1.5f * (u16AdcResult - temp2);
}

/**
* @brief
*        读取ADC参考电压2.5V时的温度传感器的测量温度
*
* @param fAdcTsDegree
*/
void ADC_GetTsVref2V5(float *fAdcTsDegree)
{
    uint16_t u16AdcResult;
    uint8_t temp1;
    uint16_t temp2;
    temp1 = *((uint8_t*) (ADDR_T0));
    temp2 = *((uint16_t*) (ADDR_TRIM_2P5));
    /*Caution: Must select ADC_GetSqr0Result()~ADC_GetSqr7Result() instead of ADC_GetConversionValue() if using ADC_SQR convertion.
    * ADC single channel convertion is default.
    */
    u16AdcResult = ADC_GetConversionValue();
    //ADC_GetSqr0Result(&u16AdcResult); //Using ADC_SQR0.
    //ADC_GetSqr1Result(&u16AdcResult); //Using ADC_SQR1.
    //ADC_GetSqr2Result(&u16AdcResult); //Using ADC_SQR2.
    //ADC_GetSqr3Result(&u16AdcResult); //Using ADC_SQR3.
    //ADC_GetSqr4Result(&u16AdcResult); //Using ADC_SQR4.
    //ADC_GetSqr5Result(&u16AdcResult); //Using ADC_SQR5.
    //ADC_GetSqr6Result(&u16AdcResult); //Using ADC_SQR6.
    //ADC_GetSqr7Result(&u16AdcResult); //Using ADC_SQR7.
    *fAdcTsDegree = temp1 * 0.5f + COEFF_TS * 2.5f * (u16AdcResult - temp2);
}

使用特权

评论回复
30
pssyx| | 2023-7-24 11:42 | 只看该作者
本帖最后由 pssyx 于 2023-7-24 11:46 编辑
zhanan 发表于 2023-7-22 09:35
用户手册中描述(L052为例):
23.10  温度传感器
CW32L052 内置温度传感器模块,传感器的输出电压随温度变化 ...

Hi,我的测试结果是ok的,浮点计算时,它会自动进行数据类型转换。请参见附图,已经将TS的ADC转换值强制设为0,手工计算的温度值为50*0.5 + 0.0924 * 2.5 * (0 - 0x523)=-278.765,与测量值相同 。

TS_2.png (370.34 KB )

TS_2.png

TS_1.png (266.93 KB )

TS_1.png

使用特权

评论回复
31
zhanan| | 2023-7-24 16:08 | 只看该作者
pssyx 发表于 2023-7-24 11:42
Hi,我的测试结果是ok的,浮点计算时,它会自动进行数据类型转换。请参见附图,已经将TS的ADC转换值强制设 ...

谢谢,给你添麻烦了。
我试了一下,确实不是问题了。挺奇怪的。

使用特权

评论回复
32
软核硬核| | 2023-8-3 11:15 | 只看该作者
每个芯片都是每次校准吗?

使用特权

评论回复
33
理想阳| | 2023-8-10 09:34 | 只看该作者
温度传感器能否测量外部的问题?

使用特权

评论回复
34
LinkMe| | 2023-8-10 09:47 | 只看该作者
内部集成了一个温度传感器,温度传感器的输出电压随VTS的温度呈线性变化。

使用特权

评论回复
35
小夏天的大西瓜|  楼主 | 2023-8-26 22:38 | 只看该作者
内置温度传感器确实还是比较靠谱的

使用特权

评论回复
36
星辰大海不退缩| | 2023-8-27 09:19 | 只看该作者
小夏天的大西瓜 发表于 2023-8-26 22:38
内置温度传感器确实还是比较靠谱的

楼主说的对,还有好多地方进行应用监测

使用特权

评论回复
37
OKAKAKO| | 2023-8-27 22:37 | 只看该作者
wiba 发表于 2023-5-10 12:08
基本上单片机内置的温度传感器的精度都很低 那么它存在的意义是什么呢

精度低比没有好一些,毕竟可以做一些参考

使用特权

评论回复
38
digit0| | 2023-9-5 17:20 | 只看该作者
核心源MCU内置温度传感器的测量范围是多少

使用特权

评论回复
39
小小蚂蚁举千斤| | 2023-9-10 20:27 | 只看该作者
内置温度传感器能基本了解当前的温度情况,确实很有用

使用特权

评论回复
40
szt1993| | 2023-9-10 20:41 | 只看该作者
内置的温度传感器有利于保证MCU稳定运行

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则