当前位置:无忧公文网 >范文大全 > 征文 > VxWorks环境下无人机半物理仿真模型机数据通信与采集

VxWorks环境下无人机半物理仿真模型机数据通信与采集

时间:2022-03-15 08:41:08 浏览次数:

摘 要:无人机飞控半物理仿真系统中,无人机模型解算计算机(简称模型机),一方面通过通信接口驱动三轴转台实现无人机飞行姿态的仿真,另一方面通过数据采集模块实时采集由安装在转台上的陀螺传回来的无人机姿态信号及舵机信号,因此数据采集模块以及模型机与转台的通信模块在系统中起着非常关键的作用。针对VxWorks下PCI硬件板卡驱动程序不易开发这一难点,通过分析模型机与三轴转台的通信机理并结合PCI总线的特点,开发了VxWorks系统下的PCI总线RS 422串口卡以及数据采集卡驱动程序。半物理仿真实验证明,所开发的PCI通信卡和数据采集卡驱动程序通信可靠、工作稳定、误码率低、实时性高。

关键词:无人机; PCI驱动; VxWorks; 串口通信; A/D采集

中图分类号:TN919-34

文献标识码:A

文章编号:1004-373X(2012)01-0113-04

Data communication and acquisition of model calculation computer for 

UAV′s hardware-in-loop simulation in VxWorks

LIU Xin-shun, YAN Jian-guo

(College of Automation, Northwestern Polytechnical University, Xi’an 710129, China)



Abstract:

Model calculation computer which is used to drive three-axis turntable by way of serial communication and to acquire altitude signals of gyroscope using data communication model, and plays an important role in a UAV′s hardware-in-loop simulation. In view of the difficulty when developing board support package (BSP) in real-time VxWorks operating system, BSP for a PCI-bus RS 422 serial port interface board and that for a PCI-bus data acquisition board are developed based on the commutation mechanism analysis between model calculation computer and three-axis turntable. The hardware-in-loop simulations show that the BSPs works very well with good reliability and stability.

Keywords: UAV; PCI driver; VxWorks; serial communication; A/D acquisition



收稿日期:2011-08-18

0 引 言

在无人机飞控与导航系统的半物理仿真[1-3]中,飞机本身不能作为一个实物出现,飞机模型模拟飞机实物在闭环仿真系统中出现。对飞机模型与转台的通信,飞机模型关于飞控器发送的舵偏量的接收,这两方面的实时性和可靠性就有要求。舵偏量的获取通过A/D采集来实现,而与转台计算机的通信,因为该转台通信要求是3个RS 422串口分别获取三个轴的姿态信息,所以通过模型机上的PCI插槽扩展出足够的RS 422口完成转台计算机的通信。本文主要讨论模型机在整个闭环半物理仿真实验中数据发送与接收的实现,成功地实现了模型机与三轴转台之间数据的通信,完成了舵机偏转量的采集。整个仿真成功地验证了该型无人机飞控导航系统[4-5]的有效性。

1 仿真系统与飞机模型的介绍

该无人机飞控与导航系统的半物理仿真系统主要由飞控/导航系统、模型机、飞控地面站、导航地面站、视景计算机、综合测试、GPS模拟、大气模拟及转台几部分组成。

飞机模型采集舵机的舵偏量,完成无人机姿态量的解算,在解算完成后将姿态信号(包括俯仰角位移及角速度、滚转角位移及角速度、偏航角位移及角速度)发送给转台,模拟飞机的姿态变化,陀螺将采集到的姿态信号反馈给飞控系统,整个形成闭环。模型机与外部连接如图1所示。

2 模型机与3DMC转台的通信

飞机模型解算出来的姿态信息需要发送给转台,通过转台来真实地模拟实际飞行中飞机姿态的变化,模型机与3DMC系列三轴飞行仿真转台之间的通信需要三个RS 422串口实现,考虑到体积小便携性好,模型机使用研华公司的ARK-5280工控机,其本身只提供一个RS 422串口。选用基于PCI总线的4路RS 422串口扩展卡来实现与转台之间的通信。依据仿真中实时性的要求, Windows操作系统不能够满足实时性,可能带来系统的发散,这里模型机使用的是风河公司(Wind River System)的VxWorks[6-7]嵌入式系统。当前市面上的串口卡驱动都不支持VxWorks,在选用了VxWorks操作系统后,就需要自行开发VxWorks下串口卡的驱动。板卡选择用Moxa公司的CP-134U 4端口RS 422 PCI通信卡,其最高传输速率可以达到921.6 Kb/s,满足转台对通信速率的要求。

图1 半物理仿真中模型机通信

2.1 CP-134U串口卡的初始化

VxWorks提供了一组接口可以直接完成获取设备,映射IO地址,映射内存地址。pciFindDevice()函数根据设备ID、厂商ID及设备索引查找到相应的PCI卡,获取该卡的总线号、设备号和功能号;使用pciConfigInLong()函数获取内存基地址和I/O基地址。具体的函数使用如下:

pciConfigInLong(pciBus,pciDevice,pciFunc,PCI_CFG_BASE_ADDRESS_0,&membaseCsr);

// membaseCsr为获取的内存基地址

pciConfigInLong(pciBus,pciDevice,pciFunc,PCI_CFG_BASE_ADDRESS_2,&iobaseCsr);

// iobaseCsr为获取的I/O基地址

以上语句获取的地址分别与相应的掩码相与得到真正的内存基地址及I/O基地址。对于内存地址要进行映射,通过执行函数sysMmuMapAdd ((void*)membaseCsr,r_membase, VM_STATE_MASK_ FOR_ALL, VM_STATE_FOR_PCI)完成,其中r_membase表示的是内存的长度,先使用pciConfigOutLong()将内存基地址全部写1,再用pciFindDevice()函数读取所获得的数值与内存掩码相与就是内存的长度了。如果编程过程中用到中断,获取中断向量的方法如下:pciConfigInByte (pciBus, pciDe vice,pciFunc,PCI_CFG_DEV_INT_LINE, &pciirq)。整个PCI初始化程序流程如图2所示。

Moxa卡CP-134U使用的是4片16C550芯片,且映射为I/O端口,不需要进行地址映射。基于转台三个轴的通信协议要求,使用一个for循环将4个通道都配置为如下:通信速率为921.6 Kb/s,8个数据位,1个停止位,无奇偶校验。

16C550中LCR的除数锁存访问位(DLAB)被置位以便在读或写操作期间访问波特率发生器的除数锁存DLL 和DLM。LCR的位7必须被清零以访问接收器缓冲寄存器、发送器保持寄存器或中断使能寄存器。因此在设置波特率之前要将该位置1,而向DDL和DLM写入的值组合起来等于92 160除以要设置的波特率值。LCR的位1和位0组合起来为二进制数11时表示8个数据位,位3为0时表示1个停止位,位4为0表示无奇偶校验位。

图2 PCI初始化程序流程

其函数实现如下:

for(channel=0;channel

{

cval=sysInByte(iobaseCsr2+8*(channel)+UART_LCR);

cval |= 0x03;

cval&=0xFB;

cval&=PARITY_NONE;

fcr=UART_FCR_ENABLE_FIFO;

fcr |= UART_FCR_TRIGGER_14;

quot=1;

taskLock();

sysOutByte(iobaseCsr2+8*(channel)+UART_LCR,cval | UART_LCR_DLAB);/*设置锁存位*/

sysOutByte(iobaseCsr2+8*(channel)+UART_DLL,quot & 0xff);/*设置波特率*/

sysOutByte(iobaseCsr2+8*(channel)+UART_DLM,quot>>8);/*设置波特率*/

sysOutByte(iobaseCsr2+8*(channel)+UART_LCR,cval);/*解除锁存位*/

sysOutByte(iobaseCsr2+8*(channel)+UART_FCR,fcr);/*使能FIFO*/

sysOutByte(iobaseCsr2+UART_IER,UART_IER_RDI|UART_IER_RLSI);

taskUnlock();

}

2.2 通信中数据的发送(定时)与接收

这里对于数据的接收和发送均采取直接操作寄存器的办法。没有选择将串口封装成为标准的输入、输出函数open(),close(),read(),write(),ioctl(),从而在处理数据的过程中更方便,简化了程序执行步骤。模型机与转台通信时,依据通信协议要求需定时向转台发送姿态信息以保证转台的平滑运转,因此选择使用VxWorks提供的看门狗定时器来实现定时发送。

看门狗定时器能够提供比较精确的计时,在定时时间结束时采用中断或者最高任务优先级执行,打断大部分的任务。看门狗接口函数为:创建函数WDOG_ID wdCreate(void), 删除函数STATUS wdDelete(WDOG_ID wdId),启动看门狗计时函数 STATUS wdStart(WDOG_ID wdId, int delay, FUNCPTR pRoutine, int parameter), 取消看门狗计时函数STATUS wdCancel(WDOG_ID wdId)。wdStart()函数中的参数FUNCPTR pRoutine表示的就是定时时间,系统运行到该参数设置的时间后,看门狗会马上调用指定的函数。如下面程序段所示,看门狗函数serialOutData()的最后调用wdStart()重新启动看门狗来调用看门狗函数自身,以实现定时执行serialOutData()函数体一次,也就保证确定时间发送数据一次[3]。

void serialOutData()

{

/*相关的数据处理程序并根据通信协议要求每8个字节作为一个数据记录,使用sysOutbyte()向THR寄存器写数据。*/

wdStart(myWatchDogId,sysClkRateGet()/125,(FUNCPTR)serialOutData, 0);

}

在读取转台的反馈数据时,可以中断方式或查询方式读取。VxWorks下系统资源是优先被中断占有的,中断服务程序占用系统资源时间越长越影响任务间的调度,也就是影响系统的实时性。采用信号量协调任务间的同步,即在中断服务程序中,接收数据后,释放一个信号量,通过msgQReceive()获取信号量来获得接收的数据。这样后续数据的处理就放在了中断服务程序的外部。

查询方式就是随时判断每一路异步串行通信控制器16C550的读标志位——数据就绪位DR的状态,该位被置位后就可以读取寄存器RBR获得转台的反馈数据。

2.3 模型机发送至转台的姿态信息

无人机模型机解算完成的姿态信息每8 ms定时发送至转台,综合测试计算机从模型机的发送串口获取的姿态信息稳定、准确且没有振荡,图2中各图的曲线依次为模型机发送的俯仰角位移量、滚转角位移量和偏航角位移量。

2.4 模型机与转台通信的建立

模型机与转台之间以“记录”的形式进行通信。每个记录由8个字节组成。正确的数据格式包括“建立通信记录”和“指令记录”两种。每当转台控制机接收到来自模型机正确的记录后都会反馈给模型机一组“现场数据记录”。



图3 模型机解算姿态角曲线

串口接收数据是一位一位接收的,通常根据帧头确定一组数据的每一个字节进行校验。这里接收到来自转台的“现场信息记录”包含8个字节,是一组无帧头帧尾的数据,因此,如何确定数据串的每一个字节是关键。

建立一个长度为8的字符型数组bufZTdata[8]。开始接收到的数据依次保存在bufZTdata[0]~bufZTdata[7]中,判断校验和为零时,说明这组数据正确。如果校验和不为零,首先将bufZTdata[0]中的数据舍弃,再将bufZTdata[i+1]中的值赋给bufZTdata[i],串口接收的新的字节保存至bufZTdata[7],再判断校验和,如果不正确重复上面的步骤,直到校验和正确,则确定了来自转台的这组“现场信息记录”的每一位。确定了一组记录后重新开始上面的判断步骤,将新接收的串口数据保存到数组bufZTdata进行新一轮的判断。

3 飞控姿态量的采集

采集舵机姿态信息选择的是研华公司的PCI-1710多功能数据采集卡,其具有16路模拟量采集,最高采样速率可以达到100 kHz,12位模拟量的采集满足对采集精度的要求。舵机信号是-5~+5 V之间的电压信号,对应于大概-30°~+30°的转角。1710卡和CP-134U都是PCI卡,初始化是相同的。初始化完成后,触发方式配置为软件触发,输入范围配置为-5~+5 V,选用数据采集卡内部时钟。

PCI-1710卡既支持16路单端模拟量输入,又支持8路差分模拟量输入。 输入通道的配置可通过软件进行选择。单端输入配置只为每个通道提供1根信号线,且被测量的电压以公共地为参考。在这种模式下,PCI-1710卡为外部浮动信号源提供一个参考地。

下面为采集升降舵、副翼、方向舵和油门四个舵机偏转量的while循环的程序。Switch语句用来区分采集到四个量,根据提前标定好的舵机输出电压与舵机偏转角度的对应关系(一般情况是线性关系)来获取舵机偏转角度。具体实现程序如下[3]:

sysOutByte(iobaseCsr1, 0); /*设置软件触发模拟量的采集*/

do

{

ucStatus = sysInByte(iobaseCsr1+7) & 1;

}while( ucStatus == 1);/*等待采集数据的完成,完成后ucStatus获取的数据为1*/

if (ucStatus == 0)

{

wRawData = sysInWord(iobaseCsr1);

pci_v = (fHiVolt-fLoVolt) * (wRawData&0xfff)/0xfff +fLoVolt;

/*将采集到的数据wRawData换算成电压值*/

/*功能程序*/

}

上述程序放在一个循环体中重复执行,根据((wRawData & 0xf000) >> 12)的值是0,1,2或3来区分不同的通道的值。

4 结 语

本文基于VxWorks的无人机半物理仿真模型,编写了VxWorks下CP-134U串口卡的驱动程序,完成了该串口卡初始化,实现了与3DMC三轴飞行仿真转台的通信,在VxWorks下应用A/D采集卡完成了舵机信号的采集,解决了模型机与无人机半物理仿真系统闭环内其他部分的通信问题,本文所设计的数据通信及数据采集方法已经成功地应用于了某厂的飞行控制仿真实验室中,实践证明该系统具有良好的稳定性和可靠性。

参 考 文 献

[1]李谦,闫建国,秦玮.RTW在飞控系统半物理仿真软件设计中的应用[J].测控技术,2007,26(6):68-70.

[2]李军伟,袁冬莉.基于VxWorks的无人机半物理仿真研究[J].测控技术,2008,27(9):92-94.

[3]王前.无人机飞控系统VxWorks平台研究与开发[D].西安:西北工业大学,2007.

[4]王伟,张闻乾,陈怀民.基于VxWorks的无人机飞控系统软件设计[J].制造业自动化,2008(4):37-39.

[5]吴成富,段晓军,吴佳楠,等.基于Matlab和VxWorks的无人机飞控系统半物理仿真平台研究[J].西北工业大学学报,2005,23(3):337-340.

[6]张杨,于银涛.VxWorks内核、设备驱动与BSP开发详解[M].北京:人民邮电出版社,2009.

[7]Wind River System Inc.. VxWorks programmer′s guide [M]. [S.l.]: Wind River System Inc.,1999.

[8]何丽红.基于PCMCIA接口的高速率串口扩展卡[J].现代电子技术,2007,30(4):32-34.

[9]罗伯强,李军.VxWorks下共享中断的多串口卡驱动设计[J].微计算机信息,2007,23(1):97-98.

[10]Texas Instruments. TL16C554 asynchronous communications element [M]. [S.l.]: Texas Instruments, 1998.

作者简介:

刘新顺 男,1986年出生,陕西西安人,在读硕士研究生。主要研究方向为飞控软件系统、嵌入式系统、飞行器控制研究。

闫建国 男,1956年出生,上海人,教授,博士生导师。主要从事计算机控制与智能控制、鲁棒控制、飞行器控制等研究。

推荐访问: 无人机 数据通信 仿真 采集 模型