邵煥杰,夏靜
(南京理工大學(xué) 機(jī)械工程學(xué)院,江蘇 南京 210094)
在固體火箭武器發(fā)射測(cè)試時(shí),需要采集火箭武器發(fā)動(dòng)機(jī)噴射的燃?xì)饬髯饔迷诎l(fā)射車(chē)相關(guān)位置上產(chǎn)生的壓力、振動(dòng)等參數(shù),采集數(shù)據(jù)得到具體參數(shù)的變化曲線(xiàn),對(duì)提升火箭武器發(fā)射的穩(wěn)定性、精度和安全性具有重要的參考價(jià)值,因此要保證采集數(shù)據(jù)的精確度[1]。傳感器在與標(biāo)定環(huán)境不一時(shí)產(chǎn)生的漂移或溫差電勢(shì)在經(jīng)放大電路放大后會(huì)嚴(yán)重影響采集數(shù)據(jù)的精度,傳感器需要通過(guò)調(diào)零來(lái)消除此類(lèi)誤差干擾,來(lái)保證采集精度。由此,本文主要介紹了以STM32為內(nèi)核芯片觸摸屏顯示控制各通道傳感器數(shù)據(jù)的輸出值,通過(guò)CAN總線(xiàn)通信實(shí)現(xiàn)調(diào)零功能。STM32系列是基于ARM Cortex-M3內(nèi)核設(shè)計(jì),性能突出,外設(shè)豐富,運(yùn)用廣泛,滿(mǎn)足設(shè)計(jì)要求??刂破骶植烤W(wǎng)(controller area network,CAN) 是 BOSCH 公司推出的一種多主機(jī)局域網(wǎng),CAN 總線(xiàn)系統(tǒng)可由上位機(jī)(PC機(jī)或工控機(jī))、數(shù)據(jù)轉(zhuǎn)換器和現(xiàn)場(chǎng)節(jié)點(diǎn)組成[2]。由于火箭武器發(fā)射測(cè)試現(xiàn)場(chǎng)環(huán)境惡劣、電磁輻射強(qiáng),普通的串口通信易受干擾,采集通道數(shù)要求較多,CAN通信比較適用于此類(lèi)場(chǎng)合。CAN主站及從站均采用內(nèi)置CAN控制器的32位高性能微處理器STM32F103RCT6作為核心芯片,采用TJA1050作為CAN收發(fā)器,實(shí)現(xiàn)電平轉(zhuǎn)換和通信功能。
硬件結(jié)構(gòu)如圖1所示,整個(gè)電路主要由基于STM32的觸摸屏主站和從站的信號(hào)調(diào)理及控制電路組成。
圖1 硬件電路結(jié)構(gòu)
主站電路如圖2所示,主要包括電源模塊,STM32模塊,CAN收發(fā)器模塊和觸摸屏模塊。
圖2 CAN主站電路
STM32模塊由STM32F103RCT6微控制器、晶振時(shí)鐘、復(fù)位、一鍵下載電路組成。該芯片是基于32位 ARM Cortex-M3 核心,最高工作頻率為 72 MHz,擁有48 KB SRAM, 256 KB FLASH[3]。
STM32內(nèi)置CAN控制器bxCAN,支持CAN2.0A和2.0B協(xié)議,最高支持1 Mbits/s。包含3個(gè)發(fā)送郵箱,2組各包含3個(gè)接收郵箱的FIFO,報(bào)文的接收和發(fā)送主要由STM32完成。CAN收發(fā)模塊主要采用TJA1050,是CAN控制器和物理總線(xiàn)之間的接口,是一種速率相對(duì)較高的收發(fā)器[4]。發(fā)送接收端口可直接與STM32的CAN_RX和CAN_TX端口相連。
觸摸屏主要采用的是ALIENTEK推出的4.3″TFTLCD電容觸摸屏。屏幕分辨率為800×480,16位真彩顯示,采用NT35510驅(qū)動(dòng),芯片自帶GRAM,無(wú)需任何外加驅(qū)動(dòng)器,支持5點(diǎn)同時(shí)觸摸,具有良好的操控效果。圖3為L(zhǎng)CD與STM32接口電路,LCD表示與顯示相關(guān)串口,T表示與觸摸控制通信相關(guān)串口。LCD采用16位8080并口,觸摸屏采用IIC接口。觸摸屏與CAN主站硬件通過(guò)兩排共32個(gè)排針連接和四角的安裝定位孔通過(guò)螺紋連接固定。
圖3 觸摸屏連接圖
從站電路如圖4所示,各通道均由電源模塊、STM32模塊、CAN收發(fā)器模塊、信號(hào)調(diào)理模塊和傳感器橋壓供電模塊組成。
圖4 CAN從站電路結(jié)構(gòu)
信號(hào)調(diào)理模塊電源模塊為±12 V供應(yīng),采用線(xiàn)性降壓穩(wěn)壓器LM7805和AMS117_3.3 V進(jìn)行降壓生成穩(wěn)定的5 V和3.3 V電壓為CAN收發(fā)器和STM32進(jìn)行供電。
采集壓力信號(hào)時(shí),壓力傳感器內(nèi)部為全橋結(jié)構(gòu),需要穩(wěn)定的10 V橋壓供電,采用REF102AP產(chǎn)生10 V基準(zhǔn)電壓供電。電橋輸出電壓信號(hào)非常小,通常為mV級(jí),采用高精度儀用放大器AD8221作為放大器,其具有較大的輸入阻抗,在G=1、頻率最高為10 kHz時(shí),AD8221的共模抑制比保持在80 db,相對(duì)于頻率的高共模抑制比使得AD8221可以抑制帶寬干擾和線(xiàn)路諧波,大大簡(jiǎn)化了濾波要求[5]。濾波電路采用MAX280芯片的低通巴特沃斯低通濾波電路,壓力采集有效信號(hào)頻率在1 kHz以下,MAX280是一種開(kāi)關(guān)電容濾波器,引腳4 DR接地,則分頻比為200,采用內(nèi)部140 kHz時(shí)鐘,截止頻率計(jì)算式如式(1)。
(1)
式中:fc為截止頻率;fcosc為時(shí)鐘頻率;DR為分頻比。
可通過(guò)改變引腳4的接法來(lái)得到不同截止頻率,此處DR接地,如圖5所示,分頻比為200,可得出截止頻率約為700 Hz,可以有效截止干擾信號(hào)。
圖5 放大濾波電路
調(diào)零信號(hào)采集電路由運(yùn)放ADOP07,STM32和AD7680共同組成。AD7680是Analog Device公司生產(chǎn)的一款16位,100 ksps,功率為3 mW的低功率、高速模數(shù)轉(zhuǎn)換芯片,參考電壓與電源電壓同步,具有關(guān)斷模式。支持SPI,QSPI,MICROWIRE和DSP高速串行通信[6]。調(diào)零信號(hào)采集電路中信號(hào)通過(guò)運(yùn)放ADOP07CH,輸出信號(hào)VOUT=1.65+VIN,零點(diǎn)值為1.65V,送入基準(zhǔn)電壓為3.3V的AD7680進(jìn)行模數(shù)轉(zhuǎn)換。
調(diào)零輸出電路主要由STM32、ADOP07和增益為1的放大器AD8221組成,如圖6所示,ADOP07輸出電壓VOUT2=1.65-VDAC1后,與原信號(hào)通過(guò)放大器AD8221,消除漂移電壓,實(shí)現(xiàn)調(diào)零輸出。
圖6 調(diào)零輸出電路
系統(tǒng)軟件主要由CAN主站通信程序,觸摸屏顯示控制程序及從站節(jié)點(diǎn)調(diào)零通信程序構(gòu)成,均采用STM32的固件庫(kù)在Keil μVision環(huán)境下采用C語(yǔ)言模塊化編程,均通過(guò)C語(yǔ)言編寫(xiě)。
各模塊程序是為了實(shí)現(xiàn)對(duì)傳感器的調(diào)零及傳感器數(shù)值的實(shí)時(shí)顯示。結(jié)構(gòu)流程包括:1) CAN主站、從站配置初始化;2)從站采集發(fā)送信號(hào)電壓;3)主站接收各個(gè)從站數(shù)據(jù),通過(guò)數(shù)值轉(zhuǎn)換、顯示程序,在屏幕上顯示各從站數(shù)值;4)點(diǎn)擊觸摸屏進(jìn)入調(diào)零模式,針對(duì)各從站接收傳感器傳來(lái)的數(shù)值,進(jìn)行相應(yīng)的上調(diào)、下降,循環(huán)以上步驟,使其接近零點(diǎn);5)點(diǎn)擊觸摸屏進(jìn)入數(shù)據(jù)采集模式,信號(hào)傳送給數(shù)據(jù)采集系統(tǒng)。
CAN控制器的初始化主要包括主控寄存器工作方式(CAN_MCR)和過(guò)濾器(CAN_FM1R)工作模式配置,在CAN主站中配置過(guò)濾器工作在標(biāo)識(shí)符屏蔽位模式,過(guò)濾出一組標(biāo)識(shí)符,CAN從站過(guò)濾器工作模式在標(biāo)識(shí)符列表模式,只接受發(fā)往自己的報(bào)文。CAN位時(shí)間的設(shè)定,是在CAN位時(shí)序寄存器(CAN_BTR)中設(shè)置。CAN的波特率設(shè)置如式(2)。
(2)
式中:tBS1=tq×(TS1[3:0]+1);tBS2=tq×(TS2[2:0]+1);tq=(BRP[9:0]+1)×tPCLK;tPCLK=APB時(shí)鐘的時(shí)間周期。
設(shè)置TS1=6,TS2=7和BRP=4,在APB1頻率為36MHz的條件下,即可得出波特率為450kHz。
CAN數(shù)據(jù)幀發(fā)送主要包括起始幀、仲裁段(基本ID、擴(kuò)展幀IDE和遠(yuǎn)程幀RTR設(shè)定)、控制端(數(shù)據(jù)段字節(jié)數(shù)LEN)、數(shù)據(jù)段(可包含8個(gè)字節(jié))、CRC段(檢查幀傳輸錯(cuò)誤)、ACK段(確認(rèn)是否正確接收)和幀結(jié)束段。
u8Can_Tx_Msg(u32 id,u8 ide,u8 rtr,u8 len u8 *canbuf)
//返回值:0~3,郵箱編號(hào).0XFF,無(wú)有效郵箱
voidCan_Rx_Msg(u8 fifox,u32 *id,u8 *ide,u8 *rtr,u8 *len,u8 *canbuf)
//fifox:郵箱號(hào)
顯示初始化流程為STM32和TFTLCD模塊相連IO口初始化、硬復(fù)位LCD、初始化序列、設(shè)置坐標(biāo)、寫(xiě)GRAM指令、寫(xiě)入顏色數(shù)據(jù)、LCD顯示,顯示各從站通道對(duì)應(yīng)的顯示位置。觸摸屏初始化為讀取LCD ID判斷是否為電容屏、執(zhí)行OTT2001A初始化代碼、進(jìn)入觸摸屏測(cè)試程序。
在壓力測(cè)試過(guò)程中,從站板子上電后,由于橋路的不平衡,運(yùn)放失調(diào)電壓等影響,所以輸出的電壓不等于零。點(diǎn)擊CAN主站觸摸屏進(jìn)入調(diào)零模式,從站STM32接收經(jīng)AD7680轉(zhuǎn)換的放大濾波信號(hào),在STM32內(nèi)置數(shù)模轉(zhuǎn)換DAC及AD7680輸出上述規(guī)定的零點(diǎn)電壓值1.65 V時(shí)和程序中設(shè)定的零點(diǎn)值存在一定的偏差,因此程序中添加了調(diào)零修正值tlb,如式(3)。
(3)
lingdian=0x8C10;//零點(diǎn)設(shè)定值
tiaoling[0] =Get_AD7680_Average(10);//STM32讀取十次取平均值
DAC_SetChannel2Data(DAC_Align_12b_R,0x0000);//設(shè)定輸出電壓0V
tiaoling[1] =Get_AD7680_Average(10);//讀取十次取平均值
DAC_SetChannel2Data(DAC_Align_12b_R,0x0fff);//設(shè)定輸出電壓3.3V
tiaoling[2] =Get_AD7680_Average(10);//讀取十次取平均值
tiaolingg=(tiaoling[0] +tlb)>>4;//加上調(diào)零補(bǔ)償值并右移四位以12位DA輸出 tlb由式(3)得出
DAC_SetChannel2Data(DAC_Align_12b_R,tiaolingg);//設(shè)定修正后的值輸出
tiaoling[0] =Get_AD7680_Average(10);//再次讀取
將最后讀取數(shù)值通過(guò)CAN通信傳輸?shù)街髡?,?biāo)準(zhǔn)標(biāo)識(shí)符代表通道號(hào),數(shù)據(jù)段包括2個(gè)字節(jié)。主站將16進(jìn)制數(shù)轉(zhuǎn)換成十進(jìn)制并在觸摸屏上顯示,此時(shí)進(jìn)入從站通道逐一調(diào)零模式,程序退出上述設(shè)定調(diào)零修正值程序,針對(duì)各從站通道一一進(jìn)行調(diào)零操作,從站STM32通過(guò)DAC1輸出相應(yīng)的電壓值,對(duì)調(diào)零電壓進(jìn)行更改;從站通道同時(shí)在接收傳感器信號(hào)及發(fā)送數(shù)據(jù),實(shí)現(xiàn)了觸摸屏上循環(huán)顯示,多次調(diào)零,直至調(diào)整至零位,達(dá)到精度要求。開(kāi)始數(shù)據(jù)采集,其流程圖如圖7所示。
圖7 調(diào)零程序流程圖
以STM32微處理器為核心,觸摸屏為人機(jī)交互界面,實(shí)現(xiàn)了基于CAN總線(xiàn)的多通道信號(hào)調(diào)理。CAN總線(xiàn)通信可靠,抗干擾能力強(qiáng),可擴(kuò)展性強(qiáng),傳輸速度高,對(duì)于火箭武器的現(xiàn)場(chǎng)測(cè)試環(huán)境具有良好的適應(yīng)性。通過(guò)微處理器的控制,可以實(shí)現(xiàn)反復(fù)調(diào)零,保證精度,測(cè)試者能直觀地觀察到調(diào)零信號(hào)大小,增加了信號(hào)調(diào)理的可靠性,同時(shí)也解決了測(cè)試時(shí)傳統(tǒng)手工調(diào)零的繁瑣,提升了便捷性,具有較好的實(shí)用價(jià)值。