简易可编程恒流源

上传人:jin****ng 文档编号:225756944 上传时间:2023-08-03 格式:DOCX 页数:15 大小:468.09KB
收藏 版权申诉 举报 下载
简易可编程恒流源_第1页
第1页 / 共15页
简易可编程恒流源_第2页
第2页 / 共15页
简易可编程恒流源_第3页
第3页 / 共15页
资源描述:

《简易可编程恒流源》由会员分享,可在线阅读,更多相关《简易可编程恒流源(15页珍藏版)》请在装配图网上搜索。

1、计算机控制技术综合应用设计题目可编程恒流源二级学院专 业班 级110070403学生姓名 郁厚安 学号 11007990934学生姓名 李文强 学号 11007990913学生姓名 杨吉学号11007990931指导教师刘述喜时间:2013年12月132013年12月27考核项目平时成绩20分设计50分答辩30分得分总分考核等级教师签名简易可编程恒流源摘要:本设计采用AT89S52作为控制电压输出,显示和控制输出电流的核心, 实现了 200mA到2000mA数控可调电流源。系统的显示部分采用LCD1602液晶显 示屏实时显示设定电流值和输出电流值;输出电流控制采用AT89S52单片机配 合DA

2、C0832电流型数模转换芯片输出模拟量,再由精密运算放大器0P07将电流 转换成控制电压,再通过恒流源电路输出可控电流。电源部分采用采用三端稳 压芯片进行稳压,并采用多级滤波保证电源稳定性。关键字:AT89S52 恒流源可编程一、方案论证如题目要求,系统主要由控制器模块、电源模块、D/A转换模块、恒流模块 及键盘显示模块构成,下面分别论证这几个模块的选择。1、控制模块的选择方案方案一:采用SPCE061A单片机进行控制。SPCE061A凌阳单片机具有强大功 能的16位微控制器,它内部集成7路10位ADC和2通道10位DAC,可以直接 用于电流测量时的数据采集,以及数字控制输出;I/O 口资源丰

3、富,可以直接完 成对键盘输入和显示输出的控制;但是价格较为昂贵,对于本设计需求,过于大 材小用。方案二:采用AT89S52单片机进行控制。本设计需要使用的软件资源比较简 单,只需要完成数控部分、键盘输入以及显示输出功能。采用AT89S52进行控制 比较简单,且价格低廉。鉴于上面分析,本设计采用方案二。2、电源模块的选择方案由于该设计需要三种电平,正负9V给运算放大器供电,正5V给单片机及DA 转换芯片供电,纹波电流要求并不高,因此对电源的要求并不算高。 方案一:采用全桥整流加电容滤波电路该电源为正负对称输出,实际输出电压为正负20V左右,100nF、1.0uF用于滤 除电源中的高频交流成分。为

4、了满足大电流要求,后级滤波电容选用了 10000uF。这种电路广泛应用于一些要求不太高的电流直流电源中,其驱动能力和后级 的滤波电容有关,该电路显著的特点就是能够比较好的满足电流的瞬态相应,而 如果负载要求持续的大电流输出,该电路将无能为力。方案二:采用三端稳压集成电路 一般的三端稳压集成块稳压效果较好,且价格低廉,如 LM7805 只要求输入 电压大于输出电压3V以上便能输出稳定的5V电压,且输出电流最大能达到1A, 完全符合本题目设计要求。鉴于上面分析,本设计采用方案二。3、DA转换芯片的选择方案DA 转换的芯片众多,有串行输入的,有并行输入的,有8 位、12 位、16 位 甚至更高,针对

5、本题目要求,并考虑到成本问题,最终选择8位并行DA转换芯 片DAC0832,既满足10mA步进的精度要求,并且成本低廉。4、恒流源模块方案一:由晶体管构成镜像恒流源 该电路的缺点之一在于电流的测量精度受到两个晶体管的匹配程度影响,其 中涉及到比较复杂的工艺参数。另一缺点在于,集电极最大输出电流约为几百毫 安,而题目要求输出电流为2002000mA,因此由晶体管构成的恒流源不适合采 用。方案二:由运算放大器构成恒流电路 运算放大器构成的恒流电路摆脱了晶体管恒流电路受限于工艺参数的缺点。但是只由运放构成的恒流电路,输出电流同样只能达到几十毫安,远远不能满足 设计要求,因此必须加上扩流电路。方案三:

6、由运算放大器加上扩流管构成恒流电路采用运算放大器加上扩流管构成恒流电路,既能利用运算放大器准确的特性, 输出又能达到要求。采用高精度运算放大器OP07,更能增加其准确的性能;采 用9013与9012进行扩流,具有很大的扩流能力,两者结合,可以实现比较精确 的恒流电路。鉴于上面分析,本设计采用方案三。5、按键及显示模块选择方案考虑到成本及简单易用的问题,本设计采用两个按键进行0.1V步进上调与下 调。采用LCD1602液晶显示其对设定值进行显示,这样可以大大简化硬件连接, 且LCD1602价格低廉。二、详细软硬件设计根据题目要求和以上论证,本设计的系统框图如图2.1所示,主控制器与各 外围模块的

7、硬件原理图如图2.2所示。图2.1原理方框图系统工作过程如下:自制电平转换电路,提供给各模块;AT89S52单片机通 过检测键盘输入,液晶显示出设定值,并由单片机处理输出数字量,经过DAC0832 转换芯片及OP07输出电流源控制电压。c-un-srit? lR385 it.uCD1LHCbH .mr图2.2硬件原理图1、硬件设计本系统的硬件部分主要包括五大部分:键盘输入及显示、单片机最小控制 电路、DA转换电路、恒流源电路、电平转换电路。下面详细介绍各个单元电路 的设计。(1) 电平转换电路的硬件设计该设计需要三种电平,正负9V给运算放大器供电,正5V给单片机及DA转换 芯片供电,纹波电流要

8、求并不高,因此对电源的要求并不算高。电路原理图如图 2.3所示。U.JJ-ULTuuhU4I *电戦换皿塩鼠图2.3电平转换电路从图中可以看到,使用正负9V输入电压供OPO7使用,并采用LM7805将正 9V转换为正5V以供单片机及ADC0832使用。(2) 单片机最小控制电路硬件电路设计如图2.4所示,为单片机最小控制系统电路原理图。图2.4单片机最小控制系统如上图所示,单片机使用P0 口作为LCD1602数据口输出,使用P2.5, P2.6, P2.7作为LCD1602的控制输入口,使用P3.3, P3.4作为按键输入口,使用P1 口作为DAC0832数据输入口。(3)键盘输入及显示模块硬

9、件设计如图2.5所示,为显示及按键模块硬件原理图TITtnljxinH3b-jlbonn匚EH创口ACiXDl|pF L軀1啊总詁吓快块图2.5显示及按键模块如上图所示,两个按键控制电压的上调与下调,显示模块采用LCD1602液 晶显示。(4)DA转换模块硬件设计如图2.6所示,为DA转换模块硬件原理图图2.6 DA转换模块如上图所示,采用DAC0832 八位DA转换芯片以及OPO7,将数字量转换为 控制电压输出。(5)恒流源模块恒流源电路如图2.7所示。其中,运算放大器U3是一个反相加法器,一路 输入为控制信号V1 ,另一路输入为 运放U1的输出反馈,R8是U3的反馈电阻。针对运算放大器输出

10、电流小的不足,该电路加了扩流电路。采用达林顿管TIP122 和TIP127组成推挽式电路,两管轮流导通。U2是电压跟随器,输入阻抗高, 基本没有分流,因此流经R2的电流全部流入负载RL。U1是反相放大器,取 R14二R11时,放大倍数 为-1,即构成反相器。图2.7恒流源部分电路若U3的输入电压为Vin,根据叠加原理,有由U2的电压跟随特性和U1的反相特性,有代入得到即流经R7的电流完全由输入控制电压Vin决定由于U2的输入端不取电流,流经负载RL的电流完全由输入控制电压Vin决定, 实现了压控直流电流源的功能。由于R7中流过的电流就是恒流源的输出电流, 按照题目要求,输出的直流电流需要达到2

11、A,这里采用康锰铜电阻丝作为电阻 R7。2、软件设计软件的主程序流程如图2.7所示,主程序不断检测是否有按键输入,如果有 按键,则进行相应的键值处理,根据按键改变设定数字量输出值,实现数控输输 出。再根据设定值,对应改变显示内容和DAC输出控制电压。图 2.7 程序流程图三、测试说明1、测试仪器 电路测试中使用的仪器设备及其用途如表3.1所示。表3.1电源部分测试使用的仪器设备序号仪器名称及型号数量用途1UT39A四位半数字万用表1测量输出电压2直流稳压电源1提供双电源输入2、测试方法将直流稳压电源连接成双电源模式,接入电路板的电源接口,使用数字万 用表测试输出电流,并按动按键进行步进操作,比

12、较LCD1602显示值与电流表的 显示值。四、结论本系统以STC单片机AT89S52芯片为核心控制器件,控制液晶显示,键盘输 入,DA转换等各个部分。简易可编程恒流源可以输出200mA-2A的可调电流,具 有输出准确,稳定等特点,基本达到了课程设计题目中要求的各项任务和功能。 因为时间有限,该系统还有很多值得改进的地方:电源部分加入过载自动保护电 路,以防止负载过大时的系统过载;将双电源供电改进成单电源供电,更符合实 际需求。五、附录1、实物图2、程序代码#include stdio.h#includemath.h#include #include#define uchar unsigned

13、char#define uint unsigned int void Delayms(unsigned int ms);sbit Keyl=P32;sbit Key2=P33;sbit E=P3”4;/1602 使能引脚sbit RW=P35;/1602 读写引脚sbit RS=P30;uint volt=0;unsigned long value;uint a,b,c;/1602显示位void DA1210(int da)/12位数字量输出outport(0x0001, da4);outport(0x0000, da256)volt=256;if(Key2=0)Delayms(20);if(

14、Key2=0)while(Key2=0);volt=volt-3;while(volt0)volt=0;/ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 名称 : delay()*功能:延时,延时时间大概为5US。* 输入 : 无* 输出 : 无*L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L*

15、*L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* / * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

16、* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * /void delay()_nop_();_nop_();_nop_();_nop_();_nop_();/ *J* *J* *J* *J* *J* *J* *J* *J* *J* *J* *J* *J* *J* *J* *J* *J* *J* *J* *J* *J* *J* *J* *J* *J* *J* *J* *J* *J* *J* *J* *J* *J* *J* *J* *J* *J* *J* *J* *J* *J* *J* *J* *J* *J* *J* *

17、J* *J* *J* *J* *J* *J* *J* *J* *J* *J* *J* *J* *J* *J* *J* *J* *J* *J* *J* *J* *J* *J* *J* / * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *名称:bit Busy(void)* 功能:这个是一个读状态函数,读出函数是否处在忙状态* 输入 : 输入的命令值* 输出 : 无*L* *L*

18、 *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* / * * * * * * * * * * *

19、 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * /bit Busy(void)bit busy_flag = 0;RS=0;RW=1;E = 1;delay();busy_flag = (bit)(P0 & 0x80);E = 0;return busy_flag;/ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

20、* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 名称 : wcmd(uchar del)* 功能 : 1602命令函数* 输入 : 输入的命令值* 输出 : 无*L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L*

21、*L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* / * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * /void wcmd(uchar del)while(Busy();RS = 0;RW = 0;

22、 E = 0; delay();P1 = del; delay();E = 1; delay();E = 0;/ *J* *J* *J* *J* *J* *J* *J* *J* *J* *J* *J* *J* *J* *J* *J* *J* *J* *J* *J* *J* *J* *J* *J* *J* *J* *J* *J* *J* *J* *J* *J* *J* *J* *J* *J* *J* *J* *J* *J* *J* *J* *J* *J* *J* *J* *J* *J* *J* *J* *J* *J* *J* *J* *J* *J* *J* *J* *J* *J* *J* *J*

23、 *J* *J* *J* *J* *J* *J* *J* / * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 名称 : wdata(uchar del)* 功能 : 1602写数据函数* 输入 : 需要写入1602的数据* 输出 : 无*L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L

24、* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* / * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

25、* * * * * * * * * * * * * * * * * * * * * * * * * * * * * /void wdata(uchar del) while(Busy();RS = 1;RW = 0;E = 0;delay();P1 = del;delay();E = 1;delay();E = 0;/ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *名称:L

26、1602_init()*功能:1602初始化,请参考1602的资料*输入:无*输出:无*L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *

27、L* *L* *L* *L* *L* *L* *L* /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * /void L1602_init(void)wcmd(0x38);Delayms(5);wcmd(0x38);Delayms(5);wcmd(0x38);Delayms(5);wcmd(0x38);wcmd(0x08);wcmd(0x0c);wcmd(0x04

28、);wcmd(0x01);/ *J* *J* *J* *J* *J* *J* *J* *J* *J* *J* *J* *J* *J* *J* *J* *J* *J* *J* *J* *J* *J* *J* *J* *J* *J* *J* *J* *J* *J* *J* *J* *J* *J* *J* *J* *J* *J* *J* *J* *J* *J* *J* *J* *J* *J* *J* *J* *J* *J* *J* *J* *J* *J* *J* *J* *J* *J* *J* *J* *J* *J* *J* *J* *J* *J* *J* *J* *J*/ * * * * * *

29、* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 名称 : L1602_char(uchar hang,uchar lie,char sign)*功能:改变液晶中某位的值,如果要让第一行,第五个字符显示b,调用该函数如下L1602_char(1,5,b)* 输入 : 行,列,需要输入1602的数据* 输出 : 无*L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L*

30、*L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

31、 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * /void L1602_char(uchar hang,uchar lie,char sign)uchar a;if(hang= 1)a =0x80;if(hang= 2)a =0xc0;a = a +lie -1;wcmd(a);wdata(sign);/ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

32、 * * * * * * * * * * * * * * * * * * * * * * * * 名称 : L1602_string(uchar hang,uchar lie,uchar *p)*功能:改变液晶中某位的值,如果要让第一行,第五个字符开始显示ab cd ef,调用该函数如 卞 L1602_string(l,5,ab cd ef;)* 输入 : 行,列,需要输入1602的数据* 输出 : 无*L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *

33、L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* *L* /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

34、* * * * * * * * * * * * * * * /void L1602_string(uchar hang,uchar lie,uchar *p)uchar a,b=0;if(hang = 1) a = 0x80;if(hang = 2) a = 0xc0;a = a + lie - 1;while(1)wcmd(a+);if(*p = 0)|(b=16) break;b+;wdata(*p);p+;void main()Delayms(200);L1602_init();while(1)DAC0832(volt);Scankey();value=100*(long)volt*9.

35、0/256;a=(value/100)%10+48;b=(value/10)%10+48;c=value%10+48;L1602_string(1,1,current:);L1602_char(1,10,a);L1602_char(1,11,46);L1602_char(1,12,b);L1602_char(1,13,c);L1602_char(1,14,65);4、原件清单 单片机 STC89C516RD+1 40DIP芯片座1 12M晶振1 运放OP072 74HC373 (20DIP)1 20PIN芯片座2 NS DAC0832 (20DIP)1 三端稳压芯片LM78051 电阻若干(10K) 电容若干(10uf、30pf、104) 按键3

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!