基于USB的多路幅值可调电压输出设计

时间:2022-09-24 12:47:51

基于USB的多路幅值可调电压输出设计

摘要:手动调节多路电压输出很难实现,费时、费力,不仅操作麻烦、效率低而且精度也很低。提出了一种电压输出方法,单片机连接三片具有四路电压转换的DAC8420,通过USB与电脑通信。用VC++设计电脑用户界面,电脑控制下位机可输出多达12路可调的电压信号,输出信号精度高,操作简单。

关键词:USB;电压;多路;可调

中图分类号:TP393 文献标识码:A 文章编号:1009-3044(2013)34-7904-04

一定范围内可调的电压输出在很多场合有重要的应用,例如电子器件维修检测等。手动调节电源电压输出的方法很麻烦,精确度低,而且只能输出少数的几路电压,显然不能满足快速、精确和多路电压输出的要求,为此,设计了本方案,以单片机作为下位机控制D/A转换器实现电压的转换输出,单片机通过USB接口与上位机电脑通信,接收上位机的命令,实现快速、精确、多路的电压输出,而且实现了任意一路电压可调。

1 硬件电路设计

硬件电路主要包括单片机最小系统、电源模块、USB接口电路、D/A转换电路。考虑到应用的实际需求和开发的成本,单片机采用STC89S52,可以在线编程,开发十分方便,晶振频率为12MHz。

1.1 电源设计

本系统中需要用到的电源有5V、正负10V和正负15V,交流电通过变压器降压在经过整流以后,接到稳压模块上,输出各种需要的电压。7805输出5V电压,7810和7910输出正负10V电压,7815和7915输出正负15V电压。

1.2 USB接口芯片

近年来,随着计算机技术的快速发展,特别是USB技术的发展,使用USB移动存储设备变得非常普遍,因此很多USB移动存储设备接口的芯片推出,例如南京沁恒公司的CH375就是其中之一,在一些需要转存数据的设备、仪器上被应用了。该文采用CH375做USB接口通信芯片。CH375具有8位数据总线和读、写、片选控制线以及中断输出,支持HOST主机方式和SLAVE设备方式,是一个USB总线的通用接口芯片,与单片机/DSP/MCU等控制器的连接非常方便。图2是CH375与单片机的连接示意图:

1.3 D/A转换电路

D/A转换芯片选用DAC8420,具有4个通道,各DAC的地址均由一个16位串行字单独确定,它由一个12位数据字和一个地址表头组成。初始化电压值可通过可编程复位控制CLR,使四个DAC输出零电平或中间电平。参考电压范围是正负10V,能实现电源电压范围内的正/负单极性或双极性信号摆幅,用户通过设置输入VREFHI和VREFLO而确定输出电压范围,从而提供极大的设计灵活性。具有12位电压输出,三线式串行数字输入与以10 MHz速率工作的微处理器便可轻松实现接口,只需极少的附加电路即可。该文DAC8420的电源电压接正负15V,参考电压接正负10V,可实现-10V~+10V范围内的电压可调。为提高输出的负载能力,可以将输出电压接到运放上,接成电压跟随器模式。

2 程序设计

2.1 上位机设计

上位机的软件界面用VC++6.0开发,利用CH375动态链接库提供的函数,编程实现数据的下传。12路电压数据存放在文本文件中,单击“通道数据下传”,即可将12路电压数据下传给单片机。也可以对其中的任意一路进行修改下传。界面如图3所示:

2.2 下位机设计

下位机的程序主要有两个方面的内容,USB接口程序和D/A转换程序。电脑的下传数据通过USB接口传输给CH375芯片,CH375会输出一个低电平信号通知单片机,使单片机产生外部中断,进入中断以后处理所收到的数据,进而按要求启动D/A转换,输出电压信号。单片机先初始化USB接口芯片CH375,再开放外部中断以等待电脑数据下传。USB初始化如下:

void USB_Init( void ) {

UINT8 i;

#ifdef TEST_USB_FIRST

/* 测试USB与单片机的物理连接是否正常以及是否正常工作,可选操作,通常不需要 */

UINT8 j;

USB_WR_CMD_PORT( CMD_CHECK_EXIST ); /* 测试USB是否正常工作 */

USB_WR_DAT_PORT( 0x55 ); /* 写入测试数据,任意数据 */

i = ~ 0x55; /* 返回数据应该是测试数据取反 */

if ( USB_RD_DAT_PORT( ) != i ) { /* USB不正常 */

for ( i=80; i!=0; i— ) {

USB_WR_CMD_PORT( CMD_RESET_ALL ); /* 多次重复发命令,执行硬件复位 */

USB_RD_DAT_PORT( );

}

USB_WR_CMD_PORT( 0 );

for ( i=250; i!=0; i— ) for( j=100; j!=0; j— ) Delay2us( ); /* 延时50mS */

}

#endif

三个DAC8420芯片相应的数据传输引脚接于相同的单片机引脚,片选端分别连于单片机不同的引脚。函数DAC8420(high,low,channel)是D/A转换函数,high和low参数分别是输出到DAC8420芯片的16位串行数字量的高、低8位,其中最高的2位的四种排列分别对应于DAC8420的四个输出电路,参数channel用于选择三个DAC8420芯片的片选,程序如下:

sbit DAC8420_LD = P2^5;

sbit DAC8420_CS0 = P2^2;

sbit DAC8420_CS1 = P1^7;

sbit DAC8420_CS2 = P1^6;

sbit DAC8420_SDI = P2^7;

sbit DAC8420_CLK = P2^6;

sbit DAC8420_CLR = P2^4;

sbit DAC8420_CLSEL = P2^3;

void DAC8420(unsigned char high,unsigned char low,unsigned char channel)

{

unsigned char i=0 ,m=0x80;

if(channel==0)

{ DAC8420_CS0=0;

DAC8420_CS1=1;

DAC8420_CS2=1; }

else if(channel==1)

{ DAC8420_CS0=1;

DAC8420_CS1=0;

DAC8420_CS2=1; }

else if(channel==2)

{ DAC8420_CS0=1;

DAC8420_CS1=1;

DAC8420_CS2=0; }

DAC8420_LD=1;

for(i=0;i

{ if(m&high)

DAC8420_SDI=1;

else

DAC8420_SDI=0;

DAC8420_CLK=0;

DAC8420_CLK=1;

m=(m>>1); }

m=0x80;

for(i=0;i

{ if(m&low)

DAC8420_SDI=1;

else

DAC8420_SDI=0;

DAC8420_CLK=0;

DAC8420_CLK=1;

m=(m>>1); }

DAC8420_LD=0; //将数据移入DAC寄存器

DAC8420_LD=1; //寄存器DAC数据保持

DAC8420_CS1=1;

}

3 结束语

本文设计了一种基于USB通信的多路可调电压输出系统,电脑控制下位机,可以同时输出12路-10V~+10V之间的电压,而且任意一路电压均可通过上位机调整,电压精度可达到0.2mV,大大提高了效率和精度,而且操作十分方便。

参考文献:

[1] 王殊,程卓.基于CH375的嵌入式USB文件加解密系统的设计[J].电子技术应用,2007(8).

[2] 赵晓顺,于华丽,王希望,赵建国,刘淑霞.双模式USB接口芯片CH375在温湿度测记仪中的应用[J].农机化研究,2007(10).

[3] 张彦,吴昌才,刘暾东,李茂青.基于串行DAC8420芯片的模拟量输出卡设计[J].工业控制计算机,2006(3).

[4] 吕秋霞.四路输出D/A转换器DAC8420及其应用[J].国外电子元器件,2004(8).

[5] 田学稳,刘福华,熊平.基于AT89C52的多路电压量输出设计[J].工业控制计算机,2009(11).

[6] 胡家华,徐鹏,郑昌雨,周扬,梁春阳,宁宇.PL2303单片机串口转USB口实现串行通信[J].单片机与嵌入式系统应用,2013(4).

[7] 薛建彬,张超,嵇治刚.基于单片机的USB-HOST数据采集仪表设计[J].化工自动化及仪表,2013(1).

[8] 吴波.89C52单片机系统的USB接口[J].中国科技信息,2012(16).

[9] 韩登宇,安少康,解凡.USB芯片CH375和C51单片机的接口设计[J].价值工程,2012(19).

上一篇:浅析虚拟演播室系统的应用 下一篇:解析水资源监测中计算机技术的应用