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