3.9.1 通过内部ADC获取芯片温度
本例仍然使用demo固件
确保宏定义DEMO_ADC
已经打开,在头文件wm_demo.h
中设置,如下:
#define DEMO_CONSOLE DEMO_ON
#define DEMO_ADC (DEMO_ON && DEMO_CONSOLE)
固件运行后,串口发送命令:t-adctemp()
即可在串口输出窗口打印出ADC转换出的芯片温度值,如下图所示:
w800内部集成2路16比特的ADC,最高采样率1KHz。可完成2路模拟信号的采集,采样率通过外部输入时钟控制,可采集输入电压,也可采集芯片温度,支持输入校准和温度补偿校准。而w801则支持4路ADC。
ADC温度采集的源码位于文件wm_adc_demo.c
中,如下代码片段所示:
int adc_chip_temperature_demo(void)
{
char temperature[8] = {0};
int temp;
temp = adc_temp();
if (temp < 0)
{
temp = 0 - temp;
sprintf(temperature, "-%d.%03d", temp/1000, temp%1000);
}
else
{
sprintf(temperature, "%d.%03d", temp/1000, temp%1000);
}
printf("tem: %s\r\n", temperature);
return 0;
}
主要是调用了sdk提供的adc_temp()
函数直接获取采集转换结果。该函数源码可在sdk的platform/driver/adc/wm_adc.c
文件中了解更底层实现过程。