简易数控直流电源最终上交版Word格式.docx

上传人:b****5 文档编号:19004412 上传时间:2023-01-02 格式:DOCX 页数:32 大小:88.84KB
下载 相关 举报
简易数控直流电源最终上交版Word格式.docx_第1页
第1页 / 共32页
简易数控直流电源最终上交版Word格式.docx_第2页
第2页 / 共32页
简易数控直流电源最终上交版Word格式.docx_第3页
第3页 / 共32页
简易数控直流电源最终上交版Word格式.docx_第4页
第4页 / 共32页
简易数控直流电源最终上交版Word格式.docx_第5页
第5页 / 共32页
点击查看更多>>
下载资源
资源描述

简易数控直流电源最终上交版Word格式.docx

《简易数控直流电源最终上交版Word格式.docx》由会员分享,可在线阅读,更多相关《简易数控直流电源最终上交版Word格式.docx(32页珍藏版)》请在冰豆网上搜索。

简易数控直流电源最终上交版Word格式.docx

Summary

TheDCpowertotheCNCtechnologySTC89C52macrocrystalchipforthecontrolofthecore,throughthe8-bitDAconverterchipDAC0832analogcontroloutput,amplifiedbythetwoopampinordertoachievethesubjectrequirements.Step-downtransformerpowersupplyfirst,andthenby78,79three-terminalregulatorchipoutput±

15V,+5Vforsystemuse.SystemusesanADchipAD770516-bitreal-timemonitoringofoutputvoltage,theskyalltheworkstatuswillbedisplayedintheLCDdisplayonthe12864,sounusualandtimelyadjustment.PoweroutputcircuitwithDarlingtonTIP122andTIP127closedlooppush-pulloutputformattoensuretheoutputcurrent.

Keywords:

STC89C52DAC0832AD7705OP07LCD12864

一.方案论证与分析

本题要求设计并制作一建议数控直流电源。

要求输出电压范围0~+9.9V,通过按键控制步进0.1V,可保证有500mA的电流输出,并可显示电压值,以及其他一些扩展功能,上述各模块的方案论证如下:

1.1微控制器模块论证与分析

方案一:

采用STC公司出产的STC89C52单片机。

此单片机价格便宜,应用广泛,编程方便,只需要添加一片DAC0832就可以很简单的实现题目要求。

方案二:

采用SPCE061A单片机来实现,此单片机内置8路10位ADC和2路DAC,避免了外接A/D转换芯片和D/A转换芯片,并且I/O接口比较多,易于扩展外围电路,但是很多功能在本次设计中都没有用到。

所以综合考虑成本与本体要求选择方案一

1.2键盘模块论证与分析

采用独立键盘

考虑到一些扩展功能,接四个独立按键,以方便进行各功能的调整、转换。

方案二:

矩阵键盘模块

采用矩阵键盘进行编程和控制操作,可利用的键盘个数满足要求,而且占用的单片机端口相对较少,利用率高,对于扩展功能提供发展空间。

综合考虑,本设计不需要过多按键,而且单片机IO口充足,故此采用独立按键。

1.3显示模块论证与分析

用LED进行显示。

数码管由于显示速度快,对环境要求低,使用简单,显示效果简洁明了而得到了广泛应用,但是耗能高,而且动态显示要在各位延时上设置合理,而且显示信息量太少,考虑到系统的AD7705芯片采样周期长,系统显示信息量较大,故不采用此方案。

128*64液晶显示。

这个显示器可以显示文字,图片等,显示的内容比较丰富,正好手头有一个,故此用12864显示。

综合考虑选择方案二作为显示模块。

1.4功率输出模块论证与分析

考虑到从运放输出的电流值达不到题目要求,故在此用达林顿管TIP122与TIP127构成闭环推挽输出形式,保证输出电流,而且达林顿管应用广泛、价格低廉。

二.系统硬件设计

2.1系统总体设计

本系统以STC89C52为控制核心通过LCD12864进行实时显示,通过控制改变DA的值,达到题目要求的步进增减,通过程序的编写,可实现步进增减、自动扫描、手动预设值、特殊波形输出等各项功能。

程序流程图见上图

中央处理器选用的是STC89C52单片机,其原理图电路如下:

其中包括单片机的时钟电路、上点自动复位、手动复位等各模块,以及实现控制的键盘接口等。

2.2DA转换放大模块设计

本系统采用的是DAC0832芯片进行DA转换,在DA输出端接一运放OP07将DAC0832输出的电流转换为电压,再通过一次反相比例将电压值转换为正电压,以便进行AD采样检测。

再通过以及正相比例运算,将电压值放大两倍,已达到题目要求。

原理图如下:

2.3AD采样模块设计

AD采样使用芯片AD7705,将经过反相放大后的电压值采样,并实时显示在显示器上,以便检测,原理图如下:

2.4显示模块设计

液晶显示选用的是LCD12864液晶显示屏,

接线方式如右图所示:

2.5电源及功率模块设计

电源用变压器变压,通过三端稳压芯片得到稳定电压。

功率输出用达林顿管TIP122与TIP127构成闭环推挽输出形式,保证输出电流。

三.系统软件设计

经过我们的分析得到如下结论,要使整个系统稳定且高效的运行,则程序之间的配合要达到互不干扰的程度,严格按照芯片的驱动程序对各个芯片经行初始化,进而进行控制。

总的程序框图如右图所示:

四.系统测试

4.1测试仪器及设备

仪器名称

型号

数量

数字万用表

DT9205N

1

模拟示波器

JC2042M

4.2功能测试

4.2.1基本功能测试

这个系统所有的基本功能是步进输出电压测量结果如下:

测量次数

理想电压

实际电压

3.5V

3.53V

2

5.5V

5.53V

3

7.5V

7.53V

4

8.5V

8.54V

5

9.8V

9.84V

五.结论

本数控直流电源以宏晶科技的STC89C52单片机为控制核心,通过8位DA转换芯片DAC0832控制输出模拟量,通过两级运放放大以达到题目要求。

在这几天中,我们遇到许许多多难题,通过本组成员的努力,及老师和同学的帮助大体得以解决。

这几天的设计竞赛,增强了实践能力和协作精神,懂得了联系实际的重要性。

我们的设计还存在着一些缺陷,有待于在将来设计中进一步提高,在此恳请各位老师批评指正。

六.附录

6.1参考资料

[1]黄智伟.全国大学生电子设计竞赛系统设计(第2版)北京航空航天大学出版社,2011

[2]林红,周鑫霞.模拟电路基础.清华大学出版社,2008

[3]谭浩强.C语言程序设计(第二版).北京:

清华大学出版社,2000

6.2部分源程序

//以下是main.c文件内容

#include<

REGX52.H>

setjmp.h>

#include"

delay.h"

isme.h"

alonekeyscan.h"

#include"

lcd12864.h"

ad7705.h"

ucharcodetitleAsc[]="

简易数控直流电源"

;

ucharcodewriteVoltageAsc[]="

控制电压:

V"

ucharcodeinputVoltageAsc[]="

设置输出电压:

ucharcodereadVoltageAsc[]="

测量电压:

ucharcodebujinVoltageAsc[]="

步进0.1V"

ucharcodesetVoltageAsc[]="

手动输入"

ucharcodeset0Asc[]="

|"

ucharcodeset1Asc[]="

|"

ucharcodeifSaveTheSetAsc[]="

是否保存设置?

"

ucharcodekeyToChooseAsc[]="

1保存2取消"

ucharcodesavedAsc[]="

保存成功"

ucharcodenotSaveAsc[]="

未保存"

ucharcodeautoScanAsc[]="

自动扫描"

ucharcodeautoAddAsc[]="

自增"

ucharcodeautoReduceAsc[]="

自减"

ucharcodepauseScanAsc[]="

暂停扫描"

ucharcodewaveOutPutAsc[]="

输出三角波"

ucharcodewaveOutPut2Asc[]="

输出方波"

ucharcodecreatWaveAsc[]="

数字波形发生器"

ucharcodewaveTAsc[]="

波形周期:

"

ucharcodewaveMAsc[]="

波形峰值:

ucharfnType=0;

bitb_scanType=0;

bitb_waveType=0;

bitsetType=0;

u8toDa=50;

u8timer0AutoCount,timer1AutoCount;

u8t=30;

u8m=1;

u8waveOut;

u16wave;

jmp_bufbuf;

voidInitInterrupt(void)

{

EA=1;

ET1=1;

ET0=1;

TH1=0X3c;

TL1=0Xb0;

TH0=236;

TL0=236;

TMOD=0X12;

}

voidSet12864(void)

Cle12864Scr();

//第一行显示:

简易数控直流电源

Dis12864StrSer(titleAsc);

//第二行显示:

Wr12864Ser(SECOND_LIN,COM);

Dis12864StrSer(writeVoltageAsc);

//第三行显示:

Wr12864Ser(THIRD_LIN,COM);

Dis12864StrSer(readVoltageAsc);

voidDisFnType(uchartype)

Wr12864Ser(FOURTH_LIN,COM);

if(type==0)//步进0.1

{

Dis12864StrSer(bujinVoltageAsc);

}

elseif(type==1)//手动输入电压值

Dis12864StrSer(setVoltageAsc);

elseif(type==2)//自动扫描

Dis12864StrSer(autoScanAsc);

elseif(type==3)//输出三角波

Dis12864StrSer(waveOutPutAsc);

elseif(type==4)//输出方波

Dis12864StrSer(waveOutPut2Asc);

voidDisAdVoltage(u16dat)

floatfVoltageVal;

u16disV;

u8temp;

fVoltageVal=(dat/65535.0)*10;

disV=(u16)(fVoltageVal*100);

Wr12864Ser(AFTER36,COM);

temp=disV/1000%10;

if(temp==0)

Wr12864Ser(numAsc[11],DAT);

else

Wr12864Ser(numAsc[temp],DAT);

temp=disV/100%10;

Wr12864Ser(numAsc[temp],DAT);

Wr12864Ser(numAsc[10],DAT);

temp=disV/10%10;

temp=disV%10;

voidDisDaVoltage(u8dat)

u8temp;

Wr12864Ser(AFTER27,COM);

dat/=2;

temp=dat/10%10;

temp=dat%10;

voidSetOutputVoltage(void)

u8keyVal,tempDa;

bitsetWho=0;

tempDa=toDa;

Dis12864StrSer(inputVoltageAsc);

while

(1)

keyVal=Alone4KeyScan();

if(keyVal==1)

{

Cle12864Scr();

Dis12864StrSer(ifSaveTheSetAsc);

Wr12864Ser(SECOND_LIN,COM);

Dis12864StrSer(keyToChooseAsc);

while

(1)

{

keyVal=Alone4KeyScan();

if(keyVal==1)

{

toDa=tempDa;

Cle12864Scr();

Wr12864Ser(AFTER23,COM);

Dis12864StrSer(savedAsc);

DelayXMs(2000);

longjmp(buf,1);

}

elseif(keyVal==2)

Dis12864StrSer(notSaveAsc);

}

}

elseif(keyVal==2)

setWho=~setWho;

elseif(keyVal==3)

if(setWho==0&

&

tempDa<

198)

tempDa+=2;

elseif(tempDa<

180)

tempDa+=20;

elseif(keyVal==4)

tempDa>

=2)

tempDa-=2;

elseif(tempDa>

20)

tempDa-=20;

Wr12864Ser(AFTER37,COM);

if(setWho==0)

Dis12864StrSer(set0Asc);

else

Dis12864StrSer(set1Asc);

DisDaVoltage(tempDa);

voidAutoScanVoltage(void)

u8keyVal;

//默认自增

Wr12864Ser(AFTER47,COM);

Dis12864StrSer(autoAddAsc);

InitInterrupt();

//定时器初始化

TR1=1;

//开定时器1

P0=toDa;

TR1=0;

EA=0;

longjmp(buf,1);

toDa=0;

elseif(keyVal==3)

TR1=~TR1;

elseif(keyVal==4)

b_scanType=~b_scanType;

Wr12864Ser(AFTER47,COM);

if(b_scanType==0)

Dis12864StrSer(autoAddAsc);

else

Dis12864StrSer(autoReduceAsc);

DisDaVoltage(toDa);

//自动扫描

Wr12864Ser(FOURTH_LIN,COM);

if(TR1==1)

Dis12864StrSer(autoScanAsc);

Dis12864StrSer(pauseScanAsc);

voidDisWaveInf(u8dat)

dat*=8;

//显示周期

Wr12864Ser(numAsc[11],DAT);

if(dat>

99)

temp=dat/100%10;

9)

temp=dat/10%10;

voidDisMaxInf(u8dat)

switch(m)

case1:

dat=10;

break;

case2:

dat=5;

case5:

dat=2;

case10:

dat=1;

Wr12864Ser(AFTER37,COM);

voidWaveOutPut(void)

数字波形发生器

Dis12864StrSer(creatWaveAsc);

//输出波形

if(fnType==3)

elseif(fnType==4)

if(setType==0)

Dis12864StrSer(waveTAsc);

DisWaveInf(t);

Di

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

当前位置:首页 > 考试认证 > 从业资格考试

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

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