2011年至2012年第1学期 《单片机原理与应用》课程设计
班 级 1006402
指导教师 涂 立 李 旎
学生人数___ _3__ ___
设计份数 1
2011年12月23日
自动门控制系统
一.设计时间
2011年12月19号-2011年12月23号 二.设计地点 一实验楼401机房 三.设计目的
1.掌握51单片机系列的外围电路控制
2.熟练使用Protel电路制图软件绘画电路图 3.学会使用Visio绘制工程的程序流程图
4.掌握可编程控制器程序的应用系统的调试、监控、运行方法
5.通过课程设计能熟练掌握数据的查询(图书、网络),单片机课程所学知识 在工程设计工作中综合地加以应用,使理论知识和实践结合起来。
四.设计小组成员及分工
五. 指导老师
涂立老师 李旎老师
六.设计课题 1.自动门控制系统 2. 需求分析
自动门控制系统在日常生活中,得到了广泛的应用,特别是酒店、银行、机场、写字楼等公共场合中,极大的方便了人们的出行。
本设计要求制作完成一个自动门控制系统。根据分析,基本要求有: (1)1m以内有物接近时应开启; (2)物体1m以外应关闭; (3)确保无夹人事故发生;
(4)关闭缝隙<1mm,关闭过程中无碰撞。 发挥部分有:
(1)开启和关闭过程中无抖动;
(2)根据人流量的多少,自动调节门开幅度; (3)感应无盲区等其它功能。
自动门即不需要人的操作门会根据情况自动开启和关闭。故自动门控制系统的关键在于对门开启和关闭条件的检测和对电机的控制。
七. 基本思路及关键问题的解决方法 1. 基本思路
本次课程设计的设计作品的功能是对直流电机的操作,通过两个直流电机控制门的开关,采用红外全自动控制,有防夹手功能,安全方便。
自动门控制系统软件设计主要有开门程序和关门程序。当门前1米有人或按开门按钮时,热释电红外人体传感器检测到信号后传给单片机,当两对管都未检测到信号时停止开门,此时如果继续有人来则继续开门。
如果无人在感应区内移动,则执行关门程序,当突然有夹人信号,则门立即全部打开,防止夹人事故的发生。如果没有人在门中间或在门口移动,则重新执行关门程序,最后两扇门完全关闭。
2. 关键问题以及解决方法
如何控制电机的正反转来实现门的开关?
通过改变电机两极的电位差来改变电机的转向,及a极为1,b极为0时,电机正转;a极为0,b极为1时,电机反转
八. 原理图流程图以及元件清单列表
图1. 自动门控制系统原理图
开始红外线传感器是否有人NY51单片机电机开门YN有无夹物关门 红外对管 图2. 自动门控制系统流程图 名称 热释电人体红外传感器 红外对管传感器 电机 51单片机 开关 摄像头 规格 d203s 配biss0001 500 L298直流电机 AT89S52 限位开关 CCD摄像头 图3. 自动门控制系统元件清单列表 数量 1 3 1 1 1 2 九.实验过程及步骤
1. 开打keil软件,建立一个新工程单击【Project】在下拉菜单中找到【New project...】
选项,如图4.所示
图4. 2. 选择工程要保存的路径,并且输入工程文件名。Keil的一个工程里通常含有很多小文
件,为了方便管理,一般将一个工程放在一个独立的文件夹下,比如保存到课程设计文件夹,工程文件的名字为“自动门控制系统” 如图5.所示
图5.
3. 单击保存后会弹出一个对话框,要求选择单片机的型号,可以根据使用的单片机来选
择。Keil C51几乎支持所有的51内核的单片机,在这里选择Atmel的AT89C52 ,如下图6.所示,选择后单击保存。
图6. 4. 完成上一步骤后,窗口界面如图7.图8.所示
图7.
图8. 5. 到此为止,还没有建立好一个完整的工程,虽然工程名有了,但工程当中还没有任何
文件及代码,接下来的就是添加文件及代码。
单击【File】菜单中的【new】菜单项,或单击界面上的快捷键图标
。如图 9.
图9. 6. 新建文件后的窗口界面如图10.所示
图10. 7. 在编辑窗口中闪烁,可以输入用户的应用程序,但此时这个新建文件与刚刚建立的工
程还没有直接的联系,单击图标
,窗口界面如图11.图12.所示
图11.
图12. 8. 输入要保存的文件名,同时必须输入正确的扩展名(如果用C语言编写的程序,则扩
展名必须是.c;如果用汇编语言编写的程序,则扩展名必须是.asm).这里的文件名不一定要和工程名相同,可以随意填写文件名,然后单击【保存】按钮。回到编辑界面,单击【Target 1】前面的“+”号,然后在【Source Group 1】单击右键,弹出如图13.所示的菜单
图13. 9. 然后选择【Add Files to Group ‘Source Group 1’】菜单项弹出图14.对话框
图14. 10. 选中【直流电机.c】,单击【Add】按钮,再单击【Close】按钮,然后再单击左侧【Source
Group 1】前面的“+”,屏幕窗口如图15.所示
图15. 11. 接着是在编辑窗口中编写程序编写好程序就要进行程序的编译,单击工具栏上的
进行编译,在编译过程中如果出现错误,修改程序直到没有错误为止,然后在依次点击和
,在此过程中出现错误的,也要修改程序直到没有错误为止,编译过程中出现警告一
般可以不必考虑,但特殊时也要通过修改程序消除警告。
12. 把文件转化成十六进制文件,点击【Project】在下拉菜单里找到【Options for
Target ‘target1’ 】,如图16.所示
图16. 13. 单击【Options for Target ‘target1’】会弹出下面的对话框图17.
图17. 14. 在Eprom和Ram后面的框中填入相应的数据(也可以不进行填写),然后单击
Output选项出现以下图18.
图18. 15. 用鼠标左键单击Creat HEX Fi:前面的方框,这时方框里会用一个对号如图19.
图19. 16. 然后点击确定对话框就会消失,这样刚刚所建立的文件就转化成十六进制的文
件。
17. 现在打开实验箱,先不要接电源。把P3^2和P3^3分别与电机的两接线端连接。
连接完成后,再打开电源。实验箱如图20.所示
图20. DP-51PRO试验仪 18. 对DP-51PRO试验仪上电。打开DPFlash软件出现如下图21.界面所示
图21.
19. 点击栏中的【文件】在下拉菜单里找到【装载】,如图22.所示
图22. 20. 或者直接点击工具栏里图标,点击后会弹出图 23.所示的对话框
图23. 21. 找到刚刚所建立的文件,点击后按打开按钮对话框就会消失。然后单击
会弹出图24.所示的对话框
图24. 22. 单击编程后,软件开始把程序烧入试验仪。如图25.图26.所示
图25 图26
23. 当烧片完成后,点击退出就行了。
24. 关闭DPFalsh软件。把DP-51PRO单片机仿真试验仪A1区的工作模式,选择开
关(MOD_sw1)切换到RUN处,然后按一下复位键(RST),MON51程序即开始运行。 观察实验运行的情况是不是符合设想,如果不符合,对程序进行调试直到符合为止。
十. 实验过程中出现的问题及相应的解决方法
1、 首次烧制程序时,发生了通信出错?
出现的问题可能是线路下载程序中的线路没有接好,或者是装载程序时出现错误。解决的方法是:首先检查一下线路是否连接良好,然后再重启DPFlash打开试验箱的电源,然后再来装载程序。
2、 发现运行时,电机没有做出相应的反应?
解决问题的方法是:先用一简单程序代码检查电机是否能正常工作。然后检查一下单片机与电机之间的连接是否正确如无误,再检查是否与程序代码相一致从而找出错误并改正。
十一. 课程设计心得体会
这次的课程设计,不仅使我们更加熟练的掌握了51单片机系列的外围电路控制如何使用protel电路制图软件绘画电路图、如何使用visio软件画流程图等,加深了对单片机理论的理解,将理论很好地应用到实际当中去,增长了我们对单片机学习的兴趣,为我们以后的学习研究起到了不可忽视的作用,让我们受益匪浅,而且还使我们学会了如何去培养我们的创新精神,从而不断地战胜自己,超越自己。我们组分工明确,组员在解决自己的问题上出现困难时,其他组员就会一起讨论,直到解决问题,充分发挥了团队精神的重要性。最后,在这次课程设计中,我们要感谢
指导老师涂老师给我们的建议和帮助。
十二. 源程序
#include sbit m1=P3^2; //m1,m2为直流电机两接线端 sbit m2=P3^3; sbit dj_en=P2^2; //电机使能端 sbit menqk=P2^3; //门全开 高电平全开 sbit menqg=P2^4; //门全闭 高电平全关 sbit hongwjr=P2^6; //红外夹人检测 sbit resd=P2^7; //热释电 unsigned char i; unsigned char j; void delaynms(unsigned int n)//延时函数 { for(i=n;i>0;i--); for(j=110;j>0;j--); } void dooropen(void) //开门 { m1=1; m2=0; //电机正转 dj_en=0;//使dj_en产生PWM波,改变输出方波的占空比控制门开关 delaynms(60);//延时60秒 dj_en=1; delaynms(10);//延时10秒 } void doorclose(void) //关门 { m1=0;//电机反转 m2=1; dj_en=0;//使dj_en产生PWM波 , 改变输出方波的占空比控制门开关 delaynms(60000); //延时60秒 dj_en=1; delaynms(10000); //延时10秒 } void stop(void) { dj_en=1; //使能端有效控制停转 m1=m2=0; } void main(void) { while(1) { while(menqk&&(resd||(hongwjr==1)))//开门条件 { dooropen(); } stop(); while(menqg&&(resd==0)&&(hongwjr==0))//关门条件 { doorclose(); } } stop(); } 参考文献 1.指导老师:涂立 李旎 2.《电动机的单片机控制》 北京航空航天大学出版社 2002.5 3.来清民 《传感器与单片机接口及实例》 北京航空航天大学出版社 2008.1 4.张毅刚 彭喜元 《单片机原理与应用设计》 电子工业出版社 2008.4 5.闫玉德等编。MCS-51单片机原理与应用。北京:机械工业出版社,2002 6.梁合庆等编。从C到嵌入式C编程语言。北京:北京航空航天大学出版社,2000 7.http://www.zlgmcu.com 8.http://www.atmel.com 因篇幅问题不能全部显示,请点此查看更多更全内容