AD5532的引脚功能描述如下:
AVCC:模拟供电电压,范围为4.75 V~5.25 V,只向D/A转换器内核供电;
VDD:正电源端,范围为8 V~16.5 V;
VSS:负电源端,电压范围-4.75 V~-16.5 V;
DGND:数字地,数字电路的参考点;
DVCC:数字电源端数字信号供电电压,范围为2.7 V~5.25 V;
DAC_GND:所有D/A转换模块的参考地;
REF_IN:VOUT0~VOUT31的参考输入电压;
REF_OUT:内部参考输出电压,提供3 V电压;
VOUT:32个通道的输出;
VIN:无限采样/保持模拟输入电压,在D/A转换模式时,该引脚接地;
A4~A0:并行模式下端口地址,5个地址引脚选定32个通道。A4是通道地址的MSB,A0是通道地址的LSB。每个引脚均有内部上拉电阻,因此,这些引脚悬空时,默认为逻辑高电平;
CAL:并行模式下控制32个D/A转换单元同步向VIN采样,接内部下拉电阻,因此,该引脚悬空时,默认为逻辑低电平;
nCS/nSYNC:低电平时,在并行模式下,片选使能;在串行模式下为帧同步;
nWR:在并行模式下有效,写信号,低电平有效,配合nCS/nSYNC引脚可通过并口确定地址,内部下拉电阻,悬空时默认为逻辑低电平;
OFFSET_SEL:并行模式下有效,偏移选择,高电平有效,用于选择偏移通道,内部下拉电阻,悬空时默认为逻辑低电平;
SCLK:串行模式下的串行时钟输入,工作频率为14 MHz,20 MHz时工作在ISHA模式。
DIN:串行模式下的串行数字输入,在SCLK下降沿数据有效,内部上拉电阻,悬空时默认为逻辑高;
DOUT:串行模式下的串行数字输出,在SCLK上升沿数据输出;
SER/nPAR:允许用户选择串行接口或并行接口模式,当拉为低电平时,选择并行接口模式,当拉为高电平时,选择串行接口模式。内部下拉电阻悬空时默认为逻辑低;
OFFS_IN:偏移输入,改变其输入电压调节VOUT的输出范围;
OFFS_OUT:偏移输出,连接至OFFS_IN可调节VOUT的输出范围;
BUSY:使能采样输入电压,该引脚下降时,采样输入信号,上升时,采样完成;
nTRACK/nRESET:该引脚保持高电平时,一旦通道被选中,采样VIN;该引脚保持低电平时,直接切换至GAIN/OFFSET环节输入至VIN,选定通道在nTRACK的上升沿采样VIN。该引脚也可用于将器件复位至上电复位阶段。内部上拉电阻,悬空时默认为逻辑高电平。
3 工作原理
AD5532提供串并行两种控制方式,数字/模拟转换、无限采样/保持、回读以及采样回读四种工作模式,其中并行控制方式只在无限采样/保持模式下起作用。
图2的a、b分别是DAC模式和回读模式下的数据传输格式。这两种模式下的数据传输格式基本相同,只是MODE BIT不同。图b中DIN引脚上的数据在输入A0位后自动忽略,DOUT在第2个nCS/nSYNC下降沿后输出相应DAC寄存器中DB13~DB0位。
串行数据传输格式的前2位为工作模式位。CAL位在DAC工作模式下是测试位,为'1'时32个DAC寄存器同时置'1'或'0'。OFFSET_SEL位为'1'时表示选用OFFSET通道,A4~A0位忽略。A4~A0位为地址位,这5位数据确定相应的DAC,A4为MSB,A0为LSB。DB13~DB0位中的数据,写入由A4~A0确定的DAC寄存器,其中,DB13为MSB,DB0为LSB。
图3和图4所示分别为AD5532的串行读、写时序。在连续或非连续串行时钟下。在nCS/nSYNC的第一个下降沿复位计数串行时钟计数器,确保相应位移入或移出串行寄存器。一旦在所选的工作模式下移人或移出数据位后,SCLK信号被忽略。下一次串行数据传输时首先利用nCS/nSYNC的下降沿复位计数器。
回读模式下,nCS/nSYNC的下降沿后第一个SCLK的上升沿时DOUT离开高阻状态并在其上升沿输出数据,一旦到达SCLK的第14个下降沿DOUT返回高阻状态。DIN上的数据在nCS/nSYNC下降沿后的第一个SCLK的下降沿被锁存并在后续的SCLK下降沿连续锁存。串行接口仅在SYNC的下降沿时输入/输出数据。
4 典型应用
图5所示为AD5532在DAC工作模式下的典型应用原理图。其中VDD提供+15 V电压,VSS提供-15 V电压,AVCC提供+5 V电压,与三星公司S3C2440相连,DVCC提供+3.3 V电压。由于本系统仅需DAC功能,所以将SER/nPAR及nTRACK/nRESET引脚电压拉高,串行输入/输出引脚与S3C2440的相应SPI引脚相连。其余未涉及引脚如果是输入端最好接地或拉高。
S3C2440采用两种方式实现与AD5532的串口通信:一是采用串行外围设备接口(SPI接口);二是通过直接编程控制相应I/O引脚实现通信功能(软件SPI方式)。前者SPI模块在一系列寄存器设置后,由硬件自动实现数据的移入和移出完成串行通信;后者是通过软件控制I/O端口,逐位将数据由端口发送或接收。由于AD5532串行接口在D/A输出时接收24位数据,而回读时只需10位数据,不符合S3C2440的SPI接口传输时8位数据对齐要求。故本系统采用软件SPI方式,根据D/A输出模式与回读模式下数据传输格式编写相关函数。
系统采用Windows CE.NET4.2操作系统,程序运行空间分成内核态与用户态,且所有地址均为虚拟地址。由于应用程序无法访问I/O引脚的控制与数据寄存器,所以编写函数前需先按照WindowsCE.NET驱动程序方式编写:先申请某一内存地址空间,然后将该地址空间映射到I/O引脚的寄存器,最后对该地址相应位进行读写操作,模拟AD5532所需的串行传输方式控制器件。
申请地址空间:
将该地址空间映射到S3C2440的实际I/O地址空间中:
完成了上述步骤,可通过读写v_pIOPregs实际控制相应引脚。
SPICLK/GPE13,SPIMOSI/GPE12,SPIMISO/GPE11引脚输人/输出状态设置:
以上函数中channel取0~31,被移位到低14位时,表示选择的通道;value取低14位,表示输出的具体值。
将以上代码加入到应用程序源代码中,就可根据需要调用函数访问AD5532进行D/A输出。当然,在编译前,还需要找到pkfunc.h,ceddk.h,Winbase.h文件,并将其放置在源代码目录下,并申请内存空间及映射内存空间代码文件头include进去,否则应用程序最后无法编译,提示找不到相应函数。
5 结束语
采用AD5532串行模式进行D/A转换具有速度快、精度高、功耗低、占用口线少的优点,非常适用于需要多通道,宽范围模拟信号输出的场合。该系统电路已在实验中调试通过。