数控直流电流源_第1页
数控直流电流源_第2页
数控直流电流源_第3页
数控直流电流源_第4页
数控直流电流源_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

数控直流电流源摘要: 本设计由三个部分组成,键盘与显示,基于单片机的控制器,稳流电源。以89C52为主控单元,以数模转换器DAC0832输出参考电压,以该参考电压控制电压转换模块LM350K的输出电压大小,设计实用,精度高。Abstract: This design is consisted of three elements, The controller based on microintrollers 89C52,Keyboard and display,Stable electric current source. The 51 synthesized with HD7279,achieve the aim to control the output current. 一、方案论证与比较1、电源部分(1)开关电源采用单极开关电源,由220V交流整流后,经开关电源稳压输出。该方案的优点是电路的效率较高,可以达到70%80%,在电联接较好的情况下效率可以达到90%左右。但是此方案产生的直流纹波和干扰较大,而且开关电源结构复杂,在以后的电路中很难加以控制,很可能造成设计的失败和技术参数的超标,鉴于时间和电路可靠性的考虑没有选择这套方案。(2)线性电源交流电压经桥式电路整流滤波输出,直接进入稳流电路。这种方案的优点是,电路简单,容易实现,并且调试起来比较方便,只是功率损耗稍大,但是在这种小型非连续工作电源中这些功率损耗可以承受。2、稳流部分(1)内环反馈 在稳流部分加入一个负反馈,在DAC0832输出电压值之后与LM350K输出电压相比较,使其产生误差信号,运用负反馈原理降低误差,使输出性能较理想。电路连接图如图1 所示: 图1 内环反馈(2)双闭环控制 在内环反馈基础上再加上一个外部的负反馈。如图2 所示,即把输出后电压值经过A/D转换之后,再与D/A转换之前的电压值相比较,然后经过内环反馈,即经过了两次负反馈过程。理论上讲这种方案比单独内环反馈要更精确,但我们在实际调试中已经调试通过了单片机软硬件及算法的设计,但经过比较,我们觉得在本系统没有必要再加上外环控制。所以本设计选用了内环单独控制。图2 双闭环控制二、主要元器件选择1、HD7279A与82798279单个芯片就能实现键盘输入管理和LED显示控制两种功能。但是8279的局限性是,对于LED显示没有驱动功能,需要外接显示驱动电器,增加了电路的复杂性;且占用并行接口口线较多。本系统采用HD7279A代替8279,取得了很好的效果。这种芯片不仅能实现8279的大部分功能,而且解决了它的不足。HD7279A的主要功能:同时驱动8位共阴式七段LED数码管(或64只独立的LED),提供了两种译码方式和消隐、闪烁、移位等多种控制功能,能管理多达64键的键盘矩阵,采用串行接口,节约单片机的IO口线,特别适用于内嵌ROM的单片机不作总线扩展,仅使用片上的IO接口的情况。这样,既节省了布线空间,又简化了电路设计,使仪表的进一步微型化成为可能。 CSCLKDATAKEYHD7279A P1.4 P1.5 P1.6 P1.7 89C52图3 单片机与HD7279A的连接电路2、LM317与LM350K LM317在输出电压范围为1.237V时可以提供1.5A的电流,本产品要求的最大电流为2A,所以必须用两个LM317并联,但是由于并联后两个LM317工作电流负载不均衡,使电路稳定性降低。 鉴于以上原因,本设计采用了单片LM350K。LM350K可以提供最大为5A电流,满足本设计要求,而且不存在两片芯片同时运行中所产生的不同步问题,故性能比较优良,且电路稳定性提高。本主电路的原理是通过MCU控制D/A的输出电压大小,通过放大器放大,给电压模块作为最终输出的参考电压,真正的电压,电流还是由电压模块LM350K输出。为了达到2A的输出电流,LM350K必须选用金属外壳封装,并且带稍大面积的散热片3、DAC0832 为了实现对输出电流的数字控制,该设计选用了DAC0832。DAC0832是一款常用的数模有两种连接模式,一种是电压输出模式,另外一种是电流输出模式,为了设计的方便,选用电压输出模式,引脚Iout1和Iout2之间接一参考电压。它有三种工作方式:不带缓冲工作方式,单缓冲工作方式,双缓冲工作方式。电路采用双缓冲模式,由于/WR2=/XFER=0,DAC寄存处于直通状态。又由于ILE=1,故只要在选中该片(/CS=0)的地址时,写入(/WR=0)数字量,则该数字信号立即传送到输入寄存器,并直通至DAC寄存器,经过短暂的建立时间,即可以获得相应的模拟电压,一旦写入操作结束,/WR1和/CS立即变为高电平,则写入的数据被输入寄存器锁存,直到再次写入刷新。三 、电路设计1、键盘与显示部分本部分选用HD7279A,该芯片单片就可以完成LED显示,实现键盘接口的全部功能。通过键盘输入电流给定值(程序设定最小值20mA,最大值2000mA),运行程序后,液晶显示器前四位显示实际输出值(此功能通过ADC0809转换实现),后四位显示给定值。本部分电路图如图4 所示:图4 键盘显示部分电路2、控制部分采用常用的89C52芯片作为控制器,P0口和DAC0832的数据口直接相连,D/A的/CS接P2.3,/WR2和/WR2接P3.6接地,让D/A工作在双缓冲方式下。通过调节可调电阻调节LM350K的输出电压为5.12V,所以在DAC的8脚输出电压的分辨率为5.12V/256=0.02V,也就是说DA输入数据端每增加1,电压增加0.02V。D/A的电压输出端接放大器OP07CP的输入端,放大器的放大倍数为10,输出到电压模块LM350K的电压分辨率为0.02V10=0.2V。所以,当MCU输出数据增加1的时候,最终输出电压增加10mA,当调节电流的时候,可以以每次10mA的梯度增加或者降低电压。电路图如下:3、电源部分该部分输入电流为220-240V,频率为50Hz,经过变压器E66X32-A15降压为15V,经过RS507L电路桥变为直流。图中0.5 的两电阻用于电压采样,LM350K用于电压的调节与输出。给定值经过DAC0832数模转换控制电流输出,后经HA17741I-V变换控制电压输出,后经OP07CP的电压比较反馈给LM350K进行调整。电路图如下: 四、结果分析与调试1、输出电流范围:20mA2000mA,并且特别设置了限制功能,键盘输入在20mA以下或者2000mA以上无法进行输入,保证了系统的安全,达到了本题目发挥部分的要求。2、可以通过键盘来设置输出电流给定值,并且可以同时显示实测值,本系统中没有采用外闭环,为了验证我们已实现了该项功能,将A/D直接连在D/A上,显示数值正确。在20mA2000mA的范围内不会出现输出电流大于给定值的1%+10mA的情况,完全符合设计要求。如下表:次数123456789单位给定值20001800160012008004002005020mA测量值0.49790.44890.39950.29840.2020.10020.05440.0120.0048V电流值1991.61795.615981193.6808400.8217.649.219.2mA偏差值8.44.426.4-8-0.8-17.60.80.8mA给定值1%+10mA3028262218141210.510.2mA3、本设计具有非常突出的“+”,“-”步进功能,可以单独步进1mA,10mA,100mA,使步进调整过程更加快捷方便,而且在任何情况下不会超出设定值的上下限。4、改变负载电阻,当输出电压在10V以内变化时,输出电流值的变化与输出电流值的大小比较如下,满足设计的要求,并且电流值变化很小,达到了很高的精度,下表为输出电流是1000mA 时测量值:次数123456单位电阻值1357912测量值0.24840.24880.24890.24910.2490.2496V电流值0.99360.99520.99560.99640.9980.9984A符合指标要求。5、芯片的供电部分是基本的电源电路,没有必要自制,处于时间因素考虑,用成品电源。恒流源部分是由可调式线性稳压块结合闭环控制而制成的,具有精度高,线性性能好等特点。五、结语该数控电压源经过时间实际使用说明,具有精度高,使用方便,硬件电路简单等特点。如果要做成产品,还需要增加电流测量和显示部分,对这部分电路请参考相关资料。本文主要对如何控制功率输出电压大小做出个例子,该电路对测量领域,以及马达调速方面都可以扩展使用。附:程序流程图/include#include#include#include#define uchar unsigned char#define uint unsigned int#define valve 10/sbit dat = P35;/sbit key = P32;/sbit cls = P34;/sbit clk = P33;sbit dat = P14;sbit key = P15;sbit cls = P16;sbit clk = P17;sbit DQ = P10;sbit ad_busy =P33;uchar A4=0,2,0,0;uchar arrAD4=0,0,0,0;uchar AIndex=0;uchar xdata *da=0xA000;uchar xdata *ad=0x9FF8;uchar adin()uchar i=0;*ad=0;i=1;/for delayi=1;/for delayi=1;/for delaywhile(ad_busy=1);return *ad;void delay(int num)while(num-);void delay50us(uint num)uint i,j;for(i=0;inum;i+)for(j=0;j6;j+);void senddata(uchar data1)uchar tempdata,i;tempdata=data1;cls=0;delay50us(1);for(i=0;i7;clk=1;tempdata=tempdata1;delay(1);clk=0;delay(1);dat=0;uchar keyscan()uchar i,tempdata=0;if(key=0)senddata(0x15);dat=1;delay50us(1);for(i=0;i8;i+)clk=1;delay(1);tempdata=(tempdata1) | dat;clk=0;delay(1);dat=0;return tempdata;elsereturn 0xFF;/一些列的延时函数,都是在晶振频率为12MHz的情况下使用的void delay1ms(uint num)uint i;while(num-!=0)&(keyscan()=0xFF)for(i=0;i72;i+);void initkey()P1=0xFF;delay1ms(25);senddata(0xA4);cls=1;/setup at startupvoid Mission1()uchar key1=0;uchar tmpA4=0,0,0,0;uint tmp=0;A0=0;A1=2;A2=0;A3=0;AIndex=0;/send 0 to DA*da=10;while(key1!=0x05) /show 1D 0200senddata(0xCF);senddata(0x01);/display 1 in the 8thsenddata(0xCE);senddata(0x0D);/display d in the 7thsenddata(0x85);senddata(0x0F);/display in the 6thsenddata(0x84);senddata(0x0F);/display in the 5thsenddata(0x83);senddata(A3);/display thousand in the 4thsenddata(0x82);senddata(A2);/display hundred in the 3thsenddata(0x81);senddata(A1);/display ten in the 2thsenddata(0x80);senddata(A0);/display one in the 1thsenddata(0x88);senddata(0x01AIndex);/flashkey1=keyscan();if(key1!=0xFF)while(keyscan()!=0xFF);tmpA0=A0;tmpA1=A1;tmpA2=A2;tmpA3=A3; switch(key1)case 1:/add 1if(tmpAAIndex=9)tmpAAIndex=0;elsetmpAAIndex=tmpAAIndex+1;tmp=tmpA3*1000+tmpA2*100+tmpA1*10+tmpA0;if(tmp=20)AAIndex=tmpAAIndex;break;case 2:/minus 1if(tmpAAIndex=0)tmpAAIndex=9;elsetmpAAIndex=tmpAAIndex-1;tmp=tmpA3*1000+tmpA2*100+tmpA1*10+tmpA0;if(tmp=20)AAIndex=tmpAAIndex;break;case 3:/move leftif(AIndex=3)AIndex=0;elseAIndex=AIndex+1;break;case 4:/move rightif(AIndex=0)AIndex=3;elseAIndex=AIndex-1;break;void Mission2()uchar key1=0;uchar cAD=0;uint iAD=0;uint iDA=0;uchar cDA=0;uchar cSendDA=0;senddata(0x88);senddata(0xFF);/stop flash*da=1;/send 10 to DA when the program start run.cSendDA=A3*100+A2*10+A1+(A0=5)?1:0);while(key1!=0x05) /get AD0 and show in the 8765 LEDdelay1ms(500);cAD=adin();/cAD=cDA;/iAD=(int)(int)cAD/255*2000);/去抖动/*iAD=arrAD3*1000+arrAD2*100+arrAD1*10+arrAD0;if(abs(iAD-(int)cAD*10)valve)iAD=cAD*10;arrAD3=(uchar)(iAD/1000);iAD=iAD%1000;arrAD2=(uchar)(iAD/100);iAD=iAD%100;arrAD1=(uchar)(iAD/10);iAD=iAD%10;arrAD0=(uchar)iAD;*/iAD=cAD*10;arrAD3=(uchar)(iAD/1000);iAD=iAD%1000;arrAD2=(uchar)(iAD/100);iAD=iAD%100;arrAD1=(uchar)(iAD/10);iAD=iAD%10;arrAD0=(uchar)iAD;/show AD in 8765 LEDsenddata(0x87);senddata(arrAD3);/display thousand in the 8thsenddata(0x86);senddata(arrAD2);/display hundred in the 7thsenddata(0x85);senddata(arrAD1);/display ten in the 6thsenddata(0x84);senddata(arrAD0);/display one in the 5thsenddata(0x83);/show setting in 4321 LEDsenddata(A3);/display thousand in the 4thsenddata(0x82);senddata(A2);/display hundred in the 3thsenddata(0x81);senddata(A1);/display ten in the 2thsenddata(0x80);senddata(A0);/display one in the 1thif(cAD=5?1:0)if(cSendDA(A3*100+A2*10+A1+(A0=5)?1:0)if(cSendDA1)cSendDA=cSendDA-1;/send to DAiDA=A3*1000+A2*100+A1*10+A0;/iDA=A3*100+A2*10+A1;/cDA=iDA/2000*255;/cDA=A3*100+A2*10+A1;*da=cSendDA;key1=keyscan();if(key1!=0xFF)while(

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论