tiger_zc 发表于 2024-4-14 21:22:52

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个发送通道

ADC使用注意事项:   从引脚示意图可以看出,C6上共有6个ADC引脚可以供我们使用,在使用的时候应该注意有没有端口被占用的情况。比如使用WIFI时候,就会占用ADC1_2,这个使用再使用ADC2就会出数据出错;使用GDI接口可能会占用ACD1_1。
ADC库函数的使用:Arduino IDE已经提供了 ESP32 核心库有关ADC库函数,可供我们调用,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电位器,接线图如下












接线示意图
测试代码:#include "esp32-hal.h"
// 电位器连接到GPIO 2(模拟ADC1_CH6)
const int PotPin = 3;

// 用于存储电位器值的变量
int PotValue = 0;

void setup() {
Serial.begin(115200);
delay(1000);
}

void loop() {
// 读取电位计值
PotValue = analogRead(PotPin);
Serial.println(PotValue);
delay(500);
}
代码写入后,当旋转电位器时候,串口监视器的读数就会在0~3296之间连续变化。
https://mc.dfrobot.com.cn/data/attachment/forum/202404/14/210739drnl3i0r95zrpxo8.png               https://mc.dfrobot.com.cn/data/attachment/forum/202404/14/210854tfzst1yjntscn1yn.png
土壤湿度传感器测试:      为了更能说明问题,用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 VDCl 工作电流: 7mAl 输出电压: 0 ~ 2.9 VDCl 接口型号: 2.54-3Pinl 电缆线长: 1.5ml 尺寸(LxW): 175 x 30mm
https://mc.dfrobot.com.cn/data/attachment/forum/202404/14/211006s71nmjll0wz81kn0.png      这款传感器可以工作在3.3~5.5V电压下,所以可以直接用在ESP32中。用该传感器替换10K电位器,这时,会看到串口监视器中的数据有了新的变化。当把传感器插入水中,读数在545左右;当把传感器擦干后,读数在2930左右。湿度越大,读数越小,数值和湿度值成反比。https://mc.dfrobot.com.cn/data/attachment/forum/202404/14/211403xtgjzkknmhn2meme.jpghttps://mc.dfrobot.com.cn/data/attachment/forum/202404/14/211048byeyyg2r51cw5fgz.png                     https://mc.dfrobot.com.cn/data/attachment/forum/202404/14/211119vbb5vi6paliya9sb.png      本案例中使用ESP32主控板,对比Arduino主板的读数会偏大,这是因为UNO上的ADC是10位的,读取数值区间在0-1023。而ESP32主控的供电电压为3.3V,其ADC为12位,读取数值区间是0-4095。所以使用ESP32主控时,传感器的读数变大了。



页: [1]
查看完整版本: Arduino ESP32 C6 ADC功能介绍以及模拟量信号读取