一 ADC
ADC,Analog-to-Digital Converter的缩写,指模/数转换器或者模数转换器。是指将连续变化的模拟信号转换为离散的数字信号的器件。真实世界的模拟信号,例如温度、压力、声音或者图像等,需要转换成更容易储存、处理和发射的数字形式。模/数转换器可以实现这个功能,在各种不同的产品中都可以找到它的身影。
与之相对应的DAC,Digital-to-Analog Converter,它是ADC模数转换的逆向过程。
二 关于Gain与Offet
1 偏移与增益误差(Offset Gain Error)
器件理想输出与实际输出之差定义为偏移误差,所有数字转换都存在这种误差。在实际中,偏移误差会使传递函数或模拟输入电压与对应数值输出存在一个固定的偏移。通常计算偏移误差方法是测量第一个数字转换或“零”转换的电压,并将它与理论零点电压相比较。增益误差是预估传递函数和实际斜率的差别,增益误差通常在模数转换器最末或最后一个传输代码转换点计算。
为了找到零点与最后一个转换代码点以计算偏移和增益误差,可以采用多种测量方式,最常用的两种是代码平均法和电压抖动法。代码平均测量就是不断增大器件的输入电压,然后检测转换输出结果。每次增大输入电压都会得到一些转换代码,用这些代码的和算出一个平均值,测量产生这些平均转换代码的输入电压,计算出器件偏移和增益。电压抖动法和代码平均法类似,不同的是它采用了一个动态反馈回路控制器件输入电压,根据转换代码和预期代码的差对输入电压进行增减调整,直到两代码之间的差值为零,当预期转换代码接近输入电压或在转换点附近变化时,测量所施加的“抖动”电压平均值,计算偏移和增益。
2 Gain与Offset的真面目
在讨论gain与offset的时候,必须要有一个认知,他们不是只有单一个点的数值,offset与gain,通常会反映在一连续的数值变化上。
Gain与Offset说穿了对于数据而言,只是一个加减值(offset)与一个乘除值(gain)而已,在作量测与讯号处理的同时(放大、衰减等)我们希望经过处理后的讯号,保有一定的线性度,什么叫做线性?也就是希望所得到的连续数据是呈现一直线的情况,例如下图:蓝线
蓝色的线是我们假定的标准值,也就是依照一定比例的递增趋线,此时offset与gain我们可以视为:offset = 0, gain = 1。但是经过实际的验证结果,我们可能会得到一个测试值,如上图棕色线,也就是测试数据所得到的趋线,很明显的可以发现,与我们所想要的结果不同,故透过图表来看,我们可以很清楚的知道offset与gain的关系,offset可以视为是一个基底存在的值,而gain指的也就是斜率的变化,当所测得的数据保有一定的线性度(没有很严重的失真),此时就可以做单一次的修正,就可以获得较小误差的修正值(如上图内表格所示)。
测得实际量测数据后,我们可以透过简单的加减乘除来处理:(原始值+offset)×Gain = 修正后数据。
但是当假设当量测的原始数据不是线性时,在处理上就会比较麻烦。
三 LSB和MSB
LSB(Least Significant Bit),最低有效位;MSB(Most Significant Bit),最高有效位,若MSB = 1,则表示数据为负值,若MSB = 0,则表示数据为正。
一个12位串行转换器,它会输出由1或0组成的12位数串。通常,转换器首先送出的是最高有效位(MSB)(即LSB+11)。有些转换器也会先送出LSB。在下面的讨论中,我们假设先送出的是MSB(如图所示),然后依次送出MSB-1(即LSB+10)和MSB-2(即LSB+9)并依次类推。转换器最终送出MSB-11(即LSB)作为位串的末位。
LSB这一术语有着特定的含义,它表示的是数字流中的最后一位,也表示组成满量程输入范围的最小单位。对于12位转换器来说,LSB的值相当于模拟信号满量程输入范围除以212或4,096的商。如果用真实的数字来表示的话,对于满量程输入范围为4.096V的情况,一个12位转换器对应的LSB大小为1mV。但是,将 LSB 定义为4096个可能编码中的一个编码对于我们的理解是有好处的。
让我们回到开头的技术指标,并将其转换到满量程输入范围为4.096V的12位转换器中:
失调误差=±3LSB=±3mV,
增益误差=±5LSB=±5mV,
这些技术参数表明转换器转换过程引入的误差最大仅为8mV(或8个编
码)。这绝不是说误差发生在转换器输出位流的LSB、LSB-1、LSB-2、LSB-3、LSB-4、LSB-5、LSB-6和LSB-7八个位上,而是表示误差最大是一个LSB的八倍(或8mV)。
准确地说,转换器的传递函数可能造成在4,096个编码中丢失最多8个编码。丢失的只可能是最低端或最高端的编码。例如,误差为+8LSB((+3LSB 失调误差)+(+5LSB增益误差))的一个12位转换器可能输出的编码范围为0至4,088。丢失的编码为4088至4095。相对于满量程这一误差很小仅为其0.2%。与此相对,一个误差为-3LSB((-3LSB失调误差)(-5LSB增益误差))的12位转换器输出的编码范围为3至4,095。此时增益误差会造成精度下降,但不会使编码丢失。丢失的编码为0、1和2。这两个例子给出的都是最坏情况。在实际的转换器中,失调误差和增益误差很少会如此接近最大值。
在实际应用中,由于ADC失调或增益参数的改进而使性能提升的程度微不足道,甚至可以忽略。但是,对于那些将精度作为一项设计目标的设计人员来说,这种假设太过绝对。利用固件设计可以很容易地实现数字校准算法。但更重要的是,电路的前端放大/信号调理部分通常会产生比转换器本身更大的误差。
通过上面的讨论可以对本文开头提到的错误结论有一个更为全面而清晰的认识。事实上,上述的12位转换器的精度约为11.997位。采用微处理器或单片机可以利用简单的校准算法消除这种失调和增益误差,这对设计人员来说无疑是个好消息。
MSB指二进制中最高值的比特。在16比特的数字音频中,其第1个比特便对16bit的字的数值有最大的影响。例如,在十进制的15,389这一数字中,相当于万数那1行(1)的数字便对数值的影响最大。比较与之相反的“最低有效位”(LSB)。
四 stm32的VCC/VDD/VSS/VEE/VBAT/VREF的区别与联系
先看一下stm32vet6的引脚图:
电路设计以及PCB制作中,经常碰见电源符号:VCC、 VDD、VEE、VSS、VREF,他们具有什么样的关系那?
VCC:C=circuit 表示电路的意思,即接入电路的电压;
VDD:D=device 表示器件的意思,即器件内部的工作电压;
VSS:S=series 表示公共连接的意思,通常指电路公共接地端电压;
VEE:负电压供电;场效应管的源极(S),或三极管的发射极(E);
VBAT:BAT=Battery 表示电池电压,链接电池正极;
VREF:ref=reference 表示参考电压。
五 说明
1、对于数字电路来说,VCC是电路的供电电压,VDD是芯片的工作电压(通常Vcc>Vdd),VSS是接地点。例如,对于ARM单片机来说,其供电电压VCC一般为5V,一般经过稳压模块将其转换为单片机工作电压VDD = 3.3V。
2、有些IC既有VDD引脚又有VCC引脚,说明这种器件自身带有电压转换功能。
3、在场效应管(或COMS器件)中,VDD为漏极,VSS为源极,VDD和VSS指的是元件引脚,而不表示供电电压。
但是,
1,为什么要分5对VDD VSS出来?
2,这5组VDD VSS分别负责哪些模块的供电?是分开的?还是都在一起的?
这和芯片的设计有关系。一般VDD和VSS管脚均匀分布在芯片的四周的,是基于电源完整性的考虑,可以为芯片提供最好的电源质量,降低电源阻抗,保证高速数字电路可靠工作的手段。
1、DSP内部有很多功能单元,这些单元都需要供电,采用多引脚供电可以就近获取电源,无需在内部穿越。
2、不同单元之间,有时不希望电源互相影响,采用独立的电源引脚,可以避免这种影响。
3、实际使用时,每个引脚不但要连接电源,还应在电源引脚附近加上退藕电容。
其目的是当器件工作时,电流的变化会引起电源的电压微小波动,加上退藕电容后,这种波动就不容易传递到另外的电源引脚。
关于VBAT:
当使用电池或其他电源连接到VBAT脚上时,当VDD 断电时,可以保存备份寄存器的内容和维持RTC的功能。如果应用中没有使用外部电池,VBAT引脚应接到VDD引脚上。
关于VREF:
VREF是A/D的基准电压,是A/D测量电压的标准,VREF精度高,A/D转换精度才有保障。好比一把尺子,刻度不准,测量自然不准确。有的A/D芯片VREF可以直接由内部基准源提供,外电路就简单,有的可以外部输入更高精度的基准源。
Vref就是指输入的模拟电压的最大值,用于比较输入电压,AD的输入的有效范围:0-Vref,如果是10bit ADC,Vref=5v,2^10(1024):5v,那么ADC的分辨率为5/1024=0.00488v。
Vref为芯片的参考输出,VrefA为芯片的外部参考基准输入。把这两者连接,就是使用Vref作为VrefA的参考基准。
Vref和AGND之间必须连接4.7uF和0.1uF的电容,其中0.1uF靠近芯片引脚,4.7uF在外侧,这样可以防止芯片数字噪声的串扰。
参考连接
什么是Gain offset:https://www.xuan.idv.tw/wordpress/?p=2525