ADC位数与LSB误差当选择模数转换器(ADC)时,最低有效位(LSB)这一参数的含义是什么?有位工程师告诉我某某生产商的某款12位转换器只有7个可用位。也就是说,所谓12位的转换器实际上只有7位。他的结论是根据器件的失调误差和增益误差参数得出的,这两个参数的最大值如下:失调误差=±3LSB,增益误差=±5LSB,乍一看,觉得他似乎是对的。从上面列出的参数可知最差的技术参数是增益误差(±5LSB)进行简单的数学运算,12位减去5位分辨率等于7位,对吗?果真如此的话,ADC生产商为何还要推出这样的器件呢?增益误差参数似乎表明只要购买成本更低的8位转换器就可以了,但看起来这又有点不对劲了。正如您所判断的,上面的说法是错误的。让我们重新来一下LSB的定义。考虑一个12位串行转换器,它会输出由1或0组成的12位数串。通常,转换器首先送出的是最高有效位(MSB)(即LSB+11)。有些转换器也会先送出LSB。在下面的讨论中,我们假设先送出的是MSB(如图1所示),然后依次送出MSB-1(即LSB+10)和MSB-2(即LSB+9)并依次类推。转换器最终送出MSB-11(即LSB)作为位串的末位。LSB这一术语有着特定的含义,它表示的是数字流中的最后一位,也表示组成满量程输入范围的最小单位。对于12位转换器来说,LSB的值相当于模拟信号满量程输入范围除以212或4096的商。如果用真实的数字来表示的话,对于满量程输入范围为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位。采用微处理器或单片机可以利用简单的校准算法消除这种失调和增益误差,这是个好消息。积分非线性(Integralnonlinearity,INL)积分非线性表示了ADC器件在所有的数值点上对应的模拟值和真实值之间误差最大的那一点的误差值,也就是输出数值偏离线性最大的距离。单位是LSB。例如,一个12bit的ADC,INL值为1LSB,那么,对应基准4.095V,测某电压得到的转换结果是1.000V,那么,真实电压值可能分布在0.999V到1.001V之间。INL是DNL误差的数学积分,即一个具有良好INL的ADC保证有良好的DNL。总之,非线性微分和积分是指代码转换与理想状态之间的差异。非线性微分(DNL)主要是代码步距与理论步距之差,而非线性积分(INL)则关注所有代码非线性误差的累计效应。对一个ADC来说,一段范围的输入电压产生一个给定输出代码,非线性微分误差为正时输入电压范围比理想的大,非线性微分误差为负时输入电压范围比理想的要小。从整个输出代码来看,每个输入电压代码步距差异累积起来以后和理想值相比会产生一个总差异,这个差异就是非线性积分误差。与增益和偏移一样,计算非线性微分与积分误差也有很多种方法,代码平均和电压抖动两种方法都可以使用,但是由于存在重复搜索,当器件位数较多时这两种方法执行起来很费时。一个更加有效计算INL和DNL的方法是直方图法,采用线性或正弦直方图。图7说明了线性斜升技术的应用,首先使输入电压线性增加,同时对输出以固定间隔连续采样,电压逐步增加时连续几次采样都会得到同样输出代码,这些采样次数称为“点击数”。从统计上讲,每个代码的点击数量直接与该代码的相应输入电压范围成正比,点击数越多表明该代码的输入电压范围越大,非线性微分误差也就越大;同样,代码点击数越少表明该代码输入电压范围越小,非线性微分误差也就越小。用数学方法计算,如果某个代码点击数为9,而“理想”情况下是8,则该器件的非线性微分误差就是(9-8)/8或0.125。非线性积分是所有代码非线性微分的累计值,对于斜升直方图,它就是每个非线性微分误差的和。从数学观点来看,非线性积分误差等于在代码X-1的非线性微分误差加上代码X和代码X-1的非线性微分误差平均值。ADC增益误差GainError增益误差是指ADC实际传输特性曲线和理想传输特性曲线的偏差程度。增益误差的单位是%FSR(满量程值)。如果没有校准,那么增益误差会限制信号输出的准确性。例如,一个16位的ADC,增益误差为±0.2%,意味着在最大ADC输出时,会带来7位(131)的误差。总谐波失真(THD)谐波失真(THD)指原有频率的各种倍频的有害干扰。放大1kHZ的频率信号时会产生2kHZ的2次谐波和3kHZ及许多更高次的谐波,理论上此数值越小,失真度越低。由于放大器不够理想,输出的信号除了包含放大了的输入成分之外,还新添了一些原信号的2倍、3倍、4倍……甚至更高倍的频率成分(谐波),致使输出波形走样。这种因谐波引起的失真叫做谐波失真。电力领域:各次谐波的方均根值与基波方均根值的比例称为该次谐波的谐波含量。所有谐波的方均根值的方和根与基波方均根值的比例称为总谐波失真。通常说的谐波失真等同于总谐波失真。总谐波失真,totalharmonicdistortion,简称THD,《GBT--17626.7-2008电磁兼容试验和测量技术供电系统及所连设备谐波、谐间波的测量和测量仪器导则》中,对THD的定义如下:其中,H的取值在与限值有关的标准中给出。在电力行业,H通常取40。音频领域:总谐波失真指音频信号源通过功率放大器时,由于非线性元件所引起的输出信号比输入信号多出的额外谐波成份。谐波失真是由于系统不是完全线性造成的,我们用新增加总谐波成份的均方根与原来信号有效值的百分比来表示。例如,一个放大器在输出10V的1000Hz时又加上1v的2000Hz,这时就有10%的二次谐波失真。所有附加谐波电平之和称为总谐波失真。一般说来,1000Hz频率处的总谐波失真最小,因此不少产品均以该频率的失真作为它的指标。但总谐波失真与频率有关,因此美国联邦贸易委员会于1974年规定,总谐波失真必须在20~20000Hz的全音频范围内测出,而且放大器的最大功率必须在负载为8欧扬声器、总谐波失真小于1%条件下测定。国际电工委员会规定的总谐波失真的最低要求为:前级放大器为0.5%,合并放大器小于等于0.7%,但实际上都可做到0.1%以下:FM立体声调谐器小于等于1.5%,实际上可做到0.5%以下;激光唱机更可做到0.01%以下。SPI协议详解SPI,是英SerialPeripheralInterface的缩写,顾名思义就是串行外围设备接口。SPI,是一高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚同时为PCB的布局上节省空间,提供方便,正是出于这种简单易用的特性,现在越来越多的芯片集成了这种通信协议。SPI是一个环形总线结构,由ss(cs)、sck、sdi、sdo构成,其时序其实很简单,主要是在sck的控制下,两个双向移位寄存器进行数据交换。上升沿发送、下降沿接收、高位先发送。上升沿到来的时候,sdo上的电平将被发送到从设备的寄存器中。下降沿到来的时候,sdi上的电平将被接收到主设备的寄存器中。假设主机和从机初始化就绪:并且主机的sbuff=0xaa(10101010),从机的sbuff=0x55(01010101),下面将分步对spi的8个时钟周期的数据情况演示一遍(假设上升沿发送数据)---------------------------------------------------脉冲主机sbuff从机sbuffsdisdo---------------------------------------------------000-0101010100101010100---------------------------------------------------10--10101010x101010110111--0010101001010101101---------------------------------------------------20--11010100x010101101021--0101010010101011010---------------------------------------------------30--10101001x101011010131--0010100101010110101---------------------------------------------------40--11010010x010110101041--0101001010101101010---------------------------------------------------50--10100101x101101010151--0010010101011010101---------------------------------------------------60--11001010x011010101061--0100101010110101010---------------------------------------------------70--10010101x110101010171--0001010101101010101---------------------------------------------------80--10101010x10101011081--0010101011010101010---------------------------------------------------这样就完成了两个寄存器8位的交换,上面的0--1表示上升沿、1--0表示下降沿,sdi、sdo相对于主机而言的。根据以上分析,一个完整的传送周期是16位,即两个字节,因为,首先主机要发送命令过去,然后从机根据主机的名准备数据,主机在下一个8位时钟周期才把数据读回来。QSPI是QueuedSPI的简写,是Motorola公司推出的SPI接口的扩展,比SPI应用更加广泛。在SPI协议的基础上,Motorola公司对其功能进行了增强,增加了队列传输机制,推出了队列串行外围接口协议(即QSPI协议)。使用该接口,用户可以一次性传输包含多达16个8位或16位数据的传输队列。一旦传输启动,直到传输结束,都不需要CPU干预,极大的提高了传输效率。该协议在ColdFire系列MCU得到广泛应用。与SP