摘 要:在控制系统中经常用到一些模拟信号,通常使用数模转换器输出所需的模拟信号。计算机控制数模转换器需要借助外部总线接口,USB接口是常用的外部总线接口,用来控制数模转换器非常便捷。作者以典型的USB接口芯片和D/A转换器芯片为例,详细说明了基于USB接口的数模转换系统的电路及程序设计方法。
0 引言
在控制系统中经常需要产生和控制一些模拟信号,而常用的微处理器外部总线接口为数字信号,无法直接产生需要的模拟信号,这就用到了D/A转换器。可以通过USB接口来控制D/A转换器,使其输出要求的模拟量电压或模拟量电流。
USB接口作为微处理器常用的外部总线接口,目前已经得到了广泛的应用,采用USB接口减少了开发的时间、风险以及费用,从而用最快捷的方法实现最经济的解决方案。
本文以USB接口芯片PDIUSBD12和电压输出型D/A转换芯片AD558为例,详细阐述了基于USB接口的DAC系统电路及程序设计方法。
1 USB接口芯片PDIUSBD12简介
本系统选用的USB接口芯片是Philips公司生产的USB1.1接口芯片PDIUSBD12,它是一款性价比很高的USB器件,通常用作微控制器系统中实现与微控制器进行通信的高速通用并行接口。它还支持本地的DMA传输。PDIUSBD12芯片的主要特性如下:
·符合USB1.1规范;
·集成了SIE、FIFO存储器、收发器以及电压调整器;
·完全自治的直接内存存取(DMA)操作;
·集成320字节多结构FIFO存储器;
·在批量模式和同步模式下均可实现1MB/s的数据传输速率;
·具有良好EMI特性的总线供电能力;
·可通过软件控制与USB的连接;
·具有可编程的时钟频率输出;
·符合ACPI、OnNOW和USB电源管理的要求;
·高于8kV的在片静电防护电路;
·双电源操作:3.3±0.3V或扩展的5V电源,范围为3.6~5.5V;
所有这些特性都为系统显着节约了成本,同时使USB功能在外设上的应用变得容易。低功耗使它可以应用于通过总线供电的外设。
2 D/A转换芯片AD558简介
本系统选用的DAC芯片是ADI公司推出的8位电压输出型D/A转换器AD558.电压输出型D/A转换器主要特点是没有放大部分的延迟,可以做到很高的速度,但负载能力有限,一般用于高阻抗负载的场合。
D/A转换所采用的基本方法是将数字量转化成二进制数据。其每一位产生一个相应的电压或者电流,而这个电压或者电流的大小正比于相应的二进制位的权。最后将这些电压或者电流相加并输出。
一个完整的D/A转换器主要包括3部分,即加权电阻解码网、数字量控制的电子开关组合和由运算放大器构成的电流电压转换器。D/A转换器的原理如图1所示。
一般来说,并行D/A转换器的数字-模拟转换速度要比串行D/A转换器要高。并行D/A转换器转换速度快的原因是在数字量的输入端,各个数字位是同时输入到转换器相应的端口的。整个器件的转换时间取决于电源电压的建立时间和各个权位的求和时间。而这些时间一般都很短,一般可以达到纳秒或微秒量级。因此,对于速度要求比较高的场合,应该优先选用并行D/A转换器。
在AD558型D/A转换器中,电子开关组和输入二进制数D0~D7相对应。当某个二进制位为1时,对应的电子开关闭合,基准电压Vref连接加权电阻解码网络,使该支路电阻上有电流通过;当某个二进制位为0时,对应的电子开关断开,该支路电阻上便无电流通过。加权电阻解码网络各个分支的电阻值与输入的二进制数据D0~D7的权成反比关系。权大的电阻值小,权小的电阻值大。D/A转换器根据各个权位的情况以及输入的二进制数,通过求和及电流电压转换电路,得到总和的模拟电压值并输出。
在D/A转换器中,数字量的位数也反映了D/A转换器的分辨率,即输入数字量发生单位数字的变化时,对应的模拟量输出值的改变。对于8位电压型D/A转换器,输入数字量发生单位变化时,模拟量输出的改变为V/255,其中V为电压输出的满量程。
AD558的主要性能指标如下:
·8位并行接口;
·电压的输出范围0~+10V;
·相对精度±(1/2)最低有效位;
·输出转换建立时间1 s;
·使用单一电源供电,电源电压范围+4.5~+16.5V;
·内部具有基准电压源,无须外接基准源;
·内部集成有数据锁存器;
·75mW低功耗。
3 电路设计
本系统采用USB控制芯片PDIUSBD12和D/A转换器AD558来实现DAC控制。计算机可以通过USB接口控制AD558输出所需的各种模拟信号。由于计算机的USB接口具有向外供电的功能,因此这里采用USB接口的电源为PDIUSBD12芯片供电。
USB接口部分的电路原理图如图2所示。
AD558的数据总线连接到PDIUSBD12.AD558工作于0~+10V模拟电压输出模式。电容C9和C10用于改善输出波形。AD558采用单一的12V供电,不需要外接基准电压源。数模转换部分的电路原理图如图3所示。
在制作PCB的时候,应遵守高速USB印刷电路板的要求。为了达到较高的信号质量,需要采用4层板甚至6层板来布线。将USB芯片放置在信号层,并尽可能离GND层近些。
USB接口中的D+和D-用于高速的USB数据传输,因此这两根信号线直接影响USB接口电路的稳定性,在印制电路板布线的时候需要仔细布置。D+和D-的走线应尽可能短且相等,并且合理设置D+和D-的导线宽度和间距。D+和D-之间的差分阻抗应该为90W±10%.保证在D+和D-信号的下面是完整的GND层。中间断开的GND层将导致差分阻抗不匹配,并增加信号的干扰。
4 程序设计
上位机的程序在VisualC++6.0编译环境中进行设计,分为设备初始化、USB设备检测、输出电压三个部分,程序代码分别介绍如下。
4.1 设备初始化
需要先初始化USB设备变量、控制端点变量和线程变量。主要是在OnInitDialog()函数中进行。代码示例如下:
4.2 USB设备检测
在程序中检测连接的USB设备,代码示例如下:
4.3 输出电压
用于从文本框中读取输入的电压值,然后转换为浮点数,接着转换成最接近的并行数据,最后通过自定义请求输出给USB设备。代码示例如下:
5 小结
本文通过一个完整的实例,讲解了如何使用USB接口芯片实现上位机控制D/A转换输出模拟电压。D/A转换器将数字信号转换成为模拟信号,可以利用成熟的数字电路技术实现控制,应用非常广泛。熟练掌握这种方法以后对于相关领域的设计工作十分有用。