简易数控直流电源最终上交版.docx
- 文档编号:6009948
- 上传时间:2023-01-02
- 格式:DOCX
- 页数:32
- 大小:88.84KB
简易数控直流电源最终上交版.docx
《简易数控直流电源最终上交版.docx》由会员分享,可在线阅读,更多相关《简易数控直流电源最终上交版.docx(32页珍藏版)》请在冰豆网上搜索。
简易数控直流电源最终上交版
山东理工大学第四届
电子设计竞赛设计报告
题目简易数控直流电源
学生姓名
指导教师
时间2011年12月
目录
摘要………………………………………………………1
一.方案论证与分析…………………………………1
1.1微控制器模块论证与析……………………………1
1.2键盘模块论证与分析………………………………2
1.3显示模块论证与分析………………………………2
1.4功率输出模块论证分析……………………………2
二.系统硬件设计………………………………………3
2.1系统总体设计………………………………………3
2.2DA转换放大模块设计………………………………4
2.3AD采样模块设计……………………………………4
2.4显示模块设计………………………………………5
2.5电源及功率模块设计………………………………5
三.系统软件设计………………………………………5
四.系统测试……………………………………………6
4.1测试仪器及设备………………………………………6
4.2功能测试………………………………………………6
4.2.1基本功能测试………………………………………6
4.2.2发挥部分功能测试…………………………………6
五.结论…………………………………………………7
六.附录…………………………………………………76.1参考资料………………………………………………76.2部分源程序………………………………………………7
摘要
本数控直流电源以宏晶科技的STC89C52单片机为控制核心,通过8位DA转换芯片DAC0832控制输出模拟量,通过两级运放放大以达到题目要求。
电源部分先用变压器降压,再通过78、79三端稳压芯片输出±15V,﹢5V以供系统使用。
系统采用一片16位AD芯片AD7705实时监测输出电压,而起所有工作状态将显示在12864液晶显示器上,以便发现异常及时调整。
功率输出电路用达林顿管TIP122与TIP127构成闭环推挽输出形式,保证输出电流。
关键词:
STC89C52DAC0832AD7705OP07LCD12864
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
1
4.2功能测试
4.2.1基本功能测试
这个系统所有的基本功能是步进输出电压测量结果如下:
测量次数
理想电压
实际电压
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控制输出模拟量,通过两级运放放大以达到题目要求。
电源部分先用变压器降压,再通过78、79三端稳压芯片输出±15V,﹢5V以供系统使用。
系统采用一片16位AD芯片AD7705实时监测输出电压,而起所有工作状态将显示在12864液晶显示器上,以便发现异常及时调整。
功率输出电路用达林顿管TIP122与TIP127构成闭环推挽输出形式,保证输出电流。
在这几天中,我们遇到许许多多难题,通过本组成员的努力,及老师和同学的帮助大体得以解决。
这几天的设计竞赛,增强了实践能力和协作精神,懂得了联系实际的重要性。
我们的设计还存在着一些缺陷,有待于在将来设计中进一步提高,在此恳请各位老师批评指正。
六.附录
6.1参考资料
[1]黄智伟.全国大学生电子设计竞赛系统设计(第2版)北京航空航天大学出版社,2011
[2]林红,周鑫霞.模拟电路基础.清华大学出版社,2008
[3]谭浩强.C语言程序设计(第二版).北京:
清华大学出版社,2000
6.2部分源程序
//以下是main.c文件内容
#include
#include
#include"delay.h"
#include"isme.h"
#include"alonekeyscan.h"
#include"lcd12864.h"
#include"ad7705.h"
ucharcodetitleAsc[]="简易数控直流电源";
ucharcodewriteVoltageAsc[]="控制电压:
V";
ucharcodeinputVoltageAsc[]="设置输出电压:
V";
ucharcodereadVoltageAsc[]="测量电压:
V";
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;
Wr12864Ser(numAsc[temp],DAT);
temp=disV%10;
Wr12864Ser(numAsc[temp],DAT);
}
voidDisDaVoltage(u8dat)
{
u8temp;
Wr12864Ser(AFTER27,COM);
dat/=2;
temp=dat/10%10;
Wr12864Ser(numAsc[temp],DAT);
Wr12864Ser(numAsc[10],DAT);
temp=dat%10;
Wr12864Ser(numAsc[temp],DAT);
}
voidSetOutputVoltage(void)
{
u8keyVal,tempDa;
bitsetWho=0;
tempDa=toDa;
Cle12864Scr();
//第一行显示:
简易数控直流电源
Dis12864StrSer(titleAsc);
//第二行显示:
控制电压:
Wr12864Ser(SECOND_LIN,COM);
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)
{
Cle12864Scr();
Wr12864Ser(AFTER23,COM);
Dis12864StrSer(notSaveAsc);
DelayXMs(2000);
longjmp(buf,1);
}
}
}
elseif(keyVal==2)
{
setWho=~setWho;
}
elseif(keyVal==3)
{
if(setWho==0&&tempDa<198)
{
tempDa+=2;
}
elseif(tempDa<180)
{
tempDa+=20;
}
}
elseif(keyVal==4)
{
if(setWho==0&&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;
Cle12864Scr();
//第一行显示:
简易数控直流电源
Dis12864StrSer(titleAsc);
//第二行显示:
控制电压:
Wr12864Ser(SECOND_LIN,COM);
Dis12864StrSer(inputVoltageAsc);
//默认自增
Wr12864Ser(AFTER47,COM);
Dis12864StrSer(autoAddAsc);
InitInterrupt();//定时器初始化
TR1=1;//开定时器1
while
(1)
{
P0=toDa;
keyVal=Alone4KeyScan();
if(keyVal==1)
{
TR1=0;
EA=0;
longjmp(buf,1);
}
elseif(keyVal==2)
{
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);
}
else
{
Dis12864StrSer(pauseScanAsc);
}
}
}
voidDisWaveInf(u8dat)
{
u8temp;
dat*=8;
//显示周期
Wr12864Ser(AFTER36,COM);
Wr12864Ser(numAsc[11],DAT);
if(dat>99)
{
temp=dat/100%10;
Wr12864Ser(numAsc[temp],DAT);
}
else
{
Wr12864Ser(numAsc[11],DAT);
}
if(dat>9)
{
temp=dat/10%10;
Wr12864Ser(numAsc[temp],DAT);
}
else
{
Wr12864Ser(numAsc[11],DAT);
}
temp=dat%10;
Wr12864Ser(numAsc[temp],DAT);
}
voidDisMaxInf(u8dat)
{
u8temp;
switch(m)
{
case1:
dat=10;break;
case2:
dat=5;break;
case5:
dat=2;break;
case10:
dat=1;
}
//显示周期
Wr12864Ser(AFTER37,COM);
Wr12864Ser(numAsc[11],DAT);
if(dat>9)
{
temp=dat/10%10;
Wr12864Ser(numAsc[temp],DAT);
}
else
{
Wr12864Ser(numAsc[11],DAT);
}
temp=dat%10;
Wr12864Ser(numAsc[temp],DAT);
}
voidWaveOutPut(void)
{
u8keyVal;
Cle12864Scr();
//第一行显示:
简易数控直流电源
Dis12864StrSer(titleAsc);
//第二行显示:
数字波形发生器
Wr12864Ser(SECOND_LIN,COM);
Dis12864StrSer(creatWaveAsc);
//输出波形
Wr12864Ser(FOURTH_LIN,COM);
if(fnType==3)
{
Dis12864StrSer(waveOutPutAsc);
}
elseif(fnType==4)
{
Dis12864StrSer(waveOutPut2Asc);
}
Wr12864Ser(THIRD_LIN,COM);
if(setType==0)
{
Dis12864StrSer(waveTAsc);
DisWaveInf(t);
Di
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 简易 数控 直流电源 最终 上交
![提示](https://static.bdocx.com/images/bang_tan.gif)