ESP32-S3学习笔记<6>:ADC的应用

1. 头文件包含

#include "hal/adc_types.h"
#include "esp_adc/adc_oneshot.h"
#include "esp_adc/adc_cali.h"
#include "esp_adc/adc_cali_scheme.h"

2. ADC的配置

ADC配置,主要分为三个步骤。首先配置ADC外设,然后配置ADC通道,最后初始化校准并获得通道校准句柄。

2.1 配置ADC外设

使用如下函数配置ADC外设:

esp_err_t adc_oneshot_new_unit(const adc_oneshot_unit_init_cfg_t *init_config, adc_oneshot_unit_handle_t *ret_unit);

第一个参数 init_config 的结构定义如下:

typedef struct {
   
   
    adc_unit_t unit_id;             ///< ADC unit
    adc_oneshot_clk_src_t clk_src;  ///< Clock source
    adc_ulp_mode_t ulp_mode;        ///< ADC controlled by ULP, see `adc_ulp_mode_t`
} adc_oneshot_unit_init_cfg_t;

第一个成员 unit_id 用于指定要配置哪个ADC。ESP32-S3有2个ADC外设可用。合法的选项有:

typedef enum {
   
   
    ADC_UNIT_1,        ///< SAR ADC 1
    ADC_UNIT_2,        ///< SAR ADC 2
} adc_unit_t;

第二个成员 clk_src 用于指定时钟源。实际上只有一个选项:

typedef enum {
   
   
    ADC_RTC_CLK_SRC_RC_FAST = SOC_MOD_CLK_RC_FAST,      /*!< Select RC_FAST as the source clock */
    ADC_RTC_CLK_SRC_DEFAULT = SOC_MOD_CLK_RC_FAST,      /*!< Select RC_FAST as the default clock choice */
} soc_periph_adc_rtc_clk_src_t;

第三个成员 ulp_mode 用于指定是否使用低功耗控制。不需要系统睡眠时ADC运行的话,使用第一个选项即可:

typedef enum {
   
   
    ADC_ULP_MODE_DISABLE = 0, ///< ADC ULP mode is disabled
    ADC_ULP_MODE_FSM     = 1, ///< ADC is controlled by ULP FSM
    ADC_ULP_MODE_RISCV   = 2, ///< ADC is controlled by ULP RISCV
} adc_ulp_mode_t;

函数的第二个参数为出参数,创建成功时返回ADC外设单元的句柄。

2.2 配置ADC通道

ESP32-S3有2个ADC外设,每个ADC外设又支持10个通道输入。因此需要配置ADC量化哪个通道。一个ADC外设在某个时间点,是肯定只能转化一个通道的。但是驱动都将这些做好的。一个ADC可以添加多个通道。
使用如下的函数来指定ADC的通道。

esp_err_t adc_oneshot_config_channel(adc_oneshot_unit_handle_t handle, adc_channel_t channel, const adc_oneshot_chan_cfg_t *config);

第一个参数 handle ,是上一步配置ADC外设时返回的句柄。
第二个参数 channel,指定要将哪个通道加入到ADC外设上。可用的值如下面所示。注意硬件上,GPIO和ADC通道的对应关系。要查数据手册,明确硬件设计的需要ADC的GPIO对应的哪个ADC外设,以及哪个ADC通道。

typedef enum {
   
   
    ADC_CHANNEL_0,     ///< ADC channel
    ADC_CHANNEL_1,     ///< ADC channel
    ADC_CHANNEL_2,     ///< ADC channel
    ADC_CHANNEL_3,     ///< ADC channel
    ADC_CHANNEL_4,     
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值