五邑大学本科毕业设计
3.3相关的子程序
#include
void delayus(uint us) //延迟函数 {
while(us--); //循环开始 }
uchar ad_action(uchar chn) //得到ADC转换数据 {
uchar read_data; //存放数据 adin=chn; /定义地址 delayus(6); //给充足的时间 read_data=adin; //读到数据 return read_data; //返还
}
以上程序实现了A/D的转换器的模/数之间的转换,并校正A/D的误差。
LED的子程序:
#include \调用ADC0809函数 #define LED_Data P0 //P2 //宏定义 #define A 10 //宏定义 #define U 11 //宏定义 sbit LED1=P2^3; //管脚定义 sbit LED2=P2^2; sbit LED3=P2^1;
sbit LED4=P2^0;//ED1=P3^0;LED2=P3^1;LED3=P3^2; LED4=P3^3; sbit dp=P0^7;
27
五邑大学本科毕业设计
#define LED_slect P2
static uchar dispdata[4]; //定义数值 void decodenum(float adv,uchar chn) //解码开始 {
uint temp; //定义 temp=(uint)(adv*100); //放大100 dispdata[0]=temp/100; dispdata[1]=temp/10; dispdata[2]=temp; dispdata[3]=chn; }
void select(uchar LED) //数码管通道选择 {
switch(LED) //循环函数 {
case 0:LED1=0;break; //执行0通道,返还 case 1:LED2=0;break; //执行1通道,返还 case 2:LED3=0;break; //执行2通道,返还 case 3:LED4=0;break; //执行3通道,返还 default: LED_slect=0xff; //低电平 } }
void dispone(uchar LED,bit ifpoint,uchar number) //,number 0--9 //送到数码管 {
select(LED); /数码管显示选择
LED_Data=num[number]|0x80; //数据送到相应管脚 if(ifpoint) //调用上面函数 dp=1; else
dp=0;
28
把数据五邑大学本科毕业设计
}
void disp() //数码管显示选择 {
uchar i; //定义变量 bit point;
for(i=0;i<4;i++) //进入循环0-3 {
if(i==1) point=0; /控制数码管 else point=1;
dispone(i,point,dispdata[i]); //进入下一个数码管的循环 } }
delayus(200); //延迟200us LED_slect=0xff; //数码管关闭
3.4本章小结
本章介绍了程控器的软件设计部分。软件设计是否完善,直接关系到系统能否正确地执行指定的指令。总之,软件设计是系统设计的灵魂,设计好软件是至关重要的。
29
五邑大学本科毕业设计
第4章 系统调试与总结
电路的制作与调试过程是整个系统的设计开发过程从理论迈向应用的第一步,电路板的制作会直接影响电路工作的稳定性,电路板做得好,为后面的调试做好基础。
4.1 PCB的绘制和制板过程
印制电路板的布线单片机系统能否抗干扰非常重要。要本着尽量控制噪声源、尽量减小噪声的传播与耦合,尽量减小噪声的吸收这三大原则设计印制电路板和布线。在元器件的布局方面,应该把相互有关的元件尽量放得靠近一些,对于那些易产生噪声的器件、小电流电路、大电流电路开关电路等,应尽量使其远离单片机的逻辑控制电路,如果可能的话,可以将这些电路另外制成电路板,这样有利于抗干扰,提高电路工作的可靠性。本来整个电路是用万用版来做电路板的,后来做好进行调试时,接线太多了,误差很大、检查起来很不方便。经过考虑、老师的指导、同学的建议,决定把ADC0809这块电路做成PCB板。
制PCB板前作出准备:绘制电路原理图,生成网络表,规划电路板,装入网络表和元件库,接着就可以进行制作PCB板。在画原理图时尽量将相关的元器件放在同一方向,采用Protel 99se布线,在满足电路性能及整机安装与面板布局要求的前提下,元件的排列方位尽可能保持与原理图相一致。布线方向最好与电路图走线方向相一致,设计时应力求走线合理,少用外接跨线,便于检查、调试及检修。焊盘设置为椭圆形,连线以1mm为宜,完成连线的手工调整后,再将焊盘变为泪滴焊盘,以提高焊盘(包括过孔)与印制导线连接处的宽度。为了提高电路的抗干扰和散热能力,完成布线后,在PCB板的焊锡面放置与地线相连的大面积敷铜区,达到减少接地电阻,改善散热的能力。
在实际操作中,要认真选好、画好封装,做到一丝不苟。要不,当你装焊元件到一半时才发现,装不进去,那时已经进退两难了,就算勉强装焊上去,也会影响美观,况且,还有可能影响性能,令电路的可靠性埋下了隐患。
电路板方面选用了单面感光板,感光最好就是在太阳光下,此时阳光均匀、亮度高,容易控制,感光大约8分钟就可以进行显影。显影时,如果经验不足,可以先剪一下块感光板做试验,适当地调好显影剂与水的比例,建议刚开始时显影剂的浓度可以低一些,如果发现显影不理想时再投放少量显影剂进去。这样投放显影剂目的是防止经验不足,导致显影剂过量,容易把导线弄掉,损坏整块感光板。注意,显影剂不够量再加进显影剂的时候,一定要拿起感光板,直到显影剂完全溶化的时候,才能放感光板进去从新显影。
腐蚀感光板的过程中,要不时地拿上来查看,如果发现有些线路的感光薄膜脱落,要立即清洗并用随身携带的油性笔补画上去,以免把导线腐蚀了。
磨刀不误砍柴工,要想焊好一块电路板,就要选择一把好的烙铁和一把吸锡器,选用有口碑的焊锡材料。装焊前,要清洁一下烙铁头,清洁烙铁头的石棉要蘸上水,随时准备清洗烙铁头。装焊的时间不能太长,否则,很容易烧坏焊盘,还可能烧坏元器件;太短
30
五邑大学本科毕业设计
也不行,那样容易导致虚焊。总之,一个合格的焊点应该做到无虚焊、假焊、拉锡和有锡渣,焊点表明圆润、有光泽。
4.2 硬件电路调试
本论文设计的电路主要分三大块:①万用板上的放大电路;②PCB板上的A/D模数转换电路;③开发板上的单片机与LED。在做放大电路时,开始是用三极管NPN来设计,由于三极管的静态工作点比较难确定,并且容易烧坏,后来改用放大芯片LM358来实现,效果不错,能把传感器的电压放大到5V左右。在做A/D模数转换电路时,装焊好元件后,使用万用表进行检查,排除电路中存在短路、断路的可能。首先,查看电源是否能够正常供电,因为电源作为程控器的动力之源,对程控器的正常运行至关重要。用万用表测量本设计的变压器输出是否为交流5V,三端稳压器的输出端输出5V 稳不稳定等。如果没有出现异常,就装上芯片进行在线通电检查。检查的时候,要留意各个芯片的管脚电压,检查单片机是否起振。
在调试初期,电路板上的一切电压正常,但是单片机全部输出高电平,或者输出乱码,控制处于失控状态。到实验室用示波器查看晶振输出波形,发现晶振没有起振。如果起振,用示波器的探针检测晶振的任一管脚,均能看到正弦波产生的。后来检查发现是电源问题。因为:压力传感器要用到25V的电源,而单片机、LM358、74HC74、74HC02都是用5V的电源,所以,调试就比较麻烦,电源、电流的控制要恰到好处才能显示效果。
4.3 软件调试
软件程序的设计采用C语言,对AT89S51进行编程实现各种功能。所用的编译器是Keil uVision2,编译环境是Windows XP,调试的流程是对各个子单元逐个地调试成功后,再联合起来整体调试,下面介绍一下调试的过程。
需要独立调试的子程序有:LED显示和A/D转换程序程序。通过这一步以后,再调试参数设置子程序和主程序。当调到这里的时候,这时的输出控制信号不是很准确,所以还需要通过多次的调试参数以得到理想的输出控制信号。
4.4 软、硬件总体调试
软、硬件结合后进行程控器的总体测试,发现在时序上控制的不是很好,例如,常常是控制部分提前完成,但是显示部分还显示没有结束。经过慢慢细心的调整,基本上已经在时钟方便做到准确了。
31