接口课设报告

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

《微机接口技术课程设计报告》

设计题:大型闸门开关系统

设计时间:2010.9.19至2010.9.25

微机接口技术课程设计

一、设计目的:

模拟大型闸门的开启与关闭,熟悉接口设计的流程。

编程模拟实现产品监测。

二、设计要求:

总体的系统由主控机(上位机)和下位机组成,上位机与下位机利用串行接口进行连接,利用俩个(或者两个以上功能部件)构成一个完整系统。主控机负责数据处理,下位机负责接口控制。

具体的功能要求如下:

1、用实验台上的信号电源模拟闸门位移传感器获得信号电压。

2、用实验台上的LED和扬声器模拟闸门到位报警。

3、用实验台上的步进电机或伺服电机模拟控制闸门的升降。

4、上位机模拟控制中心调节闸门开度的大小。

三、设计内容:

大型闸门开关系统:

系统总体的结构如下所示:

1、

成。主控机和下位机通过串行通信线连接。

2、执行部件:由接口电路等组成,将接收的数据送入到下位机或将下位机输出

的数据送到执行部件。

3、下位机:与主控机通信,控制执行部件。

4、主控机:与所有下位机进行数据交换,必要时需建数据库,进行数据处理等。

5、主控机程序:串行(RS232)通信程序,数据处理程序等。

6、下位机程序:串行(RS232)通信程序,执行部件控制程序。

闸门信号采用实验平台上的信号电源通过ADC0809采样数模转换来得到。通

过8255将采样数据送下位机,下位机通过串口通信将数据传给上位机,上位机来处理数据,并显示出数据的特性。然后通过跟设置的一个阈值比较,来判断闸门是否到位,根据判断结果传送相应的信号控制给下位机,下位机根据信号做出相应的反应,设置相应的芯片。如果闸门未到位,启动步进电机,模拟闸门升降的过程;如果闸门到位,则启动音乐发生器和LED灯,产生声光报警信号。

四、设计过程:

首先,确定所需要的芯片及部件,我们要用到信号电源、ADC0809、8255、步进电机、音乐发生器以及一个报警用的LED灯。利用ADC0809采样信号电源模数转换的得到的数据模拟闸门位移信号,通过8255传给下位机,下位机通过串行通信接口将数据传送给上位机,上位机对数据进行统计处理,然后传递给下位机一个信号位,表示闸门是否到位,下位机根据此信号位启动步进电机或产生声光报警。

简要设计框图:

芯片接口图:

总体的电路图就如上面所示,实验台的接线都画出来了,跟一开始的设计方案可能有一点的不同,这是在测试以后的确定版本。

程序设计如下所示:

分工介绍:

本次接口课设中,我们涉及到电路连线,界面设计,程序编码,程序调试,总体设计等分工和合作。在项目中,我的任务是界面设计和编码部分,具体来说就是设计两个程序运行界面,包括上位机和下位机,界面设计包括响应代码和消息实时控制。要求实现的就是在点击按钮“开始”时发送消息,然后接着编写代码,发送消息,传达给界面的连接状态,显示当前的连接状态。而这个下位机发送的消息要传递给上位机,让上位机显示出闸门的位移和状态等等信息。而且,后面根据老师的要求,要能够动态修改的警界位移,所以还需要增加一个响应功能和函数,用于动态监测到这个警界的变化,并反映到最终提示信息中,显示是否超过警界,同时还要让警报发声。

整个代码中,涉及到串口通信,使用了MSComm控件提供的几个接口来发送数据,接收数据,控制灯的显示,步进电机等等,所以我们小组成员在一起进行了很多的讨论和协商,同时不同功能模块和分工直接进行了相互的协作。最终完满的完成了实验的任务!

五、系统调试

(1)在编码完成之初,由于通信的延迟选择的不同,观察上位机的时候,会明显感到闸门到位前与到位后的采样时间间隔不一致,通过调节各自的睡眠时间,这个问题得到了解决。

(2)在测试的过程中,发现了步进电机的运转有点问题,通过调试步进电机的运行睡眠时间解决了问题。

系统的运行框图如下:

下位机:

上位机:

六、设计心得和体会

首先,通过课设再次熟悉了接口的相关知识,8255芯片和模数转换的相关知识得到了巩固。通过实际的系统的设计完成,锻炼了我们的实际分析问题,建立模型,再利用实验平台来实现相应功能的能力。在这个过程中,锻炼了我们的团队协作能力,动手能力。而且在实验的过程中,我们小组成员之间进行广泛而深刻的交流,进行了紧密和有效的沟通,互相帮助,进一步加深了我们对于接口课程的理解,提高了动手实践的能力。

本次的编码是通过VC来进行实现的,通过实际的操作,让我了解了VC中的串口通信机制;对于我做的关于界面和编码的工作,我认为感触很深。不仅仅让我对于MFC的运行机制,消息通讯有了更深刻的体会,同时,通过实际编码,控制信号,发送消息,进而实现一些硬件的功能,比如LED灯的发光和扬声器的

发声等等,让我体会到了编码的乐趣,而且利用VC的串口通信技术,以及相应的控件的使用,让我深刻的理解了接口原理,同时,对于MFC 界面编程和消息通讯都有了更加深刻的理解和更熟练的掌握。总之,这次课设让我收获颇为丰富。最后感谢老师的帮助和指导!

七、附录:

下位机通信部分:

void CUpDlg::OnComm()

{

// TODO: Add your control notification handler code here

BYTE signal;

int pc4,pc6,i;

int xu[8]={0x05,0x15,0x14,0x54,0x50,0x51,0x41,0x45};

VARIANT variant_inp;

COleSafeArray safearray_inp;

LONG len,k;

BYTE rxdata[2048];

CString strtemp,m_strEditRXData;

OpenPortTalk();

m_strEditRXData.Empty();//清空发送框

if(m_ctrlComm.GetCommEvent()==2) //// comEvReceive读取数据

{

variant_inp=m_ctrlComm.GetInput();

safearray_inp=variant_inp;

len=safearray_inp.GetOneDimSize();

for(k=0;k

safearray_inp.GetElement(&k,rxdata+k);

for(k=0;k

{

BYTE bt=*(char *)(rxdata+k);

strtemp.Format("%c",bt);

m_strEditRXData+=strtemp;

}

}

if(!m_pare("10")){

m_RV="连接失败";

UpdateData(FALSE);

return;

}

else if(!m_pare("0")){

m_RV="连接成功";

UpdateData(FALSE);

for(i=0;i<5;i++){

Sleep(50);

相关文档
最新文档