本文主要介绍如何通过MN316模组OpenCPU中的ADC demo使用ADC功能。ADC(Analog-to-digital converter)即模拟数字转换,可将模拟形式的连续信号(如温度、压力、声音或者图像等)转换为更易储存和处理的数字形式的离散信号。
由MN316硬件设计手册可知,MN316的ADC接口对应的是Pin 38,测试精度为10bits,使用ADC接口可测试并打印模组的VBAT电压和ADC电压。
图1 ADC接口硬件参数说明
一、ADC使用流程解析
图2 ADC接口函数使用流程
二、ADC demo代码解析
参考API手册可知,模组内设1个ADC通道,具体API调用内容可在cm_adc.h文件中查看,下面我们详细看一下。
2.1开启ADC设备
cm_adc_open函数作用是开启ADC设备,具体为开启ADC设备电源等。其中dev为ADC设备ID,返回0表示开启设备成功,返回其他值则为错误码。
图3 开启ADC设备函数
2.2关闭ADC设备
cm_adc_close函数作用是关闭ADC设备电源和时钟等,其中dev为ADC设备ID。
图4 关闭ADC设备函数
2.3读取ADC电压
cm_adc_read函数作用为读取ADC电压,其中dev为设备ID,voltage为电压值,单位mv,返回0表示读取电压成功。
图5 读取ADC电压函数
2.4读取VBAT电压
cm_adc_vbat_read函数作用为读取VBAT电压,其中voltage为电压值,返回0成功,需要注意的是,因为是通过ADC通道读取电压值,所以该函数使用时会占用ADC通道,在ADC开启时无法使用。
图6 读取VBAT电压函数
2.5调用函数说明
(1)参考cm_demo_adc.c文件内相关函数说明,当模组调用ADC接口时,首先会打印“adc test start!!”,调用接口里面的函数,然后串口会打印VBAT电压,其中voltage为设备电压值。
图7 调用电压读取函数
(2)接下来代码运行会打开ADC设备,读取ADC电压,然后关闭设备,其中cm_adc_read函数调用成功读取到ADC电压值后,会打印并显示。
图8 打印读取到的电压值
三、使用ADC函数接口操作示例
下面我们参考cm_demo_main.c文件中相关说明进行实际操作,以下为完整步骤及程序流程解析。
3.1串口调用ADC函数
在模组上电开机后,串口工具输入CM:ADC调用ADC接口函数,读取系统电压值,由返回值知,此时MN316模组的VBAT电压为3.903V,ADC电压为62mV。
图9 demo函数位置说明
图10 函数响应结果示例
四、常见问题
1、MN316模组接口有几路,需要进行切换吗?
模组只有1路ADC接口,使用时无需切换。
2、模组的ADC接口使用方法,有相关手册可以参考吗?
关于各API的具体说明,可以参考《MN316_OpenCPU_API手册》,路径在SDK文件夹根目录的“docs”文件夹下。