[方案相关] 【华大测评】05 + 内部温度传感器(OTS)测评

[复制链接]
3981|13
 楼主| caizhiwei 发表于 2020-7-16 09:50 | 显示全部楼层 |阅读模式
      目前很多高级的MCU都自带了内部温度传感器,其原理都差不多,就是利用内部的ADC的一个内部通道采集电压数据,然后转换成温度数据。应用场景: 对于某些应用,需要监测板载温度,例如充电板,UPS电源主板等,上面一般都有一个温感,例如LM75. 利用mcu内部的OTS,可以节省BOM成本!
介绍:
       温度传感器( On-chip Temperature Sensor,以下简称 OTS)可以获取芯片内部的温度,以支持系统的可靠性操作。 OTS 提供了一组与温度相关的数字量,通过计算可以得到温度值。不使用时可以通过模块停止功能将其关闭以减少系统功耗。  

使用说明:
66395f0fae1a923f9.png
手册上写的很奇怪:先要使能内部低速时钟LRC,然后再启动外部或内部的高速时钟,why? 手册上也没有时钟树的说明!?
盘它:
  1. /* OTS clock selection. */
  2. #define OTS_CLK_SEL_XTAL            (0u) /*使用外部高速时钟*/
  3. #define OTS_CLK_SEL_HRC             (1u) /*使用内部高速时钟*/

  4. /* Select XTAL as OTS clock. */
  5. #define OTS_CLK_SEL                 (OTS_CLK_SEL_HRC)

  6. /* Select EVT_AOS_STRG as OTS trigger source. */
  7. #define OTS_TRG_SRC                 (EVT_AOS_STRG)

  8. /* System clock frequency in MHz. */
  9. #define SYS_CLOCK_FREQ_MHZ          (SystemCoreClock / 1000000ul)
然后初始化:

  1. void OtsBase_Config(void)
  2. {
  3.     stc_ots_init_t stcOtsInit;

  4.     stcOtsInit.enAutoOff = OtsAutoOff_Enable;
  5. #if (OTS_CLK_SEL == OTS_CLK_SEL_HRC)
  6.     stcOtsInit.enClkSel = OtsClkSel_Hrc;
  7. #else
  8.     stcOtsInit.enClkSel = OtsClkSel_Xtal;
  9. #endif
  10.     stcOtsInit.u8ClkFreq = (uint8_t)SYS_CLOCK_FREQ_MHZ;

  11.     /* 1. Enable OTS. */
  12.     PWC_Fcg3PeriphClockCmd(PWC_FCG3_PERIPH_OTS, Enable);
  13.     /* 2. Initialize OTS. */
  14.     OTS_Init(&stcOtsInit);
  15.   
  16. #if (OTS_CLK_SEL == OTS_CLK_SEL_HRC)
  17.     /* Enable HRC for OTS. */
  18.     CLK_HrcCmd(Enable);
  19.     /* Enable XTAL32 while clock selecting HRC. */
  20.     CLK_Xtal32Cmd(Enable);
  21. #else
  22.     /* Enable XTAL for OTS. */
  23.     CLK_XtalCmd(Enable);
  24. #endif
  25.     /* Enable LRC for OTS. */
  26.     CLK_LrcCmd(Enable);
  27. }
在这里我选用2种时钟源亲自测过,都是OK的。
应用场景:如果没有外部晶体,就只用内部高速时钟;如果用,那么都可以用~
效果图:
870335f0fa5719c4d9.png

说明: 和环境室温对比,相差不多。

 楼主| caizhiwei 发表于 2020-7-16 09:52 | 显示全部楼层
打印温度:
  1. void Get_CPU_Temperature(void)
  2. {   
  3.      if (Ok == OTS_StartGetTemp(&f_temperature, 100))
  4.      {
  5.           printf("CPU Temperature is %0.3f\r\n", f_temperature);
  6.      }
  7. }
 楼主| caizhiwei 发表于 2020-7-16 09:55 | 显示全部楼层
附上源码工程: hc32f460_sdk_casy.rar (1.34 MB, 下载次数: 56)
 楼主| caizhiwei 发表于 2020-7-20 19:07 | 显示全部楼层
听说温度还需要标定,才能使用~
HuangHongLun 发表于 2020-7-29 08:29 | 显示全部楼层
caizhiwei 发表于 2020-7-20 19:07
听说温度还需要标定,才能使用~

是的,这个温度误差有点大,看你测量这个温度是干什么用的,用来做热保护还是不错的。
既胜若否123 发表于 2022-6-13 18:29 | 显示全部楼层
请问ERC读出来一直是0是什么原因
yangxiaor520 发表于 2022-6-13 18:55 来自手机 | 显示全部楼层
测试精度咋样?
carpsnow 发表于 2022-6-19 11:25 | 显示全部楼层
温度标定,只是为了能够产品一致性好一些
pklong 发表于 2022-6-20 15:23 | 显示全部楼层
温度传感器有什么作用呢
adolphcocker 发表于 2022-6-20 15:51 | 显示全部楼层
是ADC测量还是标定好的?
asmine 发表于 2022-6-26 12:13 | 显示全部楼层
这就是提供个参考,能评估下芯片温度
macpherson 发表于 2022-7-9 13:04 | 显示全部楼层
这个是直接转换的吗?  
qiufengsd 发表于 2022-7-9 13:18 | 显示全部楼层
这个有什么作用呢  
hearstnorman323 发表于 2022-7-9 13:35 | 显示全部楼层
测量内部温度的作用是什么呢   
您需要登录后才可以回帖 登录 | 注册

本版积分规则

100

主题

856

帖子

16

粉丝
快速回复 在线客服 返回列表 返回顶部