就个人而言,我不是经验法则的忠实拥护者,但是有些规则非常准确,即使我也例外。
这些规则之一如下:
微控制器ADC外设总是很糟糕。
总是。 您不会贬低那种可怕的事情。这种可怕的状况使您在淋浴时以胎儿的姿势哭泣。
我开玩笑,但只有一点点。要回答您的问题,是的,ADC实际上就是那么糟糕,是的,您应该接受它。请注意大的免责声明,指出“适用工作条件”。在数据表中。
您必须记住,对于某些零件(例如MCU),数据表也是营销材料,MCU通常在外设或功耗(或两者)上竞争。因此ADC的数据通常在技术上正确,只要您在相同的荒谬和不切实际的情况下使用ADC,就可以对数据表进行测量。我经常看到的一个最喜欢的方法是测量所有其他外设的ENOB以及在深度睡眠中完全断电的实际处理器内核。另一个是使用大量的软件后处理和类似的技术(例如过采样)来获取测量结果。我认为我从未见过没有以“这是您将有可能实现的最好结果,我们可能会甚至可能不会告诉您我们如何管理它”的规范来规范ADC的MCU数据表。 “这是您尝试清除软件中信号之前的规格”。
而且,需要明确的是,听起来至少与所有其他糟糕的MCU ADC相比,该器件具有非常好的ADC。8.5位?如此富裕!真是资产阶级!大多数时候,你会得到可能来自MCU的10位ADC 6位。请记住,当他们说12位分辨率时,它们意味着您可以从某个地方的某个寄存器读取12位。没有任何暗示,它们不会是12位无用的噪声。唯一的保证是某物将有12位。
现在,在这一点上,您可能会有点怀疑这些模拟外设是否总是如此可怕,或者至少是想知道为什么有些芯片公司不会简单地发布带有中途模拟前端的MCU。
好吧,他们不能。引用的好坏并不重要,这不是稳定性问题。是噪音 和物理学。
在与MCU相同的硅芯片上,实际上在物理上不可能创建高性能(或者实际上只是中等性能)的ADC。只需花一分钱就能搞定模拟性能。在这种情况下,没有一个陷阱,而是几个。
首先,只有一个CMOS晶体管开关会将所有的谐波和噪声直接倾倒到所有物体中,并在开关时耦合到所有物体(您猜对了)。我们倾向于认为CMOS的为低功率(它是),但它是在心中值得保留的是CMOS电源确实使用实际上为零-在将晶体管改变状态时除外。它们会非常快速地改变状态,大约数十皮秒到数百皮秒。当您消耗几乎不带静态功率的东西消耗的12毫安电流,而所有这些电流完全变成了强烈电流时,100ps的电流尖峰实际上就是数百万个小杂种开关,总开关...好吧,那应该重新构架。至少对于模拟量来说,那几毫安比看起来更险恶。低功耗≠低噪声。CMOS是低功耗的,因为它只需要开关电源。但是,它的切换要比低音阶低音下降更难。
这些尖峰都必须穿过基板,ADC共享的基板,并且必须足够阻性,以引起基板中的局部接地反弹,这对于数字电路来说毫无意义,但对于任何模拟电路而言确实非常麻烦。
确实没有办法解决。那只是一个问题。另一个是实际上不可能创建可以与MCU共存的高性能模拟布局,这将需要同时使用这些引脚作为GPIO,以及其他考虑因素,这些因素会严重破坏任何良好的模拟部分的机会。布局。
现在,有一些具有稍微改进的ADC的专用MCU,通过在一个封装中实际具有两个完全独立的硅芯片(通过键合线连接)来实现此目的,从而实现了基板隔离。不过,您需要为此功能付费,并且由于纯粹的接近性,结果仍然会比专用ADC差。
哦,我什至还没有谈到所有这些都假定您在与模拟和数字部分有关的所有方面都拥有完美的外部布局以及接地和去耦的情况。仅仅问这是不平凡的,就问亨利·奥特。
因此,总而言之,我担心您芯片上的ADC确实如此可怕。就像其他所有MCU ADC一样。抱歉。要么就足够了-对于许多应用程序(由一些相当聪明的软件源 ry-pun!辅助)-都可以。只要您很聪明,即使在模拟性能不佳的情况下,真正可以完成的工作也令人惊讶。但是聪明只能带你走远。如果您想要冷,有效的位数,您真的只需要硬着头皮,使用专用的ADC以及仔细的PCB布局和去耦,或者考虑使用更专门的部件(例如多管芯封装)。