引言
---在计算机的测控系统中,常要用到模拟输出,数模转换器(DAC)就是一种将数字信号转换成模拟电信号的器件。DAC根据输入数据的格式一般分为并行和串行两种,并行的DAC通常有8位、10位、12位和16位等,并行芯片进行D/A转换时,输出建立时间短,通常不超过10μs,但它们的引脚比较多,芯片体积大,与CPU连接时电路较复杂。有些应用并不太计较D/A转换的输出建立时间,比如在数控机床中,主轴电机通常由交流变频器来控制,交流变频器接受数控系统输出的模拟电压,当需要改变主轴转速时,从数字量转速的输入到模拟量转速的实现,由于三相异步电机的启动,中间通常有一个较长的时间(一般需要1~3s)。此时,在数控系统中,选用串行DAC来控制变频器,即可满足要求,虽然输出建立时间比并行DAC稍长(通常也不超过100μs),但这样的时间与电机的启动时间比起来,完全可以忽略不计,且串行DAC与CPU连接时所用引线少、电路简单,芯片体积小、价格低。
---当精度要求不是太高时,对于单路的DAC,可以选用美国MAXIM公司生产的8位串行D/A芯片MAX517。本文将主要介绍MAX517的特性及其与AT89S52单片机的通信。
MAX517的性能简介
---MAX517是8位电压输出型数模转换器,它带有简单的双线串行接口,允许多个设备之间进行通信。MAX517使用简单的双线串行接口,只需要标准的微处理器提供2根总线与之相连,如图1所示。微处理器的SCL输出时钟信号,SDA输出数据。当微处理器的SCL传送时钟脉冲时,对于MAX517来说,最高频率不能超过400kHz,即波特率不超过400kbps。图2是MAX517的一个完整的串行数据传送时序。
---首先,微处理器应给MAX517一个地址字节,MAX517收到之后,给处理器一个应答信号;其次,处理器再给MAX517一个命令字节,MAX517收到之后,又发一个应答信号给处理器;最后,处理器将要转换的数字量(输出字节)送给MAX517,MAX517收到之后,再一次向处理器发送一个应答信号。至此,一个完整的串行数据传送即告结束。
MAX517与AT89S52单片机的通信
---对于AT89S52单片机来说,有两种方式向MAX517传送数据,一种是串行传送方式,另外一种是普通输出方式。
● 串行传送方式
---如图4所示,将AT89S52的RXD、TXD引脚分别连接到MAX517的SDA和SCL引脚,把AT89S52的串行口设置成工作方式0。此时,AT89S52 CPU的串行口为同步移位寄存器方式,其波特率是固定的,为CPU晶振频率fosc的 1/12,数据由RXD引脚出入,同步移位脉冲由TXD引脚送出,发送或接收的是8位数据,低位在先,高位在后。当一个8位的数据写入CPU的串行口发送缓冲器SBUF时,串行口即将8位数据以 fosc/12的波特率从RXD引脚输出(从低位到高位),发送完成时,置中断标志TI=1。采用上述传送方式时,正好与MAX517的串行口特性相吻合。详细的传送程序清单如下。
---CLR ES ;关串行口中断
---MOV SCON,#00H ;初始化,写串行口控制字,取工作模式0
---MOV A,#01011000B ;准备MAX517的地址字节
---MOV SBUF,A ;向CPU的串口发送
---JNB TI,$ ;送完8位否?若未送完,则踏步等待
---CLR TI ;若送完,则清TI标志
---JB P3.0,$ ;查应答信号
---NOP ;地址已送完
---MOV A,#00000000B ;准备MAX517的命令字节
---MOV SBUF,A ;向CPU的串口发送
---JNB TI,$ ;送完8位否?若未送完,则踏步等待
---CLR TI ;若送完,则清TI标志
---JB P3.0,$ ;查应答信号
---NOP ;命令已送完
---MOV A,#xxH ;准备MAX517的输出字节
---MOV SBUF,A ;向CPU的串口发送
---JNB TI,$ ;送完8位否?若未送完,则踏步等待
---CLR TI ;若送完,则清TI标志
---JB P3.0,$ ;查应答信号
---NOP ;输出字节已送完
---RET
---值得注意的是,MAX517的+5V SCL在接收CPU送来的脉冲信号时,fmax=400kHz,而CPU的串口工作在方式0时,从TXD引脚输出的脉冲频率fTXD=fosc/12。这样,就要求fTXD=fosc/12≤400kHz,即fosc≤4.8MHz,也就是说,CPU的晶振频率不能超出4.8MHz。对于机床数控系统来说,选用MCS-51系列单片机作CPU时,若fosc≤4.8MHz,虽然照顾了MAX517的数据传送,但会导致系统的处理速度大大降低。因此,采用CPU串口方式0进行数据传送的方案,要视具体场合,在高速场合,通常不可取,只能用在低速场合。另外,采用串行传送时,CPU就不能再与其他系统进行串行通信了。
● 普通输出方式
---在普通输出方式下,可以通过CPU的2根输出线,或系统扩展输出芯片(如8255A)的2根输出线与MAX517进行通信。图4中采用的是AT89S52的P1.1、P1.0两引脚,分别与MAX517的SCL、SDA两引脚相连接。CPU遵照MAX517的工作时序,通过其P1.1引脚在必要的时候主动地输出单个的时钟脉冲,作为时钟信号,然后从P1.0引脚逐个地输出地址字节、命令字节和输出字节。在数据的传送过程中,必须遵守以下的约定:
(1)起始条件
---传送没有开始的时候,CPU 先将P1.1置高,使得MAX517的SCL=1;然后CPU控制P1.0由高变低,使得MAX517的SDA产生负跳变,标志着传送的开始。
(2)中间过程
---中间过程需要传送地址字节、命令字节和输出字节。根据MAX517的工作时序,当且仅当SCL=0(即P1.1=0)时,SDA才能产生跳变(P1.0由0变1,或由1变0);当SCL=1(即P1.1=1)时,SDA状态保持(即P1.0=0或1,保持不变)。
(3)终止条件
---当传送快要结束的时候,CPU先将P1.1置高,使得MAX517的SCL=1;然后CPU控制P1.0由低变高,使得MAX517的SDA产生正跳变,标志着传送的结束。
---在普通输出方式下,不占用CPU的串行口,不影响本系统与其他系统的串行数据通信;并且普通输出方式的传送易于控制速度,不像串行传送方式对CPU的晶振频率有限制,因此推荐使用普通输出方式。
结束语
---在研制的机床数控系统中,选择AT89S52单片机作为CPU,采用本文提出的普通输出方式向MAX517传送数据,实现了对交流变频器的控制。应用实践表明,采用MAX517进行D/A转换时,硬件连接简单,软件编程方便,器件成本低廉,系统运行可靠。本文提出的单片机与MAX517的通信方式,对于MAX518和MAX519两种DAC也具有一定的参考价值。