3 1. Air101,Air103 模块上的ADC0脚-PA1, 0~2.4v,不要超过范围使用!!!
4 2. Air101,Air103模块上的ADC1脚-PA4, 0~2.4v,不要超过范围使用!!!
5 3. Air103 模块上的ADC2脚-PA2, 0~2.4v,不要超过范围使用!!!
6 4. Air103 模块上的ADC3脚-PA3, 0~2.4v,不要超过范围使用!!!
7 5. Air101,Air103 adc.CH_CPU 为内部温度 ,adc.CH_VBAT为VBAT
8 6. Air105 adc参考电压是1.88V,所有通道一致,
9 7. Air105内部分压没有隔离措施,在开启内部分压后,量程有所变化,具体看寄存器手册,1~5分压后能测到3.6,6通道能接近5V,但是不能直接测5V,可以测4.2V 0通道是始终开启无法关闭分压。
10 8. Air780E内部ADC接口为12bits 外部直流分压为0-3.4V
11 9. Air780E内部具有2个ADC接口,ADC0 -- AIO3 ADC1 -- AIO4
12 10. 特殊通道, CPU内部温度Temp -- adc.CH_CPU 主供电脚电压 VBAT -- adc.CH_VBAT
13 11. 设置分压(adc.setRange)要在adc.open之前设置,否则无效!!
18 local rtos_bsp
= rtos
.bsp()
19 function adc_pin() -- 根据不同开发板,设置ADC编号
20 if rtos_bsp
== "AIR101" then -- Air101开发板ADC编号
21 return 0,1,255,255,adc
.CH_CPU
,adc
.CH_VBAT
22 elseif rtos_bsp
== "AIR103" then -- Air103开发板ADC编号
23 return 0,1,2,3,adc
.CH_CPU
,adc
.CH_VBAT
24 elseif rtos_bsp
== "AIR105" then -- Air105开发板ADC编号
25 -- 默认不开启分压,范围是0-1.8v精度高
26 -- 设置分压要在adc.open之前设置,否则无效!!
27 -- adc.setRange(adc.ADC_RANGE_3_6)
28 return 0,5,6,255,255,255
29 elseif rtos_bsp
== "ESP32C3" then -- ESP32C3开发板ADC编号
30 return 0,1,2,3,adc
.CH_CPU
, 255
31 elseif rtos_bsp
== "ESP32C2" then -- ESP32C2开发板ADC编号
32 return 0,1,2,3,adc
.CH_CPU
, 255
33 elseif rtos_bsp
== "ESP32S3" then -- ESP32S3开发板ADC编号
34 return 0,1,2,3,adc
.CH_CPU
, 255
35 elseif rtos_bsp
== "EC618" then --Air780E开发板ADC编号
36 -- 默认不开启分压,范围是0-1.2v精度高
37 -- 设置分压要在adc.open之前设置,否则无效!!
38 -- adc.setRange(adc.ADC_RANGE_3_8)
39 return 0,1,255,255,adc
.CH_CPU
,adc
.CH_VBAT
40 elseif rtos_bsp
== "EC718P" then --Air780EP开发板ADC编号
41 -- 默认不开启分压,范围是0-1.6v精度高
42 -- 开启分压后,外部输入最大不可超过3.3V
43 -- 设置分压要在adc.open之前设置,否则无效!!
44 -- adc.setRange(adc.ADC_RANGE_MAX)
45 return 0,1,255,255,adc
.CH_CPU
,adc
.CH_VBAT
46 elseif rtos_bsp
== "UIS8850BM" then
47 return 0,255,255,255, adc
.CH_CPU
,adc
.CH_VBAT
49 log.info("main", "define ADC pin in main.lua")
50 return 255,255,255,255, adc
.CH_CPU
,adc
.CH_VBAT
53 local adc_pin_0
,adc_pin_1
,adc_pin_2
,adc_pin_3
,adc_pin_temp
,adc_pin_vbat
=adc_pin()
56 function testAdc
.dotest()
57 if rtos_bsp
== "AIR105" then
58 adc
.setRange(adc
.ADC_RANGE_3_6
) --开启的内部分压,可以把量程扩大
60 if adc_pin_0
and adc_pin_0
~= 255 then adc
.open(adc_pin_0
) end
61 if adc_pin_1
and adc_pin_1
~= 255 then adc
.open(adc_pin_1
) end
62 if adc_pin_2
and adc_pin_2
~= 255 then adc
.open(adc_pin_2
) end
63 if adc_pin_3
and adc_pin_3
~= 255 then adc
.open(adc_pin_3
) end
64 if adc_pin_temp
and adc_pin_temp
~= 255 then adc
.open(adc_pin_temp
) end
65 if adc_pin_vbat
and adc_pin_vbat
~= 255 then adc
.open(adc_pin_vbat
) end
67 if adc_pin_0
and adc_pin_0
~= 255 and mcu
and mcu
.ticks
then
70 local ms_start
= mcu
.ticks()
74 local ms_end
= mcu
.ticks()
76 log.info("adc", "读取耗时", "100次", ms_end
- ms_start
, "ms", "单次", (ms_end
- ms_start
) // 100, "ms")
79 -- 下面是循环打印, 接地不打印0也是正常现象
80 -- ADC的精度都不会太高, 若需要高精度ADC, 建议额外添加adc芯片
82 if adc_pin_0
and adc_pin_0
~= 255 then
83 log.debug("adc", "adc" .. tostring(adc_pin_0
), adc
.get(adc_pin_0
)) -- 若adc.get报nil, 改成adc.read
85 if adc_pin_1
and adc_pin_1
~= 255 then
86 log.debug("adc", "adc" .. tostring(adc_pin_1
), adc
.get(adc_pin_1
))
88 if adc_pin_2
and adc_pin_2
~= 255 then
89 log.debug("adc", "adc" .. tostring(adc_pin_2
), adc
.get(adc_pin_2
))
91 if adc_pin_3
and adc_pin_3
~= 255 then
92 log.debug("adc", "adc" .. tostring(adc_pin_3
), adc
.get(adc_pin_3
))
94 if adc_pin_temp
and adc_pin_temp
~= 255 then
95 log.debug("adc", "CPU TEMP", adc
.get(adc_pin_temp
))
97 if adc_pin_vbat
and adc_pin_vbat
~= 255 then
98 log.debug("adc", "VBAT", adc
.get(adc_pin_vbat
))
103 -- 若不再读取, 可关掉adc, 降低功耗, 非必须
104 if adc_pin_0
and adc_pin_0
~= 255 then adc
.close(adc_pin_0
) end
105 if adc_pin_1
and adc_pin_1
~= 255 then adc
.close(adc_pin_1
) end
106 if adc_pin_2
and adc_pin_2
~= 255 then adc
.close(adc_pin_2
) end
107 if adc_pin_3
and adc_pin_3
~= 255 then adc
.close(adc_pin_3
) end
108 if adc_pin_temp
and adc_pin_temp
~= 255 then adc
.close(adc_pin_temp
) end
109 if adc_pin_vbat
and adc_pin_vbat
~= 255 then adc
.close(adc_pin_vbat
) end