数控直流稳压电源 实训报告
- 格式:doc
- 大小:882.50 KB
- 文档页数:11
单片机简易数控直流稳压电源实训
——嵌入式应用实训报告
班级: 学号: 姓名:
一、实训目的与要求
目的:熟悉单片机应用技术, 提高分析、解决工程问题的能力。该系统以直流电压源为核心,STC89C52单片机为主控制器,通过按键来设置直流电源的输出电压,由数码管显示实际输出电压值。由单片机程序控制输出数字信号,经过D/A转换器(TLC5615)输出模拟量,再经过运算放大器隔离放大,控制输出功率管的基极,随着功率管基极电压的变化而输出不同的电压。
要求:(1)输出电压:范围0~+9.9v,步进0.1v;
(2)输出电流:500mA;
(3)输出电压值由数码管显示;
(4)由“+”、“-”两键分别控制输出电压步进增减;
二、方案设计
系统电路主要包括这几大部分:数字控制部分、D/A转换部分、可调稳压电源部分、串行输入口以及数码管显示部分。数字控制部分是用+、-按键控制可逆二进制计数器,二进制计数器的输出输入到D/A转换器,经D/A转换器转换成相应的电压,此电压经过运算放大器放大到合适的电压值后,去控制稳压电源的输出,使稳压电源的输出电压以0.1V的步进值增或减。数码管的显示部分是由单片机程序控制,从它的引脚输出数据,然后在数码管上显示。数码管上显示的数据就是实际输出的电压值。串行口部分,采用标准的DB-9的D形插头,采用RS-232C信息格式标准,RS—232C和TTL电平用MAX232。
三、 硬件设计
在硬件部分我们用到了STC89C52、 TLC5615、OP07、LM336、MAX232、数码管等。
STC89C52单片机作为整机的控制单元,通过改变TLC5615的输入数字量来改变输出电压值,从而使输出功率管的基极电压发生变化,间接地改变输出电压的大小。以下是STC89C52的引脚图及各引脚功能:
STC89C52芯片 共40引脚:
1~8脚: 通用I/O接口p1.0~p1.7
9脚: rst复位键
10 .11脚:RXD串口输入 TXD串口输出
12~19:I/O p3接口 (12,13脚 INT0中断0 INT1中断1
14,15 : 计数脉冲T0 T1 16,17: WR写控制 RD读控制输出端)
18,19: 晶振谐振器 20 地线
21~28:p2 接口 高8位地址总线
29: psen片外rom选通端,单片机对片外rom操作时,29脚(psen)输出低电平
30:ALE/PROG 地址锁存器
31:EA rom取指令控制器 高电平片内取 低电平片外取
32~39:p0.7~p0.0(注意此接口的顺序与其他I/O接口不同 与引脚号的排列顺序相反)
40:电源+5V TLC5615的特点:10位CMOS电压输出;5V单电源工作;与微处理器3线串行接口(SPI);最大输出电压是基准电压的2倍;输出电压具有和基准电压相同的极性;建立时间12.5us;内部上电复位;低功耗,最高为1.75mW。TLC5615作数模转换器。以下是TLC5615引脚图:
Op07芯片是一种低噪声,非斩波稳零的双极性运算放大器集成电路。由于OP07具有非常低的输入失调电压(对于OP07A最大为25μV),所以OP07在很多应用场合不需要额外的调零措施。OP07同时具有输入偏置电流低(OP07A为±2nA)和开环增益高(对于OP07A为300V/mV)的特点,这种低失调、高开环增益的特性使得OP07特别适用于高增益的测量设备和放大传感器的微弱信号等方面。以下是Op07引脚图:
LM336集成电路是精密的2.5V并联稳压器,其工作相当于一个低温度系数的、动态电阻为0.2欧的2.5V齐纳二极管,其中的微调端可以使基准电压和温度系数得到微调。它的典型性能参数有:低温度系数:6mV/9mV/18mV;工作电流范围宽:300uA----10mA;动态电阻:0.2欧;最大正向电流:10mA;最大反向电流:15mA。以下是LM336引脚图: 共阳数码管是指将所有发光二极管的阳极接到一起形成公共阳极(COM)的数码管。共阳数码管在应用时应将公共极COM接到+5V,当某一字段发光二极管的阴极为低电平时,相应字段就点亮。当某一字段的阴极为高电平时,相应字段就不亮。以下是共阳数码管引脚图:
四、 软件设计
#include
sbit P1_0=P1^0;
sbit P1_1=P1^1;
sbit P1_2=P1^2;
sbit P1_3=P1^3;
sbit P1_5=P1^5;
sbit P1_6=P1^6;
sbit P1_7=P1^7;
unsigned char
led0[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};
unsigned char
led[]={0x03,0x9F,0x25,0x0D,0x99,0x49,0x41,0x1F,0x01,0x09};
sbit cs_ad=P1^5; sbit din=P1^7; sbit sclk =P1^6;
void da_out (unsigned int da_data)
{ unsigned char i;
cs_ad=0;
sclk = 0;
for(i=0;i<12;i++) { if(da_data & 0x0200)din=1;
else din=0;
sclk =1;
da_data<<=1;
sclk =0;
}
cs_ad=1; //将移位寄存器中的10位有效数据锁存于DAC寄存器中
sclk =1;
}
void delay1s()
{unsigned char j;
for(j=0;j<0x14;j++){
TH1=0x3c;
TL1=0xb0;
TR1=1;
while(!TF1);
TF1=0;
}
}
main()
{unsigned char a1,a2;
float x,y;
a1=0;a2=1;
TMOD=0x10;
P0=0x40;
P1=0xDF;
P2=0x03;
while(1){
x=a1*10+a2;
y=1023*x/99;
da_out(y);
if(a1==0&&a2==0){
P1_3=1; } else if(P1_0==0&&(a1>=0&&a1<9)){
a1++;
P0=led0[a1];
delay1s();
}
else if(P1_1==0&&(a1>0&&a1<=9)){
a1--;
P0=led0[a1];
delay1s();
}
else if(P1_2==0&&(a2>=0&&a2<9)){
a2++;
P2=led[a2];
delay1s();
}
else if(a1!=9&&a2==9&&P1_2==0){
a1++;a2=0;
P0=led0[a1];
P2=led[a2];
delay1s();
}
else if(a1!=0&&a2==0&&P1_3==0){
a1--;a2=9;
P0=led0[a1];
P2=led[a2];
delay1s();
}
else if(P1_3==0&&(a2>=0&&a2<=9)){
a2--;
P2=led[a2];
delay1s();
}
}
} 五. 调试 说明硬软件的调试过程和调试方法。
调试是任何实验中的重要一环,调试的过程中能让我们发现很多微小、隐藏的错误。那些错误也许在自己设计产品的时候是不会想到的,而只能通过调试来发现并解决错误。
首先是硬件的调试,由于之前的疏忽我们将稳压电源电路部分的调试留到了最后,结果放大部分的电阻不太合适也来不及换了。接上电源,测试OP07部分,调节电位器,测零度和满度。控制电路部分我们编了了一段小程序使数码管从0到9逐一显示,在这个环节查出了个别同学存在数码管引脚接错。经过改正,大家都能正确显示了。
其次是软件的调试,这一部分我们花了相当长的时间,定义位寻址、延时函数、键盘扫描、D/A转换及主函数。期间有些不足的地方也在老师的帮助下解决了。每改进一次程序都烧到芯片里看看板子显示的效果,在我们的共同努力下,按键终于发挥了它本身的作用。进位、借位、步进±0.1±1都能达到了。这使我们很欣慰。
最后我们将软硬件结合测试。以下是最终的测试结果:
数码管显示
电压值 0.0 1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0 9.9
实际输出
电压值 0.34 1.17 2.03 2.87 3.71 4.57 5.42 6.28 7.15 7.98 8.81
由测试数据可知步进1的按钮最终输出的电压值只步进了0.8左右,与实训要求有一定偏差。
六、总结与反思
总结此次的单片机实训,我做的是简易数控直流稳压电源,在设计的过程中,涉及到了许多的专业知识,发现自己在编程及对电路的理解还不够好。在老师和同学的帮助下,成品基本达到了预期的设计目的和要求,但还是有些不足的地方。
在进行整个设计之前,先根据需求分析,对单片机进行选型,我们上网搜罗了大量的资料,并结合书本,最后得出了原理图。在画protel原理图时要认真对待,由于我们画错了一个符号导致后来用错了一个电容,幸好对大体没有影响。画PCB 电路板的时候,要注意基本的布板原则,在此基础上追求美观。在焊接电路板的时候,应该分模块,逐个进行焊接并测试,我们就分了大的两部分,一部分是电源电路,另一部分是控制电路加串行口电路。在对各个硬件模块进行测试时,要保证软件正确的情况下去测试硬件,以防止找不到错误根源。在找了大量资料之后,我们确立了原理方案,并绘制成protel图。通过几天的焊接,我们完成了焊接部分的任务,并互相检查了电路。这个还是蛮有效果的,的确检查出了不少错误。改正了之后我们就忙于编程部分了,而且花了相当长的时间。导致后来电源部分没有足够的时间调试,放大部分一个小小的电阻让我们跌到了底谷。眼看实训最后一天了,我们还是没有达到更好的效果,其实心里挺着急的,最后一天老师也陪我们到晚上7点多。虽然结果没有期望的那样美好,但是我们真的努力过了,尽力了。
反思这次实训觉得自己思考问题还不够全面,常常把某个环节想的太简单以至于最后出乎意料没有时间调试了。而且在编写程序上有很多不足,还好有老师和同学的帮助。经过这次实训感觉自己对单片机的认识又有了进一步了解,在编程部分也有所提高。在以后的学习当中,我会弥补不足,更好的做好实训!