系统工程实验报告

时间:2024.4.20

电缆通断检测系统设计

说明: 201184184749

班级:  08030902         班级:  08030902     

学号:  2009302026       学号:  2009302013   

姓名:  王勋             姓名:  葛俊         

20##年1月

目录

一、实验背景. 2

1、应用需求. 2

2、解决方案. 2

二、实验目的. 2

三、系统基本功能要求. 2

四、课程要求. 3

五、硬件电路设计. 3

1、系统总体设计. 3

2、系统原理框图. 4

3、电路模块设计分析. 4

六、软件设计. 6

1、软件功能分析. 7

2、程序流程设计. 7

七、实验调试与结果. 8

八、实验总结与收获. 8

九、附录. 9

一、    实验背景

1.      应用需求

对于电缆生产厂家及电缆安装人员,常常需要检测电缆芯线是否存在断路故障。因而,在线及时检测断线故障,保证通信网络的畅通,已成为日益关注的问题。考虑到通信电缆的隐蔽性,用简单的工具难以判定断点,需采用一定的测试方法和手段来测取断点位置,从而进行检修排除故障。本次认识实习采用一种用单片机控制的测取电缆工作情况的方法,给出硬件结构与软件程序框图,并附上完整的单片机软件程序。指导老师为我们介绍的本方法具有电路简明易懂、检测速度快、操作简便等优点。

2.      解决方案

现在电缆通断的快速检测系统已有基于不同技术下的多种不同种类,如基于单片控制、基于发送单脉冲波束或是结合单片机技术和其他如CPLD实现对多芯电缆的通断检测。它们各有用途,各有优点,如基于脉冲波束的检测方法就可以大致判断出电缆故障距离测量点的距离等参数。

二、 实验目的

1.       培养系统设计能力;

2.       培养自学习能力;

3.       培养团结协作能力;

三、 系统基本功能要求

1.  完成外部电缆连线的通断检测;

2.  电缆检测路数24路;

3.  通过RS232将结果回送计算机显示结果 ;

4.  系统具有开始、停止等控制按键。

四、 课程要求

a)  元器件:

l 单片机:89C52;

l RS232驱动器为ADM202;

l 输出电缆驱动器2803;

l 输出锁存器74HC377;

l 单片机读数据驱动器74HC245;

l 地址译码器74F138。

b)  要求提供设计方案、原理图、PCB图、实物和实验报告。

五、 硬件电路设计

1.      系统总体设计

a)  本次认识实习的基本思路是以硬件电路为基础,通过单片机实现所需的全部控制功能,完成对所给24路电缆的同时通断检测,并在对结果分析之后最终力求以最简明易懂的方式呈现出该电缆是否处于正常工作状态。

b)  由于本次课程设计所设计电路中的关键器件已由老师限定给出,因此我们上网查找了其中部分不熟悉器件的技术参数,进行自主学习,具体参数及说明见附录5.3。经过一周的初步了解和学习之后,我们对该系统的设计思路有了一些自己的想法,并用仿真软件Altium Designer进行了原理图和PCB板的初步绘制。

2.      系统原理框图

根据系统的功能需求和实验室条件,我们对该电缆通断检测系统的大致框架结构进行了设计,主要的系统设计框图如下:

3.      电路模块设计分析

完成对系统的各个模块原理设计后,我们根据具体的设计要求进行各个电路模块的设计,包括串口通讯电路、锁存电路、驱动电路等,具体设计如下:

1)  由于需要检测24路电缆,必须将P0口加以扩展,使用三个74HC377芯片,将8个输出口扩展为24个输出,利用使能端及写信号WR分时选通,由于P0口为漏极开路,故需接上拉电阻。

2)  单片机输出信号不能直接接入电缆,而要通过输出电缆驱动器2803进行电平转换,接入电缆。

3)  考虑到芯片的数目较多,为了节约单片机的IO口,使用了138译码器对芯片的使能端进行控制。

4)  单片机的P0口做分时复用,电缆输出信号通过三个74HC245接P0口,同样利用使能端及读信号RD分时选通接收信号,并能够与输出信号分开。

5)  INT0与INT1用作接控制键盘,用于控制系统的开始、停止和单片机的工作状态。

6)  通过AMD202驱动器将结果接入RS232接口,通过单片机与计算机相连的串口及虚拟软件窗口操作精灵对串口信号进行识别和显示,并最终以直观的方法显示电缆检测结果。

7)  具体的设计原理图如下:

b)  对于PCB板的设计,充分考虑了信号线比较多,单片机与锁存芯片及接口等的布局进行了合理的优化,设计的效果如下图:

六、 软件设计

1.      软件功能分析

a)  考虑到芯片的电平反转作用,电缆输出信号为0,输入信号为1,则该路电缆正常;如果仅一根电缆输入信号为1,其它电缆都输入信号为0,则在接收端电缆输出出现0,则该路电缆必然与其他某条电缆短路。

b)  鉴于24路电缆间故障情形比较复杂,我们这里仅仅在检测后输出到PC端的显示软件中显示所有短路的电缆而不考虑具体的短接情况。

c)  在完成主要功能后,对系统的辅助功能进行程序设计,包括按键控制、软件触发和功耗设置。

2.      程序流程设计

a)      检测方案思路

1首先P0口作为输出,依次选通三个377锁存器,第一个锁存器输出01H;其它两个输出00H,分别锁存到输出端,即进行从000001H到800000H的移位,同时将输入的量存放在临时变量里。

2对第一片377进行输入移位,并保持其它两片输入为00H不变。

3移位时实时监测输出端的值,存入数组变量的同时,将输入输出的值比较根据不同的变化值判断电路连接情况,如为了单纯测试置1的电缆的通断情况,进行输入输出位与,若位与结果为0,则表示该路电缆连通正常,否则电路断开,并将断开标志写入预先分配的数组。

4电缆的短路检测比较复杂,由定义的三维数组根据同时性要求输出的结果组成,分别对应三片377、三片245与8路输入输出,这样可以根据每位的01分布判断短路情况。

5判断短路情况的同时,输出短路显示到PC端,根据显示的三个16进制数判断短路连接的电缆,根据显示的三位16进制的个数与异同判断电缆的短路短路根数与短路的情况数。然后显示电缆的通断情况,显示24个16进制数,为00,则为断路;为01,则为通路。

b)  执行控制与工作模式程序设计

1为了方便系统的实际使用,设置了两个硬件的轻触按键对程序的开始、停止控制。为了方便调试,我们将主要的检测扫描程序放在了外部中断服务程序及串行通信中断服务程序里,检测时更加方便快捷。

2工作模式的选择可以降低单片机的功耗,考虑到工程实用,设置了空闲等待模式,可以在随时实用的时候硬件触发或复位唤醒单片机对电缆的进行检测。

七、 实验调试与结果

我们将改动后的程序烧进单片机后,我们开始了实物检验,但是和仿真效果一样,虽然反应灵敏,不需等待就可一次性看到所有24路的通断与短路检测结果,利用自制的电缆线可以方便地对照看出PC显示的结果与实际的通断短路情况。调试过程很复杂,程序稳定性及调试结果取得很好的效果。

八、 实验总结与收获

从课设的讲解课开始,我们不断地查阅单片机的开发项目书籍以期尽快地完成任务,并积极向老师同学请教细节问题,熟悉系统设计的整个流程并在每个过程里学到很多知识和工程经验。深刻地体会到细节决定成败,坚持就是胜利,的确程序的调试大多数都是忽略细节导致运行失败,放弃就是不自信。运用以前所学的专业课知识,如:altium designer制图、汇编语言、模拟和数字电路知识等。虽然过去从未独立应用过它们,但在学习的过程中带着问题去学我发现效率很高,这是我做这次课程设计的又一收获。这是第一次接触这样完整的硬件电路实验,虽然感觉不是很难,但是对于我们来说,实现起来所有的功能还不是一件容易的事。接到题目设计要到小组讨论,一点一点地完成系统功能要求,一点一点地实现这个电路。这个实验的综合性很强,当我们遇到问题时,我们互相讨论,并且在多次修改后,我们完成了自己的设计。

经过这个实验,我们深切的感受到,理论知识的重要性,学好课本知识是完成实验的前提条件。然而理论和实际还是有很大差距的,很多理论上能实现的东西,在实际操作时却有问题,这更要求我们要灵活运用所学的理论知识和动手能力,并且要多积累实验经验。

九、 附录

程序C代码:

/**************片选地址************/

// U377_en1  P2=0X08;  //377_1使能  

// U377_en2  P2=0X09;  //377_2使能

// U377_en3  P2=0X0A;  //377_3使能

// U245_en1  P2=0X0B  //245_1使能

// U245_en2  P2=0X0C  //245_2使能

// U245_en3  P2=0X0D  //245_3使能

//P2=0X0f;  //377和245禁止

/**********************************/

#include <reg52.h>

#include <math.h>

#define uint unsigned int

#define uchar unsigned char

#define P_IO   P0   // P0  //检测信号输出

// U377_en1  P2=0X08;  //377_1使能  

// U377_en2  P2=0X09;  //377_2使能

// U377_en3  P2=0X0A;  //377_3使能

//P2=0X0f;  //377和245清零

// U245_en1  P2=0X0B  //245_1使能

// U245_en2  P2=0X0C  //245_2使能

// U245_en3  P2=0X0D  //245_3使能

sbit U245_DIR=P3^7;  //245 时钟    ---RD定为0

sbit U377_clk=P3^6;  //377 时钟    ---WR对应CLK

uchar temp11,temp22,temp33,temp1,temp2,temp3,temp4,temp5,temp6,counter=0,counter1=0;

uchar flag_ok1=0;//245_1 OK

uchar flag_ok2=0;//245_2 OK

uchar flag_ok3=0;//245_3 OK

uchar flag_duan1=0;

uchar flag_duan2=0;

uchar flag_duan3=0;

uchar flag_int0=0;

uchar  duan[3][3][8]={0};

uchar  bre[3][8]={0};

void init_chuankou();

void Delay();

void send();

void P_SCAN();

void Delay(uint x)  //延时1ms

{

 uchar i;

 while(x--)for(i=0;i<120;i++);

}

void init_chuankou(){   //串口初始化

    TMOD = 0x20;

    SCON = 0x50;

    TH1 = 0xF3;

    TL1 = TH1;

    PCON = 0x00;

    TR1 = 1;

   ES=1;

}

void send(unsigned char DATA)  //显示

{     

   SBUF=DATA;   //发送数据

   while(TI==0);   //等待发送完毕,TI会变为1

        TI=0;          //TI清零,方便下一次发送

}

/////////////////////////////////////////////////////

void P_SCAN()  //端口扫描

{       

uchar i;

   U245_DIR=0;//245方向

   temp1=0;

   temp2=0;

   temp3=0;

   temp11=0x01;

   temp22=0x01;

   temp33=0x01;

   for(i=0;i<8;i++) {   //U1--前八路

       P2=0X08;  //377_1使能       //u377_1锁存数据

       P_IO=temp11;

       temp1=temp11;

       U377_clk=0;

       Delay(10);

       U377_clk=1;

//     Delay(10);

        P2=0X0f;  //377和245清零

       temp11=temp11<<1;

      

       P2=0X09;  //377_2使能       //u377_2锁存数据

       P_IO=0;

       U377_clk=0;

//     Delay(10);

       U377_clk=1;

//     Delay(10);

       P2=0X0f;  //377_2清零

      

       P2=0X0A;

       P_IO=0;

       U377_clk=0;                 //u377_3锁存数据

//     Delay(10);

       U377_clk=1;

//     Delay(10);

       P2=0X0f;

       P2=0X0B;  //245_1使能       //释放u245_1数据

       U245_DIR=0;//245方向

       P_IO=0XFF;

       temp4=P_IO;

//     Delay(10);

      

       if((temp4&temp1)==0){    //判断断路:为零则通

      

            bre[0][i]=1;       //储存通路

      

          if(temp4==~temp1){//判断短路

             flag_ok1=1;

         

          } else {

               flag_duan1=1;//duan[0][0][ii]=temp4;    

           }

       }  

         

       P2=0X0c;  //245_2使能          //释放u245_2数据

       U245_DIR=0;//245方向

       P_IO=0XFF;

       temp5=P_IO;

    // Delay(10);

    

       if(temp5==0xFF){     //判断短路

          flag_ok2=1;  

       }

       else {

        flag_duan2=1;//  duan[0][1][ii]=temp5;

          }

       P2=0X0d;  //245_3使能          //释放u245_3数据

       U245_DIR=0;//245方向

       P_IO=0XFF;

       temp6=P_IO;

    // Delay(10);

      

       if(temp6==0xFF){     //判断短路

          flag_ok3=1;  

       }

       else {

          flag_duan3=1;//      duan[0][2][ii]=temp6;

          }

         

    if(flag_duan1||flag_duan2||flag_duan3){

      

         duan[0][0][i]=temp4;      //短路储存

         duan[0][1][i]=temp5;

         duan[0][2][i]=temp6;

       }

       flag_duan1=0;

       flag_duan2=0;

       flag_duan3=0;

       flag_ok1=0;

       flag_ok2=0;

       flag_ok3=0;

   }

//////////////////////////////////////////////////////////////

    for(i=0;i<8;i++){       //U2--中八路

       P2=0X09;  //377_2使能

       P_IO=temp22;

       temp1=temp22;

       U377_clk=0;

   //  Delay(10);

       U377_clk=1;

   //  Delay(10);

       P2=0X0f;  //377和245清零

       temp22=temp22<<1;

       P2=0X0A;        //377_3使能

       P_IO=0;

       U377_clk=0;  

   //  Delay(10);

       U377_clk=1;

   //  Delay(10);

      P2=0X0f;   //377和245清零

      P2=0X08;        //377_1使能

       P_IO=0;

       U377_clk=0;  

   //  Delay(10);

       U377_clk=1;

   //  Delay(10);

       P2=0X0f;  //377和245清零

       P2=0X0c;  //245_2使能

       U245_DIR=0;//245方向

       P_IO=0XFF;

       temp5=P_IO;

   // Delay(10);

       if((temp5&temp1)==0){    //判断断路

          bre[1][i]=1;     //储存通路

          if(temp5==~temp1){//判断短路

             flag_ok2=1;

              }

           else {

               flag_duan2=1;//duan[0][0][ii]=temp4;    

          }

                 }

       P2=0X0D;  //245_3使能

       U245_DIR=0;//245方向

       P_IO=0XFF;

       temp6=P_IO;

   // Delay(10);

       if(temp6==0xFF){     //判断短路

          flag_ok3=1;  

       }

       else {

          flag_duan3=1;//      duan[0][2][ii]=temp6;

          }

       P2=0X0B;  //245_1使能

       U245_DIR=0;//245方向

       P_IO=0XFF;

       temp4=P_IO;

    // Delay(10);

       if(temp4==0xFF){     //判断短路

          flag_ok1=1;  

       }

       else {

          flag_duan1=1;//      duan[0][2][ii]=temp6;

          }

         if(flag_duan1||flag_duan2||flag_duan3){

         duan[1][0][i]=temp4;  

         duan[1][1][i]=temp5;   //短路储存

         duan[1][2][i]=temp6;

       }

       flag_duan1=0;

       flag_duan2=0;

       flag_duan3=0;

       flag_ok1=0;

       flag_ok2=0;

       flag_ok3=0;

   }

  //////////////////////////////////////////////////////////////

for(i=0;i<8;i++) {   //U3--后八路

       P2=0X0A;  //377_3使能

       P_IO=temp33;

       temp1=temp33;

      U377_clk=0;

   //  Delay(10);

        U377_clk=1;

   //  Delay(10);

       P2=0X0f;  //377和245清零

       temp33=temp33<<1;

       P2=0X09;        //377_2使能

       P_IO=0;

       U377_clk=0;  

//     Delay(10);

       U377_clk=1;

   //  Delay(10);

       P2=0X0f;  //377和245清零

       P2=0X08;        //377_1使能

       P_IO=0;

       U377_clk=0;  

   //  Delay(10);

       U377_clk=1;

   //  Delay(10);

       P2=0X0f;  //377和245清零

       P2=0X0D;  //245_3使能

       U245_DIR=0;//245方向

       P_IO=0XFF;

   //  Delay(10);

       temp6=P_IO;

   //  Delay(10);

      

       if((temp6&temp1)==0){    //判断断路

          bre[2][i]=1;     //储存通路

          if(temp6==~temp1){//判断短路

             flag_ok1=1;

                     } else {

               flag_duan3=1;//duan[0][0][ii]=temp4;    

          }

       }  

       P2=0X0C;  //245_2使能

       U245_DIR=0;//245方向

       P_IO=0XFF;

       temp5=P_IO;

    // Delay(10);

       if(temp5==0xFF){     //判断短路

          flag_ok2=1;  

       }

       else {

          flag_duan2=1;//      duan[0][2][ii]=temp6;

          }

       P2=0X0B;  //245_1使能

       U245_DIR=0;//245方向

       P_IO=0XFF;

       temp4=P_IO;

    // Delay(10);

       if(temp4==0xFF){     //判断短路

          flag_ok1=1;  

       }

       else {

          flag_duan1=1;//      duan[0][2][ii]=temp6;

          }

       if(flag_duan3||flag_duan2||flag_duan1){

         duan[2][0][i]=temp4;

         duan[2][1][i]=temp5;    

         duan[2][2][i]=temp6;   //短路储存

       }

       flag_duan1=0;

       flag_duan2=0;

       flag_duan3=0;

       flag_ok1=0;

       flag_ok2=0;

       flag_ok3=0;

   }

    }

void dsp_send(){  //数组处理及发送显示

uchar i,ii;

for(ii=0;ii<3;ii++){

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

if((duan[ii][0][i]||duan[ii][1][i]||duan[ii][2][i])!=0){

   send(duan[ii][0][i]);    //发送显示   最好这三个在一行

   send(duan[ii][1][i]);

   send(duan[ii][2][i]);

}

 //send(136);    //要换行

 }

}

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

  for(ii=0;ii<8;ii++){

send(bre[i][ii]);//断路情况发送一行

 }

 }

 }

void main(){

 EA=1;//开总中断

 IT0=0;

 IT1=0;

 EX1=1;

 EX0=1;

 RI=0;

 init_chuankou();

  while(1);

    }

////////////////中断服务函数////////////////

void INT1_ISR(void) interrupt 2{   //设置开始

 // counter1++;

  P_SCAN();

  dsp_send();

}

void INT0_ISR(void) interrupt 0{   //设置停止

ET0=0;//关闭定时器0中断

ET1=0;//关闭定时器1中断

PCON=0x02;

 }

void UART_SER (void) interrupt 4 //串行中断服务程序

{

    counter1++;

      if((RI)&&(counter1>1)){        //判断是接收中断产生

       RI=0;            //标志位清零

        P_SCAN();

        dsp_send();

   }

}

更多相关推荐:
系统工程实验报告

实验报告一软件简介Vensim由VentanaInc开发该软件提供了强大的Windows界面下的编辑环境为用户提供友好的图形界面是一种易于使用功能强大的系统动力学仿真平台二用户面简介界面是由工作平台和一系列工具...

南京邮电大学系统工程实验报告

课内实验报告课程名系统工程任课教师专业学号姓名二一二至二一三年度第1学期南京邮电大学经济与管理学院12345678910111213141516

系统工程实验报告

课内实验报告课程名任课教师专业学号姓名二一二至二一三年度第1学期南京邮电大学经济与管理学院

系统工程实验报告

课内实验报告课程名系统工程任课教师专业学号姓名二一一至二一二年度第1学期南京邮电大学经济与管理学院

系统工程仿真实验报告

系统工程仿真实验报告姓名蒋智颖学号110061047成绩实验一基于VENSIM的系统动力学仿真一实验目的VENSIM是一个建模工具可以建立动态系统的概念化的文档化的仿真分析和优化模型PLE个人学习版是VENSI...

大工15秋《道桥工程实验(一)实验报告答案》

姓名赵镇城学习中心福建漳浦奥鹏学习中心18专业道路桥梁工程技术实验一水泥实验一实验目的学习水泥性质的检验方法熟悉水泥的主要技术性质检验水泥是否合格二实验内容第1部分水泥标准稠度用水量凝结时间测定实验仪器设备1水...

大工15秋《水利工程实验(二)》实验报告答案

姓名报名编号学习中心层次专业水利水电工程实验名称土的压缩试验一实验目的通过土的压缩试验得到试样在侧限与轴向排水条件下的孔隙比和压力的关系即压缩曲线ep曲线并以此计算土的压缩系数a12判断土的压缩性为土的沉降变形...

系统工程课内实验报告

课内实验报告课程名系统工程任课教师卢子芳专业学号姓名二一五至二一六年度第1学期南京邮电大学管理学院

系统工程实验报告册123

系统工程实验报告册2020学年第学期班级学号姓名授课教师实验学时信息管理系20xx年9月信息工程实验室实验报告册实验一因子分析一实验目的运用因子分析方法分析数据二内容1SPSS操作2因子分析3案例背景数据及来源...

系统工程实验报告dl

xxxxxxx大学系统工程上机实验报告院系班级学号姓名系统动力实验实验一一阶正反馈简单人口问题实验步骤点击SE软件输入密码Xy进入软件的主界面在软件的主界面中点击仿真分析编辑文件在编辑文件菜单中按住shifte...

系统工程实验

東北農業大學实验报告课程名称系统工程实验课程号实验学期学院班级学号姓名

ERP实验报告 薪资管理系统

ERP实验报告二专业班级学号姓名实验时间3月27日课时数8实验名称薪资系统管理以下内容字体小四单倍行距整篇报告至少5页其中实验总结至少1页一实验目的系统学习薪资系统初始化日常业务处理的主要内容和操作方法要求掌握...

系统工程实验报告(22篇)