adc#

本章介绍LuatOS的adc功能,实现使用开发板读取外部电压并在日志中打印

简介#

模拟数字转换器即A/D转换器,或简称ADC,通常是指一个将模拟信号转变为数字信号的电子元件。

Air101共有2路ADC,开发板引出了2路,通道分别为0,1,输入电压范围 0~2.4V(参考air101_芯片规格书_v1.1.pdf)

没有使用分压电路的情况下,我们直接使用只能采集0~2.4V的电压,外接输入一定不要超过2.4V,否则会烧毁芯片!!

ADC

Air103共有4路ADC,开发板引出了4路,通道分别为0,1,2,3,输入电压范围 0~2.4V(参考Air103_MCU设计手册V1.2.pdf)

没有使用分压电路的情况下,我们直接使用只能采集0~2.4V的电压,外接输入一定不要超过2.4V,否则会烧毁芯片!!

ADC

Air105共有7路ADC,开发板引出了4路,通道分别为1,2,5,6(参考Air105 核心板使用手册V1.1.pdf

参考Air105芯片数据手册_1.1.pdf可知,ADC 的参考电压为 1.8V,ADC 通道 1~通道 6 采集电压范围可配,使能内部分压时采集电压范围 0~3.6V,不使能内部分压时采集电压范围 0~1.8V,在LuatOS中未使能内部分压,所以我们直接使用只能采集0~1.8V的电压,外接输入一定不要超过1.8V,否则会烧毁芯片!!

ADC

硬件准备#

Air101开发板一块,可调电源一台,接线示意如下

注意:先打开可调电源,调到2.4V以下,再连接电源与开发板,防止直接连接开机电压过高烧毁芯片

        PA04/ADC1 ----------- +
Air101                         可调电源
        GND      ----------- -

ADC2

Air103开发板一块,可调电源一台,接线示意如下

注意:先打开可调电源,调到2.4V以下,再连接电源与开发板,防止直接连接开机电压过高烧毁芯片

        PA04/ADC1 ----------- +
Air103                         可调电源
        GND      ----------- -

ADC2

Air105开发板一块,可调电源一台,接线示意如下

注意:先打开可调电源,调到1.8V以下,再连接电源与开发板,防止直接连接开机电压过高烧毁芯片

        PC0/ADC1 ----------- +
Air105                         可调电源
        GND      ----------- -

ADC2

软件部分#

接口文档可参考:ADC库

代码如下

PROJECT = "ADC"
VERSION = "1.0.0"

sys = require("sys")

MOD_TYPE = rtos.bsp()
log.info("MOD_TYPE", MOD_TYPE)

function test()
    log.info(PROJECT, "START")
    -- 打开ADC通道1
    assert(adc.open(1) == true, PROJECT .. ".open ERROR")
    -- 读取ADC通道1的值
    log.info(PROJECT .. ".read", adc.read(1))
    -- 关闭ADC通道1
    adc.close(1)
    log.info(PROJECT, "DONE")
end

-- 创建一个携程循环执行test函数
sys.taskInit(function()
    while true do
        test()
        sys.wait(1000)
    end
end)

sys.run()

注意:adc.read有两个返回值,第一个值为原始值,第二个值为转换值,单位为mV

成功下载后,观察日志输出如下,根据adc.read返回的第二个值可知测量电压为1712mV左右

I/user.ADC START
I/user.ADC.read 103336 1776
I/user.ADC DONE
I/user.ADC START
I/user.ADC.read 103348 1777
I/user.ADC DONE
I/user.ADC START
I/user.ADC.read 103372 1777
I/user.ADC DONE
...
...

缓慢下调可调电源的电压值,观察日志输出的电压值对应可调电源的电压值

I/user.ADC START
I/user.ADC.read 86784 1262
I/user.ADC DONE
I/user.ADC START
I/user.ADC.read 86844 1264
I/user.ADC DONE
I/user.ADC START
I/user.ADC.read 86852 1264
I/user.ADC DONE
...
...

I/user.ADC.read 50736 142
I/user.ADC DONE
I/user.ADC START
I/user.ADC.read 50832 145
I/user.ADC DONE
I/user.ADC START
I/user.ADC.read 50788 144
I/user.ADC DONE
...
...

成功下载后,观察日志输出如下,根据adc.read返回的第二个值可知测量电压为1712mV左右

I/user.ADC.read 97672 1600
I/user.ADC DONE
I/user.ADC START
I/user.ADC.read 97700 1601
I/user.ADC DONE
I/user.ADC START
I/user.ADC.read 97656 1600
I/user.ADC DONE
...
...

缓慢下调可调电源的电压值,观察日志输出的电压值对应可调电源的电压值

I/user.ADC START
I/user.ADC.read 80300 1061
I/user.ADC DONE
I/user.ADC START
I/user.ADC.read 80364 1063
I/user.ADC DONE
I/user.ADC START
I/user.ADC.read 80300 1061
I/user.ADC DONE
...
...

I/user.ADC START
I/user.ADC.read 62060 494
I/user.ADC DONE
I/user.ADC START
I/user.ADC.read 62052 494
I/user.ADC DONE
I/user.ADC START
I/user.ADC.read 61984 492
I/user.ADC DONE
...
...

成功下载后,观察日志输出如下,根据adc.read返回的第二个值可知测量电压为1712mV左右

I/user.ADC START
I/user.ADC.read 3882 1712
I/user.ADC DONE
I/user.ADC START
I/user.ADC.read 3889 1709
I/user.ADC DONE
I/user.ADC START
I/user.ADC.read 3898 1713
I/user.ADC DONE
...
...

缓慢下调可调电源的电压值,观察日志输出的电压值对应可调电源的电压值

I/user.ADC START
I/user.ADC.read 2670 1173
I/user.ADC DONE
I/user.ADC START
I/user.ADC.read 2675 1175
I/user.ADC DONE
I/user.ADC START
I/user.ADC.read 2673 1174
I/user.ADC DONE
...
...

I/user.ADC START
I/user.ADC.read 1354 595
I/user.ADC DONE
I/user.ADC START
I/user.ADC.read 1350 593
I/user.ADC DONE
I/user.ADC START
I/user.ADC.read 1348 592
I/user.ADC DONE
...
...