文章目录[隐藏]
Arduino ESP32 ADC模拟量信号读取
这篇文章展示如何使用Arduino IDE读取与ESP32模拟输入。模拟读数对于读出可变电阻(如电位器或模拟传感器)的值很有用。
使用ESP32读取模拟输入就像使用analogRead(GPIO)函数一样简单,它接受要读取的GPIO作为参数。
ESP32模拟输入(ADC)
用ESP32读取模拟值意味着你可以测量0 V到3.3 V之间的变化电压等级。然后将测量的电压赋给0到4095之间的一个值,其中0 V对应0,3.3 V对应4095。0 V到3.3 V之间的任何电压都将给出两者之间的相应值。
ADC是非线性的值
理想情况下,当使用ESP32 ADC引脚时,你会期望线性行为。然而,这并没有发生。你会得到如下图所示的行为:
这种行为意味着你的ESP32无法区分3.3 V和3.2 V。你会得到相同的电压值:4095。
同样的情况发生在非常低的电压值:对于0 V和0.1 V,你将得到相同的值:0。
在使用ESP32 ADC引脚时,您需要记住这一点。
analogRead()
使用Arduino IDE读取ESP32模拟输入就像使用analogRead()函数一样简单。它接受你想要读取的GPIO作为参数:
analogRead(GPIO);
- ESP32支持18个不同通道的测量。在DEVKIT V1 DOIT板(30 gpio版本)中只有15个可用。
其他相关的功能
analogReadResolution(resolution)
:设置样本位和分辨率。它可以是一个介于9(0 - 511)和12位(0 - 4095)之间的值。默认是12位分辨率。analogSetWidth(width)
:设置样本位和分辨率。它可以是一个介于9(0 - 511)和12位(0 - 4095)之间的值。默认是12位分辨率。analogSetCycles(cycles)
:设置每个样本的循环次数。默认是8。取值范围:1 ~ 255。analogSetSamples(samples)
:设置范围内的样本数量。默认为1个样本。它有增加灵敏度的作用。analogSetClockDiv(attenuation)
:设置ADC时钟的分压器。默认值为1。取值范围:1 ~ 255。analogSetAttenuation(attenuation)
:设置所有ADC引脚的输入衰减。默认是ADC_11db。其他取值:
ADC_0db: 集没有衰减。ADC可以测量大约800mv (1V输入= ADC读数1088)。
ADC_2_5db: ADC的输入电压将被衰减,扩展测量范围至约。1100 mV。(1V输入= ADC读数3722)。
ADC_6db: ADC的输入电压将被衰减,扩展测量范围至约。1350 mV。(1V输入= ADC读数3033)。
ADC_11db: ADC的输入电压将被衰减,扩展测量范围至约。2600 mV。(1V输入= ADC读数1575)。
analogSetPinAttenuation(pin, attenuation)
:设置指定引脚的输入衰减。默认是ADC_11db。衰减值与前一个函数相同。adcAttachPin(pin)
:附加一个引脚到ADC(也清除任何其他模拟模式可能是on)。返回TRUE或FALSE结果。adcStart(pin)
,adcBusy(pin)
和resultadcEnd(pin)
:在附加引脚的总线上启动ADC转换。检查引脚的ADC总线上的转换是否正在运行(返回TRUE
或FALSE
)。获取转换的结果:返回16位整数。
接线图
实例代码
// 电位器连接到GPIO 34(模拟ADC1_CH6)
const int potPin = 34;
// 用于存储电位器值的变量
int potValue = 0;
void setup() {
Serial.begin(115200);
delay(1000);
}
void loop() {
// 读取电位计值
potValue = analogRead(potPin);
Serial.println(potValue);
delay(500);
}
- 串口打印读取定位器的数值(得到的最大值是4095,最小值是0。)
版权声明:本文为CSDN博主「perseverance52」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_42880082/article/details/121055405
暂无评论