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