综合布线V4.docx
《综合布线V4.docx》由会员分享,可在线阅读,更多相关《综合布线V4.docx(14页珍藏版)》请在冰点文库上搜索。
综合布线V4
信电学院
电子信息工程专业CDIO三级项目
项目设计说明书
(2013/2014学年第二学期)
项目名称:
基于单片机活动门控制系统的实现
——上位机设计
专业班级:
学生姓名:
学号:
指导教师:
设计周数:
2周
设计成绩:
2014年6月25日
1项目概述
1.1引言
“活动门”是统称,泛指可以左右或者上下平衡活动自由打开的门,有手控开关活动门,红外感应活动门,声音感应活动门等,它们在我们的日常生活中扮演着重要的角色,为我们的生活带来了极大的便利。
因此设计一套安全实用的活动门系统是当今社会的发展趋势。
1.2开发环境
本系统是基于51单片机控制的活动门控制系统,通过改变引脚的正负电位控制直流电机的正反转,从而实现活动门的开关;本系统的上位机是Web版管理界面通过串行口传输信令完成对单片机的控制,最终实现活动门的开关。
2需求分析
2.1目标
⑴系统分析与设计:
对系统进行调研,详细分析系统,设计出基于单片机的活动门控制系统的技术方案;
⑵设计实现系统的关系技术:
电机驱动、门限电路、软件控制;
⑶系统电路的设计与实现:
器件选择、地址分配和硬件连接;
⑷系统软件的设计与实现:
单片机代码的实现,计算机控制代码的实现;
⑸系统调试:
调试串口、调试按键、调试驱动;
⑹系统联调。
2.2技术要求
⑴实现活动门的开关动作:
在单片机的作用下,通过活动门上安装的激光对射,控制步进电机的正反转从而实现活动门的开关动作,当活动门接触到物体时,通过接触开关可以实现活动门的暂停动作;
⑵实现上位机软件控制活动门:
利用计算机的软件实现对活动门的开关动作(即单片机与上位机的通信,完成对活动门的正确控制),计算机软件即可以向下位机发送信令,也可以收到下位机反馈的信息,从而可以通过上位机软件了解到活动门的状态;
⑶使用单一供电电源,控制电机使用步进电机,活动门必须安装接触开关,实现门的自动控制。
3设计过程
3.1系统分析与设计
3.1.1系统分析
要想实现单片机控制活动门的开关,从理论上分析,最简单的方法就是通过单片机的外接引脚给直流电机进行供电,采用PWM技术控制直流电机的转速,并且通过不断的改变两个引脚的正负极性来实现直流电机的正反转,从而实现活动门的开关。
为了实现活动门的便捷安全操作,通过PC上位机来显示活动门的工作状态,PC上位机的显示界面可以显示活动门是处于开启状态还是闭合状态,极大地提高了管理者的操作,便于工作人员及时了解活动门的工作信息,也提高了工作人员的工作效率,实现了现代工业的自动化与便利性。
3.1.2技术方案
用户通过软件界面直接控制活动门的开关。
控制界面和单片机相当于是上、下位机的关系。
控制界面通过串口通信接受来至下位机数据并且可以对数据进行保存。
3.1.3相关技术
⑴单片机与PC机串口通讯
51单片机有一个全双工的串行通讯口,所以单片机和电脑之间可以方便地进行串口通讯。
进行串行通讯时要满足一定的条件,比如电脑的串口是RS232电平的,而单片机的串口是TTL电平的,两者之间必须有一个电平转换电路,我们采用了专用芯片MAX232进行转换,我们采用了三线制连接串口,也就是说和电脑的9针串口只连接其中的3根线:
第5脚的GND、第2脚的RXD、第3脚的TXD。
这是最简单的连接方法,但是对我们来说已经足够使用了,电路如下图所示,MAX232的第10脚和单片机的11脚连接,第9脚和单片机的10脚连接,第15脚和单片机的20脚连接。
全双工的串行通讯口原理图如图1所示:
图1全双工的串行通讯口原理图
为了保证异步串行通信主、从机之间的同步,除了要有前面的通信数据格式外,还必须要求主、从机的发送和接收时钟具有相同的周期,既相同的波特率。
为了保证同步,除了格式与周期外,还需解决的一个基本问题是主、从机必须按照统一的电气和物理接口标准来连接,如信号电平、信号定义与电缆特性等都必须按照统一的标准。
如果主从机之间的电气和物理接口标准不一致,一定要进行电气和物理接口的转换。
最典型的是51单片机与PC机串口连接时,前者是TTL(5V)电平,后者是RS—232(15V)电平,必须进行电平转换,如图2、图3所示。
TTL电平的“1”和“0”分别为2.4和0.4V,因此需外接电路实现电平转换。
传输线驱动器MC148和传输线接收器MC1489可实现这种转换。
图2MC148
图3MC1489
⑵SCI串行通信接口
51单片机串行通信接口(SCI)是一个标准的通用异步接收/发送(UART)通信接口。
它的接收器和发送器都是双缓冲的。
51单片机串行通信接口(SCI)有自已的使能和中断位,它们可以半双工或全双工方式工作。
为了保证数据的完整性,串行通信接口对接收的数据进行间断检测、奇偶性、超时和帧错误的检查。
位速率(波特率)可通过一个16位的比特率选择寄存器进行编程,因此,可以有超过65000种不同的速率。
SCI模块是一个8位片内外设,通过DSP的16位外部数据总线的低8位与外部设备通信。
⑶RS232通讯原理
串行端口的本质功能是作为CPU和串行设备间的编码转换器。
当数据从CPU经过串行端口发送出去时,字节数据转换为串行的位。
在接收数据时,串行的位被转换为字节数据。
串口是计算机上一种非常通用设备通信的协议(不要与通用串行总线UniversalSerialBus或者USB混淆)。
大多数计算机包含两个基于RS232的串口。
串口同时也是仪器仪表设备通用的通信协议;很多GPIB兼容的设备也带有RS-232口。
同时,串口通信协议也可以用于获取远程采集设备的数据。
串口通信的概念非常简单,串口按位(bit)发送和接收字节。
尽管比按字节(byte)的并行通信慢,但是串口可以在使用一根线发送数据的同时用另一根线接收数据。
它很简单并且能够实现远距离通信。
比如IEEE488定义并行通行状态时,规定设备线总常不得超过20米,并且任意两个设备间的长度不得超过2米;而对于串口而言,长度可达1200米。
典型地,串口用于ASCII码字符的传输。
通信使用3根线完成:
a地址线、b发送、c接收。
由于串口通信是异步的,端口能够在一根线上发送数据同时在另一根线上接收数据。
其他线用于握手,但是不是必须的。
串口通信最重要的参数是波特率、数据位、停止位和奇偶校验。
对于两个进行通行的端口,这些参数必须匹配:
①波特率:
这是一个衡量通信速度的参数。
它表示每秒钟传送的bit的个数。
②数据位:
这是衡量通信中实际数据位的参数。
③停止位:
用于表示单个包的最后一位。
典型的值为1,1.5和2位。
④奇偶校验位:
在串口通信中一种简单的检错方式。
有四种检错方式:
偶、奇、高和低。
3.2单片机程序设计
单片机的程序完成两个功能,首先是监测活动门开关状态,并以此为依据输出活动门的控制指令。
3.2.1程序流程图
外部中断零程序Int的流程图如图4:
图4外部中断零程序Int的流程图
3.3Web界面设计
Web界面完成两个功能,首先是控制单片机的工作状态,从而控制活动门开关状态,并以此为依据输出单片机的控制指令。
3.3.1Web界面结构
该网站系统主要由三部分组成:
首页,联系我们,关于系统三部分组成。
⑴首页模块主要有:
网站标题,网站导航和网站内容三部分内容。
①网站标题:
网站标题是“活动门管理系统”是通过Ps以及Css完成的,是该系统的正式名称。
②网站导航:
网站导航由首页,关于系统,联系我们三部分组成,通过导航栏,用户可以更加方便的操作并且了解本款系统。
③网站内容:
网站内容主要是系统与单片机进行串口通信的信令按钮,用户可以通过点击页面上的按钮,实现活动门的开关和暂停。
除此之外,页面内容还包括一些系统下位机的硬件简介,首页页面布局如图5。
图5Web界面结构图
⑵关于本系统模块主要是开发者对本系统的一些必要的介绍,方便用户的使用。
⑶联系我们模块主要是用于用户有难以解决的问题的时候,或者对本系统有不清楚的地方可以联系系统开发者。
3.3.2主要代码
⑴主程序接受信令代码:
case3:
//远程开门
if(touchSwitch&&uartFlag)
{
motorRun(0);
}
Else
{
uartFlag=0;
}
if(flag)
{
motorRun(0x00);
flag=0;
}
break;
case4:
//远程关门
if(touchSwitch&&uartFlag)
{
motorRun
(1);
}
Else
{
uartFlag=0;
}
if(flag)
{
motorRun(0x01);
flag=1;
uartFlag=1;
step=0;
}
break;
⑵调用Js库主要代码:
$(document).ready(function(){
varTop=-200;
varTime=1500;
functionmove(){
$("#box").animate({"margin-top":
Top},Time);
Top+=-200;
if(Top<=-800)
{
Top=0;
Time=700;
}
else{
Time=1500;
}
}
setInterval(move,5000);})
⑶串口通信主要代码:
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Web;
usingSystem.Web.UI;
usingSystem.Web.UI.WebControls;
usingSystem.Data;
usingSystem.Text;
usingSystem.Data.SqlClient;
usingSystem.Threading;//线?
程ì定¨时骸?
usingSystem.Runtime.InteropServices;
usingSystem.ComponentModel;
usingSystem.Drawing;
namespaceHDMKZ
{
publicpartialclassForm1:
Form
{
publicForm1()
{
InitializeComponent();
}
privatevoidForm1_Load(objectsender,EventArgse)
{
comboBox1.SelectedIndex=0;
}
byte[]Dout=newbyte[1];
byte[]Din=newbyte[1];
privatevoidbutton1_Click(objectsender,EventArgse)
{
if(serialPort1.IsOpen)
{
serialPort1.Close();
button1.Text="关闭串口";
textBox1.Text="串口未打开,不可以进行串口通信!
";
listBox1.Items.Add("初始化失败,禁止可以进行通信!
");
}
else
{
try
{
textBox3.Text="9600bps";
textBox4.Text="8";
textBox6.Text="0";
serialPort1.PortName=(String)comboBox1.SelectedItem;
serialPort1.BaudRate=9600;
serialPort1.DataBits=8;
serialPort1.StopBits=StopBits.One;
serialPort1.Parity=Parity.None;
serialPort1.RtsEnable=true;
serialPort1.Open();
button1.Text="打开串口";
textBox1.Text="串口已打开,可以进行串口通信!
";
listBox1.Items.Add("初始化成功,可以进行通信!
");
}
catch
{
MessageBox.Show("串口未打开!
","出错啦!
",MessageBoxButtons.OK,MessageBoxIcon.Error);
}
}
}
privatevoidlistBox1_SelectedIndexChanged(objectsender,EventArgse)
{
}
privatevoidbutton2_Click(objectsender,EventArgse)
{
try
{
if(serialPort1.IsOpen)
{
Dout[0]=10;
this.serialPort1.Write(Dout,0,Dout.Length);
listBox1.Items.Add("已发送控制信号使电机正转!
");
}
}
catch
{
MessageBox.Show("发送命令失败!
","出错啦!
",MessageBoxButtons.OK,MessageBoxIcon.Error);
}
}
privatevoidbutton3_Click(objectsender,EventArgse)
{
try
{
if(serialPort1.IsOpen)
{
Dout[0]=01;
this.serialPort1.Write(Dout,0,Dout.Length);
listBox1.Items.Add("已发送控制信号使电机正转!
");
}
}
catch
{
MessageBox.Show("发送命令失败!
","出错啦!
",MessageBoxButtons.OK,MessageBoxIcon.Error);
}
}
privatevoidserialPort1_DataReceived_1(objectsender,SerialDataReceivedEventArgse)
{
Control.CheckForIllegalCrossThreadCalls=false;//不使用委托
stringstr="";
str=serialPort1.ReadExisting();
switch(str)
{
case"01":
listBox1.Items.Add("电机反转,门为关闭状态!
");
break;
case"10":
listBox1.Items.Add("电机正转,门为打开状态!
");
break;
default:
listBox1.Items.Add("接收数据失败,无法知道电机工作状态!
");
break;
}
}
}
}
⑶导航栏主要代码:
- 首页
target="blank">关于我们
target="blank">联系我们