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