<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          關(guān) 閉

          新聞中心

          EEPW首頁 > 工控自動化 > 設(shè)計(jì)應(yīng)用 > 基于TMS320F2812集中供電系統(tǒng)的串口通信設(shè)計(jì)

          基于TMS320F2812集中供電系統(tǒng)的串口通信設(shè)計(jì)

          作者: 時間:2008-01-10 來源:網(wǎng)絡(luò) 收藏
          引言

          集中供電系統(tǒng)是電量的自動計(jì)量及管理的發(fā)展趨勢,它將促進(jìn)電力系統(tǒng)的潛能得到最大限度的發(fā)揮。

          本集中供電系統(tǒng)利用RS-485通信,網(wǎng)絡(luò)應(yīng)用計(jì)算機(jī)、通信技術(shù)等,以DSP為核心、將智能計(jì)量與通信控制單元有機(jī)結(jié)合起來。

          320串行通信接口概述

          320串行通信接口(SCI)是一個雙線通信異步串行通信接口,為減少串口通信時CPU的開銷,的串口支持16級接收和發(fā)送FIFO。串行通信接口支持與CPU以及其他使用費(fèi)歸零格式的異步外設(shè)之間的異步串行數(shù)字通信,它的接收器和發(fā)送器都是雙級緩沖器,有各自獨(dú)立的控制位與中斷位,都可以同時工作在全雙工模式下,為保證數(shù)據(jù)的完整性,串行通信接口對接收的數(shù)據(jù)進(jìn)行間斷檢測、奇偶性、超時和幀錯誤檢查。串行通信接口可以通過16位的波特率選擇寄存器,設(shè)置多達(dá)65000種通信速度,2812的SCI和以往的DSP的SCI相比具有兩個特點(diǎn):一是傳送、接收都具有獨(dú)立的FIFO;二是波特率可以自動檢測。

          集中供電系統(tǒng)串行通信硬件設(shè)計(jì)

          本文提出了一種以RS-485協(xié)議為基礎(chǔ),作為網(wǎng)絡(luò)信息控制中心的PC為上位機(jī),采用TMS2812為下位機(jī)的集中供電系統(tǒng),F(xiàn)2812負(fù)責(zé)采集實(shí)時數(shù)據(jù),然后通過串行口,再經(jīng)過RS-485接口實(shí)現(xiàn)電平轉(zhuǎn)換,將數(shù)據(jù)上傳給控制中心的上位機(jī),上位機(jī)負(fù)責(zé)數(shù)據(jù)的處理,如圖1所示。

          RS-232在現(xiàn)代網(wǎng)絡(luò)通信中已暴露出數(shù)據(jù)傳輸速度慢、傳輸距離短、接口處各信號間容易產(chǎn)生干擾等缺點(diǎn)。由于一般PC上提供的是標(biāo)準(zhǔn)的RS-232(串行接口)。因此,需要RS-232C/RS-485轉(zhuǎn)換器進(jìn)行接口轉(zhuǎn)換。本系統(tǒng)用瑞賽特8520將RS-232信號轉(zhuǎn)換成隔離的RS-485信號,無需改變PC的任何硬件和軟件。RS-485接口采用的是差分傳輸方式,具有一定的抗共模干擾能力,但當(dāng)共模電壓超過RS-285接收器的極限接收電壓,即大于+12V或小于-7V時,接收器就再也無法正常工作了,嚴(yán)重是甚至?xí)龤酒蛢x器設(shè)備,因此,采用光電隔離器件是一種簡單而有效的辦法。

          本系統(tǒng)采用MAX485完成RS485標(biāo)準(zhǔn)接口通信,MAX485是一種差分平衡型收發(fā)器,它采用單一電源+5V工作,額定電流為300μA,采用半雙工通信方式,它完成將TTL電平轉(zhuǎn)換為RS-485電平的功能,內(nèi)部含有一個驅(qū)動器和接收器,驅(qū)動器有過載保護(hù)功能,RO和DI端分別為接收器的輸出和驅(qū)動器的輸入端,連接時只需分別與TMS2812的SCIRXD和SCITXD相連即可,/RE和DE端分別為接收和發(fā)送的使能端,當(dāng)/RE為邏輯0時,器件處于接收狀態(tài),當(dāng)DE為邏輯1時,器件處于發(fā)送狀態(tài),因?yàn)镸AX485工作在半雙工狀態(tài),所以只需要TMS320F2812的一個引腳控制這兩個引腳即可:A端和B端分別為接收和發(fā)送的差分信號端,當(dāng)A引腳的電平高于B時,代表發(fā)送的數(shù)據(jù)為1;當(dāng)A的電平低于B端時,代表發(fā)送的數(shù)據(jù)為0,在與TMS320F2812連接時,接線非常簡單,只需要一個信號控制MAX485的接收和發(fā)送即可,同時在A和B端之間加匹配電阻,一般可選100歐姆的電阻。

          通信協(xié)議

          保證PC與多個TMS320F2812的成功通信,通信雙方除了要規(guī)定字符格式和波特率外,還要有一系列的約定,即要定義好軟件通信協(xié)議。例如,作為發(fā)送方,必須知道什么時候發(fā)送信息,發(fā)什么,對方是否收到,收到的內(nèi)容有沒有錯,要不要重發(fā),怎樣通知對方結(jié)束等,作為接收方,必須知道對方是否發(fā)送了信息,發(fā)的是什么,收到的信息是否有錯,如果有錯怎樣通知重發(fā),怎樣判斷結(jié)束等。

          PC與TMS320F2812間的通信協(xié)議如下:

          (1)通信雙方的串行波特率為9600bps;

          (2)幀格式:8位數(shù)據(jù)位,1位停止位,無奇偶校驗(yàn);

          (3)傳送方式:PC采用查詢方式收發(fā)數(shù)據(jù),TMS320F2812采用中斷方式收發(fā)數(shù)據(jù)。

          (4)握手方式:采用軟件握手。

          集中供電系統(tǒng)通信軟件設(shè)計(jì)

          TMS320F2812的較強(qiáng)的串行通信能力。本設(shè)計(jì)中,發(fā)送數(shù)據(jù)采用的是查詢方式,接收數(shù)據(jù)采用的是中斷方式。當(dāng)上轉(zhuǎn)數(shù)據(jù)時,在中斷程序或其他的子程序中置發(fā)送標(biāo)志位,在主程序中查詢該標(biāo)志,如成立則發(fā)送數(shù)據(jù),否則跳過發(fā)送程序,執(zhí)行其他的程序,在中斷方式下,DSP啟動串行口后就不再詢問它的狀態(tài)了,依然執(zhí)行自己的程序,實(shí)現(xiàn)DSP與串行口的并行工作。當(dāng)串行口產(chǎn)生中斷時,先向DSP申請中斷,DSP響應(yīng)中斷后就暫時中斷自己的程序,執(zhí)行相應(yīng)的串口中斷服務(wù)程序,執(zhí)行完后又返回主程序,它能使信息得到及時處理。

          軟件采用C語言編程

          在程序的開始應(yīng)先對其中一些寄存器進(jìn)行初始化。相關(guān)的源程序不在此贅述了。

          數(shù)據(jù)的接收和發(fā)送程序

          在本系統(tǒng)中,從機(jī)的主要任務(wù)是對被檢測設(shè)備進(jìn)行故障檢測和故障定位,通信軟件的主要功能是接收主機(jī)的命令,并將檢測的結(jié)果回送主機(jī)。數(shù)據(jù)的接收和發(fā)送流程如圖2所示。

          結(jié)語

          本通信方案已應(yīng)用于某校的集中供電系統(tǒng),結(jié)果表明是可行的,能有效地實(shí)現(xiàn)PC和DSP在惡劣條件下基于RS-485的串行通信,實(shí)現(xiàn)了對用電管理的全程自動控制。



          關(guān)鍵詞: F2812 2812 320F TMS

          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();