1879浏览
查看: 1879|回复: 0

[ESP8266/ESP32] Arduino ESP32 C6 ADC功能介绍以及模拟量信号读取

[复制链接]
本帖最后由 tiger_zc 于 2024-4-14 23:49 编辑

       拿到DF公司的FireBeetle 2 ESP32-C6测试板已经后,就开始各种学习,为后面的项目做铺垫,毕竟ESP32好多强大的功能必须由浅入深来学习,和以前自己比较熟练的Arduino有很多不同之处。这里我就用实验和例程来介绍一下ESP32 模数转换器(ADC)功能以及模拟信号的读取。
ADC(模数转换器)是一种非常常见的外设,用于转换电压等模拟信号 转换为数字形式,以便可以由微控制器读取和处理。ADC在控制和监控应用中非常有用,因为大多数传感器 (例如,温度、压力、力)产生模拟输出电压。
ESP32芯片中集成了2个ADC单元,支持测量特定模拟IO管脚的模拟信号。其具有两个ADC单元,可以在生成ADC单次转换结果和ADC连续转换结果。此外,ADC还支持直接内存访问(DMA)功能,可以高速获取ADC转换结果。
关于ESP32 ADC的更多知识,可以去这里查看官方文档https://docs.espressif.com/proje ... ipherals/index.html
关于FireBeetle 2 ESP32-C6介绍请参看这里https://wiki.dfrobot.com.cn/_SKU ... le_2_Board_ESP32_C6

FireBeetle 2 ESP32-C6的接口引脚如下:
· 数字I/O x19
· LED PWM 控制器6个通道
· SPI x1
· UART x3((LP UART x1))
· I2C x2(LP I2Cx1)
· I2S x1
· 红外收发器:发送通道 x5、接收通道 x5
· 1 × 12 位 SAR ADC, 7个通道
· DMA 控制器,3个接收通道和 3个发送通道
Arduino ESP32 C6  ADC功能介绍以及模拟量信号读取图4


ADC使用注意事项:
     从引脚示意图可以看出,C6上共有6个ADC引脚可以供我们使用,在使用的时候应该注意有没有端口被占用的情况。比如使用WIFI时候,就会占用ADC1_2,这个使用再使用ADC2就会出数据出错;使用GDI接口可能会占用ACD1_1。

ADC库函数的使用:
Arduino IDE已经提供了 ESP32 核心库有关ADC库函数,可供我们调用,
Arduino ESP32 C6  ADC功能介绍以及模拟量信号读取图5
ESP32模拟输入(ADC)
用ESP32读取模拟值意味着可以测量0 V到3.3 V之间的变化电压等级。然后将测量的电压赋给0到4095之间的一个值,其中0 V对应0,3.3 V对应4095。0 V到3.3 V之间的任何电压都将给出两者之间的相应值。
有了库函数,我们在使用Arduino IDE读取ESP32的模拟输入就像使用analogRead()函数一样简单。
当我们在ESP32的ADC引脚中接入模拟输入量,就能方便地读出对应的数据。

模拟输入测试:

接入一个10K电位器,接线图如下


Arduino ESP32 C6  ADC功能介绍以及模拟量信号读取图6






Arduino ESP32 C6  ADC功能介绍以及模拟量信号读取图7


接线示意图

测试代码:
  1. #include "esp32-hal.h"
  2. // 电位器连接到GPIO 2(模拟ADC1_CH6)
  3. const int PotPin = 3;
  4. // 用于存储电位器值的变量
  5. int PotValue = 0;
  6. void setup() {
  7.   Serial.begin(115200);
  8.   delay(1000);
  9. }
  10. void loop() {
  11.   // 读取电位计值
  12.   PotValue = analogRead(PotPin);
  13.   Serial.println(PotValue);
  14.   delay(500);
  15. }
复制代码

代码写入后,当旋转电位器时候,串口监视器的读数就会在0~3296之间连续变化。

               

土壤湿度传感器测试:
      为了更能说明问题,用DF号称“大宝剑”的土壤湿度传感器来替换电位器,该产品链接_SKU_SEN0308_Gravity_模拟防水土壤湿度传感器-DFRobot
这是DFRobot新推出的一款防水式土壤湿度传感器,与老款的土壤湿度传感器相比,增加了防水性能,优化了防腐蚀性能,增加了极板长度并优化了电路性能。 电容式的土壤湿度传感器,相比电阻式传感器,解决了电阻式传感器易被腐蚀的问题,能够长时间插入泥土不被腐蚀。该款传感器增加了防水性能,传感器全部浸泡在水中仍能正常使用;增长了电容极板的长度,可以更精确的测量土壤湿度信息。该款传感器具有较宽的输入电压,能够在3.3V-5.5V宽电压下工作。兼容Arduino、ESP32、micro:bit掌控板、树莓派等常见控制板。标准设计的DFRobot-Gravity接口可以直接与Gavity IO扩展板相连接。而树莓派之类的微型PC,则需要外接一个ADC(模拟信号转数字信号)模块就可以工作。
参数规格
l 工作电压: 3.3 ~ 5.5 VDC
l 工作电流: 7mA
l 输出电压: 0 ~ 2.9 VDC
l 接口型号: 2.54-3Pin
l 电缆线长: 1.5m
l 尺寸(LxW): 175 x 30mm
Arduino ESP32 C6  ADC功能介绍以及模拟量信号读取图1Arduino ESP32 C6  ADC功能介绍以及模拟量信号读取图8
      这款传感器可以工作在3.3~5.5V电压下,所以可以直接用在ESP32中。用该传感器替换10K电位器,这时,会看到串口监视器中的数据有了新的变化。当把传感器插入水中,读数在545左右;当把传感器擦干后,读数在2930左右。湿度越大,读数越小,数值和湿度值成反比。
Arduino ESP32 C6  ADC功能介绍以及模拟量信号读取图2                 
Arduino ESP32 C6  ADC功能介绍以及模拟量信号读取图3   
      本案例中使用ESP32主控板,对比Arduino主板的读数会偏大,这是因为UNO上的ADC是10位的,读取数值区间在0-1023。而ESP32主控的供电电压为3.3V,其ADC为12位,读取数值区间是0-4095。所以使用ESP32主控时,传感器的读数变大了。




您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail