机械与车辆学院
《单片机课程设计》报告
课程设计题目:水塔水位控制系统
姓名: 学号: 班级: 指导老师: 时间: 成绩:
目录
一、 课程设计性质和目的…………………………………2 二、 课程设计的内容及要求………………………………2 三、 课程设计的进度及安排………………………………3 四、 设计所需设备及材料…………………………………3 五、 设计思路及原理分析…………………………………4 六、 流程图及程序编写……………………………………5 七、 调试运行………………………………………………8 八、 结果及分析……………………………………………9 九、 心得体会………………………………………………10 十、 参考文献………………………………………………10 十一、 致谢………………………………………………11 十二、 附录……………………………………………….11
一、课程设计性质和目的
这次课程设计《水塔水位控制》是继这学期我们学习的《单片机原理与接口技术》课程与实验结束后的一门综合性实践课,让学生初步尝试把理论与实践结合,培养了学生的实践能力。《水塔水位控制》设计需要紧密结合所学的知识,在参阅相关资料中,可以加深、巩固所学知识,同时也拓宽了知识面,有一定的深度和广度,能充分发挥学生的能动性和想象力。通过电路设计、安装、调试等一系列环节的实施,提高学生的单片机应用系统的设计能力。
二、课程设计的内容及要求
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)供水系统出现故障时,自动报警。
三、课程设计的进度及安排
表1 课程设计的进及安排表
四、设计所需设备及材料
1 表2 设计所需设备及材料表
五、设计思路及原理分析
水塔水位控制原理图见图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口。
图2 水塔水位控制硬件图
两个水位信号由P1.0和P1.1输入,这两个信号共有四种组合状态。如表3所示。其中第三种组合(b=1、c=0)正常情况下是不能发生的,但在设计中还是
应该考虑到,并作为一种故障状态。
表3 水塔水位信号状态表
六、流程图及程序编写
图3 软件流程图
单片机控制程序:
#include
sbit b=P1^0; //定义b 为P1.0 sbit c=P1^1; //定义c 为P1.1 sbit d=P1^2; //定义控制口 sbit led=P1^7; //定义警报灯口 sbit JB=P2^3; //定义喇叭口 sbit bd=P1^5; //定义B 灯口 sbit cd=P1^6; //定义C 灯口 sbit ad=P1^4; //定义A 灯口 void delay(void) //1秒延时 {
unsigned char a,b,c; for(c=167;c>0;c--) for(b=171;b>0;b--) for(a=16;a>0;a--); }
void delay500us(void) //0.5秒延时 {
unsigned char a, b; for(b = 99; b > 0; b--) for(a = 1; a > 0; a--); }
void beep() //响喇叭 { int j;
for(j = 0; j
JB = ~JB; delay500us(); } }
void main() //主函数 { while(1) {
P1=0xfc; //初始化 JB=1; ad=0;
if(b == 0 && c == 0) //加速放水 {
d=0; led=1; }
if(b == 1 && c == 0) //维持现状,继续放水
{ d=0; led=1; bd=0; }
if(b == 0 && c == 1) // 故障,警报 { led=0; JB=0; beep();
}
if(b== 1 && c == 1) //停止放水 {
bd=0; cd=0;
d=1; led=1; JB=1; } delay(); }
}
七、调试运行
1、软件测试:
运用Protul 软件进行仿真检验。在元件库中找到所需要的元器件,把它们按照原理图的构想依次连接起来,反复检查线路会不会出错。待画完图,就可以开始仿真电路图了。
给单片机导入预先编程好的程序“.hex ”文件,点击仿真。仿真图可以运行,但是电机在B,C 都为低电平的情况下没有运转。说明电路有部分地方短路或者断
路了,观察仿真图中的电位情况也许可以找到问题的所在。经过多次的检查发现,各点的电位并没有像想象中的那样有什么不妥。
现在就要搞清楚仿真中的元器件的所有主要参数是否和实际的参数相符合。查看资料,对于继电器,它本身的线圈电阻是在400欧左右,在查看仿真中的元器件的参数,不难发现原始数据和实际相差很大,它给的是理想线圈,也就是没有内阻。这样就如预期的那样找到电机不转的原因了。原始数据没有进行改变;查找资料,得知光电耦合器的发光二极管的压降为1.15~1.5v,最大电流为60mA ,电流传输比CTR 为20%~70%。通过已知的条件求出每条线路上所需要的电阻大小。对各各元器件的初参数设置完毕,启动仿真,整体像想象中的那样正常工作!软件仿真结束,仿真图里的数值引用到实际电路的焊接中。 2、硬件测试:
焊接完整体的板件,开始测试板子电路是否能够完成所需要的功能。应为电路的原版是根据仿真电路出来的,所以不一定能够一次性就完成设计。 对于板子上的元器件来说,有两个是特别容易烧掉的,PNP 三极管和4N25光电耦合器。因为它们的工作电压较低和工作电流很小,所以要特别的注意。虽然已经给了足够的保护还是不能太掉以轻心要是烧了就没有其他器件可以换了。
首先,测试光电耦左边能否正常工作。把三极管的B 极接于低电平,给予E 极高电平,测试两管脚之间的电压降是多少。经测试三极管正常工作,可是光电耦合器的1,2管脚的电压异常偏高。断去电源,用万用表的测试端测试1,2管脚是否击穿,发现并没有完全短路,有可能是封装的时候没有装好。
其次,测试光电耦合器右端是否能正常工作。给继电器加上12v 的电压,用导线短接光电耦合器的4,5号管脚,继电器能发出啪啪声,也就是说明光电耦合器右端能够正常工作。
再次,对整块板进行调试。给光电耦合器两边电路都通上电,给三极管的B 端输入一个低电平,继电器不工作。说明光电耦合器无法工作。应当更换光电耦合器;
换完光电耦合器后的检测。换完光电耦合器后进行整块板子的调试,给三极管B 极一个低电平继电器能够工作。插到单片机上给一个周期性的低电平,
继电器能够周期性的发出啪啪声,整体调试通过!
八、心得体会
这次课程设计,我学到的东西很多!可以说是先苦后甜,刚开始我先查阅了各个零件的资料,查阅了很多相关的程序进行了进一步的学习,整个过程就是从前期的懵懂-到一知半解,这个过程是艰难苦闷的,靠自己的学习和请教,请教了老师和同学终于在最后完成了这次课程设计。在设计过程也遇到问题,在电路设计完仿真出现了问题,改了很多次电机依然没动,继续参阅程序,百度,思考哪里可能有问题,后来对虚拟器件进行参数设定后慢慢的一个一个的问题给解决,电机动起来的时候,那是发自内心真正的快乐!一切变得都是值得的!
解决了仿真,开始了板子焊接,认认真真的焊接,经过几个小时的奋斗结束了焊接,高兴了不过几分钟,因为硬件的调试没有成功!用万能表查时候短路,虚焊······还是一直找不出原因。不甘郁闷了很久,没办法麻烦同学帮忙看看,在同学的帮助下终于查出是一处接错了,借了电烙铁回到宿舍继续焊接,修正了其他一些错误。
这次课程设计终于圆满结束了!这次课程设计通过查找资料和实际的焊接解决问题,把理论的知识和实际运用紧密的联系在一起,让我们对元器件的各部分功能及其运用有了更深入的了解,锻炼了我们解决问题的能力,细心仔细,认真才能避免很多错误,我想生活也是一样,对待事情都应该用全身心态度投入的态度去做。
十、参考文献
[1] 高玉良. 电路与模拟电子技术[M].北京:高等教育出版社,2011.10.
[2] 龙治红, 谭本军. 数字电子技术[M].北京:北京理工大学出版社,2010.7
[3] 王静霞. 单片机应用技术[M].北京:电子工业出版社,2009.5
[4] 徐玮.C51单片机高效入门[M].机械工业出版社,2006.
[5] 张永枫. 单片机应用实训教程[M].清华大学出版社,2008
[6] 龙治红. 数字电子技术[M].北京理工大学出版社,2010.7
十一、致谢
感谢chen 老师在这两周来的尽心照顾,感谢您的耐心指导和解答。同时也要感谢给予我帮助的同学,尤其是哥在自己已经很忙的情况下,还帮我查电路,解答,能够完成这次设计没有他是不可能的,感谢哥!
十二、附录
将编程练习题,数字时钟设计的分析及完整程序附上,程序必须加上注释;将protel 仿真练习题,protel 原理图及仿真结果图附上,并进行相应的分析。
机械与车辆学院
《单片机课程设计》报告
课程设计题目:水塔水位控制系统
姓名: 学号: 班级: 指导老师: 时间: 成绩:
目录
一、 课程设计性质和目的…………………………………2 二、 课程设计的内容及要求………………………………2 三、 课程设计的进度及安排………………………………3 四、 设计所需设备及材料…………………………………3 五、 设计思路及原理分析…………………………………4 六、 流程图及程序编写……………………………………5 七、 调试运行………………………………………………8 八、 结果及分析……………………………………………9 九、 心得体会………………………………………………10 十、 参考文献………………………………………………10 十一、 致谢………………………………………………11 十二、 附录……………………………………………….11
一、课程设计性质和目的
这次课程设计《水塔水位控制》是继这学期我们学习的《单片机原理与接口技术》课程与实验结束后的一门综合性实践课,让学生初步尝试把理论与实践结合,培养了学生的实践能力。《水塔水位控制》设计需要紧密结合所学的知识,在参阅相关资料中,可以加深、巩固所学知识,同时也拓宽了知识面,有一定的深度和广度,能充分发挥学生的能动性和想象力。通过电路设计、安装、调试等一系列环节的实施,提高学生的单片机应用系统的设计能力。
二、课程设计的内容及要求
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)供水系统出现故障时,自动报警。
三、课程设计的进度及安排
表1 课程设计的进及安排表
四、设计所需设备及材料
1 表2 设计所需设备及材料表
五、设计思路及原理分析
水塔水位控制原理图见图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口。
图2 水塔水位控制硬件图
两个水位信号由P1.0和P1.1输入,这两个信号共有四种组合状态。如表3所示。其中第三种组合(b=1、c=0)正常情况下是不能发生的,但在设计中还是
应该考虑到,并作为一种故障状态。
表3 水塔水位信号状态表
六、流程图及程序编写
图3 软件流程图
单片机控制程序:
#include
sbit b=P1^0; //定义b 为P1.0 sbit c=P1^1; //定义c 为P1.1 sbit d=P1^2; //定义控制口 sbit led=P1^7; //定义警报灯口 sbit JB=P2^3; //定义喇叭口 sbit bd=P1^5; //定义B 灯口 sbit cd=P1^6; //定义C 灯口 sbit ad=P1^4; //定义A 灯口 void delay(void) //1秒延时 {
unsigned char a,b,c; for(c=167;c>0;c--) for(b=171;b>0;b--) for(a=16;a>0;a--); }
void delay500us(void) //0.5秒延时 {
unsigned char a, b; for(b = 99; b > 0; b--) for(a = 1; a > 0; a--); }
void beep() //响喇叭 { int j;
for(j = 0; j
JB = ~JB; delay500us(); } }
void main() //主函数 { while(1) {
P1=0xfc; //初始化 JB=1; ad=0;
if(b == 0 && c == 0) //加速放水 {
d=0; led=1; }
if(b == 1 && c == 0) //维持现状,继续放水
{ d=0; led=1; bd=0; }
if(b == 0 && c == 1) // 故障,警报 { led=0; JB=0; beep();
}
if(b== 1 && c == 1) //停止放水 {
bd=0; cd=0;
d=1; led=1; JB=1; } delay(); }
}
七、调试运行
1、软件测试:
运用Protul 软件进行仿真检验。在元件库中找到所需要的元器件,把它们按照原理图的构想依次连接起来,反复检查线路会不会出错。待画完图,就可以开始仿真电路图了。
给单片机导入预先编程好的程序“.hex ”文件,点击仿真。仿真图可以运行,但是电机在B,C 都为低电平的情况下没有运转。说明电路有部分地方短路或者断
路了,观察仿真图中的电位情况也许可以找到问题的所在。经过多次的检查发现,各点的电位并没有像想象中的那样有什么不妥。
现在就要搞清楚仿真中的元器件的所有主要参数是否和实际的参数相符合。查看资料,对于继电器,它本身的线圈电阻是在400欧左右,在查看仿真中的元器件的参数,不难发现原始数据和实际相差很大,它给的是理想线圈,也就是没有内阻。这样就如预期的那样找到电机不转的原因了。原始数据没有进行改变;查找资料,得知光电耦合器的发光二极管的压降为1.15~1.5v,最大电流为60mA ,电流传输比CTR 为20%~70%。通过已知的条件求出每条线路上所需要的电阻大小。对各各元器件的初参数设置完毕,启动仿真,整体像想象中的那样正常工作!软件仿真结束,仿真图里的数值引用到实际电路的焊接中。 2、硬件测试:
焊接完整体的板件,开始测试板子电路是否能够完成所需要的功能。应为电路的原版是根据仿真电路出来的,所以不一定能够一次性就完成设计。 对于板子上的元器件来说,有两个是特别容易烧掉的,PNP 三极管和4N25光电耦合器。因为它们的工作电压较低和工作电流很小,所以要特别的注意。虽然已经给了足够的保护还是不能太掉以轻心要是烧了就没有其他器件可以换了。
首先,测试光电耦左边能否正常工作。把三极管的B 极接于低电平,给予E 极高电平,测试两管脚之间的电压降是多少。经测试三极管正常工作,可是光电耦合器的1,2管脚的电压异常偏高。断去电源,用万用表的测试端测试1,2管脚是否击穿,发现并没有完全短路,有可能是封装的时候没有装好。
其次,测试光电耦合器右端是否能正常工作。给继电器加上12v 的电压,用导线短接光电耦合器的4,5号管脚,继电器能发出啪啪声,也就是说明光电耦合器右端能够正常工作。
再次,对整块板进行调试。给光电耦合器两边电路都通上电,给三极管的B 端输入一个低电平,继电器不工作。说明光电耦合器无法工作。应当更换光电耦合器;
换完光电耦合器后的检测。换完光电耦合器后进行整块板子的调试,给三极管B 极一个低电平继电器能够工作。插到单片机上给一个周期性的低电平,
继电器能够周期性的发出啪啪声,整体调试通过!
八、心得体会
这次课程设计,我学到的东西很多!可以说是先苦后甜,刚开始我先查阅了各个零件的资料,查阅了很多相关的程序进行了进一步的学习,整个过程就是从前期的懵懂-到一知半解,这个过程是艰难苦闷的,靠自己的学习和请教,请教了老师和同学终于在最后完成了这次课程设计。在设计过程也遇到问题,在电路设计完仿真出现了问题,改了很多次电机依然没动,继续参阅程序,百度,思考哪里可能有问题,后来对虚拟器件进行参数设定后慢慢的一个一个的问题给解决,电机动起来的时候,那是发自内心真正的快乐!一切变得都是值得的!
解决了仿真,开始了板子焊接,认认真真的焊接,经过几个小时的奋斗结束了焊接,高兴了不过几分钟,因为硬件的调试没有成功!用万能表查时候短路,虚焊······还是一直找不出原因。不甘郁闷了很久,没办法麻烦同学帮忙看看,在同学的帮助下终于查出是一处接错了,借了电烙铁回到宿舍继续焊接,修正了其他一些错误。
这次课程设计终于圆满结束了!这次课程设计通过查找资料和实际的焊接解决问题,把理论的知识和实际运用紧密的联系在一起,让我们对元器件的各部分功能及其运用有了更深入的了解,锻炼了我们解决问题的能力,细心仔细,认真才能避免很多错误,我想生活也是一样,对待事情都应该用全身心态度投入的态度去做。
十、参考文献
[1] 高玉良. 电路与模拟电子技术[M].北京:高等教育出版社,2011.10.
[2] 龙治红, 谭本军. 数字电子技术[M].北京:北京理工大学出版社,2010.7
[3] 王静霞. 单片机应用技术[M].北京:电子工业出版社,2009.5
[4] 徐玮.C51单片机高效入门[M].机械工业出版社,2006.
[5] 张永枫. 单片机应用实训教程[M].清华大学出版社,2008
[6] 龙治红. 数字电子技术[M].北京理工大学出版社,2010.7
十一、致谢
感谢chen 老师在这两周来的尽心照顾,感谢您的耐心指导和解答。同时也要感谢给予我帮助的同学,尤其是哥在自己已经很忙的情况下,还帮我查电路,解答,能够完成这次设计没有他是不可能的,感谢哥!
十二、附录
将编程练习题,数字时钟设计的分析及完整程序附上,程序必须加上注释;将protel 仿真练习题,protel 原理图及仿真结果图附上,并进行相应的分析。