文獻(xiàn)標(biāo)識(shí)碼: A
文章編號(hào): 0258-7998(2010)11-0052-04
系留飛艇地面監(jiān)測(cè)系統(tǒng)具有全天候、大視角、大覆蓋率、高機(jī)動(dòng)性等特點(diǎn),還能針對(duì)某一區(qū)域?qū)iT放大監(jiān)測(cè),將信息及時(shí)反饋地面站,所以在監(jiān)測(cè)方面應(yīng)用廣泛,但造價(jià)昂貴。此項(xiàng)目設(shè)計(jì)了價(jià)格低廉的系留飛艇地面監(jiān)測(cè)系統(tǒng),系統(tǒng)包括地面站和艇載模塊。艇載模塊需要完成的任務(wù)包括:通過無(wú)線通信模塊與地面站進(jìn)行通信,根據(jù)制定的通信協(xié)議解析接收的命令,做相應(yīng)的操作;為確保數(shù)據(jù)通信的正確性,將接收數(shù)據(jù)進(jìn)行循環(huán)冗余校驗(yàn),數(shù)據(jù)錯(cuò)誤則放棄,正確則進(jìn)行處理并由單片機(jī)PCA定時(shí)器生成PWM信號(hào)來控制云臺(tái)水平和垂直轉(zhuǎn)動(dòng)的舵機(jī);與數(shù)字羅盤進(jìn)行通信,獲取系留飛艇姿態(tài)信息發(fā)給地面站;單片機(jī)定時(shí)器0和定時(shí)器1對(duì)舵機(jī)帶動(dòng)旋轉(zhuǎn)編碼器轉(zhuǎn)動(dòng)時(shí)產(chǎn)生的脈沖進(jìn)行計(jì)數(shù)并將其反饋給地面站;單片機(jī)外部中斷0和1監(jiān)測(cè)零位開關(guān),對(duì)計(jì)數(shù)值進(jìn)行清零操作。根據(jù)艇載單片機(jī)發(fā)回的飛艇姿態(tài)和轉(zhuǎn)角信息,地面站分析并改變控制數(shù)據(jù)發(fā)送給飛艇模塊,以控制云臺(tái)按照意愿進(jìn)行地面監(jiān)測(cè)。
飛艇艇載模塊所要實(shí)現(xiàn)的功能相對(duì)比較簡(jiǎn)單,其控制單元僅需要2個(gè)串口,3個(gè)定時(shí)器,2個(gè)外部中斷和少數(shù)I/O口即可。STC12C5A60S2單片機(jī)有4個(gè)16 bit定時(shí)器,2個(gè)全雙工異步串行口,2個(gè)外部中斷入口,具有先進(jìn)的指令集結(jié)構(gòu),符合系統(tǒng)設(shè)計(jì)需要,故選擇此款單片機(jī)作為艇載模塊的控制單元,實(shí)現(xiàn)系統(tǒng)功能。
1 硬件結(jié)構(gòu)設(shè)計(jì)
艇載模塊根據(jù)地面站指令生成相應(yīng)的PWM信號(hào)使舵機(jī)轉(zhuǎn)動(dòng),與此同時(shí),單片機(jī)定時(shí)器對(duì)旋轉(zhuǎn)編碼器脈沖進(jìn)行計(jì)數(shù),并把計(jì)數(shù)值下傳,地面站根據(jù)收到的脈沖數(shù)計(jì)算云臺(tái)當(dāng)前角度,然后發(fā)送繼續(xù)轉(zhuǎn)或者停止轉(zhuǎn)動(dòng)命令指令。為了處理方便,在云臺(tái)上安裝了光電開關(guān),以確定絕對(duì)零度位置。因此,艇載模塊主要包括STC12C5A60S2單片機(jī)及其外圍電路,如圖1所示。
1.1 STR-30型微功率無(wú)線數(shù)傳模塊
STR-30無(wú)線數(shù)傳模塊提供標(biāo)準(zhǔn)RS-232、RS-485和UART 3種接口方式,可與計(jì)算機(jī)、RS-485設(shè)備、單片機(jī)或其他UART器件直接連接使用。無(wú)線模塊提供1個(gè)9針的連接器(JP1)、一個(gè)天線接口(ANT)和一組調(diào)線短路器(JP2)。短路器(JP2)負(fù)責(zé)通信信道、串口2類型和通信數(shù)據(jù)位的選擇。JP2的ABC三位跳線提供8種選擇,用戶可以通過ABC確定使用的0~7號(hào)信道。在一個(gè)通信小網(wǎng)中,只要ABC的跳線方式相同,就可相互通信。它提供兩個(gè)串口,COM1固定為TLL電平的UART串行口,COM2可通過JP2的D位來選擇接口方式為RS-485或RS-232。JP2的E位用來選擇數(shù)據(jù)是否帶有校驗(yàn)位。本系統(tǒng)采用COM1直接與單片機(jī)串口0連接與地面站通信,采用波特率為9 600 b/s。
艇載單片機(jī)通過無(wú)線傳輸模塊與地面站通信,整個(gè)協(xié)議都由地面站發(fā)起,地面站發(fā)送,艇載機(jī)應(yīng)答。地面站到飛艇的數(shù)據(jù)鏈路稱為上行鏈路,飛艇到地面站的數(shù)據(jù)鏈路稱為下行鏈路。上下行鏈路均采用表1所示的數(shù)據(jù)幀格式。
對(duì)于舵機(jī)命令,除幀頭、幀尾外,數(shù)據(jù)都用字符碼傳輸。計(jì)算方法為:待傳數(shù)據(jù)/128,傳送商和余數(shù),其CRC用字符表示,占用3 B。下行數(shù)據(jù)包括羅盤數(shù)據(jù)、電壓A/D數(shù)據(jù)、旋轉(zhuǎn)編碼器脈沖計(jì)數(shù)值,除羅盤數(shù)據(jù)外,其余量數(shù)據(jù)也用字符碼傳輸,計(jì)算方法同上。
飛艇應(yīng)答時(shí),若正常,則有數(shù)據(jù)就發(fā)數(shù)據(jù),無(wú)需應(yīng)答;若無(wú)數(shù)據(jù),則發(fā)正常應(yīng)答命令。地面站和飛艇,若第1個(gè)接收到的字節(jié)為非AAH,接收端都不響應(yīng),且從接收到第1個(gè)字節(jié)開始,啟動(dòng)接收超時(shí)定時(shí)器,若在規(guī)定時(shí)間未收完數(shù)據(jù),則自動(dòng)重新進(jìn)入待機(jī)狀態(tài),清除已接收到的數(shù)據(jù)。發(fā)送端也一樣,在發(fā)送完尾字節(jié)CCH后,都要啟動(dòng)超時(shí)定時(shí)器,若在規(guī)定時(shí)間未收到應(yīng)答,則延時(shí)一規(guī)定時(shí)間,重新發(fā)送。
1.2 旋轉(zhuǎn)編碼器
本系統(tǒng)采用增量脈沖雙脈沖輸出旋轉(zhuǎn)編碼器,其供電電壓為5 V,主要技術(shù)參數(shù)為1 000線/360 ℃(即每轉(zhuǎn)有1 000個(gè)脈沖),其兩路輸出為兩組相位差90 ℃的脈沖,這樣通過這兩組脈沖就可以判斷旋轉(zhuǎn)方向。其兩相輸出脈沖見圖2。應(yīng)用電路見圖3。
系統(tǒng)中需要兩個(gè)旋轉(zhuǎn)編碼器對(duì)舵機(jī)定位,若每個(gè)旋轉(zhuǎn)編碼器用兩個(gè)計(jì)數(shù)器分別對(duì)其正轉(zhuǎn)脈沖和反轉(zhuǎn)脈沖進(jìn)行計(jì)數(shù),則本系統(tǒng)需要四個(gè)計(jì)數(shù)器,而產(chǎn)生PWM信號(hào)需要占用1個(gè)定時(shí)器,系統(tǒng)資源不夠用,所以本文將旋轉(zhuǎn)編碼器的兩相輸入A作為D觸發(fā)器輸入,B作為時(shí)鐘脈沖CP,若正轉(zhuǎn),則每個(gè)B的上升沿A總為高電平,輸出為高電平,反之反轉(zhuǎn)其輸出總為低電平。這樣就可以根據(jù)D觸發(fā)器輸出判斷旋轉(zhuǎn)方向,而將A與B經(jīng)過與門得到正反轉(zhuǎn)計(jì)數(shù)脈沖,用定時(shí)器對(duì)這些脈沖計(jì)數(shù)即可計(jì)算出當(dāng)前角度。程序中通過判斷旋轉(zhuǎn)方向?qū)⒂?jì)數(shù)值分別累加到正轉(zhuǎn)計(jì)數(shù)變量或者反轉(zhuǎn)計(jì)數(shù)值變量。
1.3 數(shù)字羅盤
數(shù)字羅盤HMR3300體積小、功耗低、精度高,能實(shí)時(shí)準(zhǔn)確地輸出被測(cè)物體的航向、俯仰、橫滾三個(gè)方向上的狀態(tài)數(shù)據(jù)。單片機(jī)通過串口2接收數(shù)字羅盤發(fā)來的飛艇姿態(tài)信息,以便根據(jù)飛艇的方向控制舵機(jī)進(jìn)行地面監(jiān)測(cè),其通信波特率為9 600 b/s。
1.4 光電開關(guān)
光電開關(guān)是利用被檢測(cè)物對(duì)光束的遮擋或反射,有同步回路選通電路,從而檢測(cè)物體的有無(wú)。利用此性質(zhì),在云臺(tái)上安裝了兩個(gè)光電開關(guān)及遮擋物,以實(shí)現(xiàn)標(biāo)定其上兩個(gè)舵機(jī)轉(zhuǎn)動(dòng)的絕對(duì)零度位置。其應(yīng)用原理圖見圖4。光電開關(guān)中無(wú)遮擋物時(shí),輸出為高電平,否則為低電平。舵機(jī)轉(zhuǎn)動(dòng)時(shí),每次經(jīng)過絕對(duì)零度位置時(shí),固定的鐵片遮擋光電開關(guān),從而使輸出發(fā)生從高到低的變化,下降沿觸發(fā)外部中斷,清正反轉(zhuǎn)計(jì)數(shù)變量。
2 軟件設(shè)計(jì)
本系統(tǒng)主要功能是,艇載控制模塊能夠在地面站的控制下,生成PWM信號(hào)控制云臺(tái)上水平和垂直舵機(jī),使其按照設(shè)定角度轉(zhuǎn)動(dòng),以實(shí)現(xiàn)系留飛艇對(duì)地面的監(jiān)測(cè)。程序中串口0中斷接收地面站發(fā)來的數(shù)據(jù),由PCA定時(shí)器生成PWM信號(hào),定時(shí)器0和1分別用來對(duì)垂直和水平的旋轉(zhuǎn)編碼器脈沖計(jì)數(shù),外部中斷0和1分別接水平和垂直安裝的光電開關(guān)輸出,以標(biāo)定絕對(duì)零度位置。
2.1 主程序
主程序中主要完成了系統(tǒng)各個(gè)部分的初始化,讀定時(shí)器0和定時(shí)器1中計(jì)數(shù)值,讀電壓A/D數(shù)據(jù)等任務(wù)。程序中將中斷分為4個(gè)等級(jí),生成PWM信號(hào)控制舵機(jī)轉(zhuǎn)動(dòng)的PCA定時(shí)器中斷優(yōu)先級(jí)最高,為了保證羅盤數(shù)據(jù)的完整性,用于接收其數(shù)據(jù)的串口1中斷優(yōu)先級(jí)次之,串口0中斷低于串口1中斷,外部中斷和定時(shí)器中斷優(yōu)先級(jí)最低。程序中設(shè)有4個(gè)返回?cái)?shù)據(jù)標(biāo)志位,aad_flag,ad_flag,pose_flag,shuju_flag,前三個(gè)分別與定時(shí)器計(jì)數(shù)值及A/D數(shù)據(jù)和數(shù)字羅盤返回姿態(tài)數(shù)據(jù)對(duì)應(yīng),當(dāng)有對(duì)應(yīng)數(shù)據(jù)時(shí)將標(biāo)志位置1,有任一返回?cái)?shù)據(jù)時(shí)將shuju_flag置1。程序流程圖見圖5。
2.2 PCA定時(shí)器中斷子程序
控制多舵機(jī)或電機(jī)的工作,并且使其工作周期均為20 ms時(shí),要求硬件產(chǎn)生的多路PWM波的周期也相同[1]。控制舵機(jī)的PWM信號(hào)的正脈沖寬度為0.5 ms~2.5 ms,控制電機(jī)的PWM信號(hào)的正脈沖為1 ms~2 ms。程序中實(shí)現(xiàn)了生成可變路數(shù)且最多為8路PWM信號(hào),具體路數(shù)視具體情況由地面站決定。利用STC系列單片機(jī)的PCA定時(shí)器對(duì)系統(tǒng)時(shí)鐘脈沖計(jì)數(shù),每路信號(hào)由兩次中斷實(shí)現(xiàn),先實(shí)現(xiàn)正脈沖定時(shí)中斷,然后負(fù)脈沖中斷,兩次中斷總定時(shí)為2.5 ms,即1路PWM信號(hào)占用2.5 ms,8路信號(hào)占20 ms,而每一路信號(hào)除了定時(shí)的正脈沖時(shí)間為高電平,剩余17.5 ms~19.5 ms內(nèi)均為低電平,這樣保證了每路信號(hào)的周期均為20 ms,且可以在1個(gè)周期內(nèi)順次啟動(dòng)各路PWM波的上升沿,生成PWM信號(hào),提高了效率。每次中斷后有一變量自加,控制下次中斷進(jìn)入的定時(shí)入口,在每次循環(huán)的第16次中斷將此變量清零,這樣就可以實(shí)現(xiàn)8路PWM控制信號(hào)的輸出。為了確保20 ms內(nèi)定時(shí)數(shù)據(jù)不隨地面站發(fā)來數(shù)據(jù)影響而改變,程序中采用了雙緩沖的做法,在第16次中斷時(shí)將新數(shù)據(jù)更新到PCA定時(shí)初值緩存中。流程圖見圖6。
2.3 串口0中斷子程序
單片機(jī)串口0和地面站通信,以獲得生成PWM信號(hào)的數(shù)據(jù)。程序中采用中斷接收和中斷發(fā)送,并在中斷程序中對(duì)接收到的命令進(jìn)行了解析,對(duì)于數(shù)據(jù)命令,對(duì)舵機(jī)數(shù)據(jù)進(jìn)行了循環(huán)冗余校驗(yàn),將正確的數(shù)據(jù)作為形參調(diào)用計(jì)算定時(shí)器初值的函數(shù),函數(shù)值存放在定義好的數(shù)組當(dāng)中,在PCA第16次中斷時(shí),將此數(shù)組中數(shù)據(jù)更新到PCA定時(shí)初值緩存中。
2.4 串口1中斷子程序
串口1中斷用于接收來自數(shù)字羅盤的飛艇姿態(tài)信息,每接收完一幀數(shù)據(jù)并根據(jù)標(biāo)志位s_mark的狀態(tài)決定是否將此刻數(shù)據(jù)更新到發(fā)送緩存中,以防止新數(shù)據(jù)沖去原數(shù)據(jù),并置1pose_flag和shuju_flag標(biāo)志位。
2.5 數(shù)據(jù)發(fā)送子程序
艇載模塊有數(shù)據(jù)返回地面站時(shí),發(fā)送命令‘M’,格式如圖7所示。
數(shù)據(jù)辨別位占1字節(jié),用此字節(jié)后三位表示是否有姿態(tài)、角度、A/D數(shù)據(jù),有則置1該位,無(wú)則清零。用其前兩位分別表示旋轉(zhuǎn)編碼器正轉(zhuǎn)脈沖數(shù)與反轉(zhuǎn)脈沖數(shù)之差是否小于零,若小于零,則置1對(duì)應(yīng)位,否則清零。此位表征了舵機(jī)當(dāng)前位置處于絕對(duì)零點(diǎn)位置的左邊還是右邊,若為1,則在零點(diǎn)左邊。數(shù)據(jù)區(qū)排放次序依次是姿態(tài)、角度、A/D數(shù)據(jù),若無(wú)前者數(shù)據(jù)則順次前移。s_mark和aa_flag標(biāo)志是為了保證放到發(fā)送緩沖區(qū)的姿態(tài)數(shù)據(jù)和角度數(shù)據(jù)的完整性。
2.6 定時(shí)器0與1中斷子程序
定時(shí)器0與1分別用來對(duì)兩個(gè)旋轉(zhuǎn)編碼器的脈沖進(jìn)行計(jì)數(shù),當(dāng)計(jì)數(shù)溢出時(shí),需要對(duì)TH和TL重新賦初值0,而用于保存上一時(shí)刻計(jì)數(shù)值和當(dāng)前計(jì)數(shù)值的緩存變量需要清零,以保證角度精度。
2.7 外部中斷0與1中斷子程序
外部中斷0與1用于標(biāo)定云臺(tái)上舵機(jī)轉(zhuǎn)動(dòng)的絕對(duì)零點(diǎn)位置。中斷中將正反轉(zhuǎn)計(jì)數(shù)變量清零,以實(shí)現(xiàn)在絕對(duì)零點(diǎn)位置輸出角度為零,角度增量也為零。
經(jīng)實(shí)際系留飛艇DZ-1驗(yàn)證,本模塊依據(jù)制定的通信協(xié)議,在地面站的控制下,能夠控制舵機(jī)轉(zhuǎn)動(dòng)到設(shè)定角度對(duì)地面進(jìn)行監(jiān)測(cè),并將飛艇姿態(tài)信息、A/D數(shù)據(jù)和角度信息適時(shí)發(fā)送給地面站,以更好地控制其完成地面監(jiān)測(cè)任務(wù)。
參考文獻(xiàn)
[1] 劉歌群,盧京潮,閆建國(guó),等.用單片機(jī)產(chǎn)生7路舵機(jī)控制PWM波動(dòng)方法[J].機(jī)械與電子,2004(2).
[2] 張毅剛,彭喜元,董繼成.單片機(jī)原理與應(yīng)用[M].高等教育出版社,2006.