Air8000 ADC接口设计说明
本文所述内容,仅针对Air8000这一款型号
Air8000共有4路ADC硬件通道,其通常的作用是用来测试电压数值;
与测量电压相关的函数主要有两个,请务必注意二者的区别:
ADC_RANGE_MAX,ADC引脚的测量范围0-3.6V,这种方式被测电压不可经过外部电阻分压后再挂在ADC上;
ADC_RANGE_MIN,ADC引脚的测量范围0-1.5V,这种方式被测电压可以经过外部电阻分压后再挂在ADC上;
当被测量电压最高值在1.5v以内时, 推荐使用ADC_RANGE_MIN,且不添加外部分压电路;
当被测量电压最高值在3.6v以内时, 推荐使用ADC_RANGE_MAX,且不添加外部分压电路;
当被测量电压最高值在3.6v以上时, 推荐使用ADC_RANGE_MIN,且必须添加外部分压电路;
以下为Air8000模组ADC硬件通道与模组管脚号的对应关系说明;
ADC | 管脚号 | 说明 |
---|---|---|
ADC0 | 9 | 通道ID:0,分辨率12 bits |
ADC1 | 96 | 通道ID:1,分辨率12 bits |
ADC2 | 77 | 通道ID:2,分辨率12 bits |
ADC3 | 76 | 通道ID:3,分辨率12 bits |
ADC 接口特性:
- 分辨率:12bit
- 时钟频率(fc):1.625MHz~6.5MHz
- 采样频率: fc / 16
- 积分非线性: +/-1.2mV
- 微分非线性: +/-0.3mV
- 功耗:400uA
ADC常用函数解释
常量
常量 | 类型 | 解释 |
---|---|---|
ADC_RANGE_MAX | number | ADC引脚的测量范围0-3.6V,这种方式被测电压不可经过外部电阻分压后再挂在ADC上; |
ADC_RANGE_MIN | number | ADC引脚的测量范围0-1.5V,这种方式被测电压可以经过外部电阻分压后再挂在ADC上; |
adc.setRange(range)
设置ADC的测量范围,就Air8000来说,有 ADC_RANGE_MAX 和 ADC_RANGE_MIN 两个常量;
参数
传入值类型 | 解释 |
---|---|
int | 就Air8000来说,有 ADC_RANGE_MAX 和 ADC_RANGE_MIN 两个常量; |
return | nil |
返回值
无
例子
-- !!!本函数要在调用adc.open之前就调用, 之后调用无效!!!
-- 设置ADC引脚的测量范围0-3.6V,这种方式被测电压不可经过外部电阻分压后再挂在ADC上;
adc.setRange(adc.ADC_RANGE_MAX)
-- 设置ADC引脚的测量范围0-1.5V,这种方式被测电压可以经过外部电阻分压后再挂在ADC上;
adc.setRange(adc.ADC_RANGE_MIN)
-- 说明:
-- 当被测量电压最高值在1.5v以内时, 推荐使用ADC_RANGE_MIN,且不添加外部分压电路;
-- 当被测量电压最高值在3.6v以内时, 推荐使用ADC_RANGE_MAX,且不添加外部分压电路;
-- 当被测量电压最高值在3.6v以上时, 推荐使用ADC_RANGE_MIN,且必须添加外部分压电路;
adc.open(id)
打开adc通道
参数
传入值类型 | 解释 |
---|---|
int | 通道id,与具体设备有关,通常从0开始 |
返回值
返回值类型 | 解释 |
---|---|
boolean | 打开结果 |
例子
-- 打开adc通道2,并读取
if adc.open(2) then
log.info("adc", adc.get(2)) -- 返回电压值;
end
adc.close(2) -- 若需要持续读取, 则不需要close, 功耗会高一点.
adc.get(id)
获取adc计算值
参数
传入值类型 | 解释 |
---|---|
int | 通道id,,Air8000从0开始,共0-3四个硬件通道 |
返回值
返回值类型 | 解释 |
---|---|
int | 单位是mV, 若读取失败,会返回-1 |
例子
-- 设置adc.setRange(adc.ADC_RANGE_MAX)方式,打开adc通道2,并读取电压值
adc.setRange(adc.ADC_RANGE_MAX)
adc.open(2)
local data = adc.get(2)
adc.close(2)
log.info("adc读出值", data)
-- 此时读取的data值即为ADC电压值,也为被测电压的实际值;
-- 设置adc.setRange(adc.ADC_RANGE_MIN)方式,打开adc通道2,并读取电压值
adc.setRange(adc.ADC_RANGE_MIN)
adc.open(2)
local data = adc.get(2)
adc.close(2)
log.info("adc读出值", data)
-- 此时读取的data值即为ADC电压值,但不是外部被测电压的实际值,外部电压的实际值需要再根据外部电压的分压比例进行换算;
-- 由于外部分压电阻的精度客观上存在误差,因此经外部电压的分压比换算而来的外部电压值可能与实际值存在一定的误差;
adc.close(id)
关闭adc通道
参数
传入值类型 | 解释 |
---|---|
int | 通道id,,Air8000从0开始,共0-3四个硬件通道 |
返回值
无
例子
-- 打开adc通道2,并读取
if adc.open(2) then
log.info("adc", adc.read(2))
end
adc.close(2)