ImageVerifierCode 换一换
格式:DOCX , 页数:20 ,大小:159.10KB ,
资源ID:4874875      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/4874875.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(数控直流电流源.docx)为本站会员(b****3)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

数控直流电流源.docx

1、数控直流电流源数控直流电流源摘要: 本设计由三个部分组成,键盘与显示,基于单片机的控制器,稳流电源。以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 HD72

2、79,achieve the aim to control the output current. 一、方案论证与比较1、电源部分(1)开关电源采用单极开关电源,由220V交流整流后,经开关电源稳压输出。该方案的优点是电路的效率较高,可以达到70%80%,在电联接较好的情况下效率可以达到90%左右。但是此方案产生的直流纹波和干扰较大,而且开关电源结构复杂,在以后的电路中很难加以控制,很可能造成设计的失败和技术参数的超标,鉴于时间和电路可靠性的考虑没有选择这套方案。(2)线性电源交流电压经桥式电路整流滤波输出,直接进入稳流电路。这种方案的优点是,电路简单,容易实现,并且调试起来比较方便,只是功率

3、损耗稍大,但是在这种小型非连续工作电源中这些功率损耗可以承受。2、稳流部分(1)内环反馈 在稳流部分加入一个负反馈,在DAC0832输出电压值之后与LM350K输出电压相比较,使其产生误差信号,运用负反馈原理降低误差,使输出性能较理想。电路连接图如图1 所示: 图1 内环反馈(2)双闭环控制 在内环反馈基础上再加上一个外部的负反馈。如图2 所示,即把输出后电压值经过A/D转换之后,再与D/A转换之前的电压值相比较,然后经过内环反馈,即经过了两次负反馈过程。理论上讲这种方案比单独内环反馈要更精确,但我们在实际调试中已经调试通过了单片机软硬件及算法的设计,但经过比较,我们觉得在本系统没有必要再加上

4、外环控制。所以本设计选用了内环单独控制。图2 双闭环控制二、主要元器件选择1、HD7279A与82798279单个芯片就能实现键盘输入管理和LED显示控制两种功能。但是8279的局限性是,对于LED显示没有驱动功能,需要外接显示驱动电器,增加了电路的复杂性;且占用并行接口口线较多。本系统采用HD7279A代替8279,取得了很好的效果。这种芯片不仅能实现8279的大部分功能,而且解决了它的不足。HD7279A的主要功能:同时驱动8位共阴式七段LED数码管(或64只独立的LED),提供了两种译码方式和消隐、闪烁、移位等多种控制功能,能管理多达64键的键盘矩阵,采用串行接口,节约单片机的IO口线,

5、特别适用于内嵌ROM的单片机不作总线扩展,仅使用片上的IO接口的情况。这样,既节省了布线空间,又简化了电路设计,使仪表的进一步微型化成为可能。 图3 单片机与HD7279A的连接电路2、LM317与LM350K LM317在输出电压范围为1.237V时可以提供1.5A的电流,本产品要求的最大电流为2A,所以必须用两个LM317并联,但是由于并联后两个LM317工作电流负载不均衡,使电路稳定性降低。 鉴于以上原因,本设计采用了单片LM350K。LM350K可以提供最大为5A电流,满足本设计要求,而且不存在两片芯片同时运行中所产生的不同步问题,故性能比较优良,且电路稳定性提高。本主电路的原理是通过

6、MCU控制D/A的输出电压大小,通过放大器放大,给电压模块作为最终输出的参考电压,真正的电压,电流还是由电压模块LM350K输出。为了达到2A的输出电流,LM350K必须选用金属外壳封装,并且带稍大面积的散热片3、DAC0832 为了实现对输出电流的数字控制,该设计选用了DAC0832。DAC0832是一款常用的数模有两种连接模式,一种是电压输出模式,另外一种是电流输出模式,为了设计的方便,选用电压输出模式,引脚Iout1和Iout2之间接一参考电压。它有三种工作方式:不带缓冲工作方式,单缓冲工作方式,双缓冲工作方式。电路采用双缓冲模式,由于/WR2=/XFER=0,DAC寄存处于直通状态。又

7、由于ILE=1,故只要在选中该片(/CS=0)的地址时,写入(/WR=0)数字量,则该数字信号立即传送到输入寄存器,并直通至DAC寄存器,经过短暂的建立时间,即可以获得相应的模拟电压,一旦写入操作结束,/WR1和/CS立即变为高电平,则写入的数据被输入寄存器锁存,直到再次写入刷新。三 、电路设计1、键盘与显示部分 本部分选用HD7279A,该芯片单片就可以完成LED显示,实现键盘接口的全部功能。通过键盘输入电流给定值(程序设定最小值20mA,最大值2000mA),运行程序后,液晶显示器前四位显示实际输出值(此功能通过ADC0809转换实现),后四位显示给定值。本部分电路图如图4 所示:图4 键

8、盘显示部分电路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,当调节电流的时候,可以以每次10m

9、A的梯度增加或者降低电压。电路图如下:3、电源部分该部分输入电流为220-240V,频率为50Hz,经过变压器E66X32-A15降压为15V,经过RS507L电路桥变为直流。图中0.5 的两电阻用于电压采样,LM350K用于电压的调节与输出。给定值经过DAC0832数模转换控制电流输出,后经HA17741I-V变换控制电压输出,后经OP07CP的电压比较反馈给LM350K进行调整。电路图如下: 四、结果分析与调试1、输出电流范围:20mA2000mA,并且特别设置了限制功能,键盘输入在20mA以下或者2000mA以上无法进行输入,保证了系统的安全,达到了本题目发挥部分的要求。2、可以通过键盘

10、来设置输出电流给定值,并且可以同时显示实测值,本系统中没有采用外闭环,为了验证我们已实现了该项功能,将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.

11、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.

12、9980.9984A符合指标要求。5、芯片的供电部分是基本的电源电路,没有必要自制,处于时间因素考虑,用成品电源。恒流源部分是由可调式线性稳压块结合闭环控制而制成的,具有精度高,线性性能好等特点。五、结语该数控电压源经过时间实际使用说明,具有精度高,使用方便,硬件电路简单等特点。如果要做成产品,还需要增加电流测量和显示部分,对这部分电路请参考相关资料。本文主要对如何控制功率输出电压大小做出个例子,该电路对测量领域,以及马达调速方面都可以扩展使用。附:程序流程图/include#include#include#include#define uchar unsigned char#define u

13、int 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()

14、uchar i=0; *ad=0; i=1;/for delay i=1;/for delay i=1;/for delay while(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; tempda

15、ta=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; else return 0xFF;/一些列的延时函数,都是在晶振频率为12MHz的情况下使用的void delay1ms(uint nu

16、m) 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 0200 senddata(0x

17、CF); senddata(0x01);/display 1 in the 8th senddata(0xCE); senddata(0x0D);/display d in the 7th senddata(0x85); senddata(0x0F);/display in the 6th senddata(0x84); senddata(0x0F);/display in the 5th senddata(0x83); senddata(A3);/display thousand in the 4th senddata(0x82); senddata(A2);/display hundred

18、 in the 3th senddata(0x81); senddata(A1);/display ten in the 2th senddata(0x80); senddata(A0);/display one in the 1th senddata(0x88); senddata(0x01AIndex);/flash key1=keyscan(); if(key1!=0xFF) while(keyscan()!=0xFF) ; tmpA0=A0; tmpA1=A1; tmpA2=A2; tmpA3=A3; switch(key1) case 1:/add 1 if(tmpAAIndex=9

19、) tmpAAIndex=0; else tmpAAIndex=tmpAAIndex+1; tmp=tmpA3*1000+tmpA2*100+tmpA1*10+tmpA0; if(tmp=20) AAIndex=tmpAAIndex; break; case 2:/minus 1 if(tmpAAIndex=0) tmpAAIndex=9; else tmpAAIndex=tmpAAIndex-1; tmp=tmpA3*1000+tmpA2*100+tmpA1*10+tmpA0; if(tmp=20) AAIndex=tmpAAIndex; break; case 3:/move left i

20、f(AIndex=3) AIndex=0; else AIndex=AIndex+1; break; case 4:/move right if(AIndex=0) AIndex=3; else AIndex=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

21、start run. cSendDA=A3*100+A2*10+A1+(A0=5)?1:0); while(key1!=0x05) /get AD0 and show in the 8765 LED delay1ms(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;

22、 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 LED senddata(0x87); senddata(arrAD3);/dis

23、play thousand in the 8th senddata(0x86); senddata(arrAD2);/display hundred in the 7th senddata(0x85); senddata(arrAD1);/display ten in the 6th senddata(0x84); senddata(arrAD0);/display one in the 5th senddata(0x83); /show setting in 4321 LED senddata(A3);/display thousand in the 4th senddata(0x82);

24、senddata(A2);/display hundred in the 3th senddata(0x81); senddata(A1);/display ten in the 2th senddata(0x80); senddata(A0);/display one in the 1th if(cAD=5?1:0) if(cSendDA(A3*100+A2*10+A1+(A0=5)?1:0) if(cSendDA1) cSendDA=cSendDA-1; /send to DA iDA=A3*1000+A2*100+A1*10+A0; /iDA=A3*100+A2*10+A1; /cDA=

25、iDA/2000*255; /cDA=A3*100+A2*10+A1; *da=cSendDA; key1=keyscan(); if(key1!=0xFF) while(keyscan()!=0xFF) ; switch(key1) case 1:/add 1mA if(iDA=5)?1:0); break; case 2:/minus 1mA if(iDA=21) iDA=iDA-1; A3=(uchar)(iDA/1000); iDA=iDA%1000; A2=(uchar)(iDA/100); iDA=iDA%100; A1=(uchar)(iDA/10); iDA=iDA%10; A0=iDA; cSendDA=A3*100+A2*10+A1+(A0=5)?1:0); break; case 3:/add 100mA if(iDA=5)?1:0); break; case 4:/minus 100mA if(iDA=120) iDA=iDA-100; A3=(uc

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1