您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 串口通信电平转换实验报告
课程实验报告一实验名称:串口232电平转换电路设计与软件实现课程名称:现场总线技术一、实验目的及要求:实现两台电脑的RS232通过RS485接口协议的通信1、熟悉串口结构及参数指标2、熟悉芯片的内部结构,工作机制3、完成电路原理图的绘制及具体实验板的焊接,并调试成功4、编写串口驱动程序,要有基本的数据收发及参数设置功能5、最后软件与硬件连调,实现两台电脑的半双工通信二、实验器件及调试实现环境:器件型号数量MAX232芯片2个MAX485芯片2个串口母口2个三极管s90142个电阻、电容、插针、插座若干个基本电路焊接工具焊锡丝、烙铁电路测试设备电源、万用表开发平台三星笔记本XP系统软件开发环境MicrosoftVisualStudio2010测试工具VSPD虚拟串口串口调试助手三、实验原理介绍:要实现两台电脑的RS232通过RS485接口协议实现远距离通信,这就要求发送端,首先通过芯片MAX232完成对RS232串口输出信号(正负电压)的电平转化(-5v~-15v转换为5v,+5v~+15v转换为0v),使之符合MAX485收发器对输入信号(高低电平)的要求后,由MAX485收发器将TTL信号通过两线差分平衡传输出去;接收端同样先由MAX485将TTL信号接收下来,再经MAX232将TTL信号转换为正负电压后传给RS232,以实现两台电脑通过RS485接口协议通信。四、硬件设计:DB9形式的RS-232串口的定义:引脚英文简写功能说明1CD载波侦测(DataCarrierDetect)2RXD接收数据(ReceiveData)3TXD发送数据(TransmitData)4DTR数据终端准备(DataTerminalReady)5GND信号地(SignalGround)6DSR数据准备好(DataSetReady)7RTS请求发送(RequestToSend)8CTS清除发送(ClearToSend)9RI振铃指示(RingIndicator)硬件包括三部分:电源,232电平转换,485信号收发电路。电源部分:采用外部晶体管稳压双电源供电。232电平转换电路:首先MAX232是电荷泵芯片,它是美信(MAXIM)公司专为RS232标准串口设计的单电源电平转换芯片,使用+5v单电源供电。第一部分是电荷泵电路。由1、2、3、4、5、6脚和4只电容构成。功能是产生+12v和-12v两个电源,提供给RS-232串口电平的需要。第二部分是数据转换通道。由7、8、9、10、11、12、13、14脚构成两个数据通道。其中13脚(R1IN)、12脚(R1OUT)、11脚(T1IN)、14脚(T1OUT)为第一数据通道。8脚(R2IN)、9脚(R2OUT)、10脚(T2IN)、7脚(T2OUT)为第二数据通道。TTL/CMOS数据从T1IN、T2IN输入转换成RS-232数据从T1OUT、T2OUT送到电脑DB9插头;DB9插头的RS-232数据从R1IN、R2IN输入转换成TTL/CMOS数据后从R1OUT、R2OUT输出。第三部分是供电。15脚GND、16脚VCC(+5v)。485信号收发电路:采用单一电源+5V工作,额定电流为300μA,采用半双工通讯方式。它完成将TTL电平转换为RS-485电平的功能。MAX485芯片的结构和引脚都非常简单,内部含有一个驱动器和接收器,以完成数据的发送与接收。RS-485接口是采用平衡驱动器和差分接收器的组合,抗共模干能力增强,即抗噪声干扰性好。RO和DI端分别为接收器的输出和驱动器的输入端,与RS232连接时只需分别与RS232的2端和3端相连即可。/RE和DE端分别为接收和发送的使能端,当/RE为逻辑0时,器件处于接收状态;当DE为逻辑1时,器件处于发送状态,因为MAX485工作在半双工状态,所以只需用一个控制信号就可以同时控制这两个引脚。A端和B端分别为接收和发送的差分信号端,当A引脚的电平高于B时,代表发送的数据为1;当A的电平低于B端时,代表发送的数据为0。将A和B端之间加匹配电阻,一般可选150Ω的电阻。加入终端匹配电阻是因为,RS485接口协议是差分平衡传输,通过增大负载而降低信号的回波反射,这是一种被动的阻抗匹配。关于本电路的设计总体来说,首先将实验要求的实现基本通信所涉及的基本端口:2端,3端,4端,5端经MAX232电平转换成TTL信号之后,由MAX485控制2端,3端的数据收发;由于MAX485是半双工的工作方式,所以我们可以将其两个使能端口短接,并通过使用一个控制信号,就可以控制整个芯片的工作模式,4端的信号即是用来作为MAX485的工作模式选择信号;通信数据就从MAX485上的两个差分平衡端,经120Ω的匹配电阻消除信号的回波反射之后,将数据传至接收方实现数据通信。这里需要强调的是,MAX485的二线差分平衡传输接口,除了有逻辑“0”和“1”,还有第三态,即“高阻态”。这样的接口模式可消除电路中的共模干扰,使电路不受节点间接地电平差异的影响,可实现“一点对多点的传输模式”。电路中控制信号流向图如下:DTRMAX2329014MAX485控制端正电压负电压程序TRUEFALSE0V5V5V0V五、软件设计:串口的驱动程序,很多编程语言如:VC,VB,C#,Delphi…都可以实现;无论使用哪种语言,主要有三种方法实现串口通讯,利用windows的通讯空间MSCOMM,serialPorts以及通过调用windowsAPI函数都可以实现串口通讯,并且他们已经实现事件驱动模块化,方便使用,易于实现。总体来说前两种简单,第三种方法,要求使用者对windowsAPI函数有升入的了解。综合考虑之后,为了便于程序的打包安装以及自身水平的考虑,本实验选择第二种方法,因为本实验的串口驱动是基于MicrosoftVisualStudio2010环境下开发的VB程序。VS2010的用户库中没有自带安装MSCOMM控件,虽说可以下载安装上vc6.0的MSCOMM控件,但不便于打包应用程序。开始编写软件的时候,真的遇到了很多困难,虽说VB编程简单,但我以前从未接触过VB语言;先是在网络上看了很多的例子但都没完整的实例,但大致的程序框架是对的,这样之后我就开始设计用户界面,主要也是对程序大致要实现的功能做个初步的规划,当然这也是一个不断调整的过程,最后调试出来的界面如上图所示,可在界面上设置端口号,波特率,其他的诸如停止位,数据位,校验位,大家基本上是一样的设置,所以就在程序里固定设置好了,打开程序之后,应用程序会自动完成对串口的初始化,自动获取可用的端口号,并会做出相应的提示,这个时候串口的状态的显示“串口未连接”,带点击“串口连接”按钮后,若成功连接,这是串口状态也会做出相应的提示,绿色字体显示状态,如下图所示,这时串口就处于工作状态,中断接收数据,两种发送数据模式,考虑到MAX485只能实现半双工通信,所以在发送数据的时候就使能DTR“数据终端准备好”,其他时候都关闭DTR;基本上程序都已模块化,有端口设置模块,发送数据模块。一旦相应的事件按钮得以触发,就会调用对应的子函数。软件流程如下:添加系统资源扫描可用端口配置串口参数,连接串口中断接收数据,有数据到来?发送数据?接收数据并显示单步发送使能DRT=true,并调用发送子函数将数据发送出去。连续数据,每一秒发送一次判断发送区是不是非空?关闭串口是否清空接收区?接收数据长度刷新是否更换端口?否是发送数据函数调用返回后,DRT=false六、附录'添加要使用的资源ImportsSystemImportsSystem.IO.PortsImportsSystem.ThreadingImportsSystem.Windows.FormsPublicClassForm1PrivateSubForm1_Load(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesMyBase.LoadCallrefreshports()'调用自定义函数获取计算机的有效串口'初始化界面baudratebox.SelectedIndex()=2Ifportnamebox.Items.Count=0ThenMessageBox.Show(当前没有可使用的串口资源!)ExitSubEndIfportnamebox.SelectedIndex()=0'portnamebox.Text=portnamebox.Items(0)'baudratebox.Text=baudratebox.Items(2)'初始化串口CallSerial_Port1()statuslabel.Text=串口未连接statuslabel.ForeColor=Color.RedEndSub'设置串口参数PrivateSubSerial_Port1()SerialPort1.BaudRate=Val(baudratebox.Text)'波特率SerialPort1.PortName=portnamebox.Text'串口名称SerialPort1.DataBits=8'数据位SerialPort1.StopBits=IO.Ports.StopBits.One'停止位SerialPort1.Parity=IO.Ports.Parity.None'校验位EndSub'获取计算机有效串口PublicFunctionrefreshports()AsStringportnamebox.Items.Clear()DimportsAsString()=SerialPort.GetPortNames()'必须用命名空间,用SerialPort,获取计算机的有效串口DimportAsStringForEachportInportsportnamebox.Items.Add(port)'向combobox中逐个添加项Next(port)Returnportnamebox.TextEndFunction'向串口发送数据PublicFunctionsenddatas()AsStringTryCalllong_send_Checked()'判断是否符合发送条件'半双工模式,接收数据常开SerialPort1.DtrEnable=True'数据终端准备好,主机向从机发送数据SerialPort1.Write(sendbox.Text)CatchexAsExceptionMessageBox.Show(ex.Message)EndTryReturnNothingEndFunction'当启用连续发送时,判断发送区是否为空PrivateSublong_send_Checked()Iflong_send.Checked=TrueThenIfSerialPort1.IsOpen=FalseThenlong_send.Checked=False'串口未连接,不能连续发送数据MessageBox.Show(串口未连接,请连接串口!)ExitSubEndIfIfsendbox.Text=Thenlong_send.Checked=False'若发送区为空,则long_send,即连续发送取消勾选MessageBox.Show(发送区不能为空!)ExitSubEndIfEndIfEndSub'关闭串口连接PrivateSubclosebtn_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)Handlesclosebtn.ClickTrySerialPort1.Close()'关闭串口IfSerialPort1.IsOpen=FalseThenstatuslabel.Text=串口连接已断开statuslabel.ForeColor=Color.RedSerialPort1.DtrEnable=False'数据终端准备好失效,主机处于接收数据状态receivebox.Text='清空接收区内容receivebits
本文标题:串口通信电平转换实验报告
链接地址:https://www.777doc.com/doc-2726415 .html