直流电子负载.docx

上传人:b****7 文档编号:8752020 上传时间:2023-02-01 格式:DOCX 页数:15 大小:37.27KB
下载 相关 举报
直流电子负载.docx_第1页
第1页 / 共15页
直流电子负载.docx_第2页
第2页 / 共15页
直流电子负载.docx_第3页
第3页 / 共15页
直流电子负载.docx_第4页
第4页 / 共15页
直流电子负载.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

直流电子负载.docx

《直流电子负载.docx》由会员分享,可在线阅读,更多相关《直流电子负载.docx(15页珍藏版)》请在冰豆网上搜索。

直流电子负载.docx

直流电子负载

直流电子负载

、基本要求

(1)负载工作模式:

恒压(CV)、恒流(CC)两种模式可选择。

(2)电压设置及读出范围:

1.00V〜20.0V。

(3)电流设置及读出范围:

100mA〜3.00A。

(4)显示分辨力及误差:

至少具有三位数,相对误差小于5%。

、总体方案论证与设计

2.1参数设计方案

利用A/D转换把模拟信号转换为数字信号,在利用单片机程控来修改电压电流参数,

此方案精确度高,操作技术要求很高,节省时间。

并且用DA采集显示测量值,比较得出结

论。

2.2恒流恒压设计方案

1.定电流模式(CCmode)

在定电流工作模式时,电子负载所流入的负载电流依据所设定的电流值而保持恒定,与输入电压大小无关,即负载电流保持摄定值不变。

2.定电压模式(CVmode)

在定电压工作模式时,电子负载所流入的负载电流依据所设定的负载电压而定,此时

负载电流将会增加直到负载电压等于设定值为止,即负载电压保持设定值不变。

R1

10

2.4单片机模块设计

电源模块基本电路图

D1

D1N4148

ECIEJSl

C4

OJO

ui1

11

氓TR供

_

4

3

Ex

-

+

tn

1

1

1

COl^

I

1

1

2.3电源模块设计

V^juL

InF

U1

1£DS

■KJ*

单片机模块基本电路

三、测试及分析

测试原始数据

 

1.恒流模式数据测量

模式

设定值(A)

测量值1(A)

测量值2(A)

测量值3(A)

工作电压(V)

工作电压(V)

工作电压(V)

恒流

0.37

0.43

0.43

0.43

0.85

2.08

3.49

恒流

0.75

0.76

0.76

0.76

1.23

2.43

4.45

恒流

1.13

1.15

1.15

1.15

1.42

4.09

5.38

恒流

1.70

1.72

1.72

1.72

2.29

4.66

6.22

恒流

1.89

1.91

1.91

1.91

3.24

5.35

6.87

 

2.恒压模式数据测量

模式

设定值(V)

测量值1(V)

测量值2(V)

测量值3(V)

工作电压(V)

工作电压(V)

工作电压(V)

恒压

1.11

1.12

1.12

1.12

1.68

3.81

7.40

恒压

3.11

3.16

3.08

3.14

4.87

7.34

10.25

恒压

9.00

8.96

9.04

9.04

10.03

12.27

15.33

恒压

15.22

15.16

15.24

15.18

15.49

17.78

19.34

恒压

20.00

19.92

19.84

19.90

20.22

21.12

22.23

四、附录

基本程序

恒流模块

#inelude

#include

#defineuintunsignedint

#defineucharunsignedchar

sbitrs=P2A7;

sbitE=P2A6;

sbitadwr=P2A5;

sbitadrd=P2A4;

floatadval;

longinttemp;

voiddelay(uintz)//延时子程序

{

uintx,y;

for(x=z;x>0;x--)for(y=110;y>0;y--);

}

write_com(ucharcom)//写命令

{

rs=0;

P0=com;

delay(5);

E=1;

delay(5);

E=0;

}

write_data(uchardat)//写数据

{

rs=1;

P0=dat;

delay(5);

E=1;

delay(5);

E=0;

}

init()//液晶初始化

{

E=0;

write_com(0x38);

write_com(0x0c);

write_com(0x06);

write_com(0x01);

write_com(0x80+3);

}

voidDisplay_Resulti(uchardac)//恒流设定值子程序

{

floatdb=0.0;ucharshi=0,ge=0,xs=0,xxs=0;P3=dac;

db=dac*3.00/158.00;shi=(int)db/10;ge=(int)db%10;

db*=10.0;xs=(int)db%10;

db*=10.0;xxs=(int)db%10;

write_com(0x80+1);delay

(2);

write_data('c');delay

(2);

write_data('u');delay

(2);

write_data('r');delay

(2);

write_data('r');delay

(2);

write_data('e');delay

(2);

write_data('n');delay

(2);

write_data('t');delay

(2);

write_data(0x3a);

delay

(2);

if(shi==0)

{write_data(0x20);delay

(2);

}elsewrite_data(0X30+shi);delay

(2);write_data(0X30+ge);delay

(2);write_data(0x2e);delay

(2);write_data(0x30+xs);delay

(2);write_data(0x30+xxs);

delay

(2);

voidDisplay_Resulti1(floatadval)//测量电流值子程序{

ucharge,xs,shi,xxs;temp=(longint)(adval*105/51);shi=temp/1000;

ge=temp/100%10;xs=temp/10%10;

xxs=temp%10;

write_com(0x80+0x40+1);delay

(2);

write_data('C');delay

(2);

write_data('U');delay

(2);

write_data('R');delay

(2);

write_data('R');delay

(2);

write_data('E');delay

(2);

write_data('N');delay

(2);

write_data('T');delay

(2);

write_data(0x3a);

delay

(2);

if(shi==0)

{write_data(0x20);delay

(2);

}

elsewrite_data(0X30+shi);delay

(2);

write_data(0X30+ge);delay

(2);

write_data(0x2e);

delay

(2);

write_data(0x30+xs);

delay

(2);

write_data(0x30+xxs);

delay

(2);

}

voidADC()

{

adwr=1;_nop_();adwr=0;_nop_();adwr=1;P1=0xff;adrd=1;

_nop_();adrd=0;

_nop_();adval=P1;adrd=1;

}

voidmain()

{

//启动AD转换

//主程序

init();

TMOD

=0x02;

//定时器初始化

TH0

=0x6f;

TL0=

0x00;

IE=

0x82;

TR0

=1;

while

(1)

//显示模块

{ucharkey=0;bitkeyflag=1;uintdac=0;Display_Resulti(dac);

while

(1)//键盘扫描控制显示

{Display_Resulti1(adval);

ADC();key=P2&0x0f;

switch(key)

{

case0x0e:

if(keyflag){dac=0;Display_Resulti(dac);keyflag=0;

}break;

case0x0d:

if(keyflag){dac+=10;Display_Resulti(dac);keyflag=0;

}break;

case0x0b:

if(keyflag){dac-=10;Display_Resulti(dac);keyflag=0;

}break;

case0x07:

if(keyflag){dac=158;Display_Resulti(dac);keyflag=0;

}break;

case0x0f:

keyflag=1;break;

}

恒压模块

#include

#include

#defineuintunsignedint

#defineucharunsignedchar

sbitrs=P2A7;

sbitE=P2A6;

sbitadwr=P2A5;

sbitadrd=P2A4;

floatadval;

longinttemp;

voiddelay(uintz)//延时子程序

{

uintx,y;

for(x=z;x>0;x--)for(y=110;y>0;y--);

}

write_com(ucharcom)//写命令

{

rs=0;

P0=com;

delay(5);

E=1;

delay(5);

E=0;

}

write_data(uchardat)//写数据

{

rs=1;

P0=dat;

delay(5);

E=1;

delay(5);

E=0;

}

init()

//液晶初始化

E=0;

write_com(0x38);

write_com(0x0c);

write_com(0x06);

write_com(0x01);write_com(0x80+3);

//恒压设定值子程序

}

voidDisplay_Resultu1(floatadval)

{

ucharge,xs,shi,xxs;

temp=(longint)(adval*110/51);temp=temp*4;

shi=temp/1000;ge=temp/100%10;

xs=temp/10%10;xxs=temp%10;

write_com(0x80+0x40+1);delay

(2);

write_data('V');

delay

(2);

write_data('O');

delay

(2);

write_data('L');

delay

(2);

write_data('T');

delay

(2);

write_data('A');

delay

(2);

write_data('G');

delay

(2);

write_data('E');

delay

(2);write_data(0x3a);

delay

(2);

if(shi==0)

{

write_data(0x20);

delay

(2);

}

else

write_data(0X30+shi);

delay

(2);

write_data(0X30+ge);

delay

(2);

write_data(0x2e);

delay

(2);

write_data(0x30+xs);

delay

(2);

write_data(0x30+xxs);

delay

(2);

//测量电压子程序

}

voidDisplay_Resultu(uchardac)

{

floatdb=0.0;

ucharshi=0,ge=0,xs=0,xxs=0;

P3=dac;

db=dac*20.00/255.00;

shi=(int)db/10;

ge=(int)db%10;

db*=10.0;

xs=(int)db%10;

db*=10.0;

xxs=(int)db%10;

write_com(0x80+1);

delay

(2);

write_data('v');

delay

(2);

write_data('o');

delay

(2);

write_data('l');

delay

(2);

write_data('t');

delay

(2);

write_data('a');

delay

(2);

write_data('g');

delay

(2);

write_data('e');

delay

(2);

write_data(0x3a);

delay

(2);

if(shi==0)

{write_data(0x20);delay

(2);

}

elsewrite_data(0X30+shi);delay

(2);

write_data(0X30+ge);delay

(2);

write_data(0x2e);delay

(2);

write_data(0x30+xs);delay

(2);

write_data(0x30+xs);delay

(2);

}

voidADC()//启动AD转换{

adwr=1;

_nop_();

adwr=0;

_nop_();

adwr=1;

P1=0xff;adrd=1;_nop_();adrd=0;

_nop_();adval=P1;

adrd=1;

//主程序

}

voidmain()

{init();

TMOD

=0x02;

TH0

=0x6f;

TL0

=0x00;

IE=

0x82;

TR0

=1;

//定时器初始化

while

(1)//显示模块

{

ucharkey=0;

bitkeyflag=1;

uintdac=0;

Display_Resultu(dac);

while

(1)//键盘扫描控制显示

{Display_Resultu1(adval);

ADC();key=P2&0x0f;

switch(key)

{

case0x0e:

if(keyflag)

{

dac=0;

Display_Resultu(dac);keyflag=0;

}

break;

case0x0d:

if(keyflag)

{dac+=5;Display_Resultu(dac);keyflag=0;

}

break;

case0x0b:

if(keyflag)

{dac-=5;Display_Resultu(dac);keyflag=0;

}

break;

case0x07:

if(keyflag)

{

dac=255;

Display_Resultu(dac);keyflag=0;

}

break;

case0x0f:

keyflag=1;break;

}

}

}

}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 笔试

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

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