目录
第一章、 功能要求………………………………………2
第二章、 原理图设计……………………………………3
2.1 元器件的绘制………………………………………3
2.2 绘制原理图…………………………………………6
第三章、 PCB板的绘制…………………………………9
第四章、 设计心得与体会 ……………………………10
第一章 功能要求
此次设计是一个51单片机的最小系统,整个系统包括电源电路、AD转换电路、51单片机主控芯片、温度采集电路、串口部分、复位电路等,其中P1口设计了一个4×4的矩阵键盘,P2口和P2口作为段选和片选的地址线,以驱动数码管的静动态显示,P3口就是一个控制口了,有接串口、复位和时钟电路。此电路的设计是想利用18B20这一芯片实现温度的采集,并进行AD转换输出。
第二章 原理图的设计
原理图的设计,会影响到后来的PCB板的规划,所以最初的设计就必须最优的设计方案,设计方案的选择、元器件的选择等,是至关重要的环节。
所有的项目的设计,都需要在最初建立一个项目,文件菜单栏中的创建PCB项目,以下所有的工作都在此项目中完成。
图2 建立项目
2.1 元器件的绘制
原理图的绘制之前都需要装载元器件库,选择“元器件“,在如下窗口中找到自己需要的元器件安装。
图2.1 元件库安装
由于元器件库里大部分的元器件都没有,所以大部分都需要绘制,建立自己的组件库。绘制元器件的过程如下:
打开DXP软件,在文件菜单栏里面创建原理图元件库,就会产生一个以Schlib为后缀的文件,在编辑区的中心有一个十字坐标轴将元件编辑区分成4个象限,但是我们一般在第四象限绘制。根据原理图上面器件的形状,在放置一栏中放置元件的外形,再依次放置引脚,引脚的标注根据需要而修改,并且设置管脚属性,最后设置元件的属性,其中包括元件的封装和仿真参数。
图2.2 创建器件库
这里还要介绍一下元件的封装。也是在文件菜单栏中创建PCB库,在工具一栏中选择新元件,在元件封装向导的指引下规定封装的形式和引脚规格,这包括封装的类型和各引脚之间的距离,引脚的大小等等,最后保存。同时要在之前画的元件的图中找到此封装,将两者关联起来。这才算完成一个元器件的绘制。
这里列举几个元器件图:
1、AD转换部分:TLC5649和5620都是AD转换部分使用到的芯片,这里是自己绘制的,包括封装。
图2.3 AD-TLC5649 图2.4 TLC5620
2.主控电路:这部分主要是包括51单片机及其周围一些接口电路和排阻,4个并口所接的芯片都是自己绘制的。
图2.5 STC89C52 图2.6 HEADER16
2.2 绘制原理图
在DXP的软件中,在文件菜单栏中创建原理图,会产生一个以SCHDOC为后缀的文件,按照图纸,以此绘制原理图,移进相应的元器件,其中会用到电源线、地线、总线、导线等进行连接,并且一些简单的电阻和电容还是可以在元件库中找到。放置元器件、导线,绘制的过程中注意各器件的安排,要适合整张图纸,使全体美观且便于检查,并学会快捷键的使用
子图部分:
这次的最小系统的设计涉及到了子图,采用自上而下的方法,从母图开始逐步细化,是DXP设计下的层次结构体现的淋漓尽致,给读书更直观、更清晰的理解。在“文件”菜单栏中创建原理图,但是绘制的时候是采用工具栏中的一些图标,例如 放置方块电路和方块端口,对其设置属性和相应的电路参数。再绘制子图,“设计”栏中选择“根据符号创建图纸”即可。绘制过程中注意母图和子图的关联性和对应。图示即为母图和子图:
1、串口部分:串口部分是为了给单片机下载需要的程序,用到的MAX232和串口。
图2.7 串口的母图和子图
2、4×4的矩阵键盘
图2.8 矩阵键盘母图
图2.9 矩阵键盘的子图
3、蜂鸣器:
图2.10 蜂鸣器的母图和子图
4、数码管显示:
图2.11 数码管的母图和子图
最后所有的部分完成及可见完整的原理图如下:
图2.12 51单片机最小系统原理图
绘制完整后,在“项目管理”菜单栏中检查是否有错误,在“设计”菜单栏中选中“设计项目的网络表”,其中是选择Protel选项。此步是为了PCB板子的绘制做准备的,所以不可缺少.
第三章 PCB图的绘制
原理图的“项目管理”菜单栏中选择“追加新文件到项目中”的“PCB文件”,就打开了PCB文件,首先要保存。最初要设置PCB板子的规则,包括导线的宽度、板子的层数、孔的大小等。
然后,在机械层画出板子的大小,并且以能放进所有元件切板子小而优,导入网络表和元器件封装,这就要检查其中是否有错误,我们发现有几处的封装做的不是很完整,所以进行了修改(如果看不见原理图,可缩小再看),将其移近所画范围中,我们可以看见其中的飞线,那是说明这其中的连接。
然后手动布局,将所有器件移到最适合的位置,根据最初的设计规则,在一层或者两层连线(注意连线的过程中在转折处不要形成直角,否则会尖端放电,并且连线之前要考虑全局,不要给自己造成无路可走的局面),也可自动布线。
当所有的连线完成,调整布线的布局使其更加美观。
图3.1 PCB板
最后可在“工具”菜单栏中检查是否有错误,我们发现其实很多细节的地方,连线没有连到位,所以是断线状态,通过将图放大后修改完成。如果有需要,可以给PCB板覆铜。
最后生成器件清单,在“报告”菜单栏中就可做到。并将其以Excel方式保存。
第四章 设计心得与体会
通过此次的课程设计,掌握了更多DXP程序工作的基本过程和任务。本次设计由于是本身就有的图纸,所以绘制原理图的过程中没有很大的问题,但是元器件的绘制比较麻烦,期间有查阅相关书籍,询问了同学;并且PCB板的绘制,遭遇到布局不优良的问题,给设计造成了一些阻碍。但是因为本次设计比平时上课的内容要复杂,比如子图的内容,知道了原理图的层次结构给设计带来的方便,所以还是得到不少锻炼。对于器件的绘制更加熟悉了。也激起了对课程学习的更大兴趣,并且对于单片机的相关知识也加深了许多,可以说是一举两得。这次是自己真正学习的过程,并且完成论文的过程中又学会了使用更多的截图工具,所以算是意外的收获,以后还要继续努力。
参考文献:
1、邵群涛主编,《电气制图与电子线路CAD》,北京:机械工业出版社,2005。
2、程昱主编《精通 Protel DXP电路设计》 清华大学出版社。
第二篇:基于51单片机洗衣机课程设计报告
单片机原理及系统课程设计
专 业: 自 动 化
班 级: 12级《2》班
组 长: 陈 浩
组 员: 郑辉龙,王国稳,
指导教师:
基于51单片机的洗衣机设计
1 设计目的、要求及原理
1.1设计目的
由单片机控制实现洗衣机的各项功能,单片机的体积小,控制功能灵活,因此,设计出基于单片机的全自动洗衣机控制电路系统具有很强的实用性。用单片机设计出简单操作省水省电的洗衣机,在方便日常生活和节约资源方面都有重要意义。由于个人能力有限,我能设计的洗衣机比前沿科技产品要差很多。所以我这次课设的主要目的在于通过亲手操作,查找资料,培养自己的分析设计能力。把这学期课程中零散的知识进行整合,将理论的知识联系到实际的生活中。在实例中深入理解一些理论知识,并从中有所收获,就是意义所在。
1.2设计要求
通过仿真软件模拟洗衣机的基本工作过程,如进水、洗涤、排水、漂洗、脱水等。
1.3设计方法
利用89C51单片机的P0,P1,P2,P3串行输入输出功能,控制数码管、电机、发光二极管的工作状态模拟洗衣机的基本工作过程。
2 设计方案及原理
2.1 设计方案
洗衣机的主要工作程序是:进水—洗涤—排水—进水—漂洗—排水—脱水—排水。上述工作程序中,主要包含三个过程,洗涤过程、漂洗过程、脱水过程。
(1) 洗涤过程:放好待洗物,启动开关,进水阀通电,向洗衣机供水,当供水达到预定时间后,进水阀断电关闭,停止供水。洗涤电动机接通电源,带动波轮(或桶)旋转,产生各种形式的水流搅动衣物进行洗涤。通过电动机不停的正转、反转,形成洗涤水对洗涤物产生强烈的翻滚作用。同时,衣物之间、衣物与四周桶壁之间产生互相摩擦和撞击力,以次达到洗涤衣物的目的。
(2) 漂洗过程:漂洗的目的在于清除衣物上的洗涤液。因此,在洗涤结束之后,换水进行漂洗。漂洗过程与洗涤过程的电器动作是完全相同的。为了完全漂净衣服上的洗衣粉等,所以要多次漂洗,在这次设计中漂洗次数设定为三次。
(3) 脱水过程:漂洗后,需要对衣物进行脱水以便晾干,节省水资源,所以脱水是洗衣过程中必不可少的环节。漂洗过程结束后,电动机停止转动,排水阀通电,打开排水阀门排水。当排水到达预定时间后,脱水电动机接通,电机带动脱水桶高速旋转,利用离心力把衣服上的水从桶壁的小眼里甩出。全部洗衣工作完成后,表示结束的LED灯点亮,表示衣物已经洗好,洗衣机在这时就会自动停止工作。
2.2 设计原理
本设计用51单片机实现对洗衣机的控制,通过功能选择开关可以选择洗衣机的工作模式。当选择好模式后洗衣机进入相应的工作状态。该模式的参数已装入单片机中,洗衣机在单片机中预先装入程序的控制下进行工作。
程序实现的主要功能是洗涤,漂洗和脱水的控制。其中洗涤时间设为96s,用sec和min控制,其中sec代表分钟min代表秒。并且通过改变它们的值可以改变洗涤时间。用P3.2和P3.3控制电机的正反转(通过它们高低不同的电平控制电流的方向,从而改变电机的转向。漂洗过程和洗涤过程较为相似,由于漂洗要多次进行,所以用进水次数标志位flag1控制漂洗的次数,当flag1=2、3、4时为漂洗过程。脱水过程是在出水次数flag2的控制下进行。当flag2=4时脱水,当脱水时间到达0后,脱水结束,洗衣结束,表示停止的指示灯亮。
图1 系统组成框图
3 硬件设计
3.1系统主要元器件
在本设计中主要使用了以下元器件:AT89C51芯片、74LS245芯片 、四数码管、发光二极管、直流电动机、三极管等。
3.2 设计原理图
洗衣机的各项功能是由单片机控制实现的,单片机的体积小,控制功能灵活,因此,设计出基于单片机的全自动洗衣机控制电路系统具有很强的实用性采用5l系列单片机作为控制核心,主要包括功能选择及控制电路、洗衣机工作状态显示及输出控制电路。控制电机正反转以及进水阀和排水阀的开启和关闭。如图2所示为设计原理图。
图2 硬件连接图
4 软件设计
4.1 主程序流程图
按下K1键,洗衣机从待命状态。当按下K2键后,51单片机通过预先装入的程序控制各引脚的状态,让洗衣机才进入工作状态,以实现进水、洗衣、排水、漂洗、脱水、报警等基本功能。主程序流程图如图3所示。
图3 主程序流程图
5 系统仿真及实际调试
5.1 仿真结果
图4 :系统仿真结果
5.1 问题分析
本电路为模拟洗衣机工作过程,所以进水和排水部分只能用输出引脚上的发光二极管表示工作状态,报警电路为脱水过程的保护电路,当脱水未结束打开洗衣机盖的时候,报警电路工作并断开电机电源,防止发生事故。
6 总结
在本设计中通过软,硬件的配合设计,很好的实现了洗衣机的控制功能。本系统结构简单,控制功能强大,自动化程度高等特点。 系统软硬件设计采用模块化的设计方法,各模块功能相对独立,最后把它们整合在一起,大大的缩短了系统的设计周期。为保证洗衣机及人身安全,设计了报警电路。本设计还考虑半自动的设计,用户可以根据自己的需求自由选择洗衣机的工作方式,这一点是通过功能选择键实现的。通过这次单片机课程设计,不仅巩固了课本上所学的知识,而且更加深刻地认识到了单片机在生活中的重要地位,通过这次课程设计让我对单片机系统设计的过程与方法有了一定的认识,很好的培养了自己的创新设计能力。
参考文献
[1] 李朝青.单片机原理及接口技术[M].北京:北京航空航天出版社,1999.
[2] 顾滨.单片微计算机原理、开发及应用[M].北京:高等教育出版社,2000.
[3] 王思明,张金敏,苟军年等.单片机原理及应用系统设计[M]:科学出版社,2012.
[4] 房小翠.单片机实用系统设计技术[M].北京:国防工业出版社,1990.
附录
1 源程序
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
//***************************//
sbit mo_r=P3^2; //电机右控制线
sbit mo_l=P3^3; //电机左控制线
//****************************//
sbit key_menu=P3^4; // 菜单按键
sbit key_on=P3^5; // 开始按键
sbit key_off=P3^6; // 结束按键
sbit key_se=P3^7; // 菜单选择按键
//***************************//
sbit led_in=P0^0; // 进水指示灯
sbit led_xi=P0^1; // 洗衣指示灯
sbit led_pao=P0^2; // 泡洗指示灯
sbit led_xx=P0^3; // 脱水指示灯
sbit led_out=P0^4; // 出水指示灯
sbit led_over=P0^5; // 洗衣结束指示灯
sbit led_work=P0^6; // 电机工作指示灯
sbit led_wring=P0^7; // 报警指示灯
sbit other=P3^1; // 脱水电源控制开关
sbit anther=P3^0; // 洗衣电源控制开关
//******************************//
uchar code num[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
//*****************************//
char sec=0; // 时间秒
char min=0; // 时间分
uchar count=0; // 中断计数
uchar flag0=0; // 洗衣机工作状态标志
uchar flag1=0; // 进水次数标志
uchar flag2=0; // 出水次数标志
uchar flag3=0; // 泡洗次数标志
uchar err=0; // 报警标志
uchar quan=0; // 正反转计数
//**********************************//
void delay(); // 延时函数
void in(); // 进水子程序
void out(); // 出水子程序
void over(); // 结束子程序
void xi(); // 洗衣子程序
void pao(); // 泡衣子程序
void xx(); // 脱水子程序
void on(); // 工作on处理子程序
void se(); // 显示菜单选择
void SEG_display(); // 显示时间子程序
void key_scan(); // 按键扫描子程序
void delay(uint i)
{
uint x,y;
for(x=i;x>0;x--)
for(y=120;y>0;y--);
}
//*********工作on处理子程序**********//
void on()
{
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
P0 = 0xff;
if(flag0==0)
in();
if(flag0==1)
xi();
if(flag0==2)
pao();
if(flag0==3)
xx();
if(flag0==4)
out();
}
//********结束子程序*********//
void over()
{ other=0;
anther=0;
P0=0xff;
mo_r=0;
mo_l=0;
led_over=0;
EA=0;
}
//**********进水子程序**********//
void in()
{ anther=0;
other=0;
P0=0xff;
led_in=0;
flag1++;
mo_r=0;
mo_l=0;
min=0;
sec=8;
}
//**********洗衣子程序**********//
void xi()
{ anther=1;
other=0;
P0=0xff;
led_work=0;
led_xi=0;
mo_r=1;
mo_l=0;
min=1;
sec=36;
quan=0;
}
//
//********泡衣子程序********//
void pao()
{
anther=1;
other=0;
P0=0xff;
led_pao=0;
led_work=0;
flag3++;
mo_r=1;
mo_l=0;
min=1;
sec=35;
quan=0;
}
//*********脱水子程序********//
void xx()
{ other=1;
anther=0;
P0=0xff;
led_xx=0;
mo_r=0;
mo_l=1;
min=0;
sec=50;
}
//********出水子程序********//
void out()
{ anther=0;
other=0;
P0=0xff;
led_out=0;
flag2++;
mo_r=0;
mo_l=0;
min=0;
sec=5;
}
//**********显示菜单选择********//
void se()
{
P0=0xff;
if(flag0 >= 5)
flag0=0;
if(flag0==0)
{
led_in=0;
}
if(flag0==1)
{
led_xi=0;
}
if(flag0==2)
{
led_pao=0;
}
if(flag0==3)
{
led_xx=0;
}
if(flag0==4)
{
led_out=0;
}
}
//*********菜单处理子程序**********//
void menu()
{
min=0;
sec=0;
mo_r=0;
mo_l=0;
SEG_display();
while(1)
{
if(key_on==0)
{
delay(5);
if(key_on==0)
{
while(!key_on);
on();
break;
}
}
//**************************//
if(key_off==0)
{
delay(5);
if(key_off==0)
{
while(!key_off);
over();
break;
}
}
//****************************//
if(key_se==0)
{
delay(5);
if(key_se==0)
{
while(!key_se);
flag0++;
se();
}
}
}
}
//*********按键扫描子程序*********//
void key_scan()
{
if(key_menu==0)
{
delay(5);
if(key_menu==0)
{
while(!key_menu);
menu();
}
}
//********************************//
if(key_on==0)
{
delay(5);
if(key_on==0)
{
while(!key_on);
on();
}
}
//*********************************//
if(key_off==0)
{
delay(5);
if(key_off==0)
{
while(!key_off);
over();
}
}
}
//*********显示子程序**********//
void SEG_display()
{
P1=0x01;
P2=num[min/10];
delay(10);
P1=0x02;
P2=num[min%10];
delay(10);
P1=0x04;
P2=num[sec/10];
delay(10);
P1=0x08;
P2=num[sec%10];
delay(10);
}
//*********主函数**********//
void main()
{
led_in=0;
anther=0;
other=0;
while(1)
{
SEG_display();
key_scan();
}
}
//*****定时器0中断处理程序*****//
void timer0() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
count++;
if(count==20)
{
count=0;
sec--;
if((flag0==1)||(flag0==2))
{
quan++;
switch(quan)
{
case 1:mo_r=1;mo_l=0;break;
case 10:mo_r=0;mo_l=0;break;
case 15:mo_r=0;mo_l=1;break;
case 25:mo_r=0;mo_l=0;break;
default:;
}
if(quan==30)
{
quan=0;
}
}
//**********************************//
if((sec==0)&&(min != 0))
{
min--;
sec=59;
}
//**********************************//
if((sec<0)&&(min==0)&&(flag0==0)) //进水结束
{
switch(flag1)
{
case 1:flag0=1;xi();break;
case 2:flag0=2;pao();break;
case 3:flag0=2;pao();break;
case 4:flag0=2;pao();break;
default: err=1;led_wring = 0;
}
}
//**********************************//
if((sec<0)&&(min==0)&&(flag0==1)) //洗衣结束
{
flag0=4;
out();
}
//**********************************//
if((sec<0)&&(min==0)&&(flag0==2)) //泡衣结束
{
switch(flag3)
{
case 1:flag0=4;out();break;
case 2:flag0=4;out();break;
case 3:flag0=4;out();break;
default: err=1;led_wring = 0;
}
}
//**********************************//
if((sec<0)&&(min==0)&&(flag0==4)) //出水结束
{
switch(flag2)
{
case 1:flag0=0;in();break;
case 2:flag0=0;in();break;
case 3:flag0=0;in();break;
case 4:flag0=3;xx();break;
default: err=1;led_wring=0;
}
}
//***********************************//
if((sec<0)&&(min==0)&&(flag0==3))
{ sec=0;
over();
}
}
}