,, ,
(浙江海洋學(xué)院 機電工程學(xué)院,浙江 舟山 316000)
船舶綜合監(jiān)控系統(tǒng)的自動化水平是衡量當(dāng)前船舶先進程度的一個重要標(biāo)志。目前國產(chǎn)機艙監(jiān)控系統(tǒng)的代表產(chǎn)品為CY8800網(wǎng)絡(luò)型機艙監(jiān)控系統(tǒng),然而,我國現(xiàn)有的大部分船舶機艙基本還處于各系統(tǒng)單獨監(jiān)控的狀態(tài)[1]。開發(fā)性價比更高的船舶機艙適用性監(jiān)控系統(tǒng),可以大幅度降低生產(chǎn)及運營成本,具有很大的經(jīng)濟效益和社會效益。基于以上考慮,將可靠性高、實時性好的CAN總線技術(shù)應(yīng)用于船舶的機艙監(jiān)控系統(tǒng),實現(xiàn)對機艙設(shè)備多種運行參數(shù)的現(xiàn)場數(shù)據(jù)采集、變換、傳輸和監(jiān)控。
系統(tǒng)應(yīng)能承受船上遭遇到的電源波動、環(huán)境溫度變化、振動、潮濕、電磁干擾以及腐蝕等工作條件[2]。且為便于維修和更換,硬件應(yīng)由可替換的模塊構(gòu)成,并盡可能標(biāo)準(zhǔn)化和組件化,為減少備用件的數(shù)量,應(yīng)減少使用不同的模塊。設(shè)計總體方案見圖1,以CAN節(jié)點為主,采用模塊化設(shè)計、各個功能能夠自由配置。電流變換和電流輸送采用另加模塊設(shè)計,與主節(jié)點有很好的硬件接口和軟件接口,可以根據(jù)用戶自由配置,且符合船上電氣環(huán)境的要求。
圖1 設(shè)計總體方案
CAN總線通信單元電路結(jié)構(gòu)由 MCU(P89C52)、CAN控制器(SJA1000)、隔離CAN收發(fā)器(CTM Module)組成。整個系統(tǒng)電源采用+5 V電源輸入,上電復(fù)位芯片(CAT810L)可保證上電時正確地啟動系統(tǒng)。微處理器采用PHILIPS的P89C52單片機,該系列單片機是80C51微控制器的派生器件。CAN控制器采用PHILIPS的SJA1000,是目前市面上用得最廣的一款CAN控制器[3-5]。
為了克服船舶運行中惡劣的電氣環(huán)境,設(shè)計電路中采用全新隔離CAN收發(fā)器模塊,以確保在CAN總線遭受嚴(yán)重干擾時控制器能夠正常運行。如圖2所示,CTM系列模塊是集成電源隔離、電氣隔離、CAN收發(fā)器、CAN總線保護于一體的隔離CAN收發(fā)器模塊,該模塊TXD、RXD引腳兼容+3.3 V及+5 V的CAN控制器,不需要外接其他元器件,可直接將+3.3 V或+5 V的CAN控制器發(fā)送、接收引腳與CTM模塊的發(fā)送、接收引腳相連接,較好地實現(xiàn)了CAN-bus總線上各節(jié)點電氣、電源之間的完全隔離和獨立,提高了節(jié)點的穩(wěn)定性和安全性。經(jīng)試驗驗證其成本比分立元件低,電路簡化、穩(wěn)定可靠。
圖2 隔離CAN收發(fā)器設(shè)計
電壓模擬量需采集轉(zhuǎn)換為數(shù)字量,經(jīng)過單片機處理后,儲存在EEPROM中。利用P1.7作為片選端ADCS,P1.6作為數(shù)據(jù)輸出端AD-DATA,P1.5作為時鐘端ADCLK。如圖3所示為電壓模擬量A/D串行采集電路。
系統(tǒng)中的待測模擬量有部分為4~20 mA電流信號,所以需要先將電流信號轉(zhuǎn)換為電壓信號,在此選用美國BURR~BROWN公司生產(chǎn)的精密電流環(huán)接收器芯片RCV420,用于將4~20 mA電流信號轉(zhuǎn)換為0~5 V電壓信號。為保證RCV420的輸出在0~5 V之間,需要適當(dāng)減小運放增益,方法是在檢測電阻Rs上并聯(lián)匹配電阻Rx,如圖4所示。
通過調(diào)整并聯(lián)電阻Rx的大小,可以調(diào)整RCV420的輸出范圍。為保證高共模抑制,計算確定,輸入為4~20 mA信號時,令Rx為1.8 K可使輸出為0~4.8 V。
設(shè)計選用串口D/A轉(zhuǎn)換芯片MAX531,實現(xiàn)模擬量0~5 V的輸出,其接線簡單、占用口線少、功耗低、價格低廉[6],見圖5。
本設(shè)計是作為船舶機艙監(jiān)控系統(tǒng)的下位機,作為CAN總線的節(jié)點。設(shè)計程序只作數(shù)據(jù)采集和輸送用,其中信號處理由上位機完成,并通過接收上位機的指令數(shù)據(jù),完成對顯示報警和對機電設(shè)備的控制[7-8],主程序流程見圖6。
圖6 主程序流程圖
系統(tǒng)的軟件采用模塊化的結(jié)構(gòu)來設(shè)計,在編程之前需先確定SJA1000的基地址及復(fù)位引腳,然后正確地初始化SJA1000,填寫要發(fā)送的CAN報文,使能發(fā)送請求,即可進行CAN自發(fā)自收。發(fā)送子程序負(fù)責(zé)節(jié)點報文的發(fā)送。發(fā)送時只需將待發(fā)送的數(shù)據(jù)按特定的格式組合成一組數(shù)據(jù)送入SJAI000的發(fā)送緩沖區(qū),然后啟動SJA1000發(fā)送即可。如果總線上有數(shù)據(jù)發(fā)往本節(jié)點,則通過查詢狀態(tài)寄存器的第1位BIT_RBS的位狀態(tài),便可得知接收緩沖區(qū)RXFIFO中的可用信息,然后通過軟件將RXFIFO中的數(shù)據(jù)逐個“移入”到指定的片內(nèi)存儲空間即可。
節(jié)點軟件編寫CAN總線的通信協(xié)議和收發(fā)模式是關(guān)鍵。在編程之前需先確定SJA1000的基地址及復(fù)位引腳,然后正確地初始化SJA1000,填寫要發(fā)送的CAN報文,使能發(fā)送請求,即可進行CAN自發(fā)自收。
3.2.1 定義片選地址
sbit RST_SJA1000=P1^6; //SJA1000硬件復(fù)位
#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; //設(shè)置為1M波特率通信
SJAEntryResteMode(); // 進入復(fù)位模式
WriteSJAReg(REG_CAN_CDR,0xc8); // 培植時鐘分頻器,選擇PeliCAN模式
WriteSJAReg(REG_CAN_MOD,0x05); // 配置模式寄存器,選擇雙濾波,自發(fā)自接模式
WriteSJARegBlock(16,Send_CAN_Fiter,8); //配置驗收代碼/屏蔽寄存器
WriteSJAReg(REG_CAN_BTRO,BTRO); //配置總線定時器0x00
WriteSJAReg(REG_CAN_BTR1,BTR1); //配置總線定時器0x14
WriteSJAReg(REG_CAN_OCR,0x1a); //配置輸出管腳,推挽輸出
SJAQuitResetMode(); //退出復(fù)位模式,進入工作模式
}
3.2.3 發(fā)送報文
發(fā)送子程序負(fù)責(zé)節(jié)點報文的發(fā)送。發(fā)送時只需將待發(fā)送的數(shù)據(jù)按特定的格式組合成一組數(shù)據(jù)送入SJAI000的發(fā)送緩沖區(qū),然后啟動SJAI000發(fā)送即可。
main()
{
SJA_CS_Point=&CAN_SJA_BaseAdr;
Sja1000HardwareRet(); //SJA1000硬件復(fù)位
SJA1000_Config_Normal(); //SJA進入正常模式配置
WriteSJAReg(REG_CAN_IER,0x02); //使能SJA1000發(fā)送中斷
WriteSJARegBlock(16,Send_CAN_Info_ID,5); //擴展幀,向發(fā)送緩沖區(qū)送入5個數(shù)據(jù)
WriteSJARegBlock(21,Send_CAN_DATA,8); //擴展幀,向發(fā)送緩沖區(qū)送入8個數(shù)據(jù)
While(1) //
{
canstatus=ReadSJAReg(REG_CAN_SR); //
if((canstatus&0x0c)==0x0c) //判斷是否可以發(fā)送
{
WriteSJARed(REG_CAN_CMR,1); //使能發(fā)送請求,發(fā)送數(shù)據(jù)
}
}
}
3.2.4 接受報文
設(shè)計對響應(yīng)速度要求不太高,所以選用以查詢方式來設(shè)計接收子程序。以查詢方式設(shè)計的接受子程序是最簡單、最可靠的方式。如果總線上有數(shù)據(jù)發(fā)往本節(jié)點,則通過查詢狀態(tài)寄存器的第1位BIT_RBS的位狀態(tài),便可得知接收緩沖區(qū)RXFIFO中的可用信息,然后通過軟件將RXFIFO中的數(shù)據(jù)逐個“移入”到指定的片內(nèi)存儲空間即可。
針對船舶機艙采用了模塊化設(shè)計,將CAN現(xiàn)場總線應(yīng)用于監(jiān)控系統(tǒng)開發(fā),可以根據(jù)用戶或特定地點的需要自由配置,避免浪費。設(shè)計標(biāo)準(zhǔn)化便于安裝、使用,具有較高的性價比,非常適合于船舶機艙監(jiān)控自動化。系統(tǒng)應(yīng)用于武漢理工大學(xué)船舶工程技術(shù)實訓(xùn)基地實驗室建設(shè),實踐證明可有效地提高船舶的自動化水平,提高船舶航行安全性,大幅度地降低生產(chǎn)及運營成本,減輕船員勞動強度,具有很大的推廣價值和市場前景。
[1] 王 偉,郭慶祝.船舶機艙CAN總線技術(shù)的分布式監(jiān)控系統(tǒng)研究[J].中國水運:學(xué)術(shù)版,2006,6(4):64.
[2] 翁紹捷,袁 濤.機電控制系統(tǒng)開關(guān)量輸入的抗干擾[J].電工技術(shù)雜志,2003(1):10-12.
[3] 方霖芝.船舶機艙集中監(jiān)視系統(tǒng)[D].上海:上海海運學(xué)院,1990.
[4] 吳樹雄.船舶輪機自動測控技術(shù)[M].大連:大連海事大學(xué)出版社,2000.
[5] 鄔寬明.CAN總線原理和應(yīng)用系統(tǒng)設(shè)計[M].北京:北京航空航天大學(xué)出版社,1996.
[6] 曹茂永,劉明.數(shù)/模轉(zhuǎn)換器MAX531及其應(yīng)用[J].電測與儀表,1996,(6):39-40.
[7] 樓然苗,李光飛.單片機課程設(shè)計實例指導(dǎo)[M].北京:北京航空航天大學(xué)出版社,2004.
[8] 張益波.基于總線技術(shù)的船舶機艙監(jiān)控系統(tǒng)的設(shè)計(下位機)[D].舟山:浙江海洋學(xué)院,2008.