串行数据转换器接口
问:我现在需要安装节省空间的数据转换器,认为串行式转换器比较适合。为了选择 和使用这种转换器,请问我需要了解些什么?
答:首先我们看一下串行接口的工作原理,然后再将它与并行接口相比较,从而可以消 除对串行接口数据转换的神秘感。
图10?1示出了一种8通道多路转换12位串行式模数转换器(ADC) AD7890与一种带串行接 口的 数字信号处理器(DSP) ADSP?2105接线图。图中还示出了使用DSP与ADC通信的时序图。通过 一根线以串行数据流的形式传输12位转换结果。串行数据流还包括3位地址,用来表示AD789 0当前被选中的多路转换器中的输入通道。为了区分不同组的数据串行位流,必须提供时钟 信 号(SCLK),通常由DSP提供。有时ADC作为输出信号提供这种时钟信号。DSP通常(但不总是) 提供一个附加的成帧脉冲,它要么在通信开始第一个周期有效,要么在通信期间(例如TFS/R FS)有效。
图10?1 串行式ADC与DSP之间的接线图
在这个实例中,利用DSP的串行端口来设置ADC内部5位寄存器。这个寄存器的位控功能包 括:选择通道、设定ADC处于电源休眠方式和起动转换。显然,这种情况下串行接口必 须双向工作。
从另一方面来说,并行式ADC的数据总线直接(或可能通过缓冲器)与带接口的处理器的 数 据总线相连。图10?2示出了并行式ADC AD7892与ADSP?2101的接线图。当AD7892完成一次 转换后,中断该
图10?2 并行式ADC AD7892与ADSP?2001接线图
DSP,DSP响应后,按照ADC的译码内存地址读一次数据。串行式数据转换器与并行式数据转换器之间的重要差别在于需要的连接线数。从节省 空间的角度来看, 串行式数据转换器有明显的优点。因为它减少了器件的引脚数目,从而有可能做成8脚DIP或 SO封装的12位串行式ADC或DAC。更重要的是它节省了印制线路板的空间, 因为串行接口只需连接几根线条。
问:我的数模转换器(DAC)必须离中心处理器及其它处理器距离很远。我最 好采用何种方法?
答:首先你必须确定是使用串行式DAC还是并行式DAC。当使用并行式DAC时,你应该确 定每个DAC进入存储器I/O端口的地址,如图10.3所示。然后你应该对每个DAC编程,将写命 令直 接写入适当的I/O口地址。但这种结构具有明显的缺点。它不但需要并行数据总线,而且到 所有远处的端口都需要一些控制信号线。然而串行接口只需要为数不多的两条
图10?3 多个并行式DAC接线图
线,显然它比并行接口经济得多。 一般说来,虽然串行式数据转换器不能对处理器的存储器寻址,但是可以把许多串行DA C接到处理器的串行端口上,然后利用处理器的其它端口产生片选信号来逐一地启动每个DAC 。片选信号虽然仅需要一条线就能将每个DAC都接到串行接口上,但是接到处理器上传输 片选信号线的数目可能受到限制。
解决这个问题的一种方法是采用菊花链(daisy?chained)式结构,将所用的串行式DAC 都连在一起。图10.4示 出了如何将多个DAC连接到一个I/O端口上。每个DAC都有一个串行数据输出(SDO)脚,将第一 个DAC(即DAC0)的SDO脚接到本菊花链中的下一个DAC(即DAC1)的串行数据输入(SDI)脚。LDAC 和 SCLK以并行方式被送到本菊花链中的所有DAC。因为在时钟作用下送入SDI的数据最终都要到 达SDO(N个时钟周期之后),所以一个I/O端口能够寻址多个DAC。但是这个I/O端口必须输 出很长的数据流(每个DAC占的N位乘以本菊花链中DAC的数目)。这种结构的最大优点是不需 要对寻址的DAC进行译码。所有的DAC在相同的I/O端口上都有效。菊花链式结构的主要缺点 是可达性(accessibility)或等待时间长。即使要改变某一个DAC的状态,处理器也必须从该 I/O端口输出全部数据流。
图10?4 多个串行式DAC菊花链式结构
问:既然串行式数据转换器节省许多空间和线路,那么为什么不在每个要求节省空间的 应用场合都使用它们呢?
答:串行式数据转换器的主要缺点是为了节省空间从而降低了速度。例如,对并行DAC 编程,只用一个写脉冲便可以把数据总线上的数据在时钟作用下送入DAC。然而,如果要把 数据写入串行DAC,那么DAC的位数必须等于相继的时钟脉冲数(N位DAC需要N个时钟脉冲), 每个时钟脉冲后还要跟随一个装入脉冲。所以这种处理器的I/O端口与串行数据转换器通信 要花费相当多的时间。因此吞吐率高于500 ksps 的串行式DAC平常是少见的。
问:我的8位处理器没有串行接口,有什么办法可以把一个12位串行 式ADC(例如AD7993)接到该8位处理器总线上?
答:当然我可以使用外部移位寄存器,将数据用串行(和异步)方式装入移位寄存器,然 后在时钟作用下进入处理器的并行端口。但是,如果这个问题的着眼点是“没有外部逻辑” ,那么可以把这个串行式ADC看作1位并行式ADC来连接。将该ADC的SDATA脚接到该处理器 数据总线的一条数据线上,这里接到数据线D0。如图10.5所示。使用某种译码逻辑电路 , 能使 该ADC的口地址看作是该处理器的一个存储器地址,以便用12个逐次读命令读取ADC的转换结 果。然后用附加的软件命令把12个字节的LSB组合起来,拼成一个12位的并行字。
图10?5 没有串行口的8位处理器与串行式ADC的接口
上面介绍的方法有时称作“位拆裂”(bit banging)。从软件的观点来看,这种方法是很 不经济的,但是当处理器的运行速度远远高于ADC的转换速度时,这种方法可以采用。
问:在前面的例子中,利用了处理器的写信号门控方式来 起动AD7893转换。请问这种方法是否有问题?
答:我很高兴你看出这一点。在这个例子中,每转换一次都要对AD7893的寻址存储器发 出一个空操作的写命令。虽然没有数据交换,但是处理器仍然提供开始转换所需要的写脉冲 。从硬件的观点来看,这种结构非常简单,因为它不必再产生一个转换信号。
但是,对信号必须进行周期性采样的交流数据采集应用场合,不推荐这种方法。即使程 控处理器,对ADC发出周期性写命令,写脉冲的相位抖动将会严重降低实际得到的信噪比。 经过门控之后写脉冲会抖动得更坏。例如,假设采样时钟相拉抖动仅仅1 ns,对一个理想的 100kHz正弦波来说,其信噪比会降到大约600dB(低于10有效位分辨率)。另外一个缺点是, 过冲和采样信号噪声都会进一步降低模数转换的完整性。
问:我应该在什么时候选择具有异步串行接口的数据转换器?
答:异步通信方式允许设备之间交换信息,不必借助于时钟。为了使用相同的数据格式 ,必须对设备初始化,其中包括设置一种传输速率(通常用波特率表示,或位数每秒)。还应 该规定转换结果如何开始传送和结束传送。我们使用容易识别的带有起始位和停止位的数据 序列来传送数据。传送过程还包括奇偶校验位,用来检测设备出错。
图10?6示出了AD1B60数字化信号调节器与PC机异步通信端口之间的接线图。这是一种3 线双向接口(为了简明,地线省去未画)。应该注意发送线与接收线在线路的另一端位置交换 。
图10?6 AD1B60与PC机之间的异步通信接口
异步通信线路对仅限于设备分散式通信应用场合是很有用的。因为在每次传送中都包 括起始位和停止位,所以设备在任何时间只要输出其数据就可以开始通信。另外设备之间 的接线数目也减少了,因为时钟和控制信号线都不需要了。
问:有一种ADC产品说明在串行接口中推荐使用非连续时钟,为什么?
答:这种技术要求可能是指ADC在转换过程期间要求其时钟信号无效。有的ADC有这种要 求,因为连续的时钟信号能够馈送到ADC的模拟部分,反过来会影响转换结果。如果I/O端 口有一个帧脉冲,那么连续的时钟信号在转换期间可能变成不连续。这个帧脉冲用作门控信 号,只有在数据传递时才允许将串行时钟送到ADC。
问:如何使设备与SPI或MICROWIRE接口标准兼容?
答:SPI(串行外围接口)与MICROWIRE分别是美国摩托罗拉公司和国家半导体公司研制的 串行接口标准。大多数同步串行式数据转换器都很容易与这两种接口连接,但是在有些情况 下可能需要附加连接逻辑(glue logic)。
问:好,我放弃偏见,在我的当前设计中决定使用串行ADC。我按照产品说明的技术要求 刚刚把线路接好。当用MICROWIRE标准转换结果时,ADC的输出好像总是FFF HEX (不论 模拟输入电压如何变化),这是怎么回事?
答:这或许是通信问题。首先我们需要检查ADC与处理器之间的连接问题,即定时和控制 信号线是否接好。我们还需要检查一下处理器的中断结构。与时序有关的可能误差有许多。你要想检查这个问题,首先将所有的时序信号要么接到逻辑分析仪上,要么接到多通道示波 器 上(至少需要3个通道才能同时检测全部时序信号)。你在仪器的荧光屏上应该观察到类似图1 0.7所示的时序图。首先保证从微处理器或从独立的信号源产生一个启动转换命令CONVST) 。常见的错误是所施加的CONVST信号极性不对。虽然也能启动转换,但不是按照你期望的时 序转 换 。另外应该记住的是,通常要求CONVST信号有一个最小的脉冲宽度(典型值约为50ns)。一般 来自快速微处理器的写脉冲或读脉冲宽度都不能满足这个要求。如果脉冲宽度太窄,可用软 件方法插入等待周期来增大脉冲宽度。
图10?7 串行ADC时序图
其次应该保证在读周期开始之前微处理器一直在等待模数转换完成。为了使微处理器产 生中断信号,你的应用软件应该知道完成A/D转换所需要的时间,或等待ADC转换结束(EOC) 发出的指示信号。还要保证EOC信号极性正确,以免ADC在转换进程中会产生中断。如果微处 理器对中断不响应,你应该检查软件中断的设置。
另外,如果转换器寻址不对,检查一下串行时钟序列(SCLK)的状态也是很有必要的。正 如 前面的讨论所述,有些DAC和ADC在连续时钟作用下,工作不正常。除此以外,还有些DAC和A DC要求SCLK在某一指定状态总得有一个闲音(idles)。
问:我现在已经发现了我的软件中的问题和一些解决方法,使问题有所改善。当改变输 入电压时,ADC输出的数据也发生变化,但是转换结果好像不可识别,这是怎么回事?
答:可能产生的误差源仍然很多。ADC的转换结果或者直接用二进制数据形式表示,或者 用2的补码形式表示(BCD码用得不太多)。为了使微处理器接受合适的数据格式,应该检查它 的配置。如果微处理器的配置不能直接接受2的补码,你应该将转换数据与100…00二进制数 进行异或操作,将其转换成二进制数。
通常利用串行时钟的前沿(上升或下降沿)选通ADC的数据输出并且进入数据总线。然后 利用时钟的后沿使数据进入微处理器。应该保证微处理器与ADC在同一转换条件下正常工作 ,保证所有准备时间和保持时间都满足要求。如果串行ADC的转换结果恰好是期望值的一半 或二 倍时,这是一个告警信号,它说明这个数字结果(尤其是MSB)是由于受错误的时钟边沿作用 。同样一个问题,对于串行DAC则表现为其输出电压恰好为期望值的一半或二倍。
驱动转换器的数字信号应该干净。过冲或欠冲除对器件可能引起长期损坏以外,还能产 生转换误差和通信误差。图10?8示出了用来驱动单电源转换器的时钟输入 具 有很大过冲的尖脉冲信号。在这种情况下,时钟输入驱动PNP晶体管的基极。按照惯例,将 器件的P型衬底内部连接到最负的电位,这里为地。在SCLK线上大于地电位以下0?3V的幅度 完 全能使N型晶体管的基极和P型衬底之间的寄生二极管开始导通。如果经常出现这种情况,而 且作用时间很长,可能会导致器件损坏。
图10?8 过冲或欠冲波形及其损坏器件的机理
如果作用时间很短,虽然不会损坏器件,但是会增强器件中通常不起作用的衬底对其它 晶体管的影响,从而导致将每个作用脉冲检测为多个时钟脉冲。这种脉冲抖动对串行式转换 器影响很厉害,而对并行式转换器则差一些。因为读周期和写周期通常都取决于所施加的 第一 个脉冲,而后边的脉冲无关紧要。但是,如果在转换期间出现这种干扰信号,无论是串行还 是并行式转换器都要受到噪声的影响。
图10?9示出了如何很容易地减小过冲。在出现问
图10?9 用来减小过冲的低通滤波器
题的数字输入信号线上串联一个小电阻。这个电阻与数字输入端的寄生电容 C par 结合起来可构成一个低通滤波器,从而可 以消除接受信号的任何振荡。一般推荐使用50Ω的电阻,但是做一些实验可能是必要的。如 果数字输入端的内部电容不够大,还可在这个输入端加一个外接电容。这时实验是必要的, 但开始最好选10pF左右的电容。
问:你已经谈到时钟信号过冲会使转换器的噪声恶化。从接口技术的角度来看,是否有 其它方法来改善其信噪比?
答:因为你的系统在混合信号(模拟与数字)环境下工作,所以接地方法至关重要。你可 能知道,因为数字电路是一种噪声源,所以模拟地与数字地应该分开,只在一点会合。这种 接地方法通常只用在电源上。实际上,如果模拟器件和数字器件共用一个电源,例如+5V或+ 3?3V单电源系统,只有连接模拟地与数字地才能在电源返回,别无选择。具体数据转换器 的 产品说明可能指导你对器件的AGND脚和DGND脚如何连接。如果在两点接地,那么应该如何避 免产生接地环路呢?
图10?10示出了解决这种困境的方法。关键在于数据转换器的引脚中标记的AGND和DGND 脚 都是相对转换器的部件而言的,用来与其它引脚连接。数据转换器作为一个整体,应该按模 拟器件来处 理。所以将AGND和DGND脚连接到一起后,应该用一根线接到系统的模拟地。如果真的这样做 ,会使转换器的数字电流流入模拟接地平面,但这样要比通常把转换器的DGND脚接到噪声数 字接地平面带来的危害要小。这个例子还示出了一个接数字地的数字缓冲器,用来使转换 器的串行数据引脚与有噪声的串行数据总线相隔离。如果数据转换器的引脚与微处理器的引 脚直接相连,那么可以不用这种缓冲器。
图10?10还示出了如何处理混合信号系统单电源
供电这样一个越来越引人关注的普遍性问题。正如接
图10?10 模拟地与数字地的接线方法
地一样,我们将电路中的模拟部分与数字部分的电源线(最好是电源平面)分开。我们将 数据转换器的数字电源按模拟电源处理。但是有时候将模拟电源引脚与数字电源引脚用一种 电感的方式隔离起来是很必要的。请注意,转换器的两个电源引脚都应分别接去耦电容器。 具 体产品说明将推荐选用合适的电容器,但好的经验规则是0?1μF。如果空间允许,每个器 件都应接一个10μF电容器。
问:我想在ADC与微处理器之间用光隔离器设计一个串行接口。当我使用这些器件时,应 该知道些什么?
答:为了构造一个简单而又经济的高压隔离器可以使用光隔离器(又称光耦合器)。在数 据转换器与微处理器之间电流隔离作用的经验还表明模拟系统的地与数字系统的地不必再连 接起来。正如图10.11所示,精密ADC AD7714 与通用的微控制68HC11之间的
隔离串行接口只用3个光隔离器便可实现。
图10?11 ADC与微处理器之间的隔离串行接口
设计者应该知道,光隔离器的上升时间和下降时间非常慢。它与CMOS数据转换器一起使 用会出现问题,即使在串行通信时以低速运行也是如此。CMOS逻辑输入端设计成用规定的逻辑“0”或逻辑“1”来驱动。在这种状态下,输入端 提供和吸收很少量的电流。然而,当输入电压处于逻辑“0”与逻辑 “1”之间的变迁状态时(0?8V到2?0 V)逻辑门消耗的电流数量将要增加。如果所用的光隔离器的上升时间和下降时间相当慢,那 么绝大部分时间都浪费在“死区”,从而产生逻辑门的自热。这种自热导致逻辑 门的阈值电压向上漂移,从而导致转换器将一个时钟脉冲看作多个时钟脉冲。为 了防止这种阈值抖动,应该使用施密特触发器来缓冲来自光隔离器的信号线,以便将快速、 陡沿的时钟信号传送给数据转换器。