ESP32之ADC采样

        ADC采样即模数转换器,将模拟数据转换为数字数据。为什么要做这样的转化呢?想想原因是啥呢?对单片机来说肯定是数字信号处理方便啊。用ADC的话单片机肯定好处理一些,外界的数据肯定是不一样的,那么我们转换的话肯定是转成数字信号比较方便运算处理。那么我们进行接下来的操作步骤:

 1.资源分配

        ADC采样的时候需要先进行资源分配,看一下相关函数:

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

参数1:const adc_oneshot_unit_init_cfg_t *init_config,显然是我们的我们的配置内容,内容分别是

typedef struct {
    adc_unit_t unit_id;              //选择ADC组,ESP32C3开发板有ADC1和ADC2
    adc_oneshot_clk_src_t clk_src;  //选择时钟源
    adc_ulp_mode_t ulp_mode;       //选择是否使用低功耗模式
} adc_oneshot_unit_init_cfg_t;

参数2:dc_oneshot_unit_handle_t *ret_unit这个参数是ADC的handle

2.配置通道

        因为ADC转换器有多个通道,所以我们需要配置相应的通道才能准确的告诉单片机是哪个引脚,根据下图我们使用ADC1的通道0

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

参数1:ADC的句柄

参数2:通道号

参数3:对ADC通道的配置

综合来说对ADC1的配置如下:

void ADC_config_init(void)
{
  
    const adc_oneshot_unit_init_cfg_t initadc_config=
    {
        .clk_src=SOC_MOD_CLK_APB,
        .ulp_mode=ADC_ULP_MODE_DISABLE,
        .unit_id=ADC_UNIT_1
    };
   
    adc_oneshot_new_unit(&initadc_config, &adc_return);
    const adc_oneshot_chan_cfg_t chanle_config={
        .atten=    ADC_ATTEN_DB_11, 
        .bitwidth=ADC_BITWIDTH_12
    };
    adc_oneshot_config_channel(adc_return, ADC_CHANNEL_0,& chanle_config);
}

 下面是读取的ADC值的代码:

adc_int_t ADC_get_value(void )
{
    adc_int_t out_raw;
   adc_oneshot_read(adc_return, ADC_CHANNEL_0, &out_raw);
   return out_raw;

}

接下来到主函数中去调用:

extern "C" void app_main(void)
{

    ADC_config_init();
    int adc_value=0;

    while(1)
{

     adc_value=ADC_get_value();
     ESP_LOGI(TAG,"ADC_value%d",adc_value);
     vTaskDelay(10 );
    
}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值