电子说
今天我们学习的是Air780E模组LuatOS开发之ADC应用,希望能帮助到大家。
1、模数转换(ADC)概述
1.1 ADC简介
ADC通常指模拟/数字转换器,是指将连续变量的模拟信号转换为离散的数字信号的器件。Cat.1模块ADC接口主要用来检测模拟电压信号量,用于电池电压检测,温湿度检测,TDS检测等应用。
1.2 ADC接口介绍
根据Air780E产品手册内《Air780E_硬件设计手册_V1.3.3.pdf》可知:
(1)Air780E内部ADC接口精度为12bits外部直流分压为0-3.4V
(2)Air780E内部具有2个ADC接口,ADC0--AIO3ADC1--AIO4
(3)两个特殊通道,CPU内部温度Temp--adc.CH_CPU主供电脚电压VBAT--adc.CH_VBAT
注意事项:设置分压(adc.setRange)要在adc.open之前设置,否则无效!!Air780E内部具有2个ADC接口,ADC0和ADC1,如下图红框所示:
1.3 输入电压的范围
Air780E关闭分压后,量程范围0~1.1V注意:外接输入电压切记不可超过量程,否则有烧毁风险!!!
adc.setRange(adc.ADC_RANGE_1_2)--air780E关闭ADC0,1分压电阻,范围0~1.1Vadc.setRange(adc.ADC_RANGE_3_8)--air780E开启ADC0,1分压电阻,范围0~3.2V
2演示功能概述
本章节演示了Air780E内部2个ADC接口,以及2个特殊通道:CPU内部温度Temp--adc.CH_CPU主供电脚电压VBAT--adc.CH_VBAT的使用教程。
2.1 通过adc.get()读取ADC的外部输入模拟电压
注:启用分压后量程最高也只能到达3.2V,若想测量更高的外部电源电压,需要外接分压电阻,具体设计请参考ADC接口设计指导;本教程外部输入电压在3.2v以内,需要外部电源与模组共地,保持参考电压一致。
2.2 通过adc.get(adc.CH_VBAT)读取供电电压
2.3 通过adc.get(adc.CH_CPU)读取CPU温度
2、演示功能概述
本章节演示了Air780E内部2个ADC接口,以及2个特殊通道:CPU内部温度Temp--adc.CH_CPU主供电脚电压VBAT--adc.CH_VBAT的使用教程。
2.1 通过adc.get()读取ADC的外部输入模拟电压
注:启用分压后量程最高也只能到达3.2V,若想测量更高的外部电源电压,需要外接分压电阻,具体设计请参考ADC接口设计指导;本教程外部输入电压在3.2v以内,需要外部电源与模组共地,保持参考电压一致。
2.2 通过adc.get(adc.CH_VBAT)读取供电电压
2.3 通过adc.get(adc.CH_CPU)读取CPU温度
3、准备硬件环境
3.1 开发板准备
使用Air780E核心板,
此核心板的详细使用说明参考:
https://docs.openluat.com/air780e/product/
Air780E产品手册中的<<开发板Core_Air780E使用说明VX.X.X.pdf>>,写这篇文章时最新版本的使用说明为:<<开发板Core_Air780E使用说明V1.0.5.pdf>>;核心板使用过程中遇到任何问题,可以直接参考这份使用说明pdf文档。
3.2 数据通信线
USB转typeC数据线一根。
3.3 PC电脑
WINDOWS系统,其他暂无特别要求。
3.4 直流稳压电源
功耗分析仪Air9000P:
4、准备软件环境
4.1 下载调试工具
使用说明参考:
Luatools下载和详细使用
https://docs.openluat.com/Luatools/
4.2 源码及固件
4.2.1 底层core下载地址:LuatOS固件版本下载地址
https://docs.openluat.com/air780e/luatos/firmware/
本demo使用的固件是core_V1112压缩包内的LuatOS-SoC_V1112_EC618_FULL.soc
4.2.2 本教程使用的demo:
https://gitee.com/openLuat/LuatOS-Air780E/tree/master/demo/adc
4.2.3 下载源码和固件
5、模数转换(ADC)软硬件资
5.1 API接口介绍
本教程使用api接口为:adc-模数转换-LuatOS文档
https://wiki.luatos.com/api/adc.html?highlight=adc
5.2 Air780E烧录说明
将Air780E通过通过usb数据线连接电脑,如下图所示:
注:1、按住下载模式按键(boot键)不放,同时再长按开机键开机,这时开发板会进入下载模式,Luatools下载进度条会开始跑,这时可以松开boot按键。直到工具提示下载完成。2、如果,未能成功进入下载模式,而是进入正常开机模式,这时可以按住boot键,再短按复位按键,让开发板重启,重新进入下载模式。
如何判断有没有进入下载模式:可以通过PC端的设备管理器中虚拟出来的USB端口数量来判断。
正常开机模式:
6、代码示例介绍
6.1 读取adc外部输入模拟电压
6.1.1 代码介绍
adc.open()开启ADC后,通过adc.get(1)获取ADC1的输入模拟电压值。
6.1.2 运行结果展示
可以将adc0/adc1外接稳压电源供电,注意供电不可超过量程!(本示例启用分压后量程0~3.2V),本示例将adc1输入3V(电源正极接adc1,负极接GND),查看luatools的log如下(返回值单位为mV):
6.2 读取供电电压
6.2.1 代码介绍
6.2.2 运行结果展示
通过下图可以看到,VBAT端供电电压为4.1V
6.3 读取CPU温度
6.3.1 代码介绍
6.3.2 运行结果展示
通过下图可以看到,模组CPU温度为34摄氏度
7、总结
本教程简单举例了如何读取adc输入电压、读取供电电压、读取CPU温度,除此之外,adc可以将各种连续变化的模拟信号(如温度、湿度、压力、电压、电流等)转换为离散的数字信号,本模块内部ADC精度12bits,对许多应用已经足够,如温湿度传感器、压力传感器、音频信号处理等,然而对于需要更高精度的应用,可以外挂更高精度的ADC,如16位,24位等。使用过程中需注意量程范围,不可超出量程。
8、常见问题
8.1 为什么ADC输入3V,读取模拟电压只有1.1V?
未启用分压时,量程最高只能到达1.1V,若想测量3V,需启用分压。
8.2 ADC测量电压来回跳变,为什么?
看外部输入电压是否与模块共地,正常情况需要共地,保持参考电压一致。
8.3 adc.read()和adc.get()要用哪一个?
adc.read()返回两个值,一个原始值,一般没用,可以直接抛弃;另一个是从原始值换算得出的实际值,通常单位是mV。(仅作了解,不建议使用)adc.get()返回的就是计算值,通常单位是mV,推荐使用这个接口来获取电压值。
审核编辑 黄宇
全部0条评论
快来发表一下你的评论吧 !