一种新型双核飞行控制系统的设计

2015-03-09 02:13DesignoftheNewTypeofDualcoreFlightControlSystem
自动化仪表 2015年2期
关键词:管脚外设双核

Design of the New Type of Dual-core Flight Control System

杜红彬 徐芳俊 江 哲

(华东理工大学信息科学与工程学院,上海 200237)

一种新型双核飞行控制系统的设计

Design of the New Type of Dual-core Flight Control System

杜红彬徐芳俊江哲

(华东理工大学信息科学与工程学院,上海200237)

摘要:针对现有双核飞行控制系统方案中CPU之间通信存在接口电路复杂、通信速率低、扩展性差的问题,提出了一种采用并行16位GPIO口直接互连并利用中断应答机制控制CPU之间数据通信的方案。选用两片基于Cortex-M4内核具有单周期浮点运算能力的STM32F407进行同步控制与通信,并利用MicroXplorer软件完成CPU外设管脚资源的分配与设计,制定并编写了相关通信协议。经检验,这种双CPU直接并口通信的方式,既能满足飞控系统高速可靠的数据交换,同时又简化了CPU之间的通信接口电路,是一种简便可行的方案。

关键词:飞行控制系统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)是当前研究的一个热点[1-3],飞行控制系统作为其核心,优劣性决定飞行性能的高低。飞行控制系统处理的任务主要有:①实时计算飞行姿态系统检测到的飞行状态信息(包括高度、姿态角、三轴角速度、三轴加速度等),并计算出相应的操纵变量;②实现无线通信模块与地面站之间的通信,将飞行器的状态信息传给地面站,同时接收地面站的控制指令执行相应的动作。单个CPU处理这些任务时存在着实时性和可靠性较低的问题,因此很多文献采用双核架构[4-5]。然而,两个CPU之间的通信实时性、可靠性如何保证,是个非常棘手的问题。现有的通信方案有:①采用SPI通信方案[6],SPI通信方式简单,却具有通信速率较低的问题,通信速率无法满足实时性要求;②采用ARM+CPLD+双口RAM方案[7],这种方案接口电路较为复杂,需保证各分立元件的可靠无误,同时调试的复杂度也增加;③采用异步通信方案[8],收发双方由于包含了开始位和停止位,传输速度和效率均较低。

综上所述,本文介绍一种简洁、高效的双核飞行控制系统。该飞控系统采用两片基于Cortex-M4内核具有单周期浮点运算能力的STM32F407,利用并行16位GPIO口直接互连,以中断应答机制控制两个CPU之间的数据交换,同时编写了CPU之间的通信协议,实现双CPU之间的高速、实时、可靠的通信。另外,这种双核架构可以实现相互监督,比如一个CPU可以监督另外一个CPU闭环控制的质量、故障等,实现了最小冗余化的可靠性保证。

1系统硬件设计

1.1 芯片选型和管脚分配

飞行控制系统应具备四方面的特性:①多路模拟信号的高精度采集能力;②多串口的通信能力;③足够多的I/O接口和多频率信号输出能力;④高精度、低延时的浮点运算能力。基于上述特性的考虑,我们采用意法半导体公司的STM32F407作为飞行控制系统的处理器。STM32F407是意法半导体公司推出的基于Cortex-M4内核32位的ARM处理器,内部集成高性能的DSP浮点运算单元,工作频率高达168 MHz,内部具有1 MB的Flash和192 kB的SRAM,同时拥有极丰富的外设资源。因此,STM32F407成为飞行控制系统处理器较为理想的选择。

CPU外设管脚资源一般通过手工进行分配,管脚资源分配效率低,而且容易出错。本文采用意法半导体公司的MicroXplorer软件对STM32F407外设管脚资源进行最优分配,提高了开发设计效率。MicroXplorer 是意法半导体公司推出的一个图形化工具,使用户能够非常方便地分配STM32系列微处理器的外设管脚资源,并可以生成相应的管脚驱动代码。MicroXplorer提供两种视图模式用于执行微处理器配置:①外设面板视图模式,用于选择每个外设;②高级用户操作模式,用于强制外围函数映射到一个物理引脚。本系统由双核构成,即飞行控制处理器和通信处理器,因此利用MicroXplorer对它们分别进行了外设管脚资源分配。

1.2 系统硬件架构

飞行控制系统由控制和通信两部分组成,采用两个STM32F407分别作为各部分的CPU。飞行控制系统的架构如图1所示,主要由电源模块、双ARM处理器、多路数据采集、多PWM电机控制输出、多路I/O接口、外部通信接口等部分组成。

图1中,控制部分主要是调理A/D信号输入,输出PWM信号,同时利用多个I/O口输出隔离控制信号。通信部分主要利用通信接口与外界通信。两个CPU之间的通信则采用两组16位的GPIO口直接互连,利用中断应答机制控制数据的收发。系统的具体功能如下。

图1 系统结构框图

① 使用通信接口与三轴加速度计、三轴磁力计、三轴陀螺仪、大气压计、温度传感器、通信模块等传感器进行通信。

② 使用多路A/D采集电池电量、电源转换后的电源精度,同时测量电机的电流等信号。

③ 输出多路PWM信号驱动舵机或者输出调速信号控制电机转动速度。

2关键子模块设计

2.1 系统电源部分

电源是系统可靠运行的前提,针对系统外设通信转换器件较多的特点,设计了两路3.3 V的电源,即VDD和VCC(3.3 V),以满足系统的功率消耗需求。一路VDD给两个最小系统供电,一路VCC(3.3 V)给通信转换芯片供电。另外,考虑到CPU需要使用A/D精确对外部的模拟量信号进行采样转换,特意设计了一路A/D转换参考电压Vref(1.5 V)。系统电源框架如图2所示。

图2 系统电源框架图

2.2 双CPU之间通信接口设计

对于双CPU之间的通信,采用SPI通信方案存在通信速率较低的缺点,采用双口RAM+CPLD方案则硬件复杂且访问有延迟,异步通信方案存在通信效率低的问题。总结上述方案的不足,我们需要设计一种通信速率高、硬件电路简单、扩展性好的双CPU之间的通信方案。两个STM32F407之间的GPIO口直接互连通信具有以下特点:①GPIO口之间通信可以视为CPU内部两个寄存器之间的通信,这样既简化了CPU之间的通信接口设计,又使得通信具有低延迟、可靠的特点;②STM32F407的GPIO口电平状态翻转只需要两个时钟周期,单次通信速率高达约6 ns/次,满足实时通信的设计要求;③利用GPIO口进行数据交换时,只需将相应的GPIO口配置成输入或者输出模式,读写数据时操作相应的输入和输出数据寄存器即可,大大简化了接口电路和编程的复杂度。基于以上优点,本系统两个STM32F407之间的数据交换采用并口GPIO直接互联通信方案。

利用并口GPIO传输数据,如何进行端口互联和控制收发是一个需要综合考虑的问题。现有两种方案可供选择。

① 一个CPU的一组16位的GPIO端口与另一个CPU的一组16位的GPIO端口直接并行互联,利用定时器按一定的时间产生发送标志位,控制数据发送。由于GPIO具有方向性,在某一时刻只能单向通信,要实现收发,需要切换收发方向,通信较为不便;同时利用定时器来控制数据发送,无法做到实时性。

② 一个CPU的两组16位的GPIO端口与另一个CPU的两组16位的GPIO端口直接并行互联,同时利用外部中断应答机制控制数据收发。该方案克服了方案一某一时刻只能单向通信的不足,能同时进行双向传输数据。同时,利用中断机制控制收发,实行分时操作,提高了CPU的效率。因此,本系统采用第二种方案。图3为两个CPU之间的通信接口原理图。

图3 两个CPU的通信接口原理图

图3中,两个CPU的两组16位GPIO口(PE口和PF口)两两并行直接互连,两对中断收发控制线(PG0、PG1和PG2、PG3)也并行直接互联。利用这两对中断收发控制线分别控制PE口和PF口的数据收发。图4为通信STM32F407的数据传输时序图。图4中,PCLK2为STM32F407内部APB2的时钟,PG2、PG3分别为PF口数据交换的中断请求引脚和中断应答引脚。

图4 STM32F407(通信)的数据传输时序图

图3中,STM32F407(通信)为发送方,STM32F407(控制)为接收方。两者的PG2、PG3空闲时都置为高电平状态,当发送方要申请发送PF口的数据时,先将自身的PG2拉低为低电平,产生下降沿并向接收方申请中断,表示准备发送数据。接收方的PG2口检测到下降沿后,空闲情况下,PG2口产生下降沿应答发送方,表明已经准备接收数据。之后,发送方将一帧数据写到自身的PF口数据输出寄存器,接收方立即去读取自身的PF口的数据输入寄存器。每读完一帧数据接收方就产生一个下降沿,通知发送方数据已读完;发送方收到下降沿后,接着发送下一帧数据。如此往复循环,实现数据的连续发送。

3系统软件设计

3.1 GPIO端口功能分配

为实现双CPU之间高效、可靠的通信,我们需制定两者之间的通信协议[9]。首先,需将16位的GPIO口(PE或者PF)进行功能细化,针对不用的位分配不同的功能。现规定一组16位GPIO口中的低八位为8位数据,高八位中低四位为4位地址,高八位中的高四位为4位CRC校验[10]。图5为16位GPIO口的功能分配。

图5 16位GPIO口的功能分配

3.2 通信协议设计

GPIO端口功能分配完后,即进行相应协议的制定。

① 协议概述

系统定义一个主/从协议,该协议规定发送方为主机,接收方为从机,主机在同一时刻只发起一个数据通信任务请求,从机在没有收到主机的请求时并不主动发送数据。主机以单任务和广播两种模式对从机发出数据通信请求。在单任务模式下,主机每次发送单个任务地址给从机,从机接到并处理完请求后,向主机返回一帧数据。这种模式下,系统数据通信任务需要处理两个报文:一个是主机的请求,另一个是来自从机的应答,每个任务地址必须是规定的唯一地址,这样才能区别于其他任务被寻址。在广播模式下,主机向从机发送广播地址,对于主机的广播请求从机并不需要应答返回,地址0为广播地址。

② 帧描述

针对本系统CPU之间通信的协议,CPU之间通信时数据帧的格式如表1所示。

表1 帧的定义格式

表1中,8位数据作为帧的开头,接着是4位任务地址,帧的末尾是4位CRC校验。传输一帧数据时,包含8位数据和可以寻址16个任务地址的4位地址位,同时为提高数据通信的可靠性,帧末尾添加了4位CRC校验值。

③ 地址规则

该协议任务地址有16个不同的地址,表2为任务地址的分配。

表2中,0为广播地址,主机可以向从机写相应的命令,而从机并不需要应答返回。1~10为单个任务地址,每个地址是可以唯一被寻址的任务地址,主机每次只能寻址一个任务地址。11~15为保留任务地址,方便以后寻址的扩展。

表2 任务地址的分配

④ 4位CRC校验

该协议包含一个对全部报文内容执行并基于循环冗余校验(CRC) 算法的4位错误检验域。CRC域检验整个报文的内容,由4位值构成。CRC域作为报文的最后的域附加在报文之后和报文一起发送。

附加在报文后面的4位CRC值由发送方计算,接收方在接收报文时重新计算整个报文的4位CRC值,并将计算结果和实际接收到的4位CRC值进行比较。如果两者相等,则为正确,否则为错误。

3.3 通信软件的设计

假定发送方为主机,接收方为从机,那么系统的每个CPU既是主机又是从机。主从机工作流程图如图6、图7所示。

图6 主机工作流程图

图7 从机工作流程图

根据上一节定义的通信协议,首先CPU对主机待发送缓冲区的数据进行处理,同时初始化从机接收数据缓冲区。随后,主/从机通过中断请求应答机制发送和接收数据。从机接收完一定的数据(假设N个)后,为方便CPU对接收到的数据进行处理,采用DMA方式对接收到的数据进行内存到内存的移动。

图6中,主机将待发送的8位数据添加4位地址,然后对这12位数进行4位CRC校验值,最后组合成一个16位的数据传输给待发送的缓冲区。主机处理函数程序如下。

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];

//获取待发送的数据

addr = COM_Transfer_addr[m];

//获取待发送的地址

temp= addr;

temp= (temp<<8)+data;

//得到12位的值,8位数据+4位地址

jy_crc= CRC4(temp);

//查表获得4位的CRC值

temp|=(jy_crc<<12);

//将jy_crc值左移12位,为高字节的高四位

return temp;

//返回16位的数

}

图7中,从机接收完N个16位数后,需要对它们进行拆分解析。首先,拆分得到8位的数据、4位地址、4位CRC值,随后对16位数的前12位进行CRC校验,得到这12位数据的4位CRC值。之后,首先进行发送双方数据地址的匹配。如果不正确,则返回地址错误代码;如果正确,则比对接收到的CRC码和校验后的CRC校验值。如果两者相等,则将8位数据保存起来;如果不相等,返回CRC出错代码。这样,进一步提高了数据通信的可靠性。从机处理函数程序如下。

void Slave_handler(uint8_t j)

{

uint16_t temp;

temp= COM_DST_Buffer[j];

//数据接收缓冲区

data= (uint8_t)(temp&0x00ff);

//接收到的数据,低字节

addr= (uint8_t)((temp>>8)&0x000f);

//接收到的地址,高字节中的低四位

js_crc = (uint8_t)((temp>>12)&0x000f);

//接收到的CRC码值,高字节中的高四位

temp= temp&0x0fff;

jy_crc =CRC4(temp);

//计算接收到的数据的CRC的值

if(addr == COM_Receive_addr[j])

//如果是发给地址正确

{

if(jy_crc == js_crc)

//如果接收到的CRC码和校验后的CRC码相同

{

COM_Txbuf[j] = data;

//将数据存在Rx_handler这个数组中,给DMA

}

else

//校验码不同,传送出错

{

COM_Txbuf[j] = CRC_ERR;

//将CRC出错的数据一律赋值为0xff

}

}

else

//地址不正确

{

COM_Txbuf[j] = ADDR_ERR;

//将地址出错的数据一律赋值为0x00

}

}

4系统运行测试

利用搭建好的双CPU飞行控制系统电路板,对该系统CPU之间的通信进行测试。首先,为测试方便,在主机中定义8个待发送的8位数据,并给这8个数据分别对应8个4位地址。利用上一节所述的通信流程,主机向从机发送8个数据。从机接收到数据后,利用DMA方式将数据进行内存到内存的移动,以便从机对接收到的数据进行处理。处理完后,进行CRC和地址比对,如果无误,从机将主机发来的数据返回给主机。随后,切换主从模式,主机将处理后的数据发送给从机,从机收到8个数据后,程序停止。为调试方便,我们用Debug调试模式,对主机发送和接收的数据进行观测。

试验中,通信CPU发送8个数据(0x11,…,0x88)给控制CPU,8个数据对应的4位地址为(0x00,…,0x07)。控制CPU接收8个经过主机处理的16位数据后,经过解析匹配校验处理,返回给通信CPU。在Debug窗口的右侧为通信CPU接收到的数据,结果显示为(0x11,…,0x88),地址匹配和CRC校验正确,说明双方通信较为可靠,同时试验中双方利用GPIO口之间16位并行通信,I/O状态翻转均达到纳秒级别,可见实时性较高。从试验中可以看出,飞行控制系统中的双CPU之间通信可靠性和实时性均得到验证。

5结束语

本文设计了一种双核的飞行控制系统,采用两片基于Cortex-M4内核具有单周期浮点运算能力的

STM32F407作为CPU,利用并行16位GPIO口直接互连通信,以中断应答机制控制两个CPU之间的数据收发。经试验,该系统能实现两个CPU之间数据的双向交换,其实时性和可靠性得到验证。另外,本系统的两个CPU留有大量的外部通信接口,以及多通道的隔离I/O口输出和捕获输入,方便系统外围接口器件的扩展。最后,为进一步提高系统实时响应处理多任务的能力,CPU可以移植诸如μ/COS-III、Linux等操作系统,使得本系统性能进一步提高。

参考文献

[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] 陈发堂,郭丽强.ARM+DSP系统MMU在射频一致性测试仪表的实现[J].自动化仪表,2014,35(1):55-58.

[5] 王惠中,孙晨宇.双核超高压线路微机保护装置的研究[J].自动化仪表,2012,34(7):78-81.

[6] 高振.基于双 DSC 的无人机飞控计算机核心系统的设计与实现 [D].南京:南京航空航天大学, 2011.

[7] 宋磊,曹林平,吴文超,等.基于ARM+CPLD 的UAV飞行控制系统设计[J].电光与控制,2010,17(9):47-50.

[8] 谷新宇,李宗伯.基于双 DSP 架构的微小型无人机飞行控制系统[J].兵工自动化,2010,29(8):79-84.

[9] 马宝甫.CRC校验快速查表算法及其应用[J].计算机工程与应用,1997,7(7):46-47.

[10]李喜东,刘波涛,刘刚.Modbus RTU 串行通讯协议在工业现场的应用[J].自动化技术与应用,2005,24(7):37-40.

《自动化仪表》邮发代号: 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年毕业于大连理工大学过程系统工程专业,获博士学位,副教授;主要从事嵌入式系统设计与工业控制方面的研究。

猜你喜欢
管脚外设双核
边角双核互相转,环环相扣不变心——解三角形经典题突破
全球金融“F20”在此召开!横沥进入“双核”时代
面向DSP+FPGA通用处理架构检测的硬件系统设计
一种异步FIFO的Read/Write Data Flow Through功能测试方法∗
略谈如何利用三极管管脚间电阻值判断其型号及管脚
双核家庭
外设天地行情
外设天地行情
外设天地行情
外设天地行情