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介绍见[LuatOS-Air core API](https://doc.openluat.com/wiki/21?wiki_page_id=2242)章节
# 读取模块的供电电压值
模块的供电电压读取,原理上也是通过ADC来进行读取,但是此ADC通道为专用通道,无法通过ADC的API进行读取,需要通过misc.getVbatt()来读取底层上报的模块电压值。
>注意:
>1. misc.getVbatt()为LuatOS-Air上层lib接口,使用时需要进行require "misc"加载.
> 1. misc.getVbatt()读取的非瞬时值,底层进行过多次取样平均运算,返回的电压值时一个时间段内的平均值。
### misc.getVbatt()
* 功能:读取模块供电电压值。
* 语法:vb=misc.getVbatt()
* 返回值:
| 参数 | 类型 | 释义 | 取值 |
| ------ | ------ | ----------------- | ------------------------ |
| vb| number | 模块供电电压,单位mV | |
* 示例:
```lua
require "misc"
local vb=misc.getVbatt()
log.info("VBAT",vb);
```
## ADC使用示例
ADC 的具体使用方式可以参考如下示例代码,示例代码的主要步骤如下:
1. 打开ADC通道2 和ADC通道3,默认最大量程
2. 分别起三个循环定时器,每秒读取ADC2和ADC3的值和模块的vbat电压值。
3. 读取并打印ADC2和ADC3的原始值和电压值和模块的供电电压vbat电压值。
```lua
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接口 章节](https://hmi.wiki.luatos.com/doc/65042949/e6zPC3k9/0JltteiC)