esp32c3模拟输入
时间: 2023-08-03 09:08:52 浏览: 165
ESP32-C3 支持模拟输入,可以使用内置的 SAR(逐次逼近寄存器)模块来实现。下面是一个简单的示例代码,展示如何使用 ESP32-C3 的 SAR 模块读取模拟输入:
```c
#include "esp_adc_cal.h"
#include "driver/adc.h"
#define DEFAULT_VREF 1100 // 默认参考电压为 1100mV
#define NO_OF_SAMPLES 64 // 采样次数
#define ADC_CHANNEL ADC_CHANNEL_6 // ADC6
void app_main(void)
{
// 初始化 ADC
adc1_config_width(ADC_WIDTH_BIT_12);
adc1_config_channel_atten(ADC_CHANNEL, ADC_ATTEN_DB_11);
// 初始化参考电压
esp_adc_cal_characteristics_t characteristics;
esp_adc_cal_get_characteristics(DEFAULT_VREF, ADC_ATTEN_DB_11, ADC_WIDTH_BIT_12, &characteristics);
// 读取模拟输入
uint32_t adc_reading = 0;
for (int i = 0; i < NO_OF_SAMPLES; i++) {
adc_reading += adc1_get_raw(ADC_CHANNEL);
vTaskDelay(pdMS_TO_TICKS(10));
}
adc_reading /= NO_OF_SAMPLES;
// 转换为电压值
uint32_t voltage = esp_adc_cal_raw_to_voltage(adc_reading, &characteristics);
printf("ADC Reading: %d\tVoltage: %dmV\n", adc_reading, voltage);
}
```
在这个示例中,我们使用 ADC6 通道来读取模拟输入。通过调整 `ADC_ATTEN_DB_11` 参数来设置 ADC 的增益,以适应我们所使用的模拟输入电压范围。在这个示例中,我们使用默认的参考电压(1100mV),并采样 64 次以获得平均值。最后,我们使用 `esp_adc_cal_raw_to_voltage` 函数将 ADC 读数转换为电压值。
阅读全文