目录
-
ADC接口
-
简介
-
ADC接口控制
-
相关硬件接口
-
读取模块的供电电压值
-
misc.getVbatt()
-
ADC使用示例
-
常见问题
-
相关资料以及购买链接
ADC接口
简介
ADC(Analog-to-Digital Converter) 指模数转换器。是指将连续变化的模拟信号转换为离散的数字信号的器件。
合宙Cat.1模块ADC接口主要用来检测模拟电压信号量,用于电池电压检测,温湿度检测,TDS检测等应用。
ADC接口控制
ADC的库由底层core实现,相关API接口如下:
API接口 | 描述 |
---|---|
adc.open() | 打开ADC |
adc.read() | 读取ADC值 |
adc.close() | 关闭ADC |
详细的API介绍见luat core API章节
相关硬件接口
ADC硬件通道对应的ADC id如下:
硬件接口 | ADC id |
---|---|
ADC1 | 1 |
ADC2 | 2 |
ADC3 | 3 |
ADC4 | 4 |
注意:不同的模块支持的ADC管脚不同,具体请参考ADC硬件设计章节
读取模块的供电电压值
模块的供电电压读取,原理上也是通过ADC来进行读取,但是此ADC通道为专用通道,无法通过ADC的API进行读取,需要通过misc.getVbatt()来读取底层上报的模块电压值。
注意:
- misc.getVbatt()为luat上层lib接口,使用时需要进行require "misc"加载.
- misc.getVbatt()读取的非瞬时值,底层进行过多次取样平均运算,返回的电压值时一个时间段内的平均值。
misc.getVbatt()
-
功能:读取模块供电电压值。
-
语法:vb=misc.getVbatt()
-
返回值:
参数 | 类型 | 释义 | 取值 |
---|---|---|---|
vb | number | 模块供电电压,单位mV |
- 示例:
require "misc"
local vb=misc.getVbatt()
log.info("VBAT",vb);
ADC使用示例
ADC 的具体使用方式可以参考如下示例代码,示例代码的主要步骤如下:
- 打开ADC通道2 和ADC通道3,默认最大量程
- 分别起三个循环定时器,每秒读取ADC2和ADC3的值和模块的vbat电压值。
- 读取并打印ADC2和ADC3的原始值和电压值和模块的供电电压vbat电压值。
module(...,package.seeall)
--- ADC读取测试
-- @return 无
-- @usage read2()
local function read2()
--ADC2接口用来读取电压
local ADC_ID = 2
-- 读取adc
-- adcval为number类型,表示adc的原始值,无效值为0xFFFF
-- voltval为number类型,表示转换后的电压值,单位为毫伏,无效值为0xFFFF
local adcval,voltval = adc.read(ADC_ID)
log.info("testAdc2.read",adcval,voltval)
end
--- ADC读取测试
-- @return 无
-- @usage read3()
local function read3()
--ADC3接口用来读取电压
local ADC_ID = 3
-- 读取adc
-- adcval为number类型,表示adc的原始值,无效值为0xFFFF
-- voltval为number类型,表示转换后的电压值,单位为毫伏,无效值为0xFFFF
local adcval,voltval = adc.read(ADC_ID)
log.info("testAdc3.read",adcval,voltval)
end
-- 开启对应的adc通道
adc.open(2)
adc.open(3)
-- 定时每秒读取adc值
sys.timerLoopStart(read2,1000)
sys.timerLoopStart(read3,1000)
require"misc"
sys.timerLoopStart(function ()
log.info("vbatt.read",misc.getVbatt())
end,1000)
常见问题
- 为什么ADC测量值一直是0xFFFF?
答:0xFFFF表示测量电压是无效值。- 首先确认硬件上模块的ADC管脚实际的电压值是否超过量程。ADC管脚的最大量程只能到VBAT(模块电源电压),如果超过量程,要采用外部分压的方式,将待测信号分压到量程内。