在ESP32中,内置了 2 个 12 位的逐次逼近数字模拟转换器,由 5 个专用转换器控制器管理,可测量来自 18 个管脚的模拟信号。ADC 还可测量 vdd33 等内部信号。部分管脚有 1 个可编程增益放大器,用于测量微弱模拟信号。
主要特性
- 采用 2 个 SAR ADC,可支持同时采样与转换
- 采用 5 个专用 ADC 控制器,可支持不同应用场景(比如,高性能、低功耗,或功率检测和峰值检测)
- 支持 18 个模拟输入管脚
- 1 个内部电压 vdd33 通道、2 个 pa_pkdet 通道(部分控制器支持)
- 可配置 12 位、11 位、10 位、9 位多种分辨率
- 支持 DMA(1 个控制器支持)
- 支持多通道扫描模式(2 个控制器支持)
- 支持 Deep-sleep 模式运行(1 个控制器支持)
- 支持 ULP 协处理器控制(2 个控制器支持)
ESP32的ADC有两种方式:RTC SAR ADC和DIG SAR ADC。RTC SAR ADC是在低频状态下提供最小功耗的 ADC,而DIG SAR ADC性能和吞吐均实现了一定优化,具备以下特点:
- 高性能。时钟更快,因此采样速率实现了大幅提升。
- 支持多通道扫描模式。每个 SAR ADC 的测量规则可见样式表。扫描模式可配置为单通道模式、双通道模式或交替模式。
- 扫描可由软件或 I2S 总线发起。
- 支持 DMA。扫描完成即发生中断。
目前MicroPython中,只支持DIG SAR ADC1的功能,ADC2暂时不能使用。
ADC的使用和DAC类似,也是需要指定一下引脚。
- from machine import ADC, Pin
- adc = ADC(Pin(34))
- adc.read()
复制代码
ADC默认是12位的,因此返回值是0-4095。我们也可以将它设置为 9/10/11/12等几种方式,如:
- adc.width(ADC.WIDTH_10BIT)
复制代码
也可以指定衰减,用于扩大信号范围,支持0/2.5/6/11dB等,如:
相比ESP8266和STM32,ESP32的ADC更加灵活和复杂,使用范围也更广。
此内容由EEWORLD论坛网友dcexpert原创,如需转载或用于商业用途需征得作者同意并注明出处