摘 要: 介紹了Atmel公司生產的AVR單片機Atmega32在野外無線自動報靶系統中的應用。該系統集輕武器射擊訓練所需的各種功能于一身,包括精確和非精確報靶、射擊成績的自動實時顯示、統計和打印,可滿足多種武器和多種射擊模式的訓練需求,解決了實彈射擊的報靶問題。
關鍵詞: 傳感器;數據采集;控制電路;射擊模式
目前,在野外射擊訓練考核中,大部分還是通過人工報靶的方法,帶有很多人為因素(如報靶人員的主觀性、情緒等),影響報靶的結果,使得射手不能正確了解自己的成績,不利于打靶水平的提高。雖然現在市面上出現了一些自動報靶產品,但這些產品的成本高、系統比較復雜,并且占用場地。因此,本文根據實際訓練需要,研制出了集輕武器射擊訓練所需的所有功能于一體的、基于AVR單片機的一種無線自動報靶系統。該系統包括精確和非精確報靶,射擊成績的自動實時顯示、統計和打印,可以滿足多種武器和多種射擊模式的訓練需求,對目標的隱顯時機、次數、間隔等均按訓練大綱要求由電腦自動控制,既可同時監控多個(25個)靶位的射擊情況,也可單獨監控一個靶位的射擊情況。
1 系統組成
無線自動報靶系統由傳感器(特制頭靶、胸靶、身靶等)、數據采集、無線傳輸、數據處理、顯示和打印機等構成。報靶傳感器為特制的靶子,其兩面各有一層導電橡膠(或其他導電軟材料),反面導電橡膠接地線,正面按胸環靶樣式用絕緣材料分隔成不同環位和方位區域,不同區域分別引出信號線。當子彈穿越靶子,射擊目標的報靶可以精確到5~10環(以胸環靶為例),彈著點的顯示可以精確到圓周的1/8,即將每一環分為8個區域,報靶信息即為射擊的環數和所處的區域。圖1為紙上對環和區域的劃分情況。
當子彈穿過目標時,在瞬間會連通其中的一個環和一個區域,完成數據采集,單片機由此確定報靶信息,編碼后由收發模塊調制發出,完成射擊成績的報靶。子彈擊中目標的情況如圖2所示。
2 單片機控制電路設計
在本系統中,單片機采用Atmel公司的AVR單片機Atmega32。在如圖3所示的單片機控制電路圖中,PB端口和PC端口用于檢測靶的環和區的信號,當有子彈穿過靶時,會將連接在PB和PC端口對應的環和區引腳導通,通過讀取PB和PC端口的引腳電平狀態,即可分析出子彈擊中了靶中哪個環和區。
圖3中,PA0引腳的ADC用于將采樣電機過載電流信號傳送給MCU,PD4~PD7用于驅動全橋電路的4個臂端,以保證電機正常運轉。K1、K2按鍵的功能是手動啟動電機將靶拉起或放倒。PD0、PD1引腳是串行通信接口的RXD和TXD,這兩個引腳與無線發射/接收模塊的TXD和RXD相連接,當ATmega32單片機檢測到子彈擊中靶子時,將計算出來的環和區的信號通過RXD和TXD引腳發射出去,傳送到計算機軟件系統。
由于子彈的速度很快(達到1 000 m/s),靶的內部鋁層厚度為5 mm,使穿透鋁層最小時間只需5 μs。而在這5 μs時間之內,Atmega32單片機必須通過PB和PC端口完成實時的采樣,并同時計算出子彈是穿透哪個環和區。因此,必須為Atmega32配置高速的時鐘源。由于Atmega32單片機頻率最高可以達到25 MHz,但同時還要滿足串行通信的波特率要求,因此,Atmega32采用18.432 MHz的時鐘源,為整個系統高速運算提供保證。
在實際測試中,Atmega32單片機從檢測到子彈開始發射到子彈穿透鋁層,并確定子彈穿透的是哪個環和區,不到2 μs就可以完成采樣。
3 單片機軟件設計
單片機軟件主要功能:(1)實時檢測是否有子彈穿透訓練靶,若檢測到有子彈穿過,程序獲取靶被擊中的環和區,并將該靶的環和區信息通過串口發送出去。由于這部分程序對時間要求極為苛刻,因此將這部分內容由INT0外部中斷服務程序來完成。(2)單片機串口實時監測是否有控制中心發來的數據幀,若有,則讀取數據幀內容,并分析是否為合法數據幀,若是非法幀,則丟棄該幀;若是合法數據幀,則分析該幀的內容,并置接收幀成功標志。由于控制中心可能隨時會發送數據幀過來,這部分內容交給串口的中斷服務程序來完成。(3)主程序中,除了完成相關初始化內容之外,主要判斷按鍵K1和K2是否按下,若有則執行電機驅動的拉起和放倒動作;同時,還檢測接收到的數據幀標志是否成功,若成功,則根據數據幀的命令字來分析夜間指示燈的開或關閉、啟動電機作拉起或放倒動作等。
主程序流程圖如圖4所示。
信號采集檢測直接利用AVR單片機芯片內置的10 bitA/D轉換器,采樣PA0端口的輸入模擬電壓。將該模擬電壓轉換成數字電壓,首先要對A/D轉換器進行初始化,具體程序如下:
void AVR_ADC_Init(void)
{
ADMUX = 0x00; //選擇參考電壓源為+5 V,
//左對齊方式,并選擇模擬通道ADC0
ADCSRA = 0xCF;//使能ADC模塊,
//并啟動ADC轉換開始,配置預分頻比1:128
}
為了提高實時采樣保護電機,過流檢測分析程序段放在A/D轉換的中斷服務程序中完成。A/D轉換中斷服務程序如下:
#pragma vector=ADC_INT
__interrupt void ADC_vect_isr(void)
{
if(ADCH>200)MotorBreak(); //若檢測到電流
//超過20 A,則讓電機停止
}
在進行電機驅動程序設計時,利用AVR單片機內置的PWM模塊來實現。該模塊具有如下特征:(1)支持快速PWM產生模式;(2)支持相位修正的PWM產生模式;(3)支持相位與頻率修正的PWM產生模式。這些模式都能夠很好地產生所需的PWM信號,利用PWM信號可很容易實現對電機速度的調節。利用PWM模塊的特點,設計的電機驅動函數為MotorStartRun(unsigned char direction,unsigned int speed)。在該函數中,參數direction用于控制電機轉換方向,參數speed用于調節電機運行速度。電機驅動程序流程圖如圖5所示。
該報靶系統實現了射擊環數和方位在靶區域的實時顯示以及PC機監控終端的實時監控,射擊中可統計個人及單位的單發成績和總體成績。經大量實驗證明,其分析原理正確、設計指標先進、攜帶方便、報靶準確,適用于各式槍械的報靶;抗干擾強,適合野外使用?,F已在現場使用,并取得了良好的效益。
參考文獻
[1] 黃勝.自動報靶機的設計與實現[J].毅據采集與處理,1997,12(2):155-156.
[2] Atmel Corporation. ATmega32(L)datasheet. 200l.