<p class="MsoNormal" align="center" style="BACKGROUND: white; MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 19.5pt; TEXT-ALIGN: center; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-outline-level: 3;"><b><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: Arial;">提高<span lang="EN-US">RS485</span>总线通信速度的一种设计<span lang="EN-US"><p></p></span></span></b></p><p class="MsoNormal" align="left" style="BACKGROUND: white; MARGIN: 4.5pt 0cm 9pt; LINE-HEIGHT: 19.5pt; TEXT-ALIGN: left; mso-pagination: widow-orphan;"><b><span style="FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: Arial;"> 引言</span></b><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: Arial;"><p></p></span></p><p class="MsoNormal" align="left" style="BACKGROUND: white; MARGIN: 4.5pt 0cm 9pt; LINE-HEIGHT: 19.5pt; TEXT-ALIGN: left; mso-pagination: widow-orphan;"><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: Arial;"> 工业现场经常要采集多点数据,模拟信号或开关信号,一般用到<span lang="EN-US"><a title="RS485" href="http://article.ednchina.com/word/180131.aspx"><span style="mso-bidi-font-size: 12.0pt;">RS485</span></a></span>总线,使用一主带多从的通信方式,该种方式接线方便只需要两根屏蔽电缆线,通信距离远最大可支持<chmetcnv wst="on" tcsc="0" numbertype="1" negative="False" hasspace="False" sourcevalue="1500" unitname="m"><span lang="EN-US">1500m</span></chmetcnv>,加深圳市天地华杰公司的中继器(<span lang="EN-US">TD-109</span>)还可延长通信距离,采用差分信号方式抗电磁干扰好。但该方式通信速度不能太快,一般采用主从召唤的方式采集各子单元的数据,即主单元依次召唤各子单元<span lang="EN-US">(</span>见图<span lang="EN-US">1)</span>,召唤到哪个单元哪个单元上传数据,总线的使用权完全由主单元分配,各子单元不能擅自占领总线。如果系统的单元多,主单元循环采集一周的时间就很长,子单元信息变化时不能及时发送给主单元,导致系统对突变事件的反应处理速度慢。本文通过总线状态检测、从机主动上发的方式解决。<span lang="EN-US"><p></p></span></span></p><p class="MsoNormal" align="center" style="BACKGROUND: white; MARGIN: 4.5pt 0cm 9pt; LINE-HEIGHT: 19.5pt; TEXT-ALIGN: center; mso-pagination: widow-orphan;"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: Arial;"><shapetype id="_x0000_t75" stroked="f" filled="f" path="m@4@5l@4@11@9@11@9@5xe" opreferrelative="t" ospt="75" coordsize="21600,21600"><stroke joinstyle="miter"></stroke><formulas><f eqn="if lineDrawn pixelLineWidth 0"></f><f eqn="sum @0 1 0"></f><f eqn="sum 0 0 @1"></f><f eqn="prod @2 1 2"></f><f eqn="prod @3 21600 pixelWidth"></f><f eqn="prod @3 21600 pixelHeight"></f><f eqn="sum @0 0 1"></f><f eqn="prod @6 1 2"></f><f eqn="prod @7 21600 pixelWidth"></f><f eqn="sum @8 21600 0"></f><f eqn="prod @7 21600 pixelHeight"></f><f eqn="sum @10 21600 0"></f></formulas><path oconnecttype="rect" gradientshapeok="t" oextrusionok="f"></path><lock aspectratio="t" vext="edit"></lock></shapetype><p></p></span></p><p class="MsoNormal" align="center" style="BACKGROUND: white; MARGIN: 4.5pt 0cm 9pt; LINE-HEIGHT: 19.5pt; TEXT-ALIGN: center; mso-pagination: widow-orphan;"><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: Arial;">图<span lang="EN-US">1 </span>常规<span lang="EN-US">RS485</span>总线主从方式接口图<span lang="EN-US"><p></p></span></span></p><p class="MsoNormal" align="left" style="BACKGROUND: white; MARGIN: 4.5pt 0cm 9pt; LINE-HEIGHT: 19.5pt; TEXT-ALIGN: left; mso-pagination: widow-orphan;"><b><span style="FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: Arial;"> 硬件设计</span></b><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: Arial;"><p></p></span></p><p class="MsoNormal" align="left" style="BACKGROUND: white; MARGIN: 4.5pt 0cm 9pt; LINE-HEIGHT: 19.5pt; TEXT-ALIGN: left; mso-pagination: widow-orphan;"><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: Arial;"> 整个系统由主单元和多个子单元组成<span lang="EN-US">(</span>图<span lang="EN-US">2)</span>,主单元包括:<span lang="EN-US">ARM7</span>微控制器、程序存储器、数据存储器、与子单元通信<span lang="EN-US">RS485</span>、与主单元通信<span lang="EN-US">RS485</span>、系统电源和通信隔离电源;子单元包括:<span lang="EN-US">MSP430</span>单片机、与子单元通信<span lang="EN-US">RS485</span>、系统电源和通信隔离电源。<span lang="EN-US"><p></p></span></span></p><p class="MsoNormal" align="center" style="BACKGROUND: white; MARGIN: 4.5pt 0cm 9pt; LINE-HEIGHT: 19.5pt; TEXT-ALIGN: center; mso-pagination: widow-orphan;"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: Arial;"><p></p></span></p><p class="MsoNormal" align="center" style="BACKGROUND: white; MARGIN: 4.5pt 0cm 9pt; LINE-HEIGHT: 19.5pt; TEXT-ALIGN: center; mso-pagination: widow-orphan;"><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: Arial;">图<span lang="EN-US">2 </span>系统框图<span lang="EN-US"><p></p></span></span></p><p class="MsoNormal" align="left" style="BACKGROUND: white; MARGIN: 4.5pt 0cm 9pt; LINE-HEIGHT: 19.5pt; TEXT-ALIGN: left; mso-pagination: widow-orphan;"><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: Arial;"> </span><b><span style="FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: Arial;"> 主单元</span></b><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: Arial;"><p></p></span></p><p class="MsoNormal" align="left" style="BACKGROUND: white; MARGIN: 4.5pt 0cm 9pt; LINE-HEIGHT: 19.5pt; TEXT-ALIGN: left; mso-pagination: widow-orphan;"><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: Arial;"> <span lang="EN-US">ARM</span>微控制器是主单元的核心,采用三星<span lang="EN-US">32</span>位<span lang="EN-US">ARM7TDMI</span>内核芯片<span lang="EN-US"><a title="S3C44B0" href="http://article.ednchina.com/word/180132.aspx"><span style="mso-bidi-font-size: 12.0pt;">S3C44B0</span></a></span>,该芯片最高处理速度可达<span lang="EN-US">76MHZ</span>,总线开放,可外扩程序存储器<span lang="EN-US">FLASH</span>和数据存储器<span lang="EN-US">SDRAM</span>,该系统外扩了<span lang="EN-US">SST</span>公司生产的<span lang="EN-US">39VF1601</span>和现代生产的<span lang="EN-US">HY57V641620HG</span>,<span lang="EN-US">2</span>个<span lang="EN-US"><a title="UART" href="http://article.ednchina.com/word/180133.aspx"><span style="mso-bidi-font-size: 12.0pt;">UART</span></a></span>串行接口,使用<span lang="EN-US">ADI</span>的隔离<span lang="EN-US">RS485</span>芯片<span lang="EN-US">ADM2483</span>进行接口电平转换,总线状态检测使用<span lang="EN-US">74HC125</span>三态门芯片。<span lang="EN-US"><p></p></span></span></p><p class="MsoNormal" align="left" style="BACKGROUND: white; MARGIN: 4.5pt 0cm 9pt; LINE-HEIGHT: 19.5pt; TEXT-ALIGN: left; mso-pagination: widow-orphan;"><b><span style="FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: Arial;"> 子单元</span></b><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: Arial;"><p></p></span></p><p class="MsoNormal" align="left" style="BACKGROUND: white; MARGIN: 4.5pt 0cm 9pt; LINE-HEIGHT: 19.5pt; TEXT-ALIGN: left; mso-pagination: widow-orphan;"><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: Arial;"> 子单元的微控制器使用<span lang="EN-US">TI</span>的<span lang="EN-US">MSP<chmetcnv wst="on" tcsc="0" numbertype="1" negative="False" hasspace="False" sourcevalue="430" unitname="F">430F</chmetcnv>133</span>单片机,该单片机处理速度可达<span lang="EN-US">8MHz</span>,<span lang="EN-US">8K</span>字节片内<span lang="EN-US">FLASH</span>存储,<span lang="EN-US">256K</span>字节片内<span lang="EN-US">SRAM</span>。<span lang="EN-US"><p></p></span></span></p><p class="MsoNormal" align="left" style="BACKGROUND: white; MARGIN: 4.5pt 0cm 9pt; LINE-HEIGHT: 19.5pt; TEXT-ALIGN: left; mso-pagination: widow-orphan;"><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: Arial;"> </span><b><span style="FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: Arial;"> 电源电路</span></b><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: Arial;"><p></p></span></p><p class="MsoNormal" align="left" style="BACKGROUND: white; MARGIN: 4.5pt 0cm 9pt; LINE-HEIGHT: 19.5pt; TEXT-ALIGN: left; mso-pagination: widow-orphan;"><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: Arial;"> 电源电路采用开关电源供电,开关电源输入电压范围比较宽,输出直流电压<span lang="EN-US">5V</span>,通过<span lang="EN-US">SP1117-3.3</span>和<span lang="EN-US">SP1117-2.5</span>芯片输出<span lang="EN-US">3.3V</span>电源。<span lang="EN-US">RS485</span>需要的隔离<span lang="EN-US">5V</span>电源通过<span lang="EN-US">DC-DC</span>模块得到。<span lang="EN-US"><p></p></span></span></p><p class="MsoNormal" align="left" style="BACKGROUND: white; MARGIN: 4.5pt 0cm 9pt; LINE-HEIGHT: 19.5pt; TEXT-ALIGN: left; mso-pagination: widow-orphan;"><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: Arial;"> </span><b><span style="FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: Arial;"> 总线检测电路</span></b><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: Arial;"><p></p></span></p><p class="MsoNormal" align="left" style="BACKGROUND: white; MARGIN: 4.5pt 0cm 9pt; LINE-HEIGHT: 19.5pt; TEXT-ALIGN: left; mso-pagination: widow-orphan;"><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: Arial;"> 总线状态检测使用<span lang="EN-US">74HC125</span>三态门芯片和单片机的两个<span lang="EN-US">I/O(</span>图<span lang="EN-US">3)</span>,当系统都不使用总线时,每个单元的<span lang="EN-US">74HC125</span>都输出高阻状态,此时总线为低电平,当有单元要使用总线时,他首先检测总线状态,如果总线为低电平,该单元迅速把<span lang="EN-US">74HC125</span>改为输出状态,此时总线变为高电平,该单元占领总线,往总线上发送数据,发送数据完成再把<span lang="EN-US">74HC125</span>改为高阻状态。如果检测到总线是高电平,等待检测,直到总线变低后再占领总线。<span lang="EN-US"><p></p></span></span></p><p class="MsoNormal" align="center" style="BACKGROUND: white; MARGIN: 4.5pt 0cm 9pt; LINE-HEIGHT: 19.5pt; TEXT-ALIGN: center; mso-pagination: widow-orphan;"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: Arial;"><p></p></span></p><p class="MsoNormal" align="center" style="BACKGROUND: white; MARGIN: 4.5pt 0cm 9pt; LINE-HEIGHT: 19.5pt; TEXT-ALIGN: center; mso-pagination: widow-orphan;"><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: Arial;">图<span lang="EN-US">3 </span>总线检测电路<span lang="EN-US"><p></p></span></span></p><p class="MsoNormal" align="left" style="BACKGROUND: white; MARGIN: 4.5pt 0cm 9pt; LINE-HEIGHT: 19.5pt; TEXT-ALIGN: left; mso-pagination: widow-orphan;"><b><span style="FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: Arial;"> 隔离<span lang="EN-US">485</span>电路</span></b><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: Arial;"><p></p></span></p><p class="MsoNormal" align="left" style="BACKGROUND: white; MARGIN: 4.5pt 0cm 9pt; LINE-HEIGHT: 19.5pt; TEXT-ALIGN: left; mso-pagination: widow-orphan;"><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: Arial;"> 使用<span lang="EN-US">ADI</span>的<span lang="EN-US">ADM2483</span>芯片进行接口电平转换<span lang="EN-US">(</span>图<span lang="EN-US">4)</span>,该芯片属于隔离<span lang="EN-US">485</span>,双电源供电输入输出隔离。<span lang="EN-US"><p></p></span></span></p><p class="MsoNormal" align="center" style="BACKGROUND: white; MARGIN: 4.5pt 0cm 9pt; LINE-HEIGHT: 19.5pt; TEXT-ALIGN: center; mso-pagination: widow-orphan;"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: Arial;"><p></p></span></p><p class="MsoNormal" align="center" style="BACKGROUND: white; MARGIN: 4.5pt 0cm 9pt; LINE-HEIGHT: 19.5pt; TEXT-ALIGN: center; mso-pagination: widow-orphan;"><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: Arial;">图<span lang="EN-US">4 </span>隔离<span lang="EN-US">485</span>电路<span lang="EN-US"><p></p></span></span></p><p class="MsoNormal" align="left" style="BACKGROUND: white; MARGIN: 4.5pt 0cm 9pt; LINE-HEIGHT: 19.5pt; TEXT-ALIGN: left; mso-pagination: widow-orphan;"><b><span style="FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: Arial;"> 软件设计</span></b><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: Arial;"><p></p></span></p><p class="MsoNormal" align="left" style="BACKGROUND: white; MARGIN: 4.5pt 0cm 9pt; LINE-HEIGHT: 19.5pt; TEXT-ALIGN: left; mso-pagination: widow-orphan;"><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: Arial;"> 主机程序部分需要实现各从机上传数据的接收、处理和上传。主机接收子单元信息通过一个<span lang="EN-US">RS485</span>串口实现,数据格式为<span lang="EN-US">16</span>进制,数据位<span lang="EN-US">8</span>位,<span lang="EN-US">1 </span>个起始位,<span lang="EN-US">1</span>个结束位,无寄偶校验位,波特率<span lang="EN-US">9600bps</span>。采用串行口中断的方式接收,主机程序初始化完成后等待各从机发送信息,当主机接收到第一个字节后,判断该字节是否为设备号,如果不是设备号,接收个数清零,如果是设备号继续接收第二个字节;判定第二个字节是否为正确的功能码,如果功能码错误,接收个数清零重新接收,功能码正确;接收第三个字节,该字节为从单元发送信息的字节个数<span lang="EN-US">x</span>,计算从单元发送总字节个数为<span lang="EN-US">M=X+3+2,3</span>个开头字节和<span lang="EN-US">2</span>个<span lang="EN-US"> CRC</span>校验码,主机接收到<span lang="EN-US">M</span>个字节后,首先判断<span lang="EN-US">CRC</span>校验码是否正确,错误舍弃所有信息,正确则把从单元的信息保存到数据区,该次接收结束,主机继续等待接收。<span lang="EN-US"><p></p></span></span></p><p class="MsoNormal" align="left" style="BACKGROUND: white; MARGIN: 0cm 0cm 9pt; LINE-HEIGHT: 19.5pt; TEXT-ALIGN: left; mso-pagination: widow-orphan;"><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: Arial;">信息的上传通过一个<span lang="EN-US">RS232</span>串口实现。当主机接收到从机信息后,进行数据的处理,发现从单元信息发生变化,主机准备把从机信息发送到上位机,首先重新初始化发送缓冲区,然后通过中断的方式依次发送信息到上位机,发送信息包括设备号、功能码、发送字节个数、信息字节和<span lang="EN-US">CRC</span>校验码。<span lang="EN-US"><p></p></span></span></p><p class="MsoNormal" align="left" style="BACKGROUND: white; MARGIN: 4.5pt 0cm 9pt; LINE-HEIGHT: 19.5pt; TEXT-ALIGN: left; mso-pagination: widow-orphan;"><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: Arial;"> 主机单元接收数据流程图示于图<span lang="EN-US">5</span>。<span lang="EN-US"><p></p></span></span></p><p class="MsoNormal" align="center" style="BACKGROUND: white; MARGIN: 4.5pt 0cm 9pt; LINE-HEIGHT: 19.5pt; TEXT-ALIGN: center; mso-pagination: widow-orphan;"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: Arial;"><p></p></span></p><p class="MsoNormal" align="center" style="BACKGROUND: white; MARGIN: 4.5pt 0cm 9pt; LINE-HEIGHT: 19.5pt; TEXT-ALIGN: center; mso-pagination: widow-orphan;"><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: Arial;">图<span lang="EN-US">5 </span>程序流程图<span lang="EN-US"><p></p></span></span></p><p class="MsoNormal" align="left" style="BACKGROUND: white; MARGIN: 4.5pt 0cm 9pt; LINE-HEIGHT: 19.5pt; TEXT-ALIGN: left; mso-pagination: widow-orphan;"><b><span style="FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: Arial;"> 结语</span></b><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: Arial;"><p></p></span></p><p class="MsoNormal" align="left" style="BACKGROUND: white; MARGIN: 4.5pt 0cm 9pt; LINE-HEIGHT: 19.5pt; TEXT-ALIGN: left; mso-pagination: widow-orphan;"><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: Arial;"> 徐龙辉所设计的系统实现了开关信号的多点监测,一个主机单元,<span lang="EN-US">32</span>个从机单元,每个从机单元监测<span lang="EN-US">32</span>个开关,该系统共可监测<span lang="EN-US">1024</span>个开关,使用<span lang="EN-US"> 9600bps</span>的波特率。采用主从召换的方式,开关信号监测的反应时间一般要用<span lang="EN-US">20-30s</span>,使用该种总线检测的方式,开关信号的反应速度最慢也不超过<span lang="EN-US"> 1s</span>,快时只有几百<span lang="EN-US">ms</span>,大大提高反应时间,并且由于不用时时召唤,总线数据流少,提高了总线的稳定性。<span lang="EN-US"><p></p></span></span></p> |
|