关于esp32的ADC采集
对于ADC采集
程序源码如下:
1 /* ADC1 Example 2 3 This example code is in the Public Domain (or CC0 licensed, at your option.) 4 5 Unless required by applicable law or agreed to in writing, this 6 software is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR 7 CONDITIONS OF ANY KIND, either express or implied. 8 */ 9 #include <stdio.h> 10 #include <string.h> 11 #include <stdlib.h> 12 #include "freertos/FreeRTOS.h" 13 #include "freertos/task.h" 14 #include "freertos/queue.h" 15 #include "driver/gpio.h" 16 #include "driver/adc.h" 17 18 #define ADC1_TEST_CHANNEL (4) 19 20 void adc1task(void* arg) 21 { 22 // initialize ADC 23 adc1_config_width(ADC_WIDTH_12Bit); 24 adc1_config_channel_atten(ADC1_TEST_CHANNEL,ADC_ATTEN_11db); 25 while(1){ 26 printf("The adc1 value:%d\n",adc1_get_voltage(ADC1_TEST_CHANNEL)); 27 vTaskDelay(1000/portTICK_PERIOD_MS); 28 } 29 } 30 31 void app_main() 32 { 33 xTaskCreate(adc1task, "adc1task", 1024*3, NULL, 10, NULL); 34 }
ESP32集成了两个12位SAR(“逐次逼近寄存器”)ADC(模数转换器),并支持18通道(模拟使能引脚)的测量。这些引脚中的一些可用于构建用于测量小型模拟信号的可编程增益放大器。
ADC驱动程序API目前仅支持ADC1(9个通道,连接到GPIO 32-39)。
进行ADC读取需要以所需的精度和注意事项设置ADC,然后调用adc1_get_voltage()来读取通道。
本例程选用adc1task对adc进行初始化设置
(1)adc1_config_width(),设定捕获宽度,其中ADC_WIDTH_12Bit表示捕获宽度位数,esp32有四种捕获宽度,分别为9bit,10bit,11bit和12bit。
(2)
adc1_config_channel_atten(),设定捕获通道,其中ADC1_TEST_CHANNEL为配置的通道,ADC_ATTEN_11db为设定衰减比(即满量程的电压,11db是满量程时电压为3.9V,其他衰减比看API手册)。- (3)adc1_get_voltage()用来读取在单个通道上的ADC读数。
- 最后在主函数中对adctask进行调用即可。
程序源码如下;
烧写程序后,将GPIO32连接到一个可以改变的电压输出口,打开minicom,观察电压输出值,调节电压,观察输出值变化。
硬件连接如下
minicom输出如下图所示
相关知识:AD转换相关函数API接口