esp32 adc电压采集
程序员文章站
2024-02-25 10:45:22
...
esp32 adc电压采集
esp32adc介绍
ESP32集成了两个12位SAR(逐次逼近寄存器)ADC,总共支持18个测量通道(模拟使能引脚)。
ADC驱动器API支持ADC1(8个通道,连接到GPIO 32-39)和ADC2(10个通道,连接到GPIO 0、2、4、12-15和25-27)。但是,ADC2的使用对应用程序有一些限制:
Wi-Fi驱动程序使用ADC2。因此,应用程序只能在未启动Wi-Fi驱动程序时使用ADC2。
一些ADC2引脚用作捆绑引脚(GPIO 0、2、15),因此不能*使用。
具体可以查看官方文档[]
电路部分
可以看到其连接到esp32的io34.
代码
从官方文档可以看到,io34位adc1的6通道
static const adc_unit_t unit = ADC_UNIT_1;//选择adc1
static const adc_channel_t channel = ADC_CHANNEL_6; //GPIO34
设置衰减值
ADC的默认满量程电压为1.1V。要读取更高的电压(最高为引脚最大电压,通常为3.3V),则需要将该ADC通道的信号衰减设置为> 0dB。
当VDD_A为3.3V时:
0dB衰减(ADC_ATTEN_0db)提供满量程电压1.1V
2.5dB衰减(ADC_ATTEN_2_5db)提供满量程电压1.5V
6dB衰减(ADC_ATTEN_6db)提供满量程电压2.2V
11dB衰减(ADC_ATTEN_11db)提供3.9V的满量程电压
由于采集两个相同电阻中间电压,电压值最大为2.5左右,故选用11db衰减。
static const adc_atten_t atten = ADC_ATTEN_11db;//满量程为3.9v
然后配置采集宽度
adc1_config_width(ADC_WIDTH_BIT_12);//采集宽度
adc1_config_channel_atten(channel, atten);//配置通道 以及衰减度
adc_chars = calloc(1, sizeof(esp_adc_cal_characteristics_t));
esp_adc_cal_value_t val_type = esp_adc_cal_characterize(unit, atten, ADC_WIDTH_BIT_12, DEFAULT_VREF, adc_chars);//在特定衰减下表征ADC的特性
print_char_val_type(val_type);
然后在主函数循环采样
while(1) {
uint32_t adc_reading = 0;
//Multisampling
for (int i = 0; i < NO_OF_SAMPLES; i++) {
adc_reading += adc1_get_raw((adc1_channel_t)channel);//从单个通道获取ADC1读数。
}
adc_reading /= NO_OF_SAMPLES;
//Convert adc_reading to voltage in mV
uint32_t voltage = esp_adc_cal_raw_to_voltage(adc_reading, adc_chars);//将ADC读数转换为以mV为单位的电压
printf("Raw: %d\tVoltage: %dmV\n", adc_reading, voltage);
vTaskDelay(pdMS_TO_TICKS(1000));
致辞采集完成。