三类模拟信号输出方式
1、LEDC:基于PWM调制的16通道模拟输出;
2、SigmaDelta:基于SigmaDelta调制的8通道模拟输出;
3、DAC:硬件DAC实现的2个通道的模拟输出。
模拟信号输入
ESP32有12位分辨率的ADC模块,故而其模拟输入函数的返回值在0~4095之间,一般来说ESP32的工作电压为3.3V,所以返回值为4095时,对应工作电压为3.3V,返回值为0时,工作电压为0V。但其ADC模块线性度不好,当电压小于0.1V是,返回值均为0,电压大于3.2V时,返回值均为4095。
ESP32有两个模拟信号输入函数,分别为analogRead()及analogSetWidth()。
详解:(以下关于引脚的说明是在全口的情况下,有的开发板不具备全部pin)
analogRead(pin);
//功能:读取指定引脚模拟信号,获得返回值;
//返回值:12bit精度ADC,默认范围0~4095;对应电压0~3.3V;
//pin:共15个模拟输入引脚,分别为A0、A3、A4、A5、A6、A7、A10、A12~A19。分别对应GPIO(36、39、32、33、34、35、4、2、15、13、12、14、27、25、26),当开启wifi时,建议只使用A0、A3、A4、A5、A6、A7。
analogSetWidth(bits); //A
analogReadResolution(bits); //B
//编译器版本不同可能不适用A
//功能:设置analogRead函数的取样分辨率;
//bits:取值范围9~12,取值为9时,analogRead函数返回值范围为0~511。
模拟输入例程
内容:读取电位器模拟值
ESP32仿真网站:链接: https://wokwi.com
器件:电位器 1个
ESP32开发板 1个
电路:
代码:
const int potpin = A4; //电位器连接在A4(32)
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
// analogSetWidth(9);
analogReadResolution(9); //分辨率设置
}
void loop() {
// put your main code here, to run repeatedly:
int potval = analogRead(potpin); //获取模拟值
Serial.println(potval);
}
仿真视频:
fuel cell0413-3 (3)