關於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接口

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM