AD转换器原理A/D转换器(Analog-to-DigitalConverter)又叫模/数转换器,即是将模拟信号(电压或是电流的形式)转换成数字信号。这种数字信号可让仪表,计算机外设接口或是微处理机来加以操作或是工作使用。A/D转换器(ADC)的型式有很多种,方式的不同会影响测量后的精准度。A/D转换器的功能是把模拟量变换成数字量。由于实现这种转换的工作原理和采用工艺技术不同,因此生产出种类繁多的A/D转换芯片。A/D转换器按分辨率分为4位、6位、8位、10位、14位、16位和BCD码的31/2位、51/2位等。按照转换速度可分为超高速(转换时间=330ns),次超高速(330~3.3μS),高速(转换时间3.3~333μS),低速(转换时间>330μS)等。A/D转换器按照转换原理可分为直接A/D转换器和间接A/D转换器。所谓直接A/D转换器,是把模拟信号直接转换成数字信号,如逐次逼近型,并联比较型等。其中逐次逼近型A/D转换器,易于用集成工艺实现,且能达到较高的分辨率和速度,故目前集成化A/D芯片采用逐次逼近型者多;间接A/D转换器是先把模拟量转换成中间量,然后再转换成数字量,如电压/时间转换型(积分型),电压/频率转换型,电压/脉宽转换型等。其中积分型A/D转换器电路简单,抗干扰能力强,切能作到高分辨率,但转换速度较慢。有些转换器还将多路开关、基准电压源、时钟电路、译码器和转换电路集成在一个芯片内,已超出了单纯A/D转换功能,使用十分方便。ADC经常用于通讯、数字相机、仪器和测量以及计算机系统中,可方便数字讯号处理和信息的储存。大多数情况下,ADC的功能会与数字电路整合在同一芯片上,但部份设备仍需使用独立的ADC。行动电话是数字芯片中整合ADC功能的例子,而具有更高要求的蜂巢式基地台则需依赖独立的ADC以提供最佳性能。ADC具备一些特性,包括:1.模拟输入,可以是单信道或多信道模拟输入;2.参考输入电压,该电压可由外部提供,也可以在ADC内部产生;3.频率输入,通常由外部提供,用于确定ADC的转换速率;4.电源输入,通常有模拟和数字电源接脚;5.数字输出,ADC可以提供平行或串行的数字输出。一个完整的A/D转换过程中,必须包括取样、保持、量化与编码等几部分电路。AD转换器需注意的项目:取样与保持量化与编码分辨率转换误差转换时间绝对精准度、相对精准度取样与保持由于取样时间极短,取样输出为一串断续的窄脉冲。要把每个取样的窄脉冲信号数字化,是需要一定的时间。因此在两次取样之间,应将取样的模拟信号暂时储存到下个取样脉冲到来,这个动作称之为保持。在模拟电路设计上,因此需要增加一个取样-保持电路。为了保证有正确转换,模拟电路要保留着还未转换的数据。一个取样-保持电路可保证模拟电路中取样时,取样时间的稳定并储存,通常使用电容组件来储存电荷。根据数字信号处理的基本原理,Nyquist取样定理,若要能正确且忠实地呈现所撷取的模拟信号,必须取样频率至少高于最大频率的2倍。例如,若是输入一个100Hz的正弦波的话,最小的取样频率至少要2倍,即是200Hz。虽说理论值是如此,但真正在应用时,最好是接近10倍才会有不错的还原效果(因取样点越多)。若针对多信道的A/D转换器来说,就必须乘上信道数,这样平均下去,每一个通道才不会有失真的情况产生。量化与编码量化与编码电路是A/D转换器的核心组成的部分,一般对取样值的量化方式有下列两种:只舍去不进位:首先取一最小量化单位Δ=U/2n,U是输入模拟电压的最大值,n是输出数字数值的位数。当输入模拟电压U在0~Δ之间,则归入0Δ,当U在Δ~2Δ之间,则归入1Δ。透过这样的量化方法产生的最大量化误差为Δ/2,而且量化误差总是为正,+1/2LSB。有舍去有进位:如果量化单位Δ=2U/(2n+1–1),当输入电压U在0~Δ/2之间,归入0Δ,当U在Δ/2~3/2Δ之间的话,就要归入1Δ。这种量化方法产生的最大量化误差为Δ/2,而且量化误差有正,有负,为±1/2LSB。量化结果也造成了所谓的量化误差。解析度指A/D转换器所能分辨的最小模拟输入量。通常用转换成数字量的位数来表示,如8-bit,10-bit,12-bit与16-bit等。位数越高,分辨率越高。若小于最小变化量的输入模拟电压的任何变化,将不会引起输出数字值的变化。采用12-bit的AD574,若是满刻度为10V的话,分辨率即为10V/212=2.44mV。而常用的8-bit的ADC0804,若是满刻度为5V的话,分辨率即为5V/28=19.53mV。选择适用的A/D转换器是相当重要的,并不是分辨率越高越好。不需要分辨率高的场合,所撷取到的大多是噪声。分辨率太低,会有无法取样到所需的信号。转换误差通常以相对误差的形式输出,其表示A/D转换器实际输出数字值与理想输出数字值的差别,并用最低有效位LSB的倍数表示。转换时间转换时间是A/D转换完成一次所需的时间。从启动信号开始到转换结束并得到稳定的数字输出值为止的时间间隔。转换时间越短则转换速度就越快。精准度对于A/D转换器,精准度指的是在输出端产生所设定的数字数值,其实际需要的模拟输入值与理论上要求的模拟输入值之差。精确度依计算方式不同,可以区分为绝对精确度相对精确度;所谓的绝对精确度是指实际输出值与理想理论输出值的接近程度,其相关的关系是如下式子所列:绝对精确度=相对精准度指的是满刻度值校准以后,任意数字输出所对应的实际模拟输入值(中间值)与理论值(中间值)之差。对于线性A/D转换器,相对精准度就是它的线性程度。由于电路制作上影响,会产生像是非线性误差,或是量化误差等减低相对精准度的因素。相对精确度是指实际输出值与一理想理论之满刻输出值之接近程度,其相关的关系是如下式子所列:相对精准度=基本上,一个n-bit的转换器就有n个数字输出位。这种所产生的位数值是等效于在A/D转换器的输入端的模拟大小特性值。如果外部所要输入电压或是电流量较大的话,所转换后的的位数值也就较大。透过并列端口接口或是微处理机连接A/D转换器时,必须了解如何去控制或是驱动这颗A/D转换器的问题。因此需要了解到A/D转换器上的控制信号有哪些。图1、A/D转换器的基本引脚配置电路图如图1所示,一个A/D转换器具备了:输出引线(D0~D7,以8-bit为例),一个开始转换(StartofConverter,SOC)结束转换(EndofConversion,EOC)信号。输出致能脚位串行外围设备接口SPI(serialperipheralinterface)总线技术串行外围设备接口SPI(serialperipheralinterface)总线技术是Motorola公司推出的一种同步串行接口,它允许CPU与TTL移位寄存器、A/D或D/A转换器、实时时钟(RTO)、存储器以及LCD和LED显示驱动器等外围接口器件以串行方式进行通讯。SPI总线只需3~4根数据线和控制线即可扩展具有SPI接口的各种I/O器件,其硬件功能很强,实现软件相当简单。串行A/D转换器具有电路简单、工作可靠的特点,而ARM芯片被设计用于手持设备以及普通的嵌人式应用的集成系统,将上述两种实用的芯片和SPI总线技术相结合以实现数据采集十分有效。1AD7888的功能与使用AD7888是美国模拟器件公司推出的一款高速低功耗12位A/D转换器,采用2.7~5.25V单电源供电,最大通过率可达到125kSPS。AD7888的输入采样/保持电路在500ns内获取一个信号,采用单端采样模式,包含8个单端模拟输入,模拟输入电压从0到VREF。AD7888有2.5V的片内基准电压,也可以使用外部基准电压,范围从1.2V到VDD。CMOS制造工艺确保了低功耗,正常工作时为2mW,掉电状态下为3uW。可以选择多种电源管理模式(包括数据转换后自动处于掉电模式),与多种串行接口兼容(SPI/QSPI/MICOWIRE/DSP)。AD7888可广泛应用于电池供电系统(个人数字助理、医疗仪器、移动通信)、仪表控制系统和高速调制/解调器等领域。该器件采用16脚SOIC和TSSOP外形封装,外形及引脚定义见图1和表1。图1AD7888的引脚图AD7888的控制寄存器是8位只写寄存器。数据在SCLK的上升沿从DIN引脚载人,同时获取外部模拟量转换的结果。每次数据的传输需要准备16个连续时钟信号。只有在片选信号下降之后的前8个时钟脉冲的上升沿提供的信息装入控制寄存器。图2显示了详细的串行接口时序图,串行时钟提供了转换时序,且控制AD7888转换信息的输入输出。CS初始化数据传送和转换处理。在其下降沿之后的1.5个时钟周期开始采样输入信号,这段时间表示为tACQ(获取时间)。整个转换过程还需要14.5个时钟周期来完成,这段时间表示为tCONVERT(转换时间)。从AD7888获取数据的整个转换过程需要16个时钟周期。CS上升沿之后,总线返回高阻状态。如果CS继续保持低电平,则准备新一轮的转换。进行采样的输入通道的选择是提前写入控制寄存器的,因此在转换时,用户必须提前写入以备通道的转换。也就是说,在进行当前转换时,用户就必须提前写入通道的地址以备下次转换使用。图2串行接口时序图2S3C2410的主要功能S3C2410是三星公司推出的采用RISC结构的16/32位微处理器。它基于ARM920T内核,采用五级流水线和哈佛结构,最高频率可达203MHz,是高性能和低功耗的硬宏单元。ARM920T具有增强ARM体系的MMU(支持WinCE,EPOC32和Linux)、16kB的指令和数据高速缓存以及高速AMBA总线接口。S3C2410被设计用于手持设备以及普通的嵌入式应用的集成系统,为了降低整个系统的成本,S3C2410还包括下面的部分:LCD控制器(STN&TFT)、NANDFlash引导装入程序、系统管理(片选逻辑和SDRAM控制器)、3通道UART,4通道DMA、4通道PWM时钟、I/O口、RTC、8通道10位ADC及触摸屏接口、IIC总线接口、IIS总线接口、USB主口和USB设备口、SD主口和多媒体卡接口、2通道SPI和2通道PLL。S3C2410有2个SPI口,可以实现串行数据的传输。每个SPI接口各有2个移位寄存器分别负责接收和发送数据。在传送数据期间,发送数据和接收数据是同步进行的,传送的频率可由相应的控制寄存器设定。如果只想发送数据,则接收数据为哑元;如果只想接收数据。则需发送哑元“0xff”。SPI接口共有4个引脚信号:串行时钟SCK(SPICLK0,1)、主入从出MISO(SPICLK0,1)和主出从入MOSI(SPIMOSI0,1)数据线、低电平有效引脚/SS(nSSO,1)。S3C2410的SPI接口具有如下特点(1)兼容SPI协议(ver.2.11);(2)有分别用于发送和接收的8位移位寄存器;(3)有设定传送频率的8位寄存器;(4)有轮询、中断和DMA三种传送模式。3接口与驱动根据S3C2410的SPI特点及AD7888的工作原理确定其接口如图3所示。图3AD7888与S3C2410的连接图为了实现S3C2410和AD7888在嵌入式Linux下的高速A/D转换,还编写了两者接口的驱动程序,该驱动程序功能的实现主要由以下几个函数完成。(1)Init_SPI()完成SPI的初始化voidInit_SPI(void){inti;rSPPRE0=0x32;rSPCON0=0x1e;for(i=0;i10;i)rSPTDAT0=0xff;rGPECON|=0x0a800000;rGPECON&=(~0x05400000);rGPEUP|=0x3800;//GPH5-----CSrGPHCON|=0x0400;rGPHCON&=(~0x0800);rGPHUP&=(~0x20);rGPHDAT|=0x20;}(2)ad_wr()写入要求A/D转换的通道staticssize_tad_wr(struCtfile*file,constchar*bur,size_tcount,loft_t*o