资源描述
2021年11月20日
)DisplayUpdateQ;
)else
(if((updateflag)&&(! setenable))
(d = Get_AD_Result(vout);
d &=0x00FF;d = d* 1000.0/255;
if(d/1000)(
Display_B ufferO [ll]=d/l000+'0';Display_B ufferO [12]=d/100%10+'0';
Display_BufferO[13]='.';Display_B ufferO [14]=d/10%10+'0';
Display_BufferO[l 5]=d% 10+0;)
else(
Display_BufferO[l l]=d/100% 10+'O';Display_BufferO[12]=7;
Display_Buffer0[13]=d/10%10+'0,;Display_B ufferO [14] =d% 1O+'O';
Display_BufferO[15]=f f;Display Update();
)
本系统在20m A〜2000m A的范围内,输出电流与给定值之 间误差的绝对值W 3 m A,负载调整率基本到达0. 1%,步进W Im A,纹波电流W 0. 2m A。方案设计改善了传统恒流源的性 能,具有精度高、纹波小、稳定度强等优点,而且操作简单、 价格低廉,在小功率恒流领域中有着广泛的应用前景。
摘要:
现代科学研究和工业生产中,精度高、稳定性好的数控 恒流电流源得到十分广泛的应用。以往所采用的电流源输出 电流值无法实现精准步进,且所设定的输出电流值是否准确 不经测试无法确定,不够直观。为克服传统恒流源无法实现 精确步进的缺点,设计基于MCS-51单片机的数控恒流源。系 统由压控恒流单元、数控单元、稳压电源等局部组成,并给 出硬件和软件的具体实现方法。
关键词:数控恒流源;51单片机;.系统组成
系统的组成结构如图1所示。系统可划分为压控恒流、 数控、稳压电源等几局部。压控恒流单元是本系统的功率 模块局部,主要起电流输出调整的作用。数控单元包含单片 机最小系统完成人机交互显示、控制D/A转换模块输出精密 基准电压等功能。稳压电源主要是为压控电流源提供主电源 以及为单片机最小系统提供辅助工作电源。
图1系统结构框图
.硬件设计
1.1 压控恒流单元 压控恒流单元是本系统设计中的一个关键,电路如图2所示。 图2中,电阻R5将恒流源输出电流变换为电压,U5 0P-07检 测这一电压与基准电压之差并加以放大,控制Q2进行电流调 节。U7的作用主要是通过D2对输出电压进行限制,并指示。 由电路原理及运放的虚短、虚断原理知道:
Uref=Uf (1)Uf=Urs (2)
Urs = R5xIL (3)联合公式(1)、(2)和(3)可以得出:
IL= Uref/ R5 (4)所以负载的电流IL只与Uref与电流取样电阻R5有关。由 此,可以清楚地看到本电路是一个压控电流源。输出电流的 稳定性和精度只与基准电压、电流取样电阻有关系。本系统 中取样电阻选0. 1%高精度电阻,温度稳定性为5ppm/℃o 输出电流的误差与误差检测放大器U5的输入失调电压有关 系。电流误差反应回路的增益影响到输出电流的纹波与输出 电流的稳态误差。所以本线路要求误差检测放大器U5具有 高开环增益,高共模抑制比,高输入阻抗,宽频带,低失调和 漂移。本设计选用了高精度运放0P-07。
2. 2数控单元数控单元电路如图3所示,包含单片机89S51构成最小系统、 键盘与显示电路、数据掉电存储电路、D/A芯片。掉电存储 芯片24C02保证每次开机的输出电流保持上次关机前的设置 值。D/A芯片在单片机程序控制下输出可变基准电压,并连接 压控恒流单元。由于系统实现电流输出范围为20m A〜2000m A,步进Im A,共需要2000等份。所以选用12位的D/A芯片 MAX531便可以满足要求。MAX531是12位串行数据接口数模 转换器。
2.3主电源、辅助电源的设计本文设计的恒流源要求输出负载电压W 15V,考虑到恒流单 元调整管的2〜3V压降,主电源用大功率三端集成稳压78Hl5 为产生恒流源提供大电流,确保电路正常运行。
辅助电源采用三端稳压集成芯片7805和5V稳压二极管、7812和7912分别给模拟电路提供±5V和±12V的电源。
图2压控恒流单元电路图
RESET
RD KT
RNl
K\V
ppppp ppp
0 12 3 4 5 6 7 21,• 2 2 2 2 ,,二 pprppppp
RXD
TXD ALEP PSEX
I
严2
/p(H 4
夕乂 K
II n
F
1A1器1A4盘能用
39 o02 iH p()j\ TFpoX
ifr
44 %)、 530^ v rv«K
741 S744
10
11
而
U4A
BIPOFF RfB
DIN \TO CLR VOUT
SCLK VSS CS REFOUT
DOUT REF DGNIHGTvD
GYD M4XS1I RN2
1S加
16 dl\
pm
i
■
3
4
5
6
7
图3数控单元电路图
3软件设计本文设计的单片机程序采用模块化结构设计,主要是键盘扫 描、电流的显示、D/A控制、EEPROM读写程序等。
( \土
土
结束
图4程序流程图#include <reg52.h>
#include <intrins.h>#include "timer.h"
#include "key.h"#include Hlcd.h"
#include "global.h1'#include nadcdac.h"
#define delay4us() {_nop_() ;_nop_() ;_nop_() ;_nop_();}#define vout 1
#define vset 0#define vmode
#define MODE_B 1#define MODE_A 0
bit workmode;//sbit KEY1 = P3A6;
//sbit KEY2 = P3 八7;/*
typedef struct(
union {uint I; uchar C [2];} temp vail;
union {uint I; uchar C[2];}tempval2;JsData;
sData D; */
void Delayms(uint ms)
uchar i;
while(ms-)
(for(i=0;i< 120;i++);
))
void main()(
uchar B;
uchar temp;
uint d,v;
Initialize_LCD();
InitTimer();
Delay ms( 10);
v 二 0x0100;
StartTimer(O);
B = 0;
workmode = MODE A; while(l)KEYPORT = OxfO;
if(KEYPORT ! = OxfO)(
temp = Keys_Scan();keyhandle(temp);
)if(workmode==MODE_A)
(d 二 Get_AD_Result(vset);
d &=0x00FF;Set_DAC(d*4);
d = d* 1000.0/255;
strcpy(Display_Bufferl , nSetVoltage:1'); if(d/1000)(
Display_Bufferl [1 l]=d/l OOO+'O';Display_Bufferl[12]=d/100%10+'0';
Display_Bufferl [13]='.';Display_B ufferl[14]=d/10%10+'0';
Display_Bufferl [15]=d% 10+'O';)
elseDisplay_B uffer l[ll]=d/100%10+V;
Display_Bufferl[12]=,.,;Display_Buffer 1 [13]=d/10% 10+'O';
Display_B uffer l[14]=d%10+'0';Display_Bufferl[15]=* *;
)d 二 Get_AD_Result(vout);
d &=0x00FF;d = d* 1000.0/255;
strcpy(Display_BufferO, nOutVoltage:n); if(d/1000)(
Display_B ufferO [ll]=d/l OOO+'O';Display_B ufferO [12]=d/100%10+'0';
Display _B ufferO [13]-J;Display_B ufferO [14]=d/10%10+,0,;
Display_Buffer0[15]=d%10+'0';)
else(
Display_BufferO [ll]=d/l 00% 10+'O';Display_BufferO[12]=\!;
Display_B ufferO [13]=d/10%10+,0,;Display_B ufferO [14]=d%10+,0,;
Display_BufferO[15]=* *;
展开阅读全文