ESP32-C3实现ADC

思路

  1. 定义 ADC 管脚和 UART 参数。
  2. 初始化 ADC 和 UART。
  3. 在循环中读取 ADC 值,将其转换为电压,并通过 UART 输出。

扩展知识

analogSetAttenuation() 函数是ESP32特有的一个函数,用于设置模拟输入引脚的衰减级别。这个函数影响ADC(模数转换器)如何读取外部电压。

衰减级别决定了输入电压范围,这是因为在没有衰减的情况下,ESP32的ADC只能正确读取0到1.1V之间的电压。通过增加衰减,可以扩展这个范围,以便测量更高的电压。

参数ADC_11db是衰减级别的枚举值之一,以下是可用的衰减级别及其对应的电压范围:

  • ADC_0db: 无衰减,输入电压范围是0 - 1.1V
  • ADC_2_5db: 2.5dB衰减,输入电压范围是0 - ~1.5V
  • ADC_6db: 6dB衰减,输入电压范围是0 - ~2.2V
  • ADC_11db: 11dB衰减,输入电压范围是0 - 3.3V

当选择ADC_11db时,你就可以测量0到3.3V之间的电压,这对于使用3.3V电源的ESP32系统来说是非常有用的。

这里是如何使用analogSetAttenuation()函数的示例:

analogSetAttenuation(ADC_11db); // 设置衰减为11dB,允许测量0-3.3V的电压

完整实例

#define ADC_PIN 2  // 定义一个 GPIO 管脚作为 ADC 输入

// ADC 参数
#define ADC_ATTENUATION ADC_11db  // 设置 ADC 衰减,适用于 0 - 3.3V 的输入范围
#define ADC_RESOLUTION 12         // 设置 ADC 分辨率,ESP32-C3 支持最高 12 位
#define V_REF 3.3                 // 参考电压

void setup() {
  Serial.begin(115200);  // 初始化串口通信,波特率 115200
  analogSetAttenuation(ADC_ATTENUATION);  // 设置 ADC 衰减
  analogReadResolution(ADC_RESOLUTION);    // 设置 ADC 分辨率
}

void loop() {
  // 读取 ADC 值
  int adcValue = analogRead(ADC_PIN);
  
  // 将 ADC 值转换为电压
  float voltage = (float)adcValue * V_REF / (1 << ADC_RESOLUTION);
  
  // 通过 UART 输出电压值
  Serial.print("Voltage: ");
  Serial.print(voltage, 2);  // 输出电压值,保留两位小数
  Serial.println(" V");
  
  // 等待一段时间再次读取
  delay(1000);
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值