嵌入式電網(wǎng)分析儀中雙CPU間的通信
1 引言
在我國目前電力緊缺的形勢下,監(jiān)控電力以確保安全用電非常重要。對電網(wǎng)分析儀的研究和改造一直是當(dāng)前研究的熱點。如果電網(wǎng)分析儀采用一個DSP,既采樣計算電網(wǎng)參數(shù),又負(fù)責(zé)控制部分的運轉(zhuǎn),由于在實際應(yīng)用中要求DSP處理的信息可能很多,工作量很大,這樣將會影響分析儀的處理速度,降低其工作效率。因此,這里提出一種新一代的電網(wǎng)分析儀,采用DSP和AVR單片機構(gòu)成雙CPU處理器平臺,并充分利用DSP處理大容量數(shù)據(jù)和復(fù)雜算法的能力.以及單片機接口的控制能力。ATmegal28單片機負(fù)責(zé)外圍電路控制,包括開關(guān)量輸出報警與控制、監(jiān)測輸入開關(guān)量、模擬量的輸出、與上位機的通信以及計時和存儲參數(shù),參數(shù)是由TMS320F2812 DSP采樣計算獲得,計算完成后,DSP將數(shù)據(jù)傳送給AVR單片機,而監(jiān)測的參數(shù)也由用戶預(yù)先設(shè)置后再經(jīng)DSP傳輸。
2 SPI通信
根據(jù)系統(tǒng)設(shè)計需求,DSP和AVR單片機之間需SPI接口數(shù)據(jù)總線實現(xiàn)數(shù)據(jù)傳輸。SPI是一種串行總線的外設(shè)接口.只需4根總線就可與外設(shè)相連,而且SPI是一種真正的同步方式,兩臺設(shè)備在同一個時鐘下工作嘲。正是由于SPI通信占用的接口線少,通信效率高,并且這兩款:DSP與AVR單片機都支持SPI接口,因而SPI通信是目前一種較好的設(shè)計方案。
由于DSP與AVR單片機的數(shù)據(jù)寄存器都是移位寄存器,當(dāng)有數(shù)據(jù)從一個寄存器移出時,則另一端有數(shù)據(jù)移入.當(dāng)移完8位,一次SPI通信結(jié)束。不同的是ATmegal28在通信過程中接收和發(fā)送的數(shù)據(jù)始終在一個寄存器SPDR中,因此才有同時收發(fā)。而DSP的收發(fā)寄存器是分開的,發(fā)送數(shù)據(jù)用SPITXBUF,接收數(shù)據(jù)用SPIRXBUF,8位的數(shù)據(jù)從AVR的SPDR移入DSP的SPIRXBUF,同時DSP的SPITXBUF又向AVR的SPDR移入數(shù)據(jù),SPDR每移出1位,其本身也移進(jìn)1位,相應(yīng)DSP中的SPIRXBUF移入1位。SPITXBUF移出1位,從而完成16位環(huán)形移位。DSP與AVR的SPI連接如圖1所示,其中XXXX為片選信號,低電平有效。
3 器件選型
3.1 TMS320F2812簡介
TMS320F281x系列DSP是TI公司推出的數(shù)字信號處理器,該系列處理器是基于TMS320C2xx內(nèi)核的定點數(shù)字信號處理器,內(nèi)部集成有多種先進(jìn)的外設(shè),為電機及其他運動控制應(yīng)用實現(xiàn)提供良好平臺。TMS320F2812的150 MI/s的處理速度可滿足快速的處理大量數(shù)據(jù)和算法的要求。
TMS320F2812具有豐富的外設(shè)模塊:128 K的Flash程序存儲器.多達(dá)128 K的ROM,2個事件管理器模塊,具有看門狗定時器模塊(WDT)、串行通信接口(SCI)、串行外設(shè)接口(SPI),外設(shè)中斷擴展模塊支持45個外設(shè)中斷。
3.2 ATmega128簡介
AVR單片機是8位,RISC結(jié)構(gòu)的單片機。而ATmegal28屬于AVR中配置最高的器件,可達(dá)16 MI/s/MHz的性能,其內(nèi)部集成:128 K的Flash程序存儲器,4 K的EEPROM和4 K的SRAM。2個串行通信接口(USART),1個8位的TWI(I2C)總線接口,1個串行外設(shè)接口(SPI),53個通用I/O端口,4個定時,計數(shù)器,因此足夠滿足該系統(tǒng)設(shè)計所需的控制功能。
3.3 74LVC4245簡介
由于TMS320F2812與ATmegal28的邏輯電平不同,TMS320F2812的邏輯高電平是3.3 V,而ATmegal28的邏輯高電平是5 V,需連接一個電平轉(zhuǎn)換器,這里選用74LVC4245。74LVC4245是3.3 V和5 V兩種電平連接時的電平轉(zhuǎn)換器,提供了8路輸入和8路輸出。通過74LV4245的DIR引腳控制信號的傳輸方向,將其傳輸方向始終置為B到A,其OE引腳控制器件使能或處于隔離狀態(tài)。
[!--empirenews.page--]
4 系統(tǒng)硬件設(shè)計
圖2為系統(tǒng)硬件設(shè)計電路圖。其中,SCK為時鐘信號,用來為SPI提供時鐘脈沖,SS為片選信號,當(dāng)SS拉低時,SPI觸發(fā),DSP與AVR之間實現(xiàn)通信。MOSI是主出從入。對于主機來說,由MOSI引腳輸出數(shù)據(jù);對于從機來說,則是由MOSI引腳輸入數(shù)據(jù);而MISO則相反,是主人從出引腳,對于主機,是由MISO腳輸人數(shù)據(jù),對于從機,從MISO引腳輸出數(shù)據(jù)。主機還可通過復(fù)位引腳在必要的條件下(如主機復(fù)位時)使從機復(fù)位。
由于ATmegal28的MISO引腳是向外發(fā)送,與其他4個引腳不同,而74LVC4245方向是B到A,因此該引腳接法不同于其他引腳,需要通過一只分壓電阻,并使用一個二極管將其電壓箝位于3.3 V。
5 系統(tǒng)軟件設(shè)計
5.1 通信協(xié)議
兩個設(shè)備實現(xiàn)通信,首先規(guī)定傳輸數(shù)據(jù)的協(xié)議。根據(jù)需求,主機應(yīng)向從機發(fā)送計算數(shù)據(jù)以及配置信息,從機向主機發(fā)送報警狀態(tài)以及應(yīng)答,以告知發(fā)送方消息是否正確接收,如圖3所示。
DSP與AVR單片機之間的通信協(xié)議采用內(nèi)部制定的SPI通信協(xié)議。表1列出了TMS320F2812與ATmegal28之間通信的3種數(shù)據(jù)格式,接收方以起始碼辨別幀的類別。參數(shù)類型代表不同參數(shù),如“0x01”表示設(shè)置時間。如:3D 01 0008 0A 0A 00 11 14 00 A2 FC,因為0x3D是“=”的ASCII碼,則該幀表示一個數(shù)據(jù)幀,參數(shù)類型為0x01,可知這是一個設(shè)置時間的數(shù)據(jù)幀,最后2位是CRC校驗碼,中間剩余的序列"00 08 0A 0A 00 11 14 00"為參數(shù),即時間,設(shè)置時間為08年10月10日17點20分O秒,使參數(shù)為4xN字節(jié)是為了保持與上一代產(chǎn)品相兼容,當(dāng)從機接收后并校驗正確后,將設(shè)置好時間并返回表示正確的應(yīng)答幀。
5.2 SPI初始化
TMS320F2812的初始化包括:配置I/O端口為具有SPI特殊功能的接口,選定主從機,數(shù)據(jù)傳送模式、波特率和發(fā)送接收數(shù)據(jù)長度,所有設(shè)置都是通過設(shè)計相應(yīng)的SPI控制寄存器實現(xiàn)。
ATmegal28的初始化與TMS320F12812相似,不同的是,由于ATmegal28是從機,因此不用選擇波特率,同時應(yīng)該注意的是,數(shù)據(jù)傳送模式應(yīng)保持與主機一致。數(shù)據(jù)傳送模式有4種,是由設(shè)置控制寄存器里的CPOL和CPHA來設(shè)定的,如表2所示。[!--empirenews.page--]
TMS320F2812的SPI通信未采用中斷方式.因為它是主要發(fā)送者,當(dāng)ATmegal28有數(shù)據(jù)發(fā)送來時,通過外部中斷得知。ATmegal28是采用中斷方式,當(dāng)有數(shù)據(jù)發(fā)送來時,進(jìn)入SPI中斷,開始接收數(shù)據(jù)。
5.3 DSP的接收和發(fā)送
以下為DSP接收數(shù)據(jù)的程序代碼:
其中.SpiaRegs.SPISTS.bit.INT_FLAG是接收完成標(biāo)志位。當(dāng)一個字節(jié)傳送完畢后.SpiaRegs.SPISTS.bit.INT_FLAG置1.由于TMS320F2812的SPI數(shù)據(jù)寄存器是16位的,因此取低8位即為所接收的數(shù)據(jù)。
以下為DSP的發(fā)送數(shù)據(jù)的程序代碼:
void DSP_Spi_Write_Byte(Uchar Byte_Out) //向SPI總線發(fā)送1個字節(jié)
{ Byte_Out=(Byte_Out<<8)&0xFF00;//發(fā)送時高8位有效while(SpiaRegs.SPISTS.bit.BUFFULL_FLAG=1); //fFXBUF里有數(shù)據(jù).還沒被移走
SpiaRegs.SPIT_XBUF=Byte_Out;
}
同理.當(dāng)DSP發(fā)送數(shù)據(jù)時.首先判斷緩存里的數(shù)據(jù)是否有被移走,一旦判斷數(shù)據(jù)移走,馬上將要發(fā)送的數(shù)據(jù)寫入緩存。
5.4 AVR的發(fā)送和接收
SPIF是發(fā)送完成標(biāo)志,當(dāng)SPDR里的數(shù)據(jù)發(fā)送完后,SPIF置1,此時可向SPDR寫數(shù)據(jù)。注意AVR單片機向DSP發(fā)送數(shù)據(jù)前先向DSP發(fā)送一個中斷信號。ATmegal28接收數(shù)據(jù)采用中斷方式完成數(shù)據(jù)接收,中斷程序的流程圖如4所示。
6 注意事項
(1)拉低片選信號SS后,需延時再發(fā)送數(shù)據(jù)。由于邏輯電平的不同,應(yīng)在TMS320F2812與ATmegal28之間加電平轉(zhuǎn)換器74LV4245,當(dāng)主機將片選信號拉低后。由于74LVC4245的存在,兩者不能立即工作,會產(chǎn)生一個延時,因此在軟件編程中,需要加一個延時函數(shù)。一般來說延時1μs就足夠了。
(2)AVR往SPDR寫數(shù)據(jù)時,SS被拉高。一般來說,兩個MCU之間的數(shù)據(jù)傳輸不會只有1個字節(jié)。在設(shè)計中,當(dāng)從機向主機發(fā)送數(shù)據(jù)時,當(dāng)主機接收完第一個字節(jié)后,如果不將片選信號SS拉高.則會造成從機不能將數(shù)據(jù)寫入寄存器內(nèi),主機也不能正確接收數(shù)據(jù),這樣造成數(shù)據(jù)丟失、錯誤。因此,每接收完一個字節(jié)主機都要將丙拉高.待從機寫入數(shù)據(jù)后,再將SS拉低,這樣數(shù)據(jù)才能夠正確傳輸。
7 結(jié)語
實驗證明.SPI通信完成TMS320F2812與ATmegal28之間的通信完全滿足系統(tǒng)需求。因為SPI時序簡單,傳輸速度快,占用的接口線少,簡化了系統(tǒng)設(shè)計。同時運用雙CPU設(shè)計系統(tǒng),增強了系統(tǒng)的實時處理能力,減輕主CPU負(fù)擔(dān),提高了產(chǎn)品的性能。