关于ESP32的ADC外设的详细介绍放在了ESP-IDF开发的对应文章中,通过跳转链接可以找到。
1. API
1.1 读取ADC(原始值)
uint16_t analogRead(uint8_t pin)
- pin:ADC管脚。
1.2 读取ADC(电压值)
uint32_t analogReadMilliVolts(uint8_t pin)
- pin:ADC管脚。
返回转换后的电压毫伏值。
1.3 设置转换分辨率
void analogReadResolution(uint8_t bits)
- bits:分辨率位数(1-16) 。
1.4 设置衰减
void analogSetAttenuation(adc_attenuation_t attenuation)
- attenuation:衰减。
衰减值 | 数据范围 |
---|---|
ADC_0db | 100mV - 950mV |
ADC_2_5db | 100mV - 1250mV |
ADC_6db | 150mV - 1750mV |
ADC_11db | 150mV - 3100mV |
2. 例程
2.1 单次采集
每1秒采集一次ADC原始值和电压值。
#include <Arduino.h>TickType_t adcTick = 0;
TickType_t dacTick = 0;
uint8_t dacVal = 0;void setup()
{Serial.begin(115200);/* 初始化ADC */analogSetAttenuation(ADC_11db);analogReadResolution(12);
}void loop()
{TickType_t tick = xTaskGetTickCount();/* 采集ADC */if (tick - adcTick >= 1000 / portTICK_PERIOD_MS) {Serial.printf("[ADC] raw: %d, volt: %d mV\r\n", analogRead(36), analogReadMilliVolts(36));adcTick = tick;}/* 改变DAC输出电压 */if (tick - dacTick >= 2000 / portTICK_PERIOD_MS) {dacWrite(25, dacVal);dacVal += 10;dacTick = tick;}
}
setup函数里面设置ADC分辨率为12位,衰减为11db,这两个是默认值不配也行。