传感器-ADC的分辨率和最低有效位(LSB)

分辨率(Resolution)是指ADC转换器能够分辨量化的最小信号的能力,用二进制位数表示。

分辨率也是一个最低有效位(The Least Significant Bit,LSB)的变化量所对应的最小模拟增量,这个关键参数决定了转换器所能分辨的输入模拟信号的最小增量。

ADC的最低有效位LSB大小可以参考如下公式:

其中FSR是与基准电压(VREF)成比例的ADC的满量程输入范围(V),N是ADC输出代码中的位数,2N等于ADC代码的总数。 LSB大小等于满量程输入范围(FSR)除以ADC代码的总数,相当于覆盖整个输入范围所需的每个代码的步长。 例如:FSR = 3.3V,那么对于4位ADC,最低有效位LSB:

下图为4位ADC的阶跃函数,它将横坐标的输入电压映射到纵坐标的输出代码:

ADC采样模拟信号提供输入信号的量化数字码,输入电压与数字码的公式如下:

其中VIN(V)是ADC的输入电压,输出代码是ADC的十进制格式的数字输出代码,LSB大小是ADC代码中的最低有效位。

实例:针对一个0~5V范围的输入电压(ADC满量程5V):

1、用8位分辨率的 ADC测,

  • 输入电压是0V 时,输出的数字是0;
  • 输入电压是5V时,输出的数字是255;
  • 当数字增加1,实际上电压增加5/256=0.0195V;

2、用12位分辨率的ADC测:

  • 输入电压是0V时,输出的数字是0;
  • 输入电压是5V时,输出的数字是4095;
  • 当数字增加1,实际上电压增加5/4096=0.0012V;

测量一个0.015V的输入电压信号(ADC满量程5V):

  • 用8位ADC测,最小输出数字是1,测量结果就是1*5/256=0.0195V电压;
  • 如果用12位的ADC测,当数字是12时,测量结果是12*5/4096=0.0147V;如果数字是13,测量结果是13*5/4096=0.0159V。

对比一下数字,就可以看出来,分辨率越高,就可以将满量程里的电平分出更多份数,测量得到的电压结果就越精确,得到的数字信号再用DAC转换回去后就越接近原来输入的模拟值。

### Arduino ADC 分辨率规格及其配置方法 Arduino 的模数转换器 (ADC) 是其核心功能之一,用于将模拟信号转化为数字信号以便进一步处理。不同型号的 Arduino 板具有不同的 ADC 分辨率特性。 #### 不同型号的 Arduino ADC 分辨率 - **Arduino Uno**: 提供 10 位分辨率ADC 功能,能够将输入电压范围(通常为 0 至 5V 或者 0 至 3.3V)映射到一个介于 0 到 1023 的整数值范围内[^1]。 - **ESP8266**: 同样支持 10 位分辨率,因此它的输出范围同样是 0 到 1023。 - **ESP32**: 默认提供更高的 12 位分辨率,这意味着它可以将相同的电压范围分解得更细,对应的是 0 到 4095 的整数值区间。 - **RP2040-based boards**: 使用 `analogRead` 函数默认情况下也提供了较高的分辨率,具体取决于硬件实现以及软件中的配置选项[^3]。 #### 配置 ADC 分辨率的方法 虽然某些开发板如 ESP32 支持更高分辨率,但并不是所有的 Arduino 开发环境都自动启用这些高级特性。对于标准的 Arduino IDE 而言: - 对于基于 AVR 微控制器的设备(例如 Arduino Uno),分辨率固定为 10 位,无法通过简单的命令更改此设置。 - 如果使用的是较新的微控制器平台比如 ESP32,则可以通过修改特定寄存器或者利用库函数来调整 ADC 的工作模式与分辨率。例如,在 ESP-IDF 中存在 API 可以设定分辨率为 9/10/11/12 bits 等多种选择。 以下是针对不同类型处理器如何获取并显示 ADC 数据的一个通用例子: ```cpp #define adPin A0 void setup() { Serial.begin(115200); } void loop() { int sensorValue = analogRead(adPin); // Read the value from pin A0. float voltage = sensorValue * (5.0 / 1023.0); // Convert reading into volts assuming Vref=5V. Serial.print("Analog Reading: "); Serial.println(sensorValue); Serial.print("Voltage: "); Serial.println(voltage, 2); // Print with two decimal places precision delay(1000); // Wait a second before next sample. } ``` 上述代码片段展示了基本的操作流程:初始化串口通信;周期性地从指定引脚读取数据并通过计算得出实际对应的电压值[^2][^3]。 需要注意的是,当涉及到外部电源供电情况下的测量时,请务必确认所使用的参考电压(VREF),因为它直接影响最终换算出来的物理量大小。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值