摘要:介绍了美国MAXIM公司的32通道16位D/A转换器MAX5631的基本功能,详细讨论了它的三种工作模式及工作时序,给出了MAX5631与AT89C51单片机的一种串行接口连接方法,同时给出了它们相应的软件程序。
关键词:MAX5631 D/A转换AT89C51 串行接口
MAX5631是美国MAXIM公司生产的一种32通道高速度采样保持D/A转换器。它内含一个16位DAC、一个带内部时钟的时序控制器、一个片内RAM以及32路采样保持放大器。其中DAC电路由两部分组成。在16位DAC中,高4位可通过15个同值电阻组成的权电阻网络来完成相应的转换,其余位的转换则由一个12位R-2R梯形网络来完成。其32路带缓冲的采样保持电路通过内部保持电容来使输出压降维持在每秒1mV的范围内,且不需要配置外部增益和偏置电路。
MAX5631能提供最大200μV的分辨率和0.015%FSR的高精度转换,其输出电压范围为-4.5V~9.2V,并具有工作温度范围以及串行接口灵活等特点,适用地处理大量模拟数据输出的场合。
1 引脚说明
图1所示是MAX5631的引脚列图。该器件共有64个引脚,大致可分成以下几类:
(1)电源类:其中第4脚为D/A数模转换器的+5V供电电源。第9脚为+5V逻辑电源,第14脚为+5V采样保持电路。16、32、46脚为负电源,17、39、48脚为正电源。13脚为数字地,15、25、40、55、62脚为模拟地,63脚为电压参考输入。
(2)控制类:其中第5脚RST为复位输入,6脚CS为片选输入,10脚IMMED为立即更新模式,18、33、49脚(CL)为输出钳位电压低位。31、47、64脚(CH)为输出钳位电压高位。
(3)时钟类:11脚ECLK为外部时序时钟输入,12脚CLKSEL为时钟选择输入。
(4)串行接口类:7脚DIN为串行数据输入,8脚SCLK为串行时钟输入。
(5)输出类:该类引脚主要有OUT0~OUT31共32个输出端。
2 MAX5631的功能结构和工作模式
MAX5631的内部结构框图如图2所示。下面介绍MAX5631的输入字、转换时序及工作模式。
2.1 输入字及转换时序
MAX5631的转换过程是先从串行数据端DIN送进要转换的16位数据D15~D0(高位在前,低位在后),然后送进5脚地址A4~A0(用这5位地址编码来选择输出通道号)。地址的后两位是控制字C1和C0,其中C1为1为立即更新模式,为0则为猝发模式;C0为1表示选择外部时钟序列,为0则选择内部时钟序列。C1、C0之后应补一位0。见表1。
表1 输入字序列
数 据 | 地 址 | 控 制 | |||||||||||||||||||||
D15 | D14 | D13 | D12 | D11 | D10 | D9 | D8 | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 | A4 | A3 | A2 | A1 | A0 | C1 | C0 | 0 |
MSB | LSM |
图3是MAX5631的时序图,当片选CS变低后,系统将在每一个时钟的上升沿送出一位数据。送完最后一位数据(即第24位数据后)后片选CS变高。而当CS为高电平时,任何输入数据都是无效的。
2.2 工作模式
MAX5631有三种工作模式,分别为顺序模式、立即更新模式和猝发模式。其中顺序模式为默认工作模式。在顺序工作模式下,内部时序控制器按顺序循环访问SRAM,并将对应的数字量装入DAC,同时更新相应的采样保持器。所以,在采用内部顺序控制时钟时,顺序工作模式下更新32路输出的时间为320μs。而当采用外部顺序控制时钟时,整个更新过程需要128个时钟周期。
立即更新模式用于更新单片SRAM的内容,同时更新相应的采样保持放大器输出。在这种模式下,所选择的通道输出会在顺序操作恢复前更新。用户可以通过设置IMMED或使C1为高电平来选择立即更新模式。当片选CS为低电平时,原访问顺序被打断。输入字被存储在对应于被选择通道的SRAM中。此时DAC转换和相应的采样保持对输入串口完全透明。相应的输出通道将得到立即更新。更新后,时序将回到原来中断的SRAM地址重新开始顺序更新。立即更新操作需要占用两个时序周期,其中一个周期用来使时序控制器继续完成正在进行的操作,另一个用来进行新数据的更新。图4(a)所表示的就是立即更新模式的例子。当7通道正在更新的时候,20通道正在装载数据。此时,如果CS变为低电平,则原顺序操作被中断,而当CS变为高电平后,通道20将立即更新,然后是通道7的更新以后的操作依据原序列进行。
猝发模式是一种高速装入多地址SRAM的方法,但此时数据不被立即更新,而只有在数据猝发装入完成并将控制返回到时序控制器后才进行更新。用户通过将IMMED和C1同时保持低电平可选择猝发模式。当CS变低时,顺序操作被中断,可以给相应的SRAM中装入数据。而当CS变高时,顺序操作从中断的地方重新开始。各通道按顺序依次更新数据。猝发操作后,一般需要一个时序循环才能再次读取串口数据以保证所有通道的被猝发数据更新。图4(b)所示是在通道7被更新时,片选CS变成低电平开始装入所有数据的例子,此时没有任何一个通道的数据能被更新。当片选CS变成高电平时,系统将从通道7重新开始顺序更新操作。
3 硬件连接电路
MAX5631与单片机AT89C51的硬件连接如图5所示。片选CS可控制MAX5631是否被选中。CS为低后,所有的转换开始有效。DIN为串行数据输入,SCLK为外部时钟输入。IMMED为模式选择,该脚为高或者控制字C1为高表示选择立即更新模式;当IMMED和C1同时为低表示猝发模式。在所给出的硬件连接图中,这两种模式可通过P1.4的控制加以选择。如果已经固定选择了某一模式,也可以将该脚直接接地或电源。CLKSEL为时钟选择端,当C0或者该脚为高电平时,系统选择外部时钟模式,此时内部时钟模式将被关闭。所给的硬件连接图为外部时钟模式。ECLK为外部时钟模式控制引脚,可用于控制外部时钟。RST为输入复位端。
图4
4 软件程序设计
下面是针对图5硬件连接电路给出的相应C评议程序。其中单片机晶振频率为11.0592Hz。设计时,首先送入24个输入字,其中前16位是要转换的16位数(用第一个循环实现输入数据),后8位是通过地址选择的输出数据通道号。
Max5631(unsigned int Data,unsigned char Chan)
{
unsigned char BitCounterData=16,BitCounter Chan=8;//位数控制
unsigned char TempChan;//中间临时通道号
unsigned int TempData;//中间临时变量
TempData=Data;
TempChan=Chan;
TempChan<<=3;
TempChan&=0xfffe;
SCL=0;//时钟线为低电平
SCS=0;//片选为低电平
do{
SCL=0;
-nop-();
if((TempData&0x8000)==0x8000)//如果最高位是1
SDA=1;
Else
SDA=0;//数据线为低电平
SCL=1;
TempData=TempData<<1;左移
BitCounterData--;
}while(BitCounterData);
do{
SCL=0;
-nop-();
if((TempChan & 0x0080)==0x0080)//如果最高位是1
SDA=1;
else
SDA=0;
SDA=0;
SCL=1;
TempChan=TempChan<<1;//左移
BitCounterChan--;
}while(BitCounterChan);
SCL=0;
SCS=1;
}
5 结束语
MAX5631是MAXIM公司推出的多通道D/A转换器。该器件接口简单,特别适用于控制多路模拟信号,可广泛应用于自动监测、工业控制程序及光电控制电路等场合。