Tristan_C 发表于 2023-8-26 11:45

【Microchip WBZ451 Curiosity】6.ADC和温度传感器

<div class='showpostmsg'><ol>
        <li><strong>前言</strong><br />
        本次测试的内容就放在ADC上面,将利用开发板的ADC引脚测量电压。在利用板载的模拟温度传感器,使用ADC测量其输出的模拟信号,以获得当前温度信息。</li>
        <li><strong>准备</strong><br />
        硬件:开发板,镊子<br />
        硬件上,PB1作为了ADC通道5,引到了对外的排母接口上<br />
        <br />
        也就是下图板子左上角第一个<br />
        <br />
        软件:MPLAB X,MCC,ADC demo code</li>
        <li><strong>示例测试及代码分析</strong><br />
        打开如下代码<br />
        <br />
        同样先从main文件内的main函数看,做了系统初始化,进入主循环之后启动ADC转换,等待转换完成,获取ADC值,并通过串口打印获取的ADC值以及转换成电压的值,最后延时500mS重估以上主循环的过程。<br />
        <br />
        而系统初始化中,对时钟,GPIO,ADC,串口,tick timer等进行了初始化配置<br />
        <br />
        而本次主角的ADC初始化如下<br />
        <br />
        再是UART初始化,用于log信息打印,其中波特率 为115200bps<br />
        <br />
        最后则是sistick timer初始化,主要用于延时等。<br />
        <br />
        编译并下载,实际运行时,为了便于测试测试,我们采用打断点的方式,将断点打在了如下位置,没运行一次,镊子切换输入电压(VCC或GND)<br />
        <br />
        打开串口调试助手,可以看到开机初始化时打印了 ADC Polled Mode Demo<br />
        <br />
        实际测试时时,将该引脚用镊子短接到了VCC 3.3V,因此第一个打印的时电源电脑呀3.29V,然年后将其短接到GND,因此第二个打印的0.00V</li>
        <li><strong>温度传感器测量</strong></li>
</ol>

<p>检测完ADC输入之后,下面我们将其改成板载的Microchip自家的MCP9700A模拟温度传感器。</p>

<p>MCP9700AT-E/TT是3引脚SOT-23封装的低功耗线性有源热敏电阻。它包括将温度转换为模拟电压的模拟温度传感器。这款低成本传感器在0℃至70℃的温度范围内具有&plusmn;2℃的精度。MCP9700A不需要额外的信号调理电路。通过实现这种低成本器件,可以避免热敏电阻解决方案的偏置电路开发开销。电压输出引脚(VOUT)可以直接连接到微控制器的ADC输入,其特点特性如下:</p>

<ul>
        <li>微型模拟温度传感器</li>
        <li>扩展的温度范围从-40&deg;C到125&deg;C</li>
        <li>针对模数转换器进行了优化</li>
        <li>宽工作电压范围2.3V至5.5V</li>
        <li>低工作电流,通常为6uA</li>
        <li>传感器输出电压500mV</li>
        <li>经过优化,可驱动大电容负载</li>
</ul>

<p>其模拟输出的电压和温度关系为:</p>

<p></p>

<p>其中Ta和V0的值为如下,可以看到电压的单位都是使用mV,因此后面测量和计算都使用mS为单位。</p>

<p></p>

<p>下面为其典型应用</p>

<p></p>

<p>原理图上可以看到其封装和链接设计如下</p>

<p></p>

<p>而在MCU那边则是接到了PB6引脚</p>

<p></p>

<p>查询WBZ45的手册可以看到PB6可以作为ADC的AN2输入端口。</p>

<p></p>

<p>因此,可以将前面的PB1(AN5)改成PB6(AN2)进行温度检测。</p>

<p>首先打开工程的MCC,并在Project Graph找到ADCHS点击</p>

<p></p>

<p>然后在右侧的配置选项中点开,将下面对应的地方进行相应的配置。其中特别要选择好AN2的通道及其参数。然后Generate生成代码。</p>

<p></p>

<p>修改代码,首先是参考电压,将其从3.3V改成3300mV</p>

<p></p>

<p>然后就是主函数了,首先是将通道从5改成2,即ADCHS_CH5改成ADCHS_CH2。然后计算ADC的电压并计算温度值,最终通过 串口log打印。</p>

<p></p>

<p>需要注意的是,GPIO初始化的下面两句代码,如果GPIO的PPS配置没有做的话需要还原回来。</p>

<p></p>

<p>编译下载,运行,打印的ADC值、电压值以及当前温度值。</p>

<p></p>

<ol>
        <li><strong>小插曲</strong></li>
</ol>

<p>还不确定是MPLAB X的问题还是电脑的问题,每次打开MCC都是载入非常的卡,甚至几分钟的都出不来,最后不得已强行关闭。如此造成还是比较浪费时间的,体验不好。我想如果是软件问题,希望能优化优化。</p>

<p></p>
</div><script>                                        var loginstr = '<div class="locked">查看本帖全部内容,请<a href="javascript:;"   style="color:#e60000" class="loginf">登录</a>或者<a href="https://bbs.eeworld.com.cn/member.php?mod=register_eeworld.php&action=wechat" style="color:#e60000" target="_blank">注册</a></div>';
                                       
                                        if(parseInt(discuz_uid)==0){
                                                                                                (function($){
                                                        var postHeight = getTextHeight(400);
                                                        $(".showpostmsg").html($(".showpostmsg").html());
                                                        $(".showpostmsg").after(loginstr);
                                                        $(".showpostmsg").css({height:postHeight,overflow:"hidden"});
                                                })(jQuery);
                                        }                </script><script type="text/javascript">(function(d,c){var a=d.createElement("script"),m=d.getElementsByTagName("script"),eewurl="//counter.eeworld.com.cn/pv/count/";a.src=eewurl+c;m.parentNode.insertBefore(a,m)})(document,523)</script>

Jacktang 发表于 2023-8-27 21:43

<p>每运行一次,镊子切换输入电压</p>

<p>高,这镊子用处挺广</p>

Tristan_C 发表于 2023-8-27 22:51

Jacktang 发表于 2023-8-27 21:43
每运行一次,镊子切换输入电压

高,这镊子用处挺广

<p>哈哈哈,简单粗鲁</p>

慕容雪花 发表于 2023-9-1 23:06

<p>大佬v5!</p>
页: [1]
查看完整版本: 【Microchip WBZ451 Curiosity】6.ADC和温度传感器