时间:2022-09-24 12:47:51
摘要:手动调节多路电压输出很难实现,费时、费力,不仅操作麻烦、效率低而且精度也很低。提出了一种电压输出方法,单片机连接三片具有四路电压转换的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).