3.9.1 通过内部ADC获取芯片温度
<p>本例仍然使用demo固件</p>
<p>确保宏定义<code>DEMO_ADC</code>已经打开,在头文件<code>wm_demo.h</code>中设置,如下:</p>
<pre><code class="language-c">#define DEMO_CONSOLE DEMO_ON
#define DEMO_ADC (DEMO_ON && DEMO_CONSOLE)</code></pre>
<p>固件运行后,串口发送命令:<code>t-adctemp()</code>即可在串口输出窗口打印出ADC转换出的芯片温度值,如下图所示:</p>
<p><img src="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=b2c1d056001d928f2b8f7df5f0621b5e&file=file.png" alt="" /></p>
<hr />
<p>w800内部集成2路16比特的ADC,最高采样率1KHz。可完成2路模拟信号的采集,采样率通过外部输入时钟控制,可采集输入电压,也可采集芯片温度,支持输入校准和温度补偿校准。而w801则支持4路ADC。</p>
<p>ADC温度采集的源码位于文件<code>wm_adc_demo.c</code>中,如下代码片段所示:</p>
<pre><code class="language-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;
}</code></pre>
<p>主要是调用了sdk提供的<code>adc_temp()</code>函数直接获取采集转换结果。该函数源码可在sdk的<code>platform/driver/adc/wm_adc.c</code>文件中了解更底层实现过程。</p>