,, ,
(浙江海洋學院 機電工程學院,浙江 舟山 316000)
船舶綜合監控系統的自動化水平是衡量當前船舶先進程度的一個重要標志。目前國產機艙監控系統的代表產品為CY8800網絡型機艙監控系統,然而,我國現有的大部分船舶機艙基本還處于各系統單獨監控的狀態[1]。開發性價比更高的船舶機艙適用性監控系統,可以大幅度降低生產及運營成本,具有很大的經濟效益和社會效益。基于以上考慮,將可靠性高、實時性好的CAN總線技術應用于船舶的機艙監控系統,實現對機艙設備多種運行參數的現場數據采集、變換、傳輸和監控。
系統應能承受船上遭遇到的電源波動、環境溫度變化、振動、潮濕、電磁干擾以及腐蝕等工作條件[2]。且為便于維修和更換,硬件應由可替換的模塊構成,并盡可能標準化和組件化,為減少備用件的數量,應減少使用不同的模塊。設計總體方案見圖1,以CAN節點為主,采用模塊化設計、各個功能能夠自由配置。電流變換和電流輸送采用另加模塊設計,與主節點有很好的硬件接口和軟件接口,可以根據用戶自由配置,且符合船上電氣環境的要求。

圖1 設計總體方案
CAN總線通信單元電路結構由 MCU(P89C52)、CAN控制器(SJA1000)、隔離CAN收發器(CTM Module)組成。整個系統電源采用+5 V電源輸入,上電復位芯片(CAT810L)可保證上電時正確地啟動系統。微處理器采用PHILIPS的P89C52單片機,該系列單片機是80C51微控制器的派生器件。CAN控制器采用PHILIPS的SJA1000,是目前市面上用得最廣的一款CAN控制器[3-5]。
為了克服船舶運行中惡劣的電氣環境,設計電路中采用全新隔離CAN收發器模塊,以確保在CAN總線遭受嚴重干擾時控制器能夠正常運行。如圖2所示,CTM系列模塊是集成電源隔離、電氣隔離、CAN收發器、CAN總線保護于一體的隔離CAN收發器模塊,該模塊TXD、RXD引腳兼容+3.3 V及+5 V的CAN控制器,不需要外接其他元器件,可直接將+3.3 V或+5 V的CAN控制器發送、接收引腳與CTM模塊的發送、接收引腳相連接,較好地實現了CAN-bus總線上各節點電氣、電源之間的完全隔離和獨立,提高了節點的穩定性和安全性。經試驗驗證其成本比分立元件低,電路簡化、穩定可靠。

圖2 隔離CAN收發器設計
電壓模擬量需采集轉換為數字量,經過單片機處理后,儲存在EEPROM中。利用P1.7作為片選端ADCS,P1.6作為數據輸出端AD-DATA,P1.5作為時鐘端ADCLK。如圖3所示為電壓模擬量A/D串行采集電路。
系統中的待測模擬量有部分為4~20 mA電流信號,所以需要先將電流信號轉換為電壓信號,在此選用美國BURR~BROWN公司生產的精密電流環接收器芯片RCV420,用于將4~20 mA電流信號轉換為0~5 V電壓信號。為保證RCV420的輸出在0~5 V之間,需要適當減小運放增益,方法是在檢測電阻Rs上并聯匹配電阻Rx,如圖4所示。
通過調整并聯電阻Rx的大小,可以調整RCV420的輸出范圍。為保證高共模抑制,計算確定,輸入為4~20 mA信號時,令Rx為1.8 K可使輸出為0~4.8 V。
設計選用串口D/A轉換芯片MAX531,實現模擬量0~5 V的輸出,其接線簡單、占用口線少、功耗低、價格低廉[6],見圖5。
本設計是作為船舶機艙監控系統的下位機,作為CAN總線的節點。設計程序只作數據采集和輸送用,其中信號處理由上位機完成,并通過接收上位機的指令數據,完成對顯示報警和對機電設備的控制[7-8],主程序流程見圖6。

圖6 主程序流程圖
系統的軟件采用模塊化的結構來設計,在編程之前需先確定SJA1000的基地址及復位引腳,然后正確地初始化SJA1000,填寫要發送的CAN報文,使能發送請求,即可進行CAN自發自收。發送子程序負責節點報文的發送。發送時只需將待發送的數據按特定的格式組合成一組數據送入SJAI000的發送緩沖區,然后啟動SJA1000發送即可。如果總線上有數據發往本節點,則通過查詢狀態寄存器的第1位BIT_RBS的位狀態,便可得知接收緩沖區RXFIFO中的可用信息,然后通過軟件將RXFIFO中的數據逐個“移入”到指定的片內存儲空間即可。
節點軟件編寫CAN總線的通信協議和收發模式是關鍵。在編程之前需先確定SJA1000的基地址及復位引腳,然后正確地初始化SJA1000,填寫要發送的CAN報文,使能發送請求,即可進行CAN自發自收。
3.2.1 定義片選地址
sbit RST_SJA1000=P1^6; //SJA1000硬件復位
#ifdef _GLOBAL_SJA1OOO_PELI_
extern unsigned char xdata CAN_SJA_BaseAdr;//定義SJA1000的片選基址
extern unsigned char xdata *SJA_CS_Ponit;
#else
unsigned char xdata CAN_SJA_BaseAdr_ar_ 0x7f00;//定義SJA1000的片選基址
unsigned char xdate *SJA_CS_Point; //指針指向空
#endif
3.2.2 初始化部分
SJA1000_Config_Normal()
{
BTRO=0x00; //
BTR1=0x14; //設置為1M波特率通信
SJAEntryResteMode(); // 進入復位模式
WriteSJAReg(REG_CAN_CDR,0xc8); // 培植時鐘分頻器,選擇PeliCAN模式
WriteSJAReg(REG_CAN_MOD,0x05); // 配置模式寄存器,選擇雙濾波,自發自接模式
WriteSJARegBlock(16,Send_CAN_Fiter,8); //配置驗收代碼/屏蔽寄存器
WriteSJAReg(REG_CAN_BTRO,BTRO); //配置總線定時器0x00
WriteSJAReg(REG_CAN_BTR1,BTR1); //配置總線定時器0x14
WriteSJAReg(REG_CAN_OCR,0x1a); //配置輸出管腳,推挽輸出
SJAQuitResetMode(); //退出復位模式,進入工作模式
}
3.2.3 發送報文
發送子程序負責節點報文的發送。發送時只需將待發送的數據按特定的格式組合成一組數據送入SJAI000的發送緩沖區,然后啟動SJAI000發送即可。
main()
{
SJA_CS_Point=&CAN_SJA_BaseAdr;
Sja1000HardwareRet(); //SJA1000硬件復位
SJA1000_Config_Normal(); //SJA進入正常模式配置
WriteSJAReg(REG_CAN_IER,0x02); //使能SJA1000發送中斷
WriteSJARegBlock(16,Send_CAN_Info_ID,5); //擴展幀,向發送緩沖區送入5個數據
WriteSJARegBlock(21,Send_CAN_DATA,8); //擴展幀,向發送緩沖區送入8個數據
While(1) //
{
canstatus=ReadSJAReg(REG_CAN_SR); //
if((canstatus&0x0c)==0x0c) //判斷是否可以發送
{
WriteSJARed(REG_CAN_CMR,1); //使能發送請求,發送數據
}
}
}
3.2.4 接受報文
設計對響應速度要求不太高,所以選用以查詢方式來設計接收子程序。以查詢方式設計的接受子程序是最簡單、最可靠的方式。如果總線上有數據發往本節點,則通過查詢狀態寄存器的第1位BIT_RBS的位狀態,便可得知接收緩沖區RXFIFO中的可用信息,然后通過軟件將RXFIFO中的數據逐個“移入”到指定的片內存儲空間即可。
針對船舶機艙采用了模塊化設計,將CAN現場總線應用于監控系統開發,可以根據用戶或特定地點的需要自由配置,避免浪費。設計標準化便于安裝、使用,具有較高的性價比,非常適合于船舶機艙監控自動化。系統應用于武漢理工大學船舶工程技術實訓基地實驗室建設,實踐證明可有效地提高船舶的自動化水平,提高船舶航行安全性,大幅度地降低生產及運營成本,減輕船員勞動強度,具有很大的推廣價值和市場前景。
[1] 王 偉,郭慶祝.船舶機艙CAN總線技術的分布式監控系統研究[J].中國水運:學術版,2006,6(4):64.
[2] 翁紹捷,袁 濤.機電控制系統開關量輸入的抗干擾[J].電工技術雜志,2003(1):10-12.
[3] 方霖芝.船舶機艙集中監視系統[D].上海:上海海運學院,1990.
[4] 吳樹雄.船舶輪機自動測控技術[M].大連:大連海事大學出版社,2000.
[5] 鄔寬明.CAN總線原理和應用系統設計[M].北京:北京航空航天大學出版社,1996.
[6] 曹茂永,劉明.數/模轉換器MAX531及其應用[J].電測與儀表,1996,(6):39-40.
[7] 樓然苗,李光飛.單片機課程設計實例指導[M].北京:北京航空航天大學出版社,2004.
[8] 張益波.基于總線技術的船舶機艙監控系統的設計(下位機)[D].舟山:浙江海洋學院,2008.