目前很多高级的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的。
应用场景:如果没有外部晶体,就只用内部高速时钟;如果用,那么都可以用~
效果图:
说明: 和环境室温对比,相差不多。