《单片机课程设计》报告水塔水位控制系统.docx
- 文档编号:10539899
- 上传时间:2023-02-21
- 格式:DOCX
- 页数:25
- 大小:30.98KB
《单片机课程设计》报告水塔水位控制系统.docx
《《单片机课程设计》报告水塔水位控制系统.docx》由会员分享,可在线阅读,更多相关《《单片机课程设计》报告水塔水位控制系统.docx(25页珍藏版)》请在冰豆网上搜索。
《单片机课程设计》报告水塔水位控制系统
机械与车辆学院
《单片机课程设计》报告
(2012-2013 学年第一学期)
课程设计题目:
水塔水位控制系统
姓名:
学号:
210404021045
班级:
00 机械电子工程 33 班
指导老师:
chenlaoshi
时间:
2013 年 1 月 14 日—2013 年 1 月 25 日
成绩:
一、 课程设计性质和目的…………………………………2
二、 课程设计的内容及要求………………………………2
三、 课程设计的进度及安排………………………………3
四、 设计所需设备及材料…………………………………3
五、 设计思路及原理分析…………………………………4
六、 流程图及程序编写……………………………………5
七、 调试运行………………………………………………8
八、 结果及分析……………………………………………9
九、 心得体会………………………………………………10
十、 参考文献………………………………………………10
十一、致谢………………………………………………11
十二、附录……………………………………………….11
-1-
一、课程设计性质和目的
这次课程设计《水塔水位控制》是继这学期我们学习的《单片机原理与接
口技术》课程与实验结束后的一门综合性实践课,让学生初步尝试把理论与实
践结合,培养了学生的实践能力。
《水塔水位控制》设计需要紧密结合所学的知
识,在参阅相关资料中,可以加深、巩固所学知识,同时也拓宽了知识面,有
一定的深度和广度,能充分发挥学生的能动性和想象力。
通过电路设计、安装、
调试等一系列环节的实施,提高学生的单片机应用系统的设计能力。
二、课程设计的内容及要求
1、硬件设计
(1)用 80C51 设计一个单片机最小控制系统。
其中 P2.0 接水位下限传感器,
P2.1 接水位上限传感器,P2.2 输出经反相器后接光电耦合器,通过继电器控制
水泵工作,P2.3 输出经反相器后接 LED,当出现故障时 LED 闪烁;P2.4 输出经
反相器后接蜂鸣器,当出现故障时报警。
(2)用塑料尺、导线等设计一个水塔水位传感器。
其中A电级置于水位10CM
处,接5V电源的正极,B级置于水位15CM处,经4.7K下拉电阻接单片机的P1.0口,
C电级置于水位的20CM处,经4.7K下拉电阻接单片机的P1.1口。
(3)设计一个单片机至水泵的控制电路。
要求单片机与水泵之间用反相器、
光电耦合器和继电器控制,计算出LED限流电阻,接好继电器的续流二极管。
2、软件设计
(1)根据功能要求画出控制程序流程图。
(2)根据控制程序流程图编写 80C51 汇编语言或 C51 程序
3、功能要求:
(1)水塔水位下降至下限水位时,启动水泵,水塔水位上升至上限水位则关
闭水泵。
(2)水塔水位在上、下限水位之间时,水泵保持原状态。
(3)供水系统出现故障时,自动报警。
-2-
元件名
原 理 图
工作原理
个数
继电器
SRD-12VDC-SL-C
线圈通电产生磁场,
吸附开关,使常闭端
打开,闭合与常开端;
1
光电藕合器
4n25
输入的电信号驱动发
光二极管,使之发出
一定波长的光,被光
探测器接收而产生光
电流,再经过进一步
的放大输出,实现电
—光—电的转化
1
PNP 三极管
9015C
PNP 三极管用作开关,
当基极电位低于发射
极电位是三极管导通
1
二极管
单向导通,保护继电
器;
1
电阻 220
2
电阻 4.7k
1
电阻 1k
1
序号
项 目
时 间
1
布置课程设计任务、讲授焊接基本知识
1 天
2
水塔水位控制总体方案设计、仿真器使用
1 天
3
硬件设计和制作
1 天
4
硬件制作和调试
1 天
5
Protel99 的使用
1 天
6
软件设计和软件调试
1 天
7
综合调试
1 天
8
整体调试
1 天
9
检测验收、写课程设计报告
1 天
10
答辩
1 天
三、课程设计的进度及安排
表 1 课程设计的进及安排表
四、设计所需设备及材料
表 2 设计所需设备及材料表
-3-
五、设计思路及原理分析
水塔水位控制原理图见图 1,图中两条虚线表示正常工作情况下水位升降的
上下限,在正常供水时,水位应控制在两条虚线代表的水位之间。
B 测量水位
下限,C 测量水位上限,A 接+5V,B、C 接地。
图1 水塔水位检测原理图
在水塔无水或水位低于下限水位时,B、C 为断开,B、C 两点电位为零(低
电平“0” ),需要水泵供水,单片机输出低电平,控制电机工作供水。
水位上
升到 B 点,B 接通,B 点电位变为高电平“1”,C 开关仍断开,C 点仍为低电平,
维持现状水泵继续供水。
当水位上升到 C 点时,C 接通。
这时 B、C 均接通,
B、C 两点都为高电平,表示水塔水位已满,需水泵停止供水,单片机输出高电
平,电机断电停止供水。
水塔水位开始下降,水位在降到 B 点之前,B 点电位
为高、C 点电位为低,单片机输出控制电平维持不变,仍为高。
当水位降到 B
点以下,B、C 两点电平都为低时,单片机输出控制电平又变低,水泵供水。
如图 2:
用 80C51 设计一个单片机最小控制系统。
其中 P1.0 接水位下限传
感器;P1.1 接水位上限传感器;P1.2 输出经 Q0 电流放大后接光电耦合器,接
通继电器,带动电机控制水泵工作;P1.3 输出经反相器后接 LED,当出现故障
时 LED 闪烁;P1.4 输出经反相器后接蜂鸣器,当出现故障时报警。
用塑料尺、导线等设计一个水塔水位传感器。
其中 A 电极置于水位 10cm 处,
接 5V 电源的正极;B 电极置于水位 15cm 处,经 5.1K 的下拉电阻接单片机的 P1.0
口;C 电极置于水位 20cm 处,经 5.1K 的下拉电阻接单片机的 P1.1 口。
-4-
C(P1.1)
B(P1.0)
操作
0
0
电机运转
0
1
维持原状
1
0
故障报警
1
1
电机停转
图 2 水塔水位控制硬件图
两个水位信号由 P1.0 和 P1.1 输入,这两个信号共有四种组合状态。
如表
3 所示。
其中第三种组合(b=1、c=0)正常情况下是不能发生的,但在设计中
还是应该考虑到,并作为一种故障状态。
表 3 水塔水位信号状态表
六、流程图及程序编写
图 3 软件流程图
-5-
单片机控制程序:
#include
sbit b=P2^0;\\把 P2.0 定义为 b;代表 B 传感器;
sbit c=P2^1;\\把 P2.1 定义为 c;代表 C 传感器;
sbit d=P2^2;\\把 P2.2 定义为 d;代表电机控制端;
sbit led=P2^3;\\把 p2.3 定义为 led;代表警报灯;
sbit fly=P2^4;\\把 P2.4 定义为 fly;代表蜂鸣器;
void delay() 延时函数;延时 1s
{
unsigned char i;
for (i=0;i<20;i++)
{
TH1=15536/256;
TL1=15536%256;
TR1=1;
while(!
TF1);
TF1=0;
}
}
void main()
{
TMOD=0x10;\\设置工作方式 T1;
P2=0xfc;\\给 P2 口赋初值;
if(c==0) \\ C 传感器为低电平,电机控制端赋低电平;
d=0;
if(c==1)\\ C 传感器为高电平,报错,报警灯和蜂鸣器工作;
{
led=0;
fly=0;
}
-6-
if(b==1&&c==1)\\ B,C 传感器同时为高电平时,电机控制端为高电平,电机停转,报警灯,
蜂鸣器不工作;
{
d=1;
led=1;
fly=1;
}
delay();
}
注:
未运行的界面;图 4 proteus 仿真图
注:
B,C 同时为低电平,电机正常工作!
图 5 proteus 仿真图
-7-
七、调试运行
1、软件测试:
运用 Protul 软件进行仿真检验。
在元件库中找到所需要的元器件,把它们按
照原理图的构想依次连接起来,反复检查线路会不会出错。
待画完图,就可以
开始仿真电路图了。
给单片机导入预先编程好的程序“.hex”文件,点击仿真。
仿真图可以运
行,但是电机在 B,C 都为低电平的情况下没有运转。
说明电路有部分地方短路
或者断路了,观察仿真图中的电位情况也许可以找到问题的所在。
经过多次的
检查发现,各点的电位并没有像想象中的那样有什么不妥。
现在就要搞清楚仿真中的元器件的所有主要参数是否和实际的参数相符合。
查看资料,对于继电器,它本身的线圈电阻是在 400 欧左右,在查看仿真中的
元器件的参数,不难发现原始数据和实际相差很大,它给的是理想线圈,也就
是没有内阻。
这样就如预期的那样找到电机不转的原因了。
原始数据没有进行
改变;查找资料,得知光电耦合器的发光二极管的压降为 1.15~1.5v,最大电流
为 60mA,电流传输比 CTR 为 20%~70%。
通过已知的条件求出每条线路上所
需要的电阻大小。
对各各元器件的初参数设置完毕,启动仿真,整体像想象中
的那样正常工作!
软件仿真结束,仿真图里的数值引用到实际电路的焊接中。
2、硬件测试:
焊接完整体的板件,开始测试板子电路是否能够完成所需要的功能。
应为
电路的原版是根据仿真电路出来的,所以不一定能够一次性就完成设计。
对于板子上的元器件来说,有两个是特别容易烧掉的,PNP 三极管和 4N25
光电耦合器。
因为它们的工作电压较低和工作电流很小,所以要特别的注意。
虽然已经给了足够的保护还是不能太掉以轻心要是烧了就没有其他器件可以
换了。
首先,测试光电耦左边能否正常工作。
把三极管的 B 极接于低电平,给
予 E 极高电平,测试两管脚之间的电压降是多少。
经测试三极管正常工作,
可是光电耦合器的 1,2 管脚的电压异常偏高。
断去电源,用万用表的测试端测
试 1,2 管脚是否击穿,发现并没有完全短路,有可能是封装的时候没有装好。
其次,测试光电耦合器右端是否能正常工作。
给继电器加上 12v 的电压,
-8-
用导线短接光电耦合器的 4,5 号管脚,继电器能发出啪啪声,也就是说明光电
耦合器右端能够正常工作。
再次,对整块板进行调试。
给光电耦合器两边电路都通上电,给三极管
的 B 端输入一个低电平,继电器不工作。
说明光电耦合器无法工作。
应当更
换光电耦合器;
换完光电耦合器后的检测。
换完光电耦合器后进行整块板子的调试,给
三极管 B 极一个低电平继电器能够工作。
插到单片机上给一个周期性的低电
平,继电器能够周期性的发出啪啪声,整体调试通过!
八、结果及分析
最后电动机正常工作,达到预期的效果。
图 6 焊接电路板正反面照片
-9-
九、心得体会
这次课程设计,我学到的东西很多!
可以说是先苦后甜,刚开始我先查阅
了各个零件的资料,查阅了很多相关的程序进行了进一步的学习,整个过程就
是从前期的懵懂-到一知半解,这个过程是艰难苦闷的,靠自己的学习和请教,
请教了老师和同学终于在最后完成了这次课程设计。
在设计过程也遇到问题,
在电路设计完仿真出现了问题,改了很多次电机依然没动,继续参阅程序,百
度,思考哪里可能有问题,后来对虚拟器件进行参数设定后慢慢的一个一个的
问题给解决,电机动起来的时候,那是发自内心真正的快乐!
一切变得都是值
得的!
解决了仿真,开始了板子焊接,认认真真的焊接,经过几个小时的奋斗结
束了焊接,高兴了不过几分钟,因为硬件的调试没有成功!
用万能表查时候短
路,虚焊······还是一直找不出原因。
不甘郁闷了很久,没办法麻烦同
学帮忙看看,在同学的帮助下终于查出是一处接错了,借了电烙铁回到宿舍继
续焊接,修正了其他一些错误。
这次课程设计终于圆满结束了!
这次课程设计通过查找资料和实际的焊接
解决问题,把理论的知识和实际运用紧密的联系在一起,让我们对元器件的各
部分功能及其运用有了更深入的了解,锻炼了我们解决问题的能力,细心仔细,
认真才能避免很多错误,我想生活也是一样,对待事情都应该用全身心态度投
入的态度去做。
十、参考文献
[1] 高玉良.电路与模拟电子技术[M].北京:
高等教育出版社,2011.10.
[2] 龙治红,谭本军.数字电子技术[M].北京:
北京理工大学出版社,2010.7
[3] 王静霞.单片机应用技术[M].北京:
电子工业出版社,2009.5
[4] 徐玮.C51 单片机高效入门[M].机械工业出版社,2006.
[5] 张永枫.单片机应用实训教程[M].清华大学出版社,2008
[6] 龙治红.数字电子技术[M].北京理工大学出版社,2010.7
- 10 -
十一、致谢
感谢 chen 老师在这两周来的尽心照顾,感谢您的耐心指导和解答。
同时也
要感谢给予我帮助的同学,尤其是哥在自己已经很忙的情况下,还帮我查电路,
解答,能够完成这次设计没有他是不可能的,感谢哥!
12、附录
将编程练习题,数字时钟设计的分析及完整程序附上,程序必须加上注释;
将 protel 仿真练习题,protel 原理图及仿真结果图附上,并进行相应的分析。
1.整流器
按如图所示要求,建立 protel 仿真原理图,要求仿真显示 u1 、 u2 和 uO 的波形,
同时改变 C1 值的大小,观察 uO 波形的变化。
- 11 -
图 7 整桥仿真图
图 8 改变电容后的仿真图
2.数字时钟
内容要求:
1.用7段8位的LED数码管设计出一个数字时钟,要求显示分(2位)、秒
(2位)及十分之一秒即0.1秒(1位)。
按下启动按钮启动数字时钟,按下停止
按钮暂停计时,当再次按下启动按钮时,从当前值继续计时,当按下复位按钮
时,时钟复位。
2.通过设定定时按键,对时钟的分钟进行设定,每按一次,分钟设定加
1,开始时,LED灯D1处于熄灭状态,当启动计时后,计时到达设定时间,时
钟复位,且LED灯D1处于一直亮的状态。
- 12 -
图8-1数字时钟
在 protues 软件中按图 8-1,建好实验电路图。
按要求编写程序。
图9 数字时钟仿真图
程序如下:
#include
#define uchar unsigned char
#define uint unsigned int
uchar shuzi[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
//是数码管的段选,数组里边的分别表示:
0123456789
uchar weixuan[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//
- 13 -
是数码管的位选
sbit k1=P3^0;//启动
sbit k2=P3^1;//复位
sbit k3=P3^2;//停止
sbit d1=P0^0;//LED灯
uint i,second,minute,n,x,b,c,a,flag1,flag2;
void delay(uchar i);//延时函数
void shizhong();//显示数字时钟
void dingshi();//用于定时分钟函数
void delay5ms();//定时5MS用于按键的消抖
void shizhong();//时钟控制函数,包括对时钟的启动,复位,
停止,设定设定的操作
void main()
{
TMOD=0x12;// 定时器1工作方式1和定时器0工作方式2
TH1=(65536-50000)/256;// 定时时间为50MS设初值
TL1=(65536-50000)%256;//
TR1=0;// 开定时器1
EA=1;// 开总中断
ET1=1;// 开定时器T1允许位
EX1=1;//开放外部中断0允许位
IT1=1;//置外部中断为边沿(下降沿4)触发
方式
P2=0x00;// P2口为段选
P1=0xff;//P1口为位选
while
(1)
{
shizhong();
shizhong();
- 14 -
}
}
void dingshiqing1() interrupt 3//用定时器1 中断号为3
{
TH1=(65536-50000)/256;//定时时间为50MS
TL1=(65536-50000)%256;//
i++;//
if(i==2)//100ms到,即0.1秒,即0.1秒加1
{
i=0;
n++;
if(n==10)//1000ms到,即1秒,秒加1,后n要清零
{
n=0;
second++;
if(second==60)//60秒到,即分钟加1,后秒要清零
{
second=0;
minute++;
if(minute==60) //60分钟到,分钟要清零
minute=0;
}
}
}
}
voidweidu1() interrupt 2//外部中断1
{
unsigned int z;
flag1=1;//
- 15 -
b=second;
c=n;
a++;
if(a==60)
a=0;
for(z=0;z<40;z++)
dingshi();
}
void delay(uchar i)
{
unsigned char j,k;
for(k=0;k
for(j=0;j<255;j++);
}
void shizhong()
{
P1=weixuan[6];
P2=smg_du[n];//显示时钟的0.1秒位
delay
(2);
P1=weixuan[5];
P2=0x40;//"-"
delay
(2);
P1=weixuan[3];
P2=smg_du[second/10];//显示时钟的秒的十位
delay
(2);
P1=weixuan[4];
P2=smg_du[second%10];// 显示时钟的秒的个位
delay
(2);
- 16 -
P1=weixuan[2];
P2=0x40;//"-"
delay
(2);
P1=weixuan[0];
P2=shuzi[minute/10];// 显示时钟的分钟的十位
delay
(2);
P1=weixuan[1];
P2=shuzi[minute%10];//显示时钟的分钟的个位
delay
(2);
}
void dingshi()
{
P1=weixuan[6];
P2=0x00;
delay
(2);
P1=weixuan[5];
P2=0x00;
delay
(2);
P1=weixuan[3];
P2=0x00;
delay
(2);
P1=weixuan[4];
P2=0x00;
delay
(2);
P1=weixuan[2];
P2=0x00;
delay
(2);
P1=weixuan[0];
- 17 -
P2=smg_du[a/10];// 显示时钟的分钟的十位
delay
(2);
P1=weixuan[1];
P2=smg_du[a%10];//显示时钟的分钟的个位
delay
(2);
}
void shizhong()
{
if((a==minute)&&(b==second)&&(c==n))//判断是不是到了定
时的时间
{
if(flag2==1)//flag2为标志位,是在按K1启动
的时候启动定时的
{
flag2=0;
d1=0;//到了定时时间LED灯亮
minute=0;//时钟复位,即分钟,秒,0.1秒
都清零
second=0;//
n=0;//
}
}
if(k1==0)//判断是不是要启动时钟
{
delay5ms();//延时消抖
if(k1==0)
{
- 18 -
TR1=1;//开定时器1
if(flag1==1)//设标志位,只有在按下定时按键才进
入这个函数
{
flag1=0;
flag2=1;
}
}
}
if(k2==0)// 判断是不是要对时钟进行复位
{
delay5ms();
if(k2==0)
{
n=0;
second=0;
minute=0;
}
}
if(k3==0)// 判断是不是要对时钟进行停止
{
delay5ms();
if(k3==0)
{
TR1=0;//关定时器1
}
while(!
k3);//
}
- 19 -
}
void delay5ms()
{
uint y;
TH0=6;
TL0=6;
for(y=0;y<20;y++)
{
TR0=1;
while(!
TF0);}
}
- 20 -
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机课程设计 单片机 课程设计 报告 水塔 水位 控制系统