DSP與單片機(jī)通訊方式解析方案
1 引 言
隨著計(jì)算機(jī)系統(tǒng)、通訊設(shè)備的迅猛發(fā)展,不間斷電源UPS(uninterruptible power supply)的應(yīng)用范圍越來(lái)越廣。銀行、證券、通信基站等等對(duì)于UPS的需求量也是與日俱增。本文主要介紹200KVAUPS中的DSP[1]與單片機(jī)的兩種串行通訊方式,實(shí)驗(yàn)證明:兩種通訊方式均可以使DSP和單片機(jī)順利通訊,并且使得算法控制和監(jiān)控順利實(shí)現(xiàn),均是行之有效的DSP與單片機(jī)的通訊方式。
目前,高速數(shù)字信號(hào)處理器(DSP,digital signal processor)
已經(jīng)廣泛應(yīng)用于工業(yè)控制,電機(jī)控制,航天宇航控制等諸多復(fù)雜控制系統(tǒng)中。在電力電子領(lǐng)域,由于各種開(kāi)關(guān)功率器件開(kāi)關(guān)頻率越來(lái)越高,開(kāi)關(guān)損耗越來(lái)越小,所以普通的8位單片機(jī)并不能滿足要求,TI公司的TMS320F240系列單片機(jī)因其具有快速的處理能力在大功率開(kāi)關(guān)管控制方面已經(jīng)得到實(shí)踐認(rèn)可,并在諸多復(fù)雜控制檢測(cè)系統(tǒng)中起到核心作用[4]。由于本系統(tǒng)中PFC整流電路以及逆變電路算法復(fù)雜,加之比較繁瑣的邏輯順序,所以分別需要一塊DSP對(duì)其進(jìn)行控制。如果將監(jiān)控程序加入DSP中,鍵盤顯示以及數(shù)據(jù)存儲(chǔ)速度勢(shì)必要加入等待周期,同時(shí)會(huì)影響CPU的處理速度。所以,現(xiàn)大都采用另加一塊單片機(jī)對(duì)其進(jìn)行監(jiān)控、鍵盤顯示、以及一些重要數(shù)據(jù)的備份。因此,在數(shù)字化UPS中串行通訊也顯得猶為重要。
2 MCS51單片機(jī)和TMS320F240的串行通訊
MCS51系列單片機(jī)內(nèi)部具有一個(gè)全雙工串行口,該串行口有四種工作方式,可以利用軟件進(jìn)行設(shè)置,由片內(nèi)定時(shí)/計(jì)數(shù)器產(chǎn)生。串行口的接收發(fā)送數(shù)據(jù)均可以觸發(fā)中斷,并含有接收、發(fā)送緩沖器SBUF,兩個(gè)緩沖器共用一個(gè)字節(jié)地址。串行口是可編程的接口,對(duì)它的初始化只用兩個(gè)控制字分別寫(xiě)入特殊功能寄存器SCON和電源控制寄存器PCON中即可。
TMS320F240中的串行外設(shè)接口(SPI)模塊,是一個(gè)高速、同步串行I/O口,它允許長(zhǎng)度可編程的串行位流(1~8)位以可編程的位傳輸速度移入或移出器件。數(shù)據(jù)的傳輸需要三條線,即時(shí)鐘、發(fā)送和接收。串行通訊接口(SCI)模塊支持CPU和使用NRZ(Nonreturn-to-zero)的異步通訊設(shè)備之間的通訊,跟SPI不同的是SCI僅僅需要兩個(gè)I/O口進(jìn)行數(shù)據(jù)傳輸,即發(fā)送端和接收端,所以在外圍硬件電路設(shè)計(jì)方面更容易實(shí)現(xiàn)。雖然外圍電路設(shè)計(jì)簡(jiǎn)單可行,但是SCI數(shù)據(jù)傳輸?shù)乃俣容^SPI要差很多,因?yàn)镾PI具有的時(shí)鐘線可以使得兩塊芯片達(dá)到真正意義上的同步,而通過(guò)SCI連接的兩塊芯片各自有自己的時(shí)鐘,這就使得傳輸速度受到影響(最高可達(dá)64kb/s),有些應(yīng)用場(chǎng)所在傳輸距離很短(15m以內(nèi))的情況下通常使用較為容易實(shí)現(xiàn)的SCI異步串行通訊。但對(duì)傳輸速率要求較高,或傳輸距離要求較長(zhǎng)的情況下通常使用SPI(1.2km,10Mb/s) 同步串行通訊。故雖本系統(tǒng)才用SCI進(jìn)行通訊,同時(shí)給出SPI設(shè)計(jì)方法,通過(guò)對(duì)照比較達(dá)到靈活運(yùn)用DSP串行通訊接口的效果。
3 SCI接口實(shí)現(xiàn)DSP與單片機(jī)的串行通訊
在利用SCI連接外圍芯片的時(shí)候通常需要外加接口芯片,常用的有MAXIUM公司的MAX232A和MAX485[3]等等。本文給出SCI經(jīng)由MAX232A與單片機(jī)相連的,如圖1所示:
圖1 利用SCI實(shí)現(xiàn)的單片機(jī)與DSP通訊原理圖
MAX232A由監(jiān)控板上的普通+5V電壓供電,內(nèi)部有一個(gè)電子槳電壓變換器,可以把輸入的+5V電源電壓變換成RS232C通訊的 10V電壓。這種芯片內(nèi)部含有兩個(gè)發(fā)送器和兩個(gè)接收器,能夠滿足雙工發(fā)送器/接收器的電氣規(guī)范。并且此芯片可以完成RS232C電平到TTL/CMOS電平的轉(zhuǎn)換。
3.1 初始化設(shè)置
在異步通訊中必須先規(guī)定兩件事:一是字符格式,即規(guī)定每一陣數(shù)據(jù)的格式,二是采用波特率及時(shí)鐘頻率和波特率的關(guān)系。這些規(guī)定是通過(guò)初始化設(shè)置與串行通訊有關(guān)的寄存器來(lái)實(shí)現(xiàn)的。在TMS320F240中本系統(tǒng)中SYSCLK=24MHz,現(xiàn)選擇波特率為9600bps進(jìn)行RS-232通信,確定波特率選擇寄存器的值BRR方法如下:
當(dāng)BRR=1到65535時(shí)的串行通信接口異步波特率為:SCI異步波特率=SYSCLK/[(BRR+1) 8]其中BRR=SYSCLK/(SCI異步波特率 8)-1
當(dāng) BRR=0時(shí)的串行通信接口異步波特率為:SCI異步波特率=SYSCLK/16這里的BRR等于波特率選擇寄存器的16位值
根據(jù)上面公式計(jì)算得BRR=24 10 /(9600 8)-1=311.5 138H所以波特率選擇寄存器設(shè)置為SCIHBAUD=01H,SCILBAUD=38H
[!--empirenews.page--]
TMS320F240初始化程序如下:
LDP #00E0H 頁(yè)地址指針設(shè)置
SPLK #0017H,SCICCR;設(shè)定通訊格式每幀10數(shù)據(jù)
SPLK #0013H,SCICTL1;使能TX,RX
SPLK #0000H,SCICTL2;禁止RXINT,TXINT中斷
SPLK #0001H,SCIHBAUD;波特率設(shè)定為9600bit/s
SPLK #0038H,SCILBAUD;
SPLK #0033H,SCICTL1;使能SCI
MCS51單片機(jī)的特殊功能寄存器SCON定義了串行通信的方式選擇、接收和發(fā)送控制以及串行口的狀態(tài)標(biāo)志等。初始化中將其設(shè)置成串口方式1,接收允許狀態(tài)。串口方式1收發(fā)的數(shù)據(jù)格式為1位起始位,8位數(shù)據(jù)位,1位停止位。SCON中的TI,RI位在初始化中置0,在發(fā)送、接收完一幀數(shù)據(jù),硬件自動(dòng)將其置1,中斷被響應(yīng)后,TI、Ri不會(huì)自動(dòng)清0,必須由軟件清0。其串行通信波特率由定時(shí)器T1溢出率獲得,
[!--empirenews.page--]
設(shè)定初始值為:(TH1)=(TL1)=0FCH。則MCS51單片機(jī)初始化程序如下:
MOV TMOD,#20H;T1工作于模式2
MOV TH1,#FCH;
MOV TL1,#FCH;賦計(jì)數(shù)初值,波特率為9600bit/s
MOV SCON,#50H;置串口方式1,每幀10數(shù)據(jù),允許接收
MOV PCON,#80H;設(shè)SMOD=1
SETB TR1啟動(dòng)定時(shí)器
3.2 TMS320F240利用SCI與MCS51單片機(jī)通信的軟件流程圖
圖2 TMS320F240利用SCI與MCS51單片機(jī)通信的軟件流程圖
3.3 SCI收發(fā)數(shù)據(jù)時(shí)管腳時(shí)序圖
4 SPI接口實(shí)現(xiàn)DSP與單片機(jī)的串口通訊
在利用SPI接口實(shí)現(xiàn)DSP與單片機(jī)進(jìn)行串口通訊的時(shí)候,由于DSP需要通過(guò)一根時(shí)鐘引線連接主機(jī)從機(jī)使其同步,而MCS51單片機(jī)串行通訊只有RXD和TXD,TXD產(chǎn)生系鐘,RXD則既接收數(shù)據(jù)又發(fā)送數(shù)據(jù),這里我們選用兩片74LS645(同步收發(fā)器)來(lái)區(qū)分收發(fā)數(shù)據(jù)。硬件電路圖如下:
圖5 SPI接口實(shí)現(xiàn)DSP與單片機(jī)的串口通訊
74LS645功能表如表1:
[!--empirenews.page--]
MCS51采用方式0,同步串行通訊時(shí)鐘為0.5MHZ,單片機(jī)做主機(jī),DSP做從機(jī)。當(dāng)系統(tǒng)開(kāi)始工作時(shí),DSP的SPISTE(SPI從動(dòng)發(fā)送使能腳)作為普通I/O口發(fā)送DSP的選通信號(hào)(初始化SPISTE=1),當(dāng)單片機(jī)的P1.0口檢測(cè)到SPISTE的下降沿時(shí),開(kāi)始由TXD口輸出同步時(shí)鐘脈沖并通過(guò)RXD接收數(shù)據(jù)。同理當(dāng)DSP檢測(cè)到單片機(jī)由P1.3(初始化為1)的下降沿后,即接收到網(wǎng)絡(luò)主控制器送出的SPICLK信號(hào),開(kāi)始接收由主機(jī)發(fā)送的數(shù)據(jù),然后將SPISIMO引腳上的數(shù)據(jù)移入到SPIDAT寄存器。如果從DSP同時(shí)也發(fā)送數(shù)據(jù),則必須在SPICLK信號(hào)開(kāi)始之前把數(shù)據(jù)寫(xiě)入到SPIRXBUF或SPIDAT寄存器中去。
SPI的接口有四種不同的波特率設(shè)置,時(shí)鐘可以進(jìn)行極性的選擇,有效沿選擇和相位選擇等等。在這里由于DSP的SPICLK使用MCS51單片機(jī)的時(shí)鐘頻率,故在這里可以不設(shè)置SPICLK,只需保證DSP的工作頻率不低于單片機(jī)通過(guò)TXD口轉(zhuǎn)換的時(shí)鐘頻率即可。需要注意的是,DSP在通過(guò)SPI進(jìn)行數(shù)據(jù)傳輸時(shí),是先傳送高8位在傳送低8位,這就需要在單片機(jī)中斷服務(wù)子程序中設(shè)定字符反轉(zhuǎn)程序。DSP和單片機(jī)均采用中斷方式發(fā)送并且接收數(shù)據(jù),下面給出DSP作為從機(jī)發(fā)送數(shù)據(jù),單片機(jī)作為主機(jī)接收數(shù)據(jù)的軟件流程圖:
5 結(jié) 論
在設(shè)計(jì)DSP與單片機(jī)通訊接口時(shí),由于一般情況下對(duì)傳輸速率以及傳輸距離沒(méi)有太多要求,所以僅利用SCI基本可以滿足設(shè)計(jì)要求,但在較為復(fù)雜的數(shù)字化UPS系統(tǒng)之中通常需要兩片或者多片DSP共同控制,在DSP與另外一塊DSP通訊之中需要利用剩余的SPI口,在主從雙DSP通訊設(shè)計(jì)中更為簡(jiǎn)單易行。當(dāng)另外一塊DSP與單片機(jī)進(jìn)行通訊時(shí),由于單片機(jī)的串口已經(jīng)被占用,故可以考慮通過(guò)SCI口與單片機(jī)的外圍中斷 來(lái)實(shí)現(xiàn),當(dāng) 接收到一個(gè)下降沿的中斷,就認(rèn)為是串行數(shù)據(jù)的起始位到達(dá)了,而后利用設(shè)定好的波特率進(jìn)行各位數(shù)據(jù)讀取即可。