Embedded 将ADC箱转换为电压

Embedded 将ADC箱转换为电压,embedded,analog-digital-converter,Embedded,Analog Digital Converter,假设我有一个12位的模数转换器(4096箱)。假设我有一个0到5伏的信号 将ADC箱转换为伏特的正确转换公式是什么 V = ADC / 4096 * 5 或 我是否要除以4096,因为ADC中有4096个存储箱? 或者我除以4095,因为这是ADC返回的最高值?ADC的规格应该确定5V是如何以12位表示的 我怀疑4095对应5V,因此您的第二个解决方案是正确的。否则,您将无法正确识别5V的信号。Brian关于检查ADC数据表的建议非常理想。但是假设您的最大电压(5V)等于最大ADC输入(12位

假设我有一个12位的模数转换器(4096箱)。假设我有一个0到5伏的信号

将ADC箱转换为伏特的正确转换公式是什么

V = ADC / 4096 * 5

我是否要除以4096,因为ADC中有4096个存储箱? 或者我除以4095,因为这是ADC返回的最高值?

ADC的规格应该确定5V是如何以12位表示的


我怀疑4095对应5V,因此您的第二个解决方案是正确的。否则,您将无法正确识别5V的信号。

Brian关于检查ADC数据表的建议非常理想。但是假设您的最大电压(5V)等于最大ADC输入(12位=4095),以下转换应适用于您:

const float maxAdcBits = 4095.0f; // Using Float for clarity
const float maxVolts = 5.0f;      // Using Float for clarity
const float voltsPerBit = (maxVolts / maxAdcBits);

float yourVoltage = ADCReading * voltsPerBit;

通过Excel快速检查数学,我相信这是正确的。

对于12位值,最大可表示值为4095,但当然总共有4096个值(包括零)。假设您的ADC是线性的,那么是,4095相当于满标度。这不一定是5V,但无论您的参考电压是多少,都相当于一个超过该电压的值(当然)

你想变得有多挑剔?如果你真的想挑剔,那么你也应该考虑每个“bin”代表一个小范围的值(在你的情况下大约1.2毫伏)。因此,当您转换为电压值时,是要返回存储箱中间的电压值,还是存储箱下边缘的电压值?也就是说,您希望有效地“截断”或“舍入”您报告的值吗

此外,ADC的步进可能是偶数(线性),但请注意ADC对范围两端的存储箱所做的操作。这些箱子的宽度可能是其他箱子的一半。这取决于ADC,所以请检查规格

这个问题是否重要取决于您的应用程序。

V=ADC/4096*5

是将数字值转换回模拟电压(近似值)的正确公式

根据Walt Kester(Newnes,2005)编辑的数据转换手册, 可于(截至2018年10月18日)在以下地址获得:

具体参见第2章中的图2.4和2.5:


在您的情况下,FS将为5 V(当然您使用的是12位ADC,而不是3位ADC)。请注意,即使ADC值是最大可能值(在您的情况下为4095),相应的模拟电压也将略低于“满标度”电压(在您的情况下为5 V)。

。。。但是使用浮点数也会很昂贵。使用定点算术和位移位代替除法。或者更好,根本不转换为电压,只使用ADC的12位值,当您需要将其与电压进行比较时,只需将电压转换为12位刻度上的相同值。您的ADC参考电压可能会到处摇摆,除非您有非常好的调节器和非常宽的磁道,所以我怀疑你做什么很重要;错误将是微不足道的!请注意,除了用于显示之外,计算实际电压实际上没有什么大的意义。所有内部计算应以ADC增量计算,以确保精度。只有当您想显示或以其他方式发送“真实”值给人眼时,才应转换为电压。
const float maxAdcBits = 4095.0f; // Using Float for clarity
const float maxVolts = 5.0f;      // Using Float for clarity
const float voltsPerBit = (maxVolts / maxAdcBits);

float yourVoltage = ADCReading * voltsPerBit;