- 前言
本次测试的内容就放在ADC上面,将利用开发板的ADC引脚测量电压。在利用板载的模拟温度传感器,使用ADC测量其输出的模拟信号,以获得当前温度信息。
- 准备
硬件:开发板,镊子
硬件上,PB1作为了ADC通道5,引到了对外的排母接口上
也就是下图板子左上角第一个
软件:MPLAB X,MCC,ADC demo code
- 示例测试及代码分析
打开如下代码
同样先从main文件内的main函数看,做了系统初始化,进入主循环之后启动ADC转换,等待转换完成,获取ADC值,并通过串口打印获取的ADC值以及转换成电压的值,最后延时500mS重估以上主循环的过程。
而系统初始化中,对时钟,GPIO,ADC,串口,tick timer等进行了初始化配置
而本次主角的ADC初始化如下
再是UART初始化,用于log信息打印,其中波特率 为115200bps
最后则是sistick timer初始化,主要用于延时等。
编译并下载,实际运行时,为了便于测试测试,我们采用打断点的方式,将断点打在了如下位置,没运行一次,镊子切换输入电压(VCC或GND)
打开串口调试助手,可以看到开机初始化时打印了 ADC Polled Mode Demo
实际测试时时,将该引脚用镊子短接到了VCC 3.3V,因此第一个打印的时电源电脑呀3.29V,然年后将其短接到GND,因此第二个打印的0.00V
- 温度传感器测量
检测完ADC输入之后,下面我们将其改成板载的Microchip自家的MCP9700A模拟温度传感器。
MCP9700AT-E/TT是3引脚SOT-23封装的低功耗线性有源热敏电阻。它包括将温度转换为模拟电压的模拟温度传感器。这款低成本传感器在0℃至70℃的温度范围内具有±2℃的精度。MCP9700A不需要额外的信号调理电路。通过实现这种低成本器件,可以避免热敏电阻解决方案的偏置电路开发开销。电压输出引脚(VOUT)可以直接连接到微控制器的ADC输入,其特点特性如下:
- 微型模拟温度传感器
- 扩展的温度范围从-40°C到125°C
- 针对模数转换器进行了优化
- 宽工作电压范围2.3V至5.5V
- 低工作电流,通常为6uA
- 传感器输出电压500mV
- 经过优化,可驱动大电容负载
其模拟输出的电压和温度关系为:
其中Ta和V0的值为如下,可以看到电压的单位都是使用mV,因此后面测量和计算都使用mS为单位。
下面为其典型应用
原理图上可以看到其封装和链接设计如下
而在MCU那边则是接到了PB6引脚
查询WBZ45的手册可以看到PB6可以作为ADC的AN2输入端口。
因此,可以将前面的PB1(AN5)改成PB6(AN2)进行温度检测。
首先打开工程的MCC,并在Project Graph找到ADCHS点击
然后在右侧的配置选项中点开,将下面对应的地方进行相应的配置。其中特别要选择好AN2的通道及其参数。然后Generate生成代码。
修改代码,首先是参考电压,将其从3.3V改成3300mV
然后就是主函数了,首先是将通道从5改成2,即ADCHS_CH5改成ADCHS_CH2。然后计算ADC的电压并计算温度值,最终通过 串口log打印。
需要注意的是,GPIO初始化的下面两句代码,如果GPIO的PPS配置没有做的话需要还原回来。
编译下载,运行,打印的ADC值、电压值以及当前温度值。
- 小插曲
还不确定是MPLAB X的问题还是电脑的问题,每次打开MCC都是载入非常的卡,甚至几分钟的都出不来,最后不得已强行关闭。如此造成还是比较浪费时间的,体验不好。我想如果是软件问题,希望能优化优化。