CAN總線是一種支持分布式控制和實(shí)時(shí)控制的串行通信網(wǎng)絡(luò),由于其獨(dú)特的設(shè)計(jì)思想和高可靠性,使其有較高的通信速率和較強(qiáng)的抗干擾能力,可以作為現(xiàn)場(chǎng)總線應(yīng)用于電磁噪聲比較大的場(chǎng)合。CAN總線已經(jīng)成為最有發(fā)展前途的現(xiàn)場(chǎng)總線之一。
許多微處理器都將CAN控制器嵌入到系統(tǒng)中,成為片上的微處理器,TI公司推出的TMS320F2812和TMS320LF2407就在其中。這種結(jié)構(gòu)成本低、運(yùn)行穩(wěn)定、功能完備,是一種很有前途的CAN通信系統(tǒng)組成方案。
上述兩種DSP上的CAN模塊有所不同,TMS320F2812 DSP片上的增強(qiáng)型CAN控制器eCAN模塊,其性能比TMS320LF2407 DSP內(nèi)嵌CAN控制器有較大的改進(jìn)。
本文主要介紹TMS320F2812的eCAN模塊與TMS320LF2407 的CAN模塊之間通信以及兩者與廣州致遠(yuǎn)的CAN-USB I智能接口卡之間通信時(shí)CAN控制器的硬件電路以及軟件設(shè)計(jì),同時(shí)對(duì)程序運(yùn)行結(jié)果進(jìn)行了分析,實(shí)驗(yàn)證明了這種通信方式的可行性,并在雙PWM變頻調(diào)速系統(tǒng)中得到了應(yīng)用。
TMS320F2812的eCAN模塊與TMS320LF2407的CAN模塊之間通信以及兩者與廣州致遠(yuǎn)的CAN-USB I智能接口卡之間的連接示意圖如圖1所示。由于TMS320F2812和TMS320LF2407上的CAN模塊集成了CAN控制器,提供了完整的CAN協(xié)議,因此圖1中 的TMS320F2812的eCAN模塊與TMS320LF2407的CAN模塊之間的通信僅需收發(fā)裝置即可。兩者與上位機(jī)的通信則通過(guò)CAN-USB I智能接口卡。
圖1 通訊電路連接示意圖
2.1 CAN節(jié)點(diǎn)的硬件設(shè)計(jì)
硬件結(jié)構(gòu)圖如圖2 所示。該硬件結(jié)構(gòu)主要實(shí)現(xiàn)TMS320F2812和TMS320LF2407的通信以及兩者和上位機(jī)的通信。
圖2 CAN節(jié)點(diǎn)硬件結(jié)構(gòu)圖
考慮TMS320F2812和TMS320LF2407之間傳輸數(shù)據(jù)的電平匹配問(wèn)題,對(duì)TMS320F2812和TMS320LF2407均采用PHLIIP公司的PCA82C250作為CAN收發(fā)器。其能提供CAN總線的差動(dòng)發(fā)送能力及對(duì)CAN控制器的差動(dòng)接收能力,信號(hào)使用差分電壓傳送;兩條信號(hào)線被稱(chēng)為CAN總線(CAN_H和CAN_L),將收發(fā)器的RS端接地以實(shí)現(xiàn)高速傳輸,在CAN_H和CAN_L之間接120歐電阻為終端匹配電阻。
TMS320F2812的CANTXD和CANRXD輸出的高電平信號(hào)是3.3V的,而PCA82C250需要5V供電,因此在收發(fā)器和TMS320F2812之間加高速光耦6N137以實(shí)現(xiàn)電平匹配,并起到TMS320F2812和CAN總線隔離的作用,從而保護(hù)了TMS320F2812。TMS320LF2407的電路連接原理相同。TMS320F2812和TMS320LF2407兩者與上位機(jī)之間的通訊利用CAN總線時(shí),只需加一個(gè)CAN-USB I即可。
2.2 CAN節(jié)點(diǎn)的軟件設(shè)計(jì)
本文主要討論下位機(jī)的程序。TMS320F2812的eCAN模塊的郵箱0為發(fā)送郵箱,郵箱16為接收郵箱。TMS320LF2407的CAN模塊的郵箱3為發(fā)送郵箱,郵箱2為接收郵箱。
雖然MS320F2812的eCAN模塊與TMS320LF2407的CAN模塊有所不同,但是兩者的CAN寄存器(兩者都有的寄存器)在結(jié)構(gòu)和功能上都是相同的,所以即使代碼不能完全兼容,在移植上是非常容易的。CAN節(jié)點(diǎn)的軟件設(shè)計(jì)主要分為三部分:初始化程序、數(shù)據(jù)發(fā)送程序、數(shù)據(jù)接收程序。兩者的這三部分程序的基本流程大體上是一樣的,所以下面只對(duì)TMS320F2812的eCAN模塊的程序進(jìn)行介紹。
2.2.1 主程序
圖3為主程序流程圖。主程序如下:
void main(void)
{
InitSysCtrl(); //初始化系統(tǒng)
/*關(guān)中斷*/
DINT;
IER = 0x0000;
IFR = 0x0000;
InitPieCtrl(); //初始化PIE中斷
InitPieVectTable(); //初始化PIE中斷矢量表InitECan(); //初始化CAN寄存器
/*使能PIE中斷*/
PieCtrl.PIEIER9.bit.INTx5 = 1;
IER |= M_INT9; //使能CPU中斷
EINT; //開(kāi)全局中斷
ERTM; //開(kāi)實(shí)時(shí)中斷
for(;;){}
}
該程序中InitSysCtrl()為系統(tǒng)初始化程序, 同時(shí)設(shè)置系統(tǒng)時(shí)鐘,本程序選用系統(tǒng)時(shí)鐘為120MHZ,CAN的時(shí)鐘與系統(tǒng)時(shí)鐘相等。InitEcan()為初始化CAN寄存器的子程序。for(;)為循環(huán)等待CAN的接收中斷,一旦TMS320F2812接收成功TMS320LF2407或者上位機(jī)發(fā)送來(lái)的數(shù)據(jù),則立即進(jìn)入中斷程序,讀出郵箱中的數(shù)據(jù)。CAN的發(fā)送程序?qū)懺诹薈AN的接收中斷程序里面,用于向上位機(jī)發(fā)送需要的數(shù)據(jù)。
圖3 主程序流程圖
2.2.2 初始化程序
初始化程序一般是CAN模塊的初始化。在雙PWM系統(tǒng)中, TMS320F2812需要接收TMS320LF2407發(fā)送的數(shù)據(jù),以及發(fā)送數(shù)據(jù)給上位機(jī),所以將郵箱的初始化也寫(xiě)在了CAN的初始化程序中,并且將發(fā)送和接收的初始化程序?qū)懺诹送粋€(gè)程序中。這樣做可以避免重復(fù)初始化兩個(gè)郵箱共同應(yīng)用到的寄存器,簡(jiǎn)化程序。具體流程圖如下:
圖4 初始化流程圖
本程序中發(fā)送采用查詢(xún)方式,接收采用中斷方式,所以在初始化流程圖中還包括中斷的的相關(guān)設(shè)置。
2.2.3 數(shù)據(jù)發(fā)送程序
TMS320F2812中的每個(gè)郵箱均為64位,被分成兩個(gè)32位的郵箱消息數(shù)據(jù)低寄存器(MDRL)和高寄存器(MDRH)。程序中設(shè)置郵箱0為發(fā)送郵箱,將變量i、j分別賦值給郵箱0的MDRL和MDRH,ID為0x00000000的標(biāo)準(zhǔn)幀。
TMS320LF2407的CAN中每個(gè)郵箱有4個(gè)16位的存儲(chǔ)空間,分別為MBXnA、MBXnB、MBXnC和MBXnD,TMS320LF2407的接收程序中設(shè)郵箱2為接收郵箱。同時(shí)還設(shè)置MBXnA和MBXnB分別對(duì)應(yīng)TMS320F2812的MDRL的低8位和高8位數(shù)據(jù),MBXnC和MBXnD分別對(duì)應(yīng)TMS320F2812的MDRH的低8位和高8位數(shù)據(jù)。
程序如下:
int32 i=0;
int32 j=1;
int32 MessageSendCount=0;
i++; //i自加1
j++; //j自加1
ECanaShadow.CANME.all;
ECanaRegs.CANTRS.all = 0x00000001;
while(ECanaRegs.CANTA.all == 0);
ECanaRegs.CANTA.all = 0x00000001;
ECanaMboxes.MBOX0.MDRL.all= i;
ECanaMboxes.MBOX0.MDRH.all= j;
MessageSendCount++; //發(fā)送次數(shù)
發(fā)送程序運(yùn)行的結(jié)果如圖5-圖7所示:
圖5 CCS3.3變量窗口顯示TMS320F2812郵箱0的發(fā)送情況
從圖5中可以看出,當(dāng)程序停止時(shí)當(dāng)i和j分別為10000和10001,此時(shí) TMS320F2812的郵箱0的MDRL和MDRH發(fā)送的數(shù)據(jù)分別為10000和10001,與變量i和j的值對(duì)應(yīng)相等,同時(shí)MessageSendCount為10000,說(shuō)明程序運(yùn)行了10000次。
圖6 CCS2000變量窗口顯示郵箱2的接收情況
從圖6中可以看出,TMS320LF2407的郵箱2的MBX2A和MBX2B分別為10000和0,分別于圖5中TMS320F2812的MDRL的低8位和高8為數(shù)據(jù)對(duì)應(yīng)。MBX2C和MBX2D分別為10001和0,分別與圖5中TMS320F2812的MDRH的低8位和高8為數(shù)據(jù)對(duì)應(yīng)。同時(shí)接收次數(shù)RXCOUNT為10000,與TMS320F2812的發(fā)送次數(shù)相等。說(shuō)明TMS320LF2407的CAN模塊的接收程序正確。
圖7 上位機(jī)的接收界面
從圖7中可以看到,上位機(jī)收到的數(shù)據(jù)的序列號(hào)為10000,說(shuō)明收到了10000個(gè)數(shù)據(jù),數(shù)據(jù)的幀ID為0x00000000,幀類(lèi)型為標(biāo)準(zhǔn)幀,與TMS320F2812的發(fā)送郵箱0的幀ID和幀類(lèi)型相同。上位機(jī)收到的數(shù)據(jù)一組為從0到2710,另一組為0到2711,是十六進(jìn)制的數(shù)據(jù),轉(zhuǎn)換成十進(jìn)制為0到10000和0到10001,對(duì)應(yīng)TMS320F2812的MDRL和MDRH中的數(shù)據(jù)。
2.2.4 數(shù)據(jù)接收程序
中斷子程序的功能是一旦接收到TMS320LF2407或者上位機(jī)發(fā)送過(guò)來(lái)的數(shù)據(jù),就產(chǎn)生接收中斷,進(jìn)入中斷子程序,將收到的數(shù)據(jù)讀入給變量R_l和R_h。具體接收程序如下:
interrupt void ECAN0INTA_ISR(void)
{
while(ECanaRegs.CANRMP.all!=
0x00010000 ) ;
ECanaRegs.CANRMP.all = 0x00010000;
/*收到的數(shù)據(jù)在接收郵箱Mbox16*/
R_l = ECanaMboxes.MBOX16.MDRL.all;
R_h = ECanaMboxes.MBOX16.MDRH.all;
MessageReceiveCount++; //接收次數(shù)
PieCtrl.PIEACK.bit.ACK9 = 1;
/*CAN的發(fā)送程序*/
......
EINT;
}
限于篇幅的原因,不再給出接收程序的運(yùn)行結(jié)果。
圖8為雙PWM異步電機(jī)變頻調(diào)速系統(tǒng)結(jié)構(gòu)框圖。整流部分和逆變部分分別由TMS320F2812 DSP和TMS320LF2407 DSP控制??刂七^(guò)程中,整流部分和逆變部分要進(jìn)行數(shù)據(jù)傳輸,即兩片DSP之間需要數(shù)據(jù)通信。本文采用兩片DSP上自帶的CAN模塊進(jìn)行通信。此外,兩片DSP還需要與上位機(jī)進(jìn)行通信。其硬件和軟件設(shè)計(jì)如第二節(jié)所示。
圖8 雙PWM異步電機(jī)變頻調(diào)速系統(tǒng)結(jié)構(gòu)框圖
本文介紹的TMS320F2812的eCAN模塊與TMS320LF2407 的CAN模塊之間通信以及兩者與上位機(jī)之間的雙向通信的硬件結(jié)構(gòu)簡(jiǎn)單,軟件實(shí)現(xiàn)方便。在雙PWM變頻調(diào)速系統(tǒng)中程序運(yùn)行的結(jié)果,證明了這種通信方式的可行性。
(編自《電氣技術(shù)》,作者為李璐、張宏川 等。)