目前很多高级的MCU都自带了内部温度传感器,其原理都差不多,就是利用内部的ADC的一个内部通道采集电压数据,然后转换成温度数据。应用场景: 对于某些应用,需要监测板载温度,例如充电板,UPS电源主板等,上面一般都有一个温感,例如LM75. 利用mcu内部的OTS,可以节省BOM成本!
介绍:
温度传感器( On-chip Temperature Sensor,以下简称 OTS)可以获取芯片内部的温度,以支持系统的可靠性操作。 OTS 提供了一组与温度相关的数字量,通过计算可以得到温度值。不使用时可以通过模块停止功能将其关闭以减少系统功耗。
使用说明:
手册上写的很奇怪:先要使能内部低速时钟LRC,然后再启动外部或内部的高速时钟,why? 手册上也没有时钟树的说明!?
盘它:
- /* OTS clock selection. */
- #define OTS_CLK_SEL_XTAL (0u) /*使用外部高速时钟*/
- #define OTS_CLK_SEL_HRC (1u) /*使用内部高速时钟*/
- /* Select XTAL as OTS clock. */
- #define OTS_CLK_SEL (OTS_CLK_SEL_HRC)
- /* Select EVT_AOS_STRG as OTS trigger source. */
- #define OTS_TRG_SRC (EVT_AOS_STRG)
- /* System clock frequency in MHz. */
- #define SYS_CLOCK_FREQ_MHZ (SystemCoreClock / 1000000ul)
然后初始化:
- void OtsBase_Config(void)
- {
- stc_ots_init_t stcOtsInit;
- stcOtsInit.enAutoOff = OtsAutoOff_Enable;
- #if (OTS_CLK_SEL == OTS_CLK_SEL_HRC)
- stcOtsInit.enClkSel = OtsClkSel_Hrc;
- #else
- stcOtsInit.enClkSel = OtsClkSel_Xtal;
- #endif
- stcOtsInit.u8ClkFreq = (uint8_t)SYS_CLOCK_FREQ_MHZ;
- /* 1. Enable OTS. */
- PWC_Fcg3PeriphClockCmd(PWC_FCG3_PERIPH_OTS, Enable);
- /* 2. Initialize OTS. */
- OTS_Init(&stcOtsInit);
-
- #if (OTS_CLK_SEL == OTS_CLK_SEL_HRC)
- /* Enable HRC for OTS. */
- CLK_HrcCmd(Enable);
- /* Enable XTAL32 while clock selecting HRC. */
- CLK_Xtal32Cmd(Enable);
- #else
- /* Enable XTAL for OTS. */
- CLK_XtalCmd(Enable);
- #endif
- /* Enable LRC for OTS. */
- CLK_LrcCmd(Enable);
- }
在这里我选用2种时钟源亲自测过,都是OK的。
应用场景:如果没有外部晶体,就只用内部高速时钟;如果用,那么都可以用~
效果图:
说明: 和环境室温对比,相差不多。
|