吳根平 王 浩 劉 巍 程澤宇 張洪峰
(武漢第二船舶設(shè)計(jì)研究所 武漢 430064)
目前,船用監(jiān)控系統(tǒng)多采用模擬量進(jìn)行遠(yuǎn)程數(shù)據(jù)傳輸,現(xiàn)場(chǎng)監(jiān)控點(diǎn)與監(jiān)控臺(tái)之間敷設(shè)大量信號(hào)電纜,存在檢修困難、抗干擾能力差、可擴(kuò)展性差、傳輸距離受限等問題。為提供系統(tǒng)可靠性與可維護(hù)性,利用高性能、高可靠性的控制器局域網(wǎng)絡(luò)(Con?troller Area Network,CAN)總線技術(shù),設(shè)計(jì)了一種基于STM32芯片的CAN總線智能測(cè)控模塊,可實(shí)現(xiàn)對(duì)監(jiān)控點(diǎn)的信號(hào)檢測(cè)、輸出控制與遠(yuǎn)程傳輸。
智能測(cè)控模塊主要功能如下。
1)具備2路模擬量、2路開關(guān)量的信號(hào)檢測(cè)功能;
2)具備2路模擬量、2路開關(guān)量的輸出控制功能;
3)具備CAN總線通信功能,能與其他CAN總線模塊進(jìn)行信息交互;
4)具備遠(yuǎn)程設(shè)置模塊的CANID、波特率等參數(shù)的功能。
智能測(cè)控模塊總體結(jié)構(gòu)框圖如圖1所示。測(cè)控模塊以STM32F07芯片為控制核心,主要由最小系統(tǒng)電路、CAN總線接口電路、模擬量輸入接口電路、模擬量輸出接口電路、開關(guān)量輸入接口電路以及開關(guān)量輸出接口電路等組成。
系統(tǒng)工作流程如下:模塊中斷接收CAN總線數(shù)據(jù)幀,根據(jù)CAN數(shù)據(jù)幀的類型進(jìn)行相應(yīng)的操作。當(dāng)模塊接收到參數(shù)設(shè)置幀時(shí),模塊設(shè)置系統(tǒng)參數(shù)并把參數(shù)值存入EEPROM中;當(dāng)模塊接收到傳輸數(shù)據(jù)幀時(shí),模塊采集2路模擬量與2路開關(guān)量,并將所采集數(shù)據(jù)傳輸?shù)紺AN網(wǎng)絡(luò)上;當(dāng)模塊接收到數(shù)據(jù)幀時(shí),模塊輸出2路模擬量與2路開關(guān)量。
圖1 測(cè)控模塊總體框圖
綜合考慮系統(tǒng)綜合性能要求和成本要求,主控制器MCU采用ARM芯片STM32F407ZET6。該芯片是ST公司推出的32位ARM架構(gòu)微處理器,采用Cortex-M4內(nèi)核,工作頻率高達(dá)168MHz,包含2個(gè)CAN控制器外設(shè)、3個(gè)I2C接口、1MB的FLASH以及196KB的SRAM,可應(yīng)用于高度集成與低功耗的嵌入式應(yīng)用場(chǎng)合。
最小系統(tǒng)電路主要包括供電電路、復(fù)位電路、時(shí)鐘電路以及調(diào)試接口電路。供電電路采用SPX1117M3-3.3芯片將5V電源轉(zhuǎn)換為3.3V電源為STM32F407芯片供電;采用RC電路對(duì)該芯片上電復(fù)位;時(shí)鐘電路采用外接25MHz的晶體震蕩器。
因STM32F407內(nèi)嵌了CAN控制器,采用抗干擾能力強(qiáng)的隔離型ISO1050作為CAN總線收發(fā)器,采用B0505LS電源隔離芯片為ISO1050收發(fā)器提供隔離電源。為避免CAN總線網(wǎng)絡(luò)遭受ESD以及其它瞬變電壓干擾,在CAN總線信號(hào)線與地之間各跨接了TVS二極管。CAN總線接口電路如圖2所示。
圖2 CAN總線接口電路
測(cè)控模塊的2路模擬量輸入信號(hào)源為4-20mA標(biāo)準(zhǔn)電流信號(hào)。采用100Ω的精密電阻將4-20mA電流信號(hào)變換為0.4-2V電壓信號(hào),之后經(jīng)電壓跟隨器連接到模數(shù)轉(zhuǎn)換芯片AD7988。AD7988芯片由LM285D-2.5提高精密2.5V基準(zhǔn)電壓源。2片AD7988芯片與STM32芯片構(gòu)成SPI四線式CS模式。
圖3 2路I/V變換電路
圖4 2路模擬電壓信號(hào)采樣電路
測(cè)控模塊輸出2路4-20mA標(biāo)準(zhǔn)電流信號(hào)。使用2片DAC8501數(shù)模轉(zhuǎn)換芯片與STM32芯片構(gòu)成SPI四線式CS模式,基準(zhǔn)電壓是LM285D-2.5精密2.5V基準(zhǔn)電壓源。采用負(fù)載共電源V/I變換形式,采用100Ω的精密電阻將0.4-2V電壓信號(hào)變換為4-20mA電流信號(hào)。
圖5 2路模擬電壓信號(hào)輸出電路
圖6 2路V/I變換電路
開關(guān)量輸入接口電路可實(shí)現(xiàn)2路開關(guān)量隔離檢測(cè)功能。為提高系統(tǒng)抗干擾能力,輸入通道采用PA1a電磁繼電器、PC817光電耦合器實(shí)現(xiàn)兩級(jí)電氣隔離。
圖7 開關(guān)量輸入接口電路
開關(guān)量輸出接口電路可實(shí)現(xiàn)2路開關(guān)量輸出功能。為提高輸出驅(qū)動(dòng)能力,選用SDI1102D固態(tài)繼電器。為提高系統(tǒng)可靠性與可維護(hù)性,設(shè)計(jì)了輸出確認(rèn)機(jī)制,將輸出開關(guān)量經(jīng)過光耦電平轉(zhuǎn)換重新輸入到STM32芯片中進(jìn)行輸出確認(rèn)。
圖8 開關(guān)量輸出接口電路
軟件部分主要包括CAN總線通信模塊、數(shù)據(jù)采集與輸出模塊兩部分。CAN總線通信模塊主要由CAN控制器初始化函數(shù)、CAN幀發(fā)送函數(shù)和CAN幀接收函數(shù)三部分組成;數(shù)據(jù)采集與輸出模塊主要負(fù)責(zé)2路模擬量、2路開關(guān)量的采集與輸出。
協(xié)議是網(wǎng)絡(luò)通信的關(guān)鍵。CAN總線協(xié)議主要包括參數(shù)設(shè)置幀、讀取數(shù)據(jù)幀、數(shù)據(jù)幀、確認(rèn)幀等協(xié)議幀。本文選用11位標(biāo)識(shí)符的標(biāo)準(zhǔn)幀。11位標(biāo)識(shí)符中,高4位標(biāo)識(shí)幀類型,低7位標(biāo)識(shí)節(jié)模塊ID,具體協(xié)議格式如圖9所示,協(xié)議說明如表1所示。
圖9 CAN總線通信協(xié)議格式
表1 CAN總線通信協(xié)議說明
CAN控制器初始化函數(shù)主要實(shí)現(xiàn)CAN工作時(shí)的參數(shù)設(shè)置,具體包括硬件使能CAN控制器、設(shè)置CAN總線波特率、設(shè)置中斷工作方式、設(shè)置CAN驗(yàn)收過濾器、CAN控制器的工作方式等。
CAN幀發(fā)送函數(shù)將已打包完畢的CAN幀發(fā)送到CAN總線上,以實(shí)現(xiàn)數(shù)據(jù)的發(fā)送。進(jìn)入該函數(shù)后,首先判斷發(fā)送緩沖區(qū)是否為空,若為空則將待發(fā)送的數(shù)據(jù)寫入發(fā)送緩沖區(qū),然后啟動(dòng)發(fā)送,最后返回。
CAN幀接收函數(shù)以中斷方式調(diào)用以提高系統(tǒng)效率。該函數(shù)主要負(fù)責(zé)讀取CAN接收緩沖區(qū)的數(shù)據(jù)至RAM中。進(jìn)入該函數(shù)后,首先判斷接收緩沖區(qū)是否為空,若非空則讀取接收緩沖區(qū)的數(shù)據(jù),然后返回,程序流程如圖所示。為防止接收緩沖區(qū)數(shù)據(jù)溢出,可開辟一個(gè)環(huán)形數(shù)組保存接收數(shù)據(jù)緩沖區(qū)的數(shù)據(jù)。
開關(guān)量數(shù)據(jù)的采集與輸出程序比較簡(jiǎn)單,將連接開關(guān)量輸入輸出的引腳分配配置為GPIO輸入輸出引腳,然后分別讀取相應(yīng)引腳的值或者輸出相應(yīng)的高低電平即可。在此給出了采用外部ADC的模擬量采集模塊程序與采用外部DAC的模擬量輸出模塊程序設(shè)計(jì)的說明。
4.2.1 模擬量采集模塊程序設(shè)計(jì)
根據(jù)AD7988芯片的四線式CS模式串行接口時(shí)序,設(shè)計(jì)了模擬量采集模塊程序。首先將CNV置為低電平,再分別將兩片AD7988芯片的SDI0、SDI1置為高電平,而后將CNV置為高電平,此時(shí)ADC芯片開啟轉(zhuǎn)換,等待10us后,將SDI0置為低電平,逐位循環(huán)讀取SDO數(shù)據(jù)。讀取完16位數(shù)據(jù)后,將SDI1置為低電平,逐位循環(huán)讀取SDO數(shù)據(jù),之后返回。模擬量采集模塊程序流程圖如圖10所示。
圖10 模擬量采集模塊程序
4.2.2 模擬量輸出模塊程序設(shè)計(jì)
根據(jù)DAC8501芯片的串行接口時(shí)序,設(shè)計(jì)了模擬量輸出模塊程序。首先判斷DAC輸出通道,將相應(yīng)片選信號(hào)置低,之后從高至低逐位輸出相應(yīng)位至SPI數(shù)據(jù)線,最后將片選信號(hào)置高,返回。模擬量輸出模塊程序流程圖如圖11所示。
本文設(shè)計(jì)了一種基于ARM芯片STM32F407的CAN總線智能測(cè)控模塊。該智能測(cè)控模塊能夠完成2路模擬量、2路開關(guān)量的信號(hào)檢測(cè)與控制,能夠與其他CAN模塊通過CAN總線進(jìn)行信號(hào)交互與控制。智能測(cè)控模塊的成功應(yīng)用,可有效提高船用監(jiān)控系統(tǒng)的可靠性,實(shí)現(xiàn)全面的、自動(dòng)化的遠(yuǎn)程監(jiān)控與管理,具有較強(qiáng)的工程應(yīng)用價(jià)值。
圖11 模擬量輸出模塊程序