Design of the New Type of Dual-core Flight Control System
杜紅彬 徐芳俊 江 哲
(華東理工大學(xué)信息科學(xué)與工程學(xué)院,上海 200237)
一種新型雙核飛行控制系統(tǒng)的設(shè)計
Design of the New Type of Dual-core Flight Control System
杜紅彬徐芳俊江哲
(華東理工大學(xué)信息科學(xué)與工程學(xué)院,上海200237)
摘要:針對現(xiàn)有雙核飛行控制系統(tǒng)方案中CPU之間通信存在接口電路復(fù)雜、通信速率低、擴展性差的問題,提出了一種采用并行16位GPIO口直接互連并利用中斷應(yīng)答機制控制CPU之間數(shù)據(jù)通信的方案。選用兩片基于Cortex-M4內(nèi)核具有單周期浮點運算能力的STM32F407進行同步控制與通信,并利用MicroXplorer軟件完成CPU外設(shè)管腳資源的分配與設(shè)計,制定并編寫了相關(guān)通信協(xié)議。經(jīng)檢驗,這種雙CPU直接并口通信的方式,既能滿足飛控系統(tǒng)高速可靠的數(shù)據(jù)交換,同時又簡化了CPU之間的通信接口電路,是一種簡便可行的方案。
關(guān)鍵詞:飛行控制系統(tǒng)STM32F407MicroXplorer并口通信GPIO
Abstract:At present, in existing dual-core flight control system schemes, the communication between CPU features disadvantages of complex circuitry, low communication rate, and poor expansibility, thus the scheme is proposed, in which parallel 16-bit GPIO port direct interconnection is adopted, and communication between CPU is controlled through interrupt response mechanism. Two of the STM32F407 chips based on Cortex-M4 inner core, and features single cycle floating point operation capability are selected for synchronize control and communication; and MicroXplorer software is used to accomplish the distribution and design of the peripheral pin resources of CPU, and relevant communication protocol is formulated and written. The tests indicate that the direct parallel communication between dual CPU meets the requirements of high speed reliable data exchange, and simplified the communication interfacing circuit between CPU, it is a simple and feasible scheme.
Keywords:Flight control systemSTM32F407MicroXplorerParallel communicationGPIO
0引言
無人飛行器(unmanned aerial vehicle,UAV)是當(dāng)前研究的一個熱點[1-3],飛行控制系統(tǒng)作為其核心,優(yōu)劣性決定飛行性能的高低。飛行控制系統(tǒng)處理的任務(wù)主要有:①實時計算飛行姿態(tài)系統(tǒng)檢測到的飛行狀態(tài)信息(包括高度、姿態(tài)角、三軸角速度、三軸加速度等),并計算出相應(yīng)的操縱變量;②實現(xiàn)無線通信模塊與地面站之間的通信,將飛行器的狀態(tài)信息傳給地面站,同時接收地面站的控制指令執(zhí)行相應(yīng)的動作。單個CPU處理這些任務(wù)時存在著實時性和可靠性較低的問題,因此很多文獻采用雙核架構(gòu)[4-5]。然而,兩個CPU之間的通信實時性、可靠性如何保證,是個非常棘手的問題?,F(xiàn)有的通信方案有:①采用SPI通信方案[6],SPI通信方式簡單,卻具有通信速率較低的問題,通信速率無法滿足實時性要求;②采用ARM+CPLD+雙口RAM方案[7],這種方案接口電路較為復(fù)雜,需保證各分立元件的可靠無誤,同時調(diào)試的復(fù)雜度也增加;③采用異步通信方案[8],收發(fā)雙方由于包含了開始位和停止位,傳輸速度和效率均較低。
綜上所述,本文介紹一種簡潔、高效的雙核飛行控制系統(tǒng)。該飛控系統(tǒng)采用兩片基于Cortex-M4內(nèi)核具有單周期浮點運算能力的STM32F407,利用并行16位GPIO口直接互連,以中斷應(yīng)答機制控制兩個CPU之間的數(shù)據(jù)交換,同時編寫了CPU之間的通信協(xié)議,實現(xiàn)雙CPU之間的高速、實時、可靠的通信。另外,這種雙核架構(gòu)可以實現(xiàn)相互監(jiān)督,比如一個CPU可以監(jiān)督另外一個CPU閉環(huán)控制的質(zhì)量、故障等,實現(xiàn)了最小冗余化的可靠性保證。
1系統(tǒng)硬件設(shè)計
飛行控制系統(tǒng)應(yīng)具備四方面的特性:①多路模擬信號的高精度采集能力;②多串口的通信能力;③足夠多的I/O接口和多頻率信號輸出能力;④高精度、低延時的浮點運算能力?;谏鲜鎏匦缘目紤],我們采用意法半導(dǎo)體公司的STM32F407作為飛行控制系統(tǒng)的處理器。STM32F407是意法半導(dǎo)體公司推出的基于Cortex-M4內(nèi)核32位的ARM處理器,內(nèi)部集成高性能的DSP浮點運算單元,工作頻率高達168 MHz,內(nèi)部具有1 MB的Flash和192 kB的SRAM,同時擁有極豐富的外設(shè)資源。因此,STM32F407成為飛行控制系統(tǒng)處理器較為理想的選擇。
CPU外設(shè)管腳資源一般通過手工進行分配,管腳資源分配效率低,而且容易出錯。本文采用意法半導(dǎo)體公司的MicroXplorer軟件對STM32F407外設(shè)管腳資源進行最優(yōu)分配,提高了開發(fā)設(shè)計效率。MicroXplorer 是意法半導(dǎo)體公司推出的一個圖形化工具,使用戶能夠非常方便地分配STM32系列微處理器的外設(shè)管腳資源,并可以生成相應(yīng)的管腳驅(qū)動代碼。MicroXplorer提供兩種視圖模式用于執(zhí)行微處理器配置:①外設(shè)面板視圖模式,用于選擇每個外設(shè);②高級用戶操作模式,用于強制外圍函數(shù)映射到一個物理引腳。本系統(tǒng)由雙核構(gòu)成,即飛行控制處理器和通信處理器,因此利用MicroXplorer對它們分別進行了外設(shè)管腳資源分配。
飛行控制系統(tǒng)由控制和通信兩部分組成,采用兩個STM32F407分別作為各部分的CPU。飛行控制系統(tǒng)的架構(gòu)如圖1所示,主要由電源模塊、雙ARM處理器、多路數(shù)據(jù)采集、多PWM電機控制輸出、多路I/O接口、外部通信接口等部分組成。
圖1中,控制部分主要是調(diào)理A/D信號輸入,輸出PWM信號,同時利用多個I/O口輸出隔離控制信號。通信部分主要利用通信接口與外界通信。兩個CPU之間的通信則采用兩組16位的GPIO口直接互連,利用中斷應(yīng)答機制控制數(shù)據(jù)的收發(fā)。系統(tǒng)的具體功能如下。
圖1 系統(tǒng)結(jié)構(gòu)框圖
① 使用通信接口與三軸加速度計、三軸磁力計、三軸陀螺儀、大氣壓計、溫度傳感器、通信模塊等傳感器進行通信。
② 使用多路A/D采集電池電量、電源轉(zhuǎn)換后的電源精度,同時測量電機的電流等信號。
③ 輸出多路PWM信號驅(qū)動舵機或者輸出調(diào)速信號控制電機轉(zhuǎn)動速度。
2關(guān)鍵子模塊設(shè)計
電源是系統(tǒng)可靠運行的前提,針對系統(tǒng)外設(shè)通信轉(zhuǎn)換器件較多的特點,設(shè)計了兩路3.3 V的電源,即VDD和VCC(3.3 V),以滿足系統(tǒng)的功率消耗需求。一路VDD給兩個最小系統(tǒng)供電,一路VCC(3.3 V)給通信轉(zhuǎn)換芯片供電。另外,考慮到CPU需要使用A/D精確對外部的模擬量信號進行采樣轉(zhuǎn)換,特意設(shè)計了一路A/D轉(zhuǎn)換參考電壓Vref(1.5 V)。系統(tǒng)電源框架如圖2所示。
圖2 系統(tǒng)電源框架圖
對于雙CPU之間的通信,采用SPI通信方案存在通信速率較低的缺點,采用雙口RAM+CPLD方案則硬件復(fù)雜且訪問有延遲,異步通信方案存在通信效率低的問題??偨Y(jié)上述方案的不足,我們需要設(shè)計一種通信速率高、硬件電路簡單、擴展性好的雙CPU之間的通信方案。兩個STM32F407之間的GPIO口直接互連通信具有以下特點:①GPIO口之間通信可以視為CPU內(nèi)部兩個寄存器之間的通信,這樣既簡化了CPU之間的通信接口設(shè)計,又使得通信具有低延遲、可靠的特點;②STM32F407的GPIO口電平狀態(tài)翻轉(zhuǎn)只需要兩個時鐘周期,單次通信速率高達約6 ns/次,滿足實時通信的設(shè)計要求;③利用GPIO口進行數(shù)據(jù)交換時,只需將相應(yīng)的GPIO口配置成輸入或者輸出模式,讀寫數(shù)據(jù)時操作相應(yīng)的輸入和輸出數(shù)據(jù)寄存器即可,大大簡化了接口電路和編程的復(fù)雜度?;谝陨蟽?yōu)點,本系統(tǒng)兩個STM32F407之間的數(shù)據(jù)交換采用并口GPIO直接互聯(lián)通信方案。
利用并口GPIO傳輸數(shù)據(jù),如何進行端口互聯(lián)和控制收發(fā)是一個需要綜合考慮的問題?,F(xiàn)有兩種方案可供選擇。
① 一個CPU的一組16位的GPIO端口與另一個CPU的一組16位的GPIO端口直接并行互聯(lián),利用定時器按一定的時間產(chǎn)生發(fā)送標志位,控制數(shù)據(jù)發(fā)送。由于GPIO具有方向性,在某一時刻只能單向通信,要實現(xiàn)收發(fā),需要切換收發(fā)方向,通信較為不便;同時利用定時器來控制數(shù)據(jù)發(fā)送,無法做到實時性。
② 一個CPU的兩組16位的GPIO端口與另一個CPU的兩組16位的GPIO端口直接并行互聯(lián),同時利用外部中斷應(yīng)答機制控制數(shù)據(jù)收發(fā)。該方案克服了方案一某一時刻只能單向通信的不足,能同時進行雙向傳輸數(shù)據(jù)。同時,利用中斷機制控制收發(fā),實行分時操作,提高了CPU的效率。因此,本系統(tǒng)采用第二種方案。圖3為兩個CPU之間的通信接口原理圖。
圖3 兩個CPU的通信接口原理圖
圖3中,兩個CPU的兩組16位GPIO口(PE口和PF口)兩兩并行直接互連,兩對中斷收發(fā)控制線(PG0、PG1和PG2、PG3)也并行直接互聯(lián)。利用這兩對中斷收發(fā)控制線分別控制PE口和PF口的數(shù)據(jù)收發(fā)。圖4為通信STM32F407的數(shù)據(jù)傳輸時序圖。圖4中,PCLK2為STM32F407內(nèi)部APB2的時鐘,PG2、PG3分別為PF口數(shù)據(jù)交換的中斷請求引腳和中斷應(yīng)答引腳。
圖4 STM32F407(通信)的數(shù)據(jù)傳輸時序圖
圖3中,STM32F407(通信)為發(fā)送方,STM32F407(控制)為接收方。兩者的PG2、PG3空閑時都置為高電平狀態(tài),當(dāng)發(fā)送方要申請發(fā)送PF口的數(shù)據(jù)時,先將自身的PG2拉低為低電平,產(chǎn)生下降沿并向接收方申請中斷,表示準備發(fā)送數(shù)據(jù)。接收方的PG2口檢測到下降沿后,空閑情況下,PG2口產(chǎn)生下降沿應(yīng)答發(fā)送方,表明已經(jīng)準備接收數(shù)據(jù)。之后,發(fā)送方將一幀數(shù)據(jù)寫到自身的PF口數(shù)據(jù)輸出寄存器,接收方立即去讀取自身的PF口的數(shù)據(jù)輸入寄存器。每讀完一幀數(shù)據(jù)接收方就產(chǎn)生一個下降沿,通知發(fā)送方數(shù)據(jù)已讀完;發(fā)送方收到下降沿后,接著發(fā)送下一幀數(shù)據(jù)。如此往復(fù)循環(huán),實現(xiàn)數(shù)據(jù)的連續(xù)發(fā)送。
3系統(tǒng)軟件設(shè)計
為實現(xiàn)雙CPU之間高效、可靠的通信,我們需制定兩者之間的通信協(xié)議[9]。首先,需將16位的GPIO口(PE或者PF)進行功能細化,針對不用的位分配不同的功能?,F(xiàn)規(guī)定一組16位GPIO口中的低八位為8位數(shù)據(jù),高八位中低四位為4位地址,高八位中的高四位為4位CRC校驗[10]。圖5為16位GPIO口的功能分配。
圖5 16位GPIO口的功能分配
GPIO端口功能分配完后,即進行相應(yīng)協(xié)議的制定。
① 協(xié)議概述
系統(tǒng)定義一個主/從協(xié)議,該協(xié)議規(guī)定發(fā)送方為主機,接收方為從機,主機在同一時刻只發(fā)起一個數(shù)據(jù)通信任務(wù)請求,從機在沒有收到主機的請求時并不主動發(fā)送數(shù)據(jù)。主機以單任務(wù)和廣播兩種模式對從機發(fā)出數(shù)據(jù)通信請求。在單任務(wù)模式下,主機每次發(fā)送單個任務(wù)地址給從機,從機接到并處理完請求后,向主機返回一幀數(shù)據(jù)。這種模式下,系統(tǒng)數(shù)據(jù)通信任務(wù)需要處理兩個報文:一個是主機的請求,另一個是來自從機的應(yīng)答,每個任務(wù)地址必須是規(guī)定的唯一地址,這樣才能區(qū)別于其他任務(wù)被尋址。在廣播模式下,主機向從機發(fā)送廣播地址,對于主機的廣播請求從機并不需要應(yīng)答返回,地址0為廣播地址。
② 幀描述
針對本系統(tǒng)CPU之間通信的協(xié)議,CPU之間通信時數(shù)據(jù)幀的格式如表1所示。
表1 幀的定義格式
表1中,8位數(shù)據(jù)作為幀的開頭,接著是4位任務(wù)地址,幀的末尾是4位CRC校驗。傳輸一幀數(shù)據(jù)時,包含8位數(shù)據(jù)和可以尋址16個任務(wù)地址的4位地址位,同時為提高數(shù)據(jù)通信的可靠性,幀末尾添加了4位CRC校驗值。
③ 地址規(guī)則
該協(xié)議任務(wù)地址有16個不同的地址,表2為任務(wù)地址的分配。
表2中,0為廣播地址,主機可以向從機寫相應(yīng)的命令,而從機并不需要應(yīng)答返回。1~10為單個任務(wù)地址,每個地址是可以唯一被尋址的任務(wù)地址,主機每次只能尋址一個任務(wù)地址。11~15為保留任務(wù)地址,方便以后尋址的擴展。
表2 任務(wù)地址的分配
④ 4位CRC校驗
該協(xié)議包含一個對全部報文內(nèi)容執(zhí)行并基于循環(huán)冗余校驗(CRC) 算法的4位錯誤檢驗域。CRC域檢驗整個報文的內(nèi)容,由4位值構(gòu)成。CRC域作為報文的最后的域附加在報文之后和報文一起發(fā)送。
附加在報文后面的4位CRC值由發(fā)送方計算,接收方在接收報文時重新計算整個報文的4位CRC值,并將計算結(jié)果和實際接收到的4位CRC值進行比較。如果兩者相等,則為正確,否則為錯誤。
假定發(fā)送方為主機,接收方為從機,那么系統(tǒng)的每個CPU既是主機又是從機。主從機工作流程圖如圖6、圖7所示。
圖6 主機工作流程圖
圖7 從機工作流程圖
根據(jù)上一節(jié)定義的通信協(xié)議,首先CPU對主機待發(fā)送緩沖區(qū)的數(shù)據(jù)進行處理,同時初始化從機接收數(shù)據(jù)緩沖區(qū)。隨后,主/從機通過中斷請求應(yīng)答機制發(fā)送和接收數(shù)據(jù)。從機接收完一定的數(shù)據(jù)(假設(shè)N個)后,為方便CPU對接收到的數(shù)據(jù)進行處理,采用DMA方式對接收到的數(shù)據(jù)進行內(nèi)存到內(nèi)存的移動。
圖6中,主機將待發(fā)送的8位數(shù)據(jù)添加4位地址,然后對這12位數(shù)進行4位CRC校驗值,最后組合成一個16位的數(shù)據(jù)傳輸給待發(fā)送的緩沖區(qū)。主機處理函數(shù)程序如下。
uint16_t Master_handler(uint8_tm)
{
uint8_t jy_crc, data, addr;
uint16_t temp;
temp= 0;
jy_crc= 0, data=0, addr=0;
data = COM_Txbuf[m];
//獲取待發(fā)送的數(shù)據(jù)
addr = COM_Transfer_addr[m];
//獲取待發(fā)送的地址
temp= addr;
temp= (temp<<8)+data;
//得到12位的值,8位數(shù)據(jù)+4位地址
jy_crc= CRC4(temp);
//查表獲得4位的CRC值
temp|=(jy_crc<<12);
//將jy_crc值左移12位,為高字節(jié)的高四位
return temp;
//返回16位的數(shù)
}
圖7中,從機接收完N個16位數(shù)后,需要對它們進行拆分解析。首先,拆分得到8位的數(shù)據(jù)、4位地址、4位CRC值,隨后對16位數(shù)的前12位進行CRC校驗,得到這12位數(shù)據(jù)的4位CRC值。之后,首先進行發(fā)送雙方數(shù)據(jù)地址的匹配。如果不正確,則返回地址錯誤代碼;如果正確,則比對接收到的CRC碼和校驗后的CRC校驗值。如果兩者相等,則將8位數(shù)據(jù)保存起來;如果不相等,返回CRC出錯代碼。這樣,進一步提高了數(shù)據(jù)通信的可靠性。從機處理函數(shù)程序如下。
void Slave_handler(uint8_t j)
{
uint16_t temp;
temp= COM_DST_Buffer[j];
//數(shù)據(jù)接收緩沖區(qū)
data= (uint8_t)(temp&0x00ff);
//接收到的數(shù)據(jù),低字節(jié)
addr= (uint8_t)((temp>>8)&0x000f);
//接收到的地址,高字節(jié)中的低四位
js_crc = (uint8_t)((temp>>12)&0x000f);
//接收到的CRC碼值,高字節(jié)中的高四位
temp= temp&0x0fff;
jy_crc =CRC4(temp);
//計算接收到的數(shù)據(jù)的CRC的值
if(addr == COM_Receive_addr[j])
//如果是發(fā)給地址正確
{
if(jy_crc == js_crc)
//如果接收到的CRC碼和校驗后的CRC碼相同
{
COM_Txbuf[j] = data;
//將數(shù)據(jù)存在Rx_handler這個數(shù)組中,給DMA
}
else
//校驗碼不同,傳送出錯
{
COM_Txbuf[j] = CRC_ERR;
//將CRC出錯的數(shù)據(jù)一律賦值為0xff
}
}
else
//地址不正確
{
COM_Txbuf[j] = ADDR_ERR;
//將地址出錯的數(shù)據(jù)一律賦值為0x00
}
}
4系統(tǒng)運行測試
利用搭建好的雙CPU飛行控制系統(tǒng)電路板,對該系統(tǒng)CPU之間的通信進行測試。首先,為測試方便,在主機中定義8個待發(fā)送的8位數(shù)據(jù),并給這8個數(shù)據(jù)分別對應(yīng)8個4位地址。利用上一節(jié)所述的通信流程,主機向從機發(fā)送8個數(shù)據(jù)。從機接收到數(shù)據(jù)后,利用DMA方式將數(shù)據(jù)進行內(nèi)存到內(nèi)存的移動,以便從機對接收到的數(shù)據(jù)進行處理。處理完后,進行CRC和地址比對,如果無誤,從機將主機發(fā)來的數(shù)據(jù)返回給主機。隨后,切換主從模式,主機將處理后的數(shù)據(jù)發(fā)送給從機,從機收到8個數(shù)據(jù)后,程序停止。為調(diào)試方便,我們用Debug調(diào)試模式,對主機發(fā)送和接收的數(shù)據(jù)進行觀測。
試驗中,通信CPU發(fā)送8個數(shù)據(jù)(0x11,…,0x88)給控制CPU,8個數(shù)據(jù)對應(yīng)的4位地址為(0x00,…,0x07)??刂艭PU接收8個經(jīng)過主機處理的16位數(shù)據(jù)后,經(jīng)過解析匹配校驗處理,返回給通信CPU。在Debug窗口的右側(cè)為通信CPU接收到的數(shù)據(jù),結(jié)果顯示為(0x11,…,0x88),地址匹配和CRC校驗正確,說明雙方通信較為可靠,同時試驗中雙方利用GPIO口之間16位并行通信,I/O狀態(tài)翻轉(zhuǎn)均達到納秒級別,可見實時性較高。從試驗中可以看出,飛行控制系統(tǒng)中的雙CPU之間通信可靠性和實時性均得到驗證。
5結(jié)束語
本文設(shè)計了一種雙核的飛行控制系統(tǒng),采用兩片基于Cortex-M4內(nèi)核具有單周期浮點運算能力的
STM32F407作為CPU,利用并行16位GPIO口直接互連通信,以中斷應(yīng)答機制控制兩個CPU之間的數(shù)據(jù)收發(fā)。經(jīng)試驗,該系統(tǒng)能實現(xiàn)兩個CPU之間數(shù)據(jù)的雙向交換,其實時性和可靠性得到驗證。另外,本系統(tǒng)的兩個CPU留有大量的外部通信接口,以及多通道的隔離I/O口輸出和捕獲輸入,方便系統(tǒng)外圍接口器件的擴展。最后,為進一步提高系統(tǒng)實時響應(yīng)處理多任務(wù)的能力,CPU可以移植諸如μ/COS-III、Linux等操作系統(tǒng),使得本系統(tǒng)性能進一步提高。
參考文獻
[1] Kendoul F.Survey of advances in guidance,navigation and control of unmanned rotorcraft systems[J].Journal of Field Robotics,2012,29(2):315-378.
[2] Li Y,Song S.A survey of control algorithms for quadrotor unmanned helicopter[C]∥Advanced Computational Intelligence(ICACI),2012 IEEE Fifth International Conference on,IEEE,2012:365-369.
[3] Bouabdallah S,Siegwart R.Backstepping and sliding-mode techniques applied to an indoor micro quadrotor[C]∥Robotics and Automation,Proceedings of the 2005 IEEE International Conference on,2005:2247-2252.
[4] 陳發(fā)堂,郭麗強.ARM+DSP系統(tǒng)MMU在射頻一致性測試儀表的實現(xiàn)[J].自動化儀表,2014,35(1):55-58.
[5] 王惠中,孫晨宇.雙核超高壓線路微機保護裝置的研究[J].自動化儀表,2012,34(7):78-81.
[6] 高振.基于雙 DSC 的無人機飛控計算機核心系統(tǒng)的設(shè)計與實現(xiàn) [D].南京:南京航空航天大學(xué), 2011.
[7] 宋磊,曹林平,吳文超,等.基于ARM+CPLD 的UAV飛行控制系統(tǒng)設(shè)計[J].電光與控制,2010,17(9):47-50.
[8] 谷新宇,李宗伯.基于雙 DSP 架構(gòu)的微小型無人機飛行控制系統(tǒng)[J].兵工自動化,2010,29(8):79-84.
[9] 馬寶甫.CRC校驗快速查表算法及其應(yīng)用[J].計算機工程與應(yīng)用,1997,7(7):46-47.
[10]李喜東,劉波濤,劉剛.Modbus RTU 串行通訊協(xié)議在工業(yè)現(xiàn)場的應(yīng)用[J].自動化技術(shù)與應(yīng)用,2005,24(7):37-40.
《自動化儀表》郵發(fā)代號: 4-304, 2015年定價: 18.00元,全年價: 216.00元; 國外代號: M 721
歡迎賜稿, 歡迎訂閱, 歡迎寶貴建議, 歡迎惠刊各類廣告
中圖分類號:V279+.2
文獻標志碼:A
DOI:10.16086/j.cnki.issn1000-0380.201502008
修改稿收到日期:2014-07-12。
第一作者杜紅彬(1974- ),男,2002年畢業(yè)于大連理工大學(xué)過程系統(tǒng)工程專業(yè),獲博士學(xué)位,副教授;主要從事嵌入式系統(tǒng)設(shè)計與工業(yè)控制方面的研究。