数控直流电流源F
- 格式:doc
- 大小:459.00 KB
- 文档页数:21
数控直流电流源(F题)设计与总结报告摘要:本设计基于单片机控制技术,系统以单片机AT89S51为核心,TLC5615,TLC1549,ZLG7289等元件构成辅助电路,采用D/A转换输出可变电压和利用压控恒流源,差动放大与信号调节电路实现对数控直流电流源的控制。
系统可预置输出电流,通过采样将实际输出反馈到单片机中构成闭环系统,进行比较、调整,提高了电流的输出精度。
关键词:单片机、压控恒流源、D/A转换Abstract:This design based on the Singlechip Control Technology. The system takes singlechip AT89S51 as the core, and takes the TLC5615, TLC1549, ZLG7289 and other devices to constitute the auxiliary circuit. It produces changeable voltage by using D/A conversion. It implements the control to the numerical controlled direct current source by using the voltage controlled constant current source, differential amplification and signal adjustment circuit. The system can preset output current, feed back the actual output through sampling to the singlechip to constitute the closed loop system, carry on comparison and adjustment, and increase the electric current output precision.Keywords: singlechip, voltage controlled constant current source, D/A conversion.目录1. 系统设计 (3)1.1 设计要求 (3)1.2 总体设计方案 (3)1.2.1 设计思路 (3)1.2.2 方案论证与比较 (3)1.2.3 系统组成 (5)2. 单元电路设计 (5)2.1 D/A转换电路 (5)2.2键盘显示电路 (6)2.3 压控恒流源电路 (6)2.4电源电路 (7)3. 软件流程设计 (8)4. 系统测试 (9)4.1 测试使用的仪器 (9)4.2 指标测试和测试结果 (9)4.2.1 输出电流的测试 (9)4.2.2输出电流与给定值偏差的绝对值的测试 (9)4.2.3 步进值的测试 (10)4.3 误差分析 (10)5. 结束语 (11)参考方献 (11)附录1 元器件明细表 (11)附录2 程序清单 (12)附录3 系统使用说明 (20)1.系统设计1.1设计要求1、基本要求(1)输出电流范围:200mA~2000mA;(2)可设置并显示输出电流给定值,要求输出电流与给定值偏差的绝对值≤给定值的1%+10 mA;(3)具有“+”、“-”步进调整功能,步进≤10mA;(4)改变负载电阻,输出电压在10V以内变化时,要求输出电流变化的绝对值≤输出电流值的1%+10 mA;(5)纹波电流≤2mA;(6)自制电源。
2、发挥部分(1)输出电流范围为20mA~2000mA,步进1mA;(2)设计、制作测量并显示输出电流的装置 (可同时或交替显示电流的给定值和实测值),测量误差的绝对值≤测量值的0.1%+3个字;(3)改变负载电阻,输出电压在10V以内变化时,要求输出电流变化的绝对值≤输出电流值的0.1%+1 mA;(4)纹波电流≤0.2mA;(5)其他。
1.2总体设计方案1.2.1 设计思路题目要求设计一个数控直流电流源。
输入交流200~240V,50Hz;输出直流电压≤10V。
设计中运用单片机控制技术,采用键盘/显示器接口控制器ZLG7289,单片机D/A转换和压控恒流源完成对数控直流电流源的控制。
采用压控恒流源是用电压来控制电流的变化。
显示部分采用了键盘/显示器接口控制器ZLG7289.不仅简化接口引线,而且减小了软件对键盘/显示器的查询时间,提高了CPU的利用率。
1.2.2 方案论证与比较(1)数控模块方案论证与选择方案一:采用中、小规模器件实现系统的数控部分。
那么使用的芯片要很多,造成控制电路内部接口信号繁琐,中间相互关联多,抗干扰能力差。
方案二:采用单片机ZLG7289和AT89S51构成控制电路来完成整个数控部分的功能。
输出部分也不再采用传统的调整管方式,而是在D/A转换之后,因为使用了单片机,整个系统可编程,使得系统灵活性大大增加。
同时,AT89S51作为一个智能化的编程器件,便于系统功能的扩展。
综上所述,采用方案二。
(2)电流源方案论证与选择方案一:采用塑封的CW 317, CW 337 两种集成稳压器完成恒流源电路。
恒流的原理是通过CW 317 的②和①端输出一个恒定的1. 25V 的基准电压, 在其两端并联一个电阻,则其电流为1. 25 VöR , 当R 不变时, 其电流不变, 不管串接的负载电阻如何变化, 负载上电流恒定不变, 具有良好的负载特性。
但输出电流只能从0~ 100 mA,远达不到题目要求,电路也比较复杂。
方案二:采用压控恒流源。
压控恒流源的功能是用电压来跟踪控制电流的变化,通过对运算放大器、大功率场子效应管、采样电阻、基准电阻等参数的设置来完成,且此设计电路简单,亦能实现压控恒流。
综上所述,采用方案二。
(3)显示方案论证与选择方案一:采用显示输出是对电流量化值直接进行译码显示输出,显示值为D/A变换的输入量,由于D/A变换与功率驱动电路引入的误差,显示值与电源实际输出值之间可能出现较大偏差。
方案二:采用对输出电流进行软件校正的方法对输出电流值进行采样并显示输出实际电流值,一旦系统工作异常,出现预置与输出值偏差过大,用户可以根据该信息进行精度校正。
综上所述,选择方案二。
(5)电源方案论证与选择系统需要1个能提供两个不同值的电源,为了保持压控恒流源电路的精度,压控恒流源电路需要5V和15V的稳压电源。
方案一:采用升压型稳压电路。
用两片MC34063芯片分别将3V的电池电压进行直流斩波调压,得到5V和12V的稳压输出。
只需使用两节电池,既节省了电池,又减小了系统体积重量,但该电路供电电流小,供电时间短,系统工作不稳定,精度不高。
方案二:采用,三端稳压LM317,功率有所提高,允许通过的最大电流可达1.5A,但对于题目要求来讲要承受2A电流,故在此不合使用的。
方案三:采用三端稳压集成7812、7912和7805分别得到+12V、-12V和+5V的稳定电压。
利用该方法方便简单,工作稳定可靠。
综上所述,选择方案三,采用三端稳压器电路。
1.2.3 系统组成经过上述各单元方案的比较、论证,定出设计系统原理框图如图1.2.3所示占用主机工作时间少,功能强大,能同时显示8个数码管和64个按键使用。
能实现对键盘的自动扫描、防抖,并对显示器进行自动刷新。
这样做不仅减少了硬件工作量,也使软件编程大大简化,减小了软件对键盘/显示器的查询时间,提高了CPU的利用率。
其接口电路如图2.2所示。
图2.23261574L1LF356R1RLUi+12v负载电阻GDSIRF530V1R2-12v20v软件主流程图4. 系统测试4.1 测试使用的仪器测试使用的仪器设备如表4.1所示。
表4.1 测试使用的仪器设备4.2 指标测试和测试结果题目要求输出电流范围: 200mA~2000mA;可设置并显示输出电流给定值,要求输出电流与给定值偏差的绝对值≤给定值的1%+10 mA;步进≤10mA;改变负载电阻,输出电压在10V以内变化时,要求输出电流变化的绝对值≤输出电流值的1%+10 mA测试结果如图4.2所示(1)输出电流范围200mA-2000mA的测试结果:213.3mA-1935.7mA214.3mA-1936.8mA214.4mA-1943.0mA图4.24.3 误差分析(1).由于D/A转换输出的电压有一定的偏差,而且偏差不一定是线性的, 这样就造成设置的电压跟实际送到压控恒流源的电压误差.(2).由于基准电阻会随电流的增大而发热,发热会引起电阻的变化,基准电阻变了,输出的电流就会出现误差.(3)电路捍接也是影响纹波电流的误差的原因之一。
5. 结束语本设计制作完成了题目要求的基本部分6项中的5项要求,基本达到设计的基本要求。
数控直流电流源可以实现以下功能:(1)输出电流范围:200mA~2000mA;(2)可设置并显示输出电流给定值,要求输出电流与给定值偏差的绝对值≤给定值的1%+10 mA;3)具有“+”、“-”步进调整功能,步进≤10mA;(4)改变负载电阻,输出电压在10V以内变化时,要求输出电流变化的绝对值≤输出电流值的1%+10 mA;(6)自制电源。
基本要求第5项的纹波电流要求小于或等于2mA,但由于电路捍接原因纹波电流只能达到3mA。
参考文献1.周立功单片机.ZLG7289B 串行接口LED 数码管及键盘管理器件数据手册.2.马忠梅.戚军.刘滨.马岩.单片机C 语言 Windows 环境编程宝典.北京航空航天大学出版社.20033.何立民.单片机应用系统设计.北京;北京航空航天大学出版社.19954.黄智伟.王彦.陈文光.朱卫华.全国大学生电子设计竞赛训练教程.电子工业出版社.5.全国大学生电子设计竞赛组委会。
全国大学生电子设计竞赛获奖作品汇编(第一届~第五届)。
6.赵动庆.徐丽香.电子电路.科学出版社.7.韩广兴.电子元器件与实用电路基础.电子工业出版社.附录附录2 程序清单bit_count data 07fh ;定义7289timer data 07ehtimer1 data 07dhten data 07chdata_in data 020hdata_out data 021hcs bit p1.0 ;i/o定义clk bit p1.1dat bit p1.2key bit p1.3din5615 bit p1.4 ;定义5615sclk5615 bit p1.5cs5615 bit p1.6org 0000hajmp mainorg 0100hmain: mov sp,#60hmov 50h,#00hmov 51h,#00hmov 52h,#00hmov 53h,#00hmov 54h,#00hmov 55h,#00hmov 56h,#00h ;--------------------------------- mov 57h,#00hmov 58h,#00h ;--------------------------------- mov 59h,#00hmov 22h,#00hmov 23h,#00hmov 24h,#03h ;百位一上电显示200毫安 mov 25h,#01hmov 26h,#00hmov 27h,#00hmov 28h,#00hmov data_out,#10100100b ;复位指令call send ;发指令setb cslcall delaymov 51h,#100mov r1,#00hmov r2,#100lcall dacmov 26h,#11001000b ;下载数据且按方式1译码,并在第0位显示 mov 27h,#00lcall showmov 26h,#11001001b ;下载数据且按方式1译码,并在第1位显示 mov 27h,#02lcall showmov 26h,#11001010b ;下载数据且按方式1译码,并在第2位显示 mov 27h,#00lcall showmov 26h,#11001011b ;下载数据且按方式1译码,并在第3位显示 mov 27h,#00lcall showmain1: jb key,main1mov data_out, #00010101b ;有键按下,发读键盘指令call sendcall receivesetb csmov 50h,data_in ;从键盘读到的值存在50h中;********************************************************************* addone: mov a,50hcjne a,#00h,down ;键值为0为增加键ljmp loopdown: cjne a,#01h,sure ;键值为1为减少键ljmp loop_sure: cjne a,#02h,reset ;键值为2为确认键mov a,52h ;高四位处理rl arl amov 58h,amov 57h,51hmov a,57hanl a,#11000000brl arl aorl a,58hmov r1,a ;高四位在R1中mov 59h,51hanl 59h,#00111111bmov a,59hrl arl amov r2,alcall daclcall dacwait: jnb key, wait ;等待按键松开ljmp main1reset: cjne a,#03h,reset1wait2: jnb key, wait2ljmp mainreset1: jnb key,reset1ljmp main1;**********************************************************************; 按增键;**********************************************************************loop: inc 22h ;个位用22H记忆mov a,22hcjne a,#06h,loop1mov 22h,#01hajmp loop2loop1: inc 23h ;十位用23H记忆loop2: mov a,23hcjne a,#0bh,loop3mov 23h,#01hinc 24hloop3: mov a,24hcjne a,#0bh,loop4mov 24h,#01hinc 25hloop4: mov a,53h ;要加的数字信号,53h用来判断是第一次吗? cjne a,#00h,loop5 ;控制第一次时只加3mov 53h,#05hinc 51hinc 51hinc 51hajmp loop6loop5: inc 51hinc 51hinc 51hinc 51hloop6: mov a,51hcjne a,#0ffh,loop10mov 53h,#00hinc 54hmov a,54hcjne a,#01h,loop7mov 52h,#01hmov 51h,#00hloop7: cjne a,#02h,loop8mov 52h,#02hmov 51h,#00hloop8: cjne a,#03h,loop9mov 52h,#03hmov 51h,#00hloop9: cjne a,#04h,loop10mov 52h,#03hmov 54h,#00hloop10: ljmp ge;**********************************************************************; 按减键;**********************************************************************loop_: dec 22hmov a,22hcjne a,#00h,loop1_mov 22h,#05hajmp loop2_loop1_: dec 23hloop2_: mov a,23hcjne a,#00h,loop3_mov 23h,#0ahdec 24hloop3_: mov a,24hcjne a,#00h,loop4_mov 24h,#0ahdec 25hloop4_: mov a,55h ;要减的数字信号,55h用来判断是第一次吗 cjne a,#00h,loop5_ ;控制第一次时只加3mov 55h,#05hdec 51hdec 51hdec 51hajmp loop6_loop5_: dec 51hdec 51hdec 51hdec 51hloop6_: mov a,51hcjne a,#00h,loop9_mov 56h,52hmov a,56hcjne a,#01h,loop7_mov 52h,#00hmov 51h,#0ffhloop7_: cjne a,#02h,loop8_mov 52h,#01hmov 51h,#0ffhloop8_: cjne a,#03h,loop9_mov 52h,#02hmov 51h,#0ffhloop9_: ljmp ge;**********************************************************************; 显示个位,十位,百位,千位;**********************************************************************ge: mov dptr,#tabmov a,22hmovc a,@a+dptrmov 26h,#11001011b ;下载数据且按方式1译码,并在第3位显示 mov 27h,alcall showshi: mov dptr,#tab1mov a,23hmovc a,@a+dptrmov 26h,#11001010b ;下载数据且按方式1译码,并在第2位显示 mov 27h,alcall showbai: mov dptr,#tab1mov a,24hmovc a,@a+dptrmov 26h,#11001001b ;下载数据且按方式1译码,并在第1位显示 mov 27h,alcall showqian: mov dptr,#tab1mov a,25hmovc a,@a+dptrmov 26h,#11001000b ;下载数据且按方式1译码,并在第0位显示 mov 27h,alcall showwait1: jnb key, wait1 ;等待按键松开ljmp main1;**********************************************************************; 子程序;**********************************************************************;发送一个字节到ZLG7289A,高位在前send: mov bit_count, #8 ;记数器设定clr cscall long_delay ;长延时子程序send_loop:mov c, data_out.7 ;输出1位mov dat, csetb clkmov a, data_outrl amov data_out, acall short_delayclr clkcall short_delaydjnz bit_count, send_loop ;8位是否发送完毕clr dat ;发送完毕,返回ret;接收一个字节到ZLG8279A,高位在前receive: mov bit_count, #8 ;记数器设定setb dat ;高电平输入状态call long_delayreceive_loop :setb clkcall short_delaymov a, data_in ;数据左移rl amov data_in, amov c, dat ;读取一位数据mov data_in.0, cclr clkcall short_delaydjnz bit_count,receive_loopclr dat ; 重设DAT口为低电平(输出状态) ret;5615D/A转换 5615D/A转换 5615D/A转换dac: setb cs5615nopnopclr din5615clr sclk5615clr cs5615nopnopnopnopnopnopnopnopnopnopnopmov r3,#08hmov a,r1aa: rlc a ;发送数据时高位先送,放在R1中,R1的高四位不关心 mov din5615,cnopnopsetb sclk5615 ;上升沿输入数据nopnopclr sclk5615nopnopdjnz r3,aamov r3,#08hmov a,r2 ;低位后送放在R2中,R2的低二位不关心bb: rlc amov din5615,cnopnopsetb sclk5615nopnopclr sclk5615nopnopdjnz r3,bbsetb cs5615clr sclk5615clr din5615ret;延时子程序long_delay: mov timer, #25 ;设定延时时间为50μsdelay_loop: djnz timer, delay_loopretshort_delay: mov timer,#4 ;设定延时时间为50μsshort_lp: djnz timer, short_lpretdelay: mov r5,#50 ;延时0.050秒lop1: mov r6,#20lop2: mov r7,#25lop3: djnz r7,lop3djnz r6,lop2djnz r5,lop1retshow: mov data_out,26h ;下载数据且按方式?译码,并在第?位显示的子程序 call sendmov a, 27hanl a,#01111111b ;灭小数点mov data_out, acall sendsetb csret;**********************************************************************; 表格数据;**********************************************************************tab:db 0ffh,08,06,04,02,00tab1:db 0ffh,00,01,02,03,04,05,06,07,08,09 ;24h值先给3 25h先给1end附录3 系统使用说明本系统是以单片机、压控恒流源为主要核心的。