硕士论文中期报告(田野) 基于vxworks的卫星半物理仿真中的通信
一、研究内容概要:借助vxworks嵌入式操作系统平台,实现卫星半物理仿真中的通信问题。半物理仿真各个阶段涉及嵌入式星载计算机之间的通信、星载计算机和各个外部系统之间的通信、系统中执行和测量部件的控制和信息反馈等,是从系统级、分系统到部件级的层次机构,其中通信机制发挥了建立其间联系的基础性作用。主要包括:通信机构的设计、通信协议的选择和统一、通信接口的编制以及底层通信设备驱动程序编写等内容,以期最后参与到卫星地面半物理仿真试验系统的整体试之中。 二、开题后主要完成的研究工作: 1、飞轮和陀螺数据通信 1.1相关硬件及软件环境:
pc计算机、PCI1710数据采集及转换卡、实际飞轮和陀螺;vxworks操作系统及其编译环境Tornado、matlab的rtw实时工具箱; 1.2实验目的和意义:
飞轮是卫星的执行机构,根据“动量守恒”原理来控制卫星的姿态,它的精度、速度和控制效果好坏直接影响到卫星的姿态精度和稳定性,本项目中主要使用的是零动量反作用飞轮来实现姿态三轴稳定。陀螺是卫星的测量部件,本项目中采用德国的微型激光陀螺,通过对三个方向角速度的测量向卫星提供姿态数据。 1.3实现原理和步骤:
1、按照仿真框图(图1-1)在matlab的simulink中建立飞轮测速的模型,包括控制部分(发送控制指令)、s函数(对PCI1710采集卡进行读写操作以及利用采集卡进行脉冲计数)、显示对比部分(图1-2);
2、使用matlab的tornado编译工具将simulink模型转化为在vxworks运行的代码,通过tornado和目标机的交叉编译环境下载到目标机的vxworks操作系统下; 3、在vxworks操作系统下运行代码,给飞轮提供一个控制信号,然后得到飞轮的转速、转向和力矩等信息,通过matlab外部模式实时观察数据。飞轮的角速度信号是通过PCI1710卡的计数器换算得到的; 4、模型运行300秒后,得到数据文件wheel.mat。绘出控制力矩和输出力矩的曲线(图 1-3)。图中平滑的曲线是控制力矩,前100秒为-0.8,后500秒呈正弦规律变化。带有噪声的曲线是飞轮的力矩曲线,由于该飞轮是一个性能不是很好的产品,只能用于地面的初期试验阶段,所以在控制力矩变向的时候产生了较大的噪声,这是十分正常的。图 1-是误差图,从图中看出输出力矩和控制力矩平均误差不是很大; 5、陀螺的测试方法与上面飞轮测速类似。
图 1-1 反作用飞轮仿真系统框图 Figure 1-1 Reaction wheel simulation system
图 1-2 飞轮测速Simulink模型
Figure 1-2 Measure velocity model of wheel
图 1-3 控制力矩与输出力矩
Figure 1-3 Control torque and output torque
图 1-4 误差曲线
Figure 1-4 Error curve diagram
2、vxworks下的网路通信 2.1相关硬件及软件环境:
pc计算机、ne2000网卡、RS485串口PCI接口卡、vxworks操作系统及其编译环境Tornado、matlab的rtw实时工具箱; 2.2实验目的和意义:
利用TCP/IP提供的端到端的传输能力在位于不同主机上的任务间传输用户数据,
其中一种方式就是使用socket(套接字),本项目中需要在仿真计算机中增加网络传输功能,以便以较快的速度通过网络把各种实时仿真数据传出,网络上其他计算机接收到实时数据后可以进行实时显示、计算以及实现三维卫星模型的实时数据驱动。因为数据量很大,串口无法满足要求,网络协议可靠快速,是良好的选择。 2.3实验原理:
1、宿主机是集成编译环境,把运行在各计算机上的任务代码编译后通过网络下载到各台计算机(图 2-1); 2、控制计算机(即星载计算机)和动力学仿真计算机各安装一块PCI串口卡PCI1612,通过485串口组成闭环结构实现实时控制(图 2-1);
3、动力学仿真计算机利用网络将动力学仿真数据通过socket发出,宿主机利用VC程序通过socket接收数据,并将其转换为符合STK接收要求的数据格式,发向STK演示机(图 2-1);
4、STK演示计算机接收仿真数据并实时驱动STK动画显示(图 2-1)。
图 2-1 半物理仿真系统结构图
Figure 2-1 Semi-physical simulation system structure
2.4实现步骤:
1、在simulink动力学模型中编写有关网络通信的s函数模块socket_net,在其中调用vxworks代码编程实现socket的服务器端,等待客户端申请建立连接后把实时仿真数据由网络传给客户端(图 2-2);
2、在宿主机中用VC实现socket数据接收,作为客户端。服务器端首先运行,等待客户端连接。在服务器端和客户端实现面向连接的socket接口的流程如下图(图 2-3):
图 2-2 仿真系统模型 Figure 2-2 Simulaton system block
服务器新连接
图 2-3 面向连接的socket应用框架 Figure 2-3 Sock_stream application frame
3、STK软件下的卫星实时数据驱动演示 3.1实验原理:
STK提供实时数据驱动接口,可以动态实时的根据数据显示卫星模型的各种状态,使用STK/VO组件。按照组件的接口程序实现数据接收和发送。软件分为两部分:发送方和接收方,他们之间通过网络IP地址来锁定。 3.2实现步骤:
1、在宿主计算机中VC编程实现数据接收网络客户端,在这个程序开始阶段包含对STK演示计算机的初始化:1)设定STK计算机的IP地址和端口号,以便建立连接;2)程序选定需要数据驱动的对象,如卫星姿态、轨道等;3)给STK中需要数据驱动的对象设置初始值;4)启动STK/AVO,等待实时数据到来;
2、在VC接收程序中实现把仿真计算机中的数据转换为STK可以识别的格式,并向初始化时建立的接口发出;
3、STK演示计算机实时接收数据,观察直观的动画演示(图 3-1)。
图 3-1 STK/AVO视图
Figure 3-1 STK/AVO view
4、利用matlab的TLC文件实现实时仿真的中断服务程序接口
4.1硬件和软件环境:
pc计算机、pc机8250芯片的RS232串口,硬件连接结构如图(图 4-1),vxworks操作系统及其交叉编译环境他Tornado、matlab的rtw组件中的tornado和matlab接口;
图 4-1 matlab中断系统结构图
Figure 4-1 matlab interrupt system structure
4.2实验原理分析:
1、在仿真计算机上的动力学仿真模块需要实时接收来自控制计算机的控制指令来修正其参数,同时把仿真的状态数据传给控制计算机来根据偏差计算下一步的控制指令,这就需要动力学仿真计算机有实时接收数据的能力,即相应中断的能力;
2、而在动力学仿真模型是matlab的simulink下生成的固定步长的程序代码,即每隔一定时间周期执行一次动力学计算,不能实时接收控制指令,会引起控制指令丢失,因此需要引入中断模式; 3、在matlab的rtw组件中提供了一个专门面对vxworks的接口模块Async Interrupt(异步中断模块)(图 4-2),使其能在定步长仿真同时产生接收数据中断,在ISR中进行控制数据的接收以及状态数据的发送,即中断模块和动力学仿真模块是相互独立运行的,不会因为仿真的定步长而影响接收数据的实时性;
图 4-2 matlab的rtw中的异步中断模块 Figure 4-2 matlab rtw asynchron interrupt module
4、还需要一种机制来联系ISR中的数据和动力学仿真中的数据,使之能进行交换; 5、而Async Interrupt(异步中断模块)默认是为VME总线中断提供的模块,和其他中断在中断号、中断机制等方面有所不同,这就需要更改和Async Interrupt(异步中
断模块)有关的程序;
6、 Async Interrupt(异步中断模块)的程序包括两部分:一是与输入参数有关的s函数:vxinterrupt1.c,一是与自动代码生成有关的TLC文件:vxinterrupt1.tlc,它们都在:\MATLAB7\rtw\c\tornado\devices文件夹下; 7、由于最后运行的代码是由RTW自动程序创建过程来生成的,所以类似ISR.c的源文件无法直接加入到最后要下载的目标代码中,而是通过RTW的自动程序创建过程动态加入的,这就需要更改TLC文件。 4.3 rtw中TLC文件介绍:
RTW提供了一个实时开发环境,这个实时环境将MATLAB与Simulink连接为一个整体,并在这个基础上提供了从系统设计到实现的方法和简单易用的接口。RTW还提供了TLC来扩充自己的功能。通过使用TLC,可以修改、优化RTW生成的C程序,扩充RTW的功能,比如,硬件驱动程序与硬件有关,随系统改变而改变,就需要利用TLC,生成相应的驱动程序。TLC文件是在rtw的自动程序创建过程中调用的。TLC文件是一种生成程序的文件。在本项目中,就需要改写vxinterrupt1.tlc
RTW自动程序创建过程能在不同主机环境下生成用于实时应用的程序,该创建过程使用高级语言编译器中的联编实用程序,来控制所生成源代码的编译和链接过程。RTW使用一个高级的M文件命令控制程序创建过程,默认命令是make_rtw。RTW的自动程序创建过程如图(图 4-)所示。
用户开发的模型和模板联编文件
make_rtw.m
自动的程序创建过程
可执行的C语言程序
图 4-3 RTW的程序自动创建过程
Figure 4-3 RTW automatic program building process
4.4实现步骤:
1、探索性的运用matlab中的全局变量和局部变量解决了动力学仿真数据(s函数中)和中断服务程序ISR(TLC文件中)之间的数据联系、存储和传递问题,忽略了细节的数据传递关系如下图(图 4-):
动力学仿真计算机上的接收发送s函数 r_s.c
TLC文件
控制计算机
控制程序ffr_gnc.c动力仿真学模型
图 4-4 控制计算机与动力学仿真计算机 及其动力学仿真计算机内部的数据传递关系
2、将中断模块加入到原动力学仿真模块中,修改vxinterrupt1.c 和vxinterrupt1.tlc文件,在vxinterrupt1.tlc中加入ISR(中断服务程序),修改vxinterrupt1.c是为了使得原本为VME总线设计的Async Interrupt模块可以响应任何挂接上去的中断,在控制程序和ISR的接收发送程序中要注意波特率和数据传送结构的一致性;
3、在Async Interrupt模块参数设置对话框中配置参数来挂接串口中断,使得仿真计算机中的模块可以产生接收数据中断(图 4-);
图 4-5在Async Interrupt模块参数设置对话框中挂接串口中断
4、在simulink中build下载仿真模块到动力学仿真计算机,控制程序下载和控制计算机上;
5、运行仿真程序,在simulink中通过外部模式观察各种参数的控制效果,(图 4-)为带有中断模块的动力学仿真模型,(图 4-)为通过记录数据得到的部分仿真控制结果:如星体控制角速度曲线。
图 4-6 带有中断模块的动力学仿真模型
图 4-7 星体控制角速度曲线
5、vxworks下PCI设备驱动程序编写
5.1硬件和软件环境:
PCI9820CAN接口卡,PCI1612RS485串口卡,安装在pc机上;vxworks操作系统及其开发调试环境Tornado。
5.2实验目的和意义:
为了满足半物理仿真系统中各部分之间的有效通信,满足快速可靠的要求,本项目在总线上选择了RS485总线和CAN总线,pc机上没有对应接口,因此选择使用适应性好且有速度优势的PCI接口卡。在本项目中使用vxworks嵌入式操作系统,而目前工业上使用的PCI接口的板卡都不提供vxworks下的驱动程序,因此需要学习vxworks下设备驱动程序。近期工作中,主要负责PCI接口CAN卡在vxworks下的驱动,所选择是周立功公司的PCI桥CAN接口卡PCI9820,带有两路sja1000控制芯片的串口。
5.2有关vxworks的启动顺序以及驱动程序的安装位置:
1、vxworks的启动顺序如图(图 5-1);
2、分析vxworks硬件初始化位置以及参考vxworks其他PCI网络设备驱动的初始化位置,将PCI初始化放在 sysHwInit()中;
3、初始化包括根据厂商ID和设备ID找到硬件,得到总线号、设备号、功能号等信息,读写PCI桥的配置空间(图 5-2),得到PCI桥设备的物理地址、空间大小、中断号等,最后进行内存映射,将物理地址映射为处理器内存空间的虚拟地址,这样才能利用这个地址对sja1000控制器的寄存器进行配置;
4、根据初始化顺序,PCI设备中断的挂接放在sysHwInit2()中,由配置空间得到的中断号在这里和中断服务程序进行挂接;
5、PCI桥内存虚拟地址映射成功之后,就可以通过*(基地址+偏移量)来访问sja1000CAN控制器的寄存器了,通过对寄存器的操作完成驱动程序中 xxOpen()、xxClose()、xxRead()、xxWrite()、xxIoctl()等接口的功能。
5.3vxworks下字符型设备驱动程序主要包含三个层次结构:
1、任务与VxWorks的接口:
·fd =open (filename, flags, mode)
·fd=creat (filename, flags)
·read (fd, &buf, nBytes)
·write (fd, &buf, nBytes)
·ioctl (fd, command, arg)
·close (fd)
·remove (filename) ;
2、驱动程序表、设备列表、文件描述符表,他们是三个列表结构,其中并列记录着各种设备的相关信息,建立了从应用程序到底层驱动程序的联系;
3、 Driver的操作规整,参数规整和I/O管理,这主要是怎样将驱动安装在BSP中的操作以及设备驱动的调用规范,其中xx表示需要编写驱动的设备,这里是PCI9820,
xxOpen(pDevHdr, pName, flags, mode):返回设备Id号;
xxClose(deviceId)
xxRead(deviceId, pBuf, nBytes)
xxWrite(deviceId, pBuf, nBytes)
xxIoctl(deviceId, cmd, arg),
这些就是I/O接口(如open、read等)调用时的底层实现函数,在驱动程序中编写。
Copy the text and data to RAM; Copy the data to RAM;
with default stubs; all processor registers to known
default states;
all init needed before kernel start
the kernel by calling
cputoolvx.a;
vxworks facilities can’t be used here )
bss segement,Init interrupt
hardware to quiescent
sysHwInit())
memInit()(or memShowInit()
usrMmuInit());
agent’s commu.
Interface,start agent)
图 5-1 vxworks启动顺序
图 5-3 vxworks启动顺序
图 5-2 PCI配置空间简图 xxDrv(args,…):使用函数iosDrvInstall (xxCreat, xxDelete, xxOpen,xxClose, xxRead, xxWrite, xxIoctl) 往I/O系统驱动程序表添加Driver。xxDrv()在设备初始化阶段被调用,而且只能调用一次,输入参数是设备相关的; xxDevCreate(devName,arg,…) :为设备描述结构分配内存,执行设备相关的初始化,调用iosDevAdd(pDevHdr,devName,drvNum)往设备列表内添加设备描述符,并用设备名字(drvName)和驱动程序号(drvNum)初始化DEV_HDR; 如下就是应用程序I/O操作调用底层驱动的流程图(图 5-3):
三、后期拟完成的研究工作及安排:
1、完善PCI9820CAN接口卡vxworks驱动程序编写,满足CAN2.0协议的要求,实现CAN总线数据准确、稳定传输;
2、实现不同体系结构计算机vxworks操作系统下应用程序的移植;
3、调试加入电模拟器的仿真试验系统,完善数据校验,验证通信机制的准确和有效性;
4、参与半物理仿真桌面联试系统的调试和通信,建立有效数据通路;
5、参与卫星地面试验系统调试,学习通信机制。
四、存在的困难与问题
1、项目方向参考文献少,缺乏仿效例子,很多内容要进行探索性试验;
2、实际工程经验缺乏,一些细节问题或错误占有了大量的调试时间;
3、对硬件电气结构知识了解不够,导致对硬件编程缺乏足够的系统性和完善性,外部硬件环境的变化对程序执行的结构有一定影响。
基于ARM的嵌入式系统中从串配置FPGA
的实现
1引言
ARM(Advanced RISC Machines)既可
以认为是一个公司。也可以认为是对一类微处理器的统称,还可以认为是一项技术。基于ARM技术的微处理器应用约占据了32位RISC微处理器75%以上的市场份额,ARM技术正在逐步渗入到人们生活的各个方面[1]。到目前为止,ARM微处理器及技术已经广泛应用到各个领域,包括工业控制领域、网
络应用、消费类电子产品、成像和安全产品等。
FPGA(Field Programmable Gate Array)是一种高密度现场可编程逻辑器件,其逻辑功能是通过把设计生成的数据文件配置到器件内部的静态配置数据存储器(SRAM)来实现的。FPGA具有可重复编程性,能灵
活实现各种逻辑功能。
基于SRAM工艺的FPGA具有易失性。系统掉电以后其内部配置数据容易丢失,因此需要外接ROM保存其配置数据,系统上电后必须重新配置数据才能正常工作。目前有两种方案可以实现,一种是使用专用的PROM,以Xilinx公司FPGA,XCFxx系列PROM为例,能够提供FPGA的配置时序,上电时自动加载PROM中的配置数据到FPGA的SRAM中;另一种是在含有微处理器的系统(如嵌入式系统)中采用其他非易失性存储器如E2PROM、Flash存储配置数据,微处理器模拟FPGA的配置时序将ROM中的数据置入FPGA。
与第一种方案相比,该方案节省成本、缩小系统体积。适用于对成本和体积苛刻要求的系统。 在便携式虚拟仪器设计中,使用嵌入式系统和FPGA实现系统功能。嵌入式微处理器采用Samsung公司的ARM7TDMI系列处理器S3C44BOX:FPGA采用Xilinx公司的Spartan-3E系列XC3S100E,采用S3C44BOX
完成对XC3S100E的配置。取得了良好效果。
2 从串配置的原理
2.1从串配置原理
Xilinx公司的Spartan-3E系列FPGA产品是采用90 nm工艺的2.5 V低电压FPGA器
件,具有高性能、低功耗、可无限次编写的特点。XC3S100E是Spartan-3E系列FPGA中的一款,总门数达10万门,可采用从串、主串、从并、主并、JTAG等模式对其进行配置[2]。XC3S100E与从串配置
模式相关的主要引脚功能如下:
M[2:0]:配置模式选择。M2、M1、M0均接上拉电阻,即M[2:0]:111时为从串模式;
CCLK:配置时钟,微处理器提供时钟源,且上升沿有效:
DIN:串行配置数据输入:
DOUT:串行数据输出,用于菊花链式配置:
PROG_B:低电平异步复位FPGA内部逻辑,内部可配置:Memory完全复位后,该引脚指示高电平。
当此引脚为高时,才能配置FPGA:
INIT_B:由低电平到高电平跳变时,采样配置模式,即M[2:0]的值确定配置方式;配置过程中若出现
配置错误,INIT_B将呈现低电平;
DONE:复位时为低电平。若配置成功,则为高电平。
2.2微处理器从串配置:FPGA的时序
FPGA的配置过程如下:
系统上电后,将PROG_B拉低以复位FPGA内部逻辑重新配置FPGA,充分复位内部逻辑后(约100μs),
将PROG_置高。
INIT_B为低电平,PROG_B拉高保持300 ns后,FPGA将INIT_B置高。在INIT_B由低向高跳变的瞬间,
采样配置模式M[2:0]。此系统采用从串配置模式。
在FPGA采样配置模式后,微处理器就可以向FPGA配置时钟CCLK和数据,在CCLK的上升沿,传输数据至
DIN,数据字节先发送低位,再发送高位。配置过程中若发生错误,则INIT_B为低电平。
所有的配置数据传送完成,CRC校验无误。则DONE为高电平,否则为低电平。
DONE为高电平,FPGA释放全局三态(GTS),激活I/O引脚,释放全部置位复位(GSR)和全局写使能(GWE)
有效,开始执行配置区的逻辑。
微处理器从串配置FPGA的时序如图1所示。
2.3 配置文件的产生方法
利用Xilinx公司提供的开发工具ISE8.1,经过综合、映射、布局布线后可产生编程文件,编程文件含有.bit、.bin、.mcs、.tek、.hex等格式。其中,.bit格式用于JTAG下载,其他几种格式用于专用PROM编程。首先按照产生专用PROM编程文件的方法来产生.bin文件.然后将该.bin文件转换成ASCⅡ码文件的存储形式,并且各个字节之间用逗号分隔。再将该配置数据存放在系统程序的一个头文件的数组config_data_array[]中,作为系统程序源代码的一部分,并和其他程序一起编译。
3 硬件设计
嵌入式微处理器S3C44BOX内置ARM7TDMI核,集成了丰富的外围功能模块,内部8 kB Cache大大提高了性能。S3C44BOX可访问256MB的地址空间,最高工作频率达66 MHz 。采用4 MB Flash作为程序存储器,可用于存放系统运行的代码。XC3S100E从串配置程序和配置文件都固化于其中保存,该Flash支持低电压(1.65 V~3.3 V)写操作。8 MB的SDRAM是程序的运行空间,直接运行Flash中的代码,但速度非常慢。通常是将Flash中的代码移至SDRAM中。S3C44BOX与XC3S100E主要通过PROG_B、INIT_B、
DONE、CCLK、DIN 5根信号线连接,如图2所示。其中VCC33表示3.3 V,VCC25表示2.5 V。
4 软件设计
软件设计流程如图3所示。配置软件的编程要确保ARM完全按照配置信号的时序工作,关键问题
是采用S3C44BOX的通用I/O口GPF0、GPF1、GPF2、GPF3、GPF4模拟DIN、CCLK、DONE、INIT_B、PROG_B
的时序。
在S3C44BOX中,大多数引脚都是多功能引脚,可以通过端口配置寄存器选择相应的引脚功能。 以端口F为例,控制寄存器rPCONF用作设定引脚的输入、输出或特殊功能;数据寄存器rPDATF[0:8]对应于GPF0~GPF8引脚上的数据。读写寄存器rPDATF的各个位对应于引脚的读或写。例如,CCLK上
升沿时序是向GPF1先写0,再写1得到,延时程序则由for循环实现。
则一直循环等待
CCLK在每个上升沿把1 bit的数据置入DIN中,先将GPF1置低,在GPF0准备好1 bit数据,再将GPF1
置高即可,以此循环将config_data_array[]中的每个字节按先低位再高位的次序写入FPGA。 Xilinx的FPGA配置文件大小相同,与FPGA内部逻辑设计的复杂度无关。以Spartan_3E系列的10万门FPGA XC3S100E为例,它的配置文件固定为581 344 bit,若CCLK的时钟周期置为2μs,配置时间
约为1.2 s。
5 实验结果验证
验证环境:硬件采用自行开发的实验板和武汉创维特公司的:JTAG硬件仿真器;软件则使用Xilinx
公司的开发工具ISE8.1和武汉创维特公司的集成开发环境ADT 1000(支持ARM7,ARM9)。
利用Verilog HDL编写程序led.v在七段数码管上循环显示0~F,采用:ISE8.1编译、综合、映射、布局布线。生成用于编程专用PROM的led.bin文件。用一个简单的C程序将.bin文件转换成ASCⅡ码文件,再将ASCⅡ码文件复制到配置数据数组config_data_array[]中,然后在ADT环境下编译配置程序、配置数据和系统程序,将生成的.bin文件通过JTAG口烧写到Flash中。重新上电后,FPGA配
置正常,实验结果与预设相一致。
6 结束语
基于ARM的FPGA从串配置方案结构简单、接线容易、软件编程简单,非常适用于嵌入式系统设计。虽然该控制电路是为Xilinx公司Spartan-3E系列的FPGA设计的,但稍加修改也可用于其他系列FPGA器件,故具有一定的通用性。另外,由于FPGA具有可重复配置的灵活性,在嵌入式系统中可通过串口、网口远程烧写Flash,重构系统功能,这种在线重构技术为设备的智能化在线维护、功能重组和在线升级等提供了可能,而且灵活性很强。本文提出的方案对数字系统设计具有借鉴意义,有着广阔的应用
前景。
硕士论文中期报告(田野) 基于vxworks的卫星半物理仿真中的通信
一、研究内容概要:借助vxworks嵌入式操作系统平台,实现卫星半物理仿真中的通信问题。半物理仿真各个阶段涉及嵌入式星载计算机之间的通信、星载计算机和各个外部系统之间的通信、系统中执行和测量部件的控制和信息反馈等,是从系统级、分系统到部件级的层次机构,其中通信机制发挥了建立其间联系的基础性作用。主要包括:通信机构的设计、通信协议的选择和统一、通信接口的编制以及底层通信设备驱动程序编写等内容,以期最后参与到卫星地面半物理仿真试验系统的整体试之中。 二、开题后主要完成的研究工作: 1、飞轮和陀螺数据通信 1.1相关硬件及软件环境:
pc计算机、PCI1710数据采集及转换卡、实际飞轮和陀螺;vxworks操作系统及其编译环境Tornado、matlab的rtw实时工具箱; 1.2实验目的和意义:
飞轮是卫星的执行机构,根据“动量守恒”原理来控制卫星的姿态,它的精度、速度和控制效果好坏直接影响到卫星的姿态精度和稳定性,本项目中主要使用的是零动量反作用飞轮来实现姿态三轴稳定。陀螺是卫星的测量部件,本项目中采用德国的微型激光陀螺,通过对三个方向角速度的测量向卫星提供姿态数据。 1.3实现原理和步骤:
1、按照仿真框图(图1-1)在matlab的simulink中建立飞轮测速的模型,包括控制部分(发送控制指令)、s函数(对PCI1710采集卡进行读写操作以及利用采集卡进行脉冲计数)、显示对比部分(图1-2);
2、使用matlab的tornado编译工具将simulink模型转化为在vxworks运行的代码,通过tornado和目标机的交叉编译环境下载到目标机的vxworks操作系统下; 3、在vxworks操作系统下运行代码,给飞轮提供一个控制信号,然后得到飞轮的转速、转向和力矩等信息,通过matlab外部模式实时观察数据。飞轮的角速度信号是通过PCI1710卡的计数器换算得到的; 4、模型运行300秒后,得到数据文件wheel.mat。绘出控制力矩和输出力矩的曲线(图 1-3)。图中平滑的曲线是控制力矩,前100秒为-0.8,后500秒呈正弦规律变化。带有噪声的曲线是飞轮的力矩曲线,由于该飞轮是一个性能不是很好的产品,只能用于地面的初期试验阶段,所以在控制力矩变向的时候产生了较大的噪声,这是十分正常的。图 1-是误差图,从图中看出输出力矩和控制力矩平均误差不是很大; 5、陀螺的测试方法与上面飞轮测速类似。
图 1-1 反作用飞轮仿真系统框图 Figure 1-1 Reaction wheel simulation system
图 1-2 飞轮测速Simulink模型
Figure 1-2 Measure velocity model of wheel
图 1-3 控制力矩与输出力矩
Figure 1-3 Control torque and output torque
图 1-4 误差曲线
Figure 1-4 Error curve diagram
2、vxworks下的网路通信 2.1相关硬件及软件环境:
pc计算机、ne2000网卡、RS485串口PCI接口卡、vxworks操作系统及其编译环境Tornado、matlab的rtw实时工具箱; 2.2实验目的和意义:
利用TCP/IP提供的端到端的传输能力在位于不同主机上的任务间传输用户数据,
其中一种方式就是使用socket(套接字),本项目中需要在仿真计算机中增加网络传输功能,以便以较快的速度通过网络把各种实时仿真数据传出,网络上其他计算机接收到实时数据后可以进行实时显示、计算以及实现三维卫星模型的实时数据驱动。因为数据量很大,串口无法满足要求,网络协议可靠快速,是良好的选择。 2.3实验原理:
1、宿主机是集成编译环境,把运行在各计算机上的任务代码编译后通过网络下载到各台计算机(图 2-1); 2、控制计算机(即星载计算机)和动力学仿真计算机各安装一块PCI串口卡PCI1612,通过485串口组成闭环结构实现实时控制(图 2-1);
3、动力学仿真计算机利用网络将动力学仿真数据通过socket发出,宿主机利用VC程序通过socket接收数据,并将其转换为符合STK接收要求的数据格式,发向STK演示机(图 2-1);
4、STK演示计算机接收仿真数据并实时驱动STK动画显示(图 2-1)。
图 2-1 半物理仿真系统结构图
Figure 2-1 Semi-physical simulation system structure
2.4实现步骤:
1、在simulink动力学模型中编写有关网络通信的s函数模块socket_net,在其中调用vxworks代码编程实现socket的服务器端,等待客户端申请建立连接后把实时仿真数据由网络传给客户端(图 2-2);
2、在宿主机中用VC实现socket数据接收,作为客户端。服务器端首先运行,等待客户端连接。在服务器端和客户端实现面向连接的socket接口的流程如下图(图 2-3):
图 2-2 仿真系统模型 Figure 2-2 Simulaton system block
服务器新连接
图 2-3 面向连接的socket应用框架 Figure 2-3 Sock_stream application frame
3、STK软件下的卫星实时数据驱动演示 3.1实验原理:
STK提供实时数据驱动接口,可以动态实时的根据数据显示卫星模型的各种状态,使用STK/VO组件。按照组件的接口程序实现数据接收和发送。软件分为两部分:发送方和接收方,他们之间通过网络IP地址来锁定。 3.2实现步骤:
1、在宿主计算机中VC编程实现数据接收网络客户端,在这个程序开始阶段包含对STK演示计算机的初始化:1)设定STK计算机的IP地址和端口号,以便建立连接;2)程序选定需要数据驱动的对象,如卫星姿态、轨道等;3)给STK中需要数据驱动的对象设置初始值;4)启动STK/AVO,等待实时数据到来;
2、在VC接收程序中实现把仿真计算机中的数据转换为STK可以识别的格式,并向初始化时建立的接口发出;
3、STK演示计算机实时接收数据,观察直观的动画演示(图 3-1)。
图 3-1 STK/AVO视图
Figure 3-1 STK/AVO view
4、利用matlab的TLC文件实现实时仿真的中断服务程序接口
4.1硬件和软件环境:
pc计算机、pc机8250芯片的RS232串口,硬件连接结构如图(图 4-1),vxworks操作系统及其交叉编译环境他Tornado、matlab的rtw组件中的tornado和matlab接口;
图 4-1 matlab中断系统结构图
Figure 4-1 matlab interrupt system structure
4.2实验原理分析:
1、在仿真计算机上的动力学仿真模块需要实时接收来自控制计算机的控制指令来修正其参数,同时把仿真的状态数据传给控制计算机来根据偏差计算下一步的控制指令,这就需要动力学仿真计算机有实时接收数据的能力,即相应中断的能力;
2、而在动力学仿真模型是matlab的simulink下生成的固定步长的程序代码,即每隔一定时间周期执行一次动力学计算,不能实时接收控制指令,会引起控制指令丢失,因此需要引入中断模式; 3、在matlab的rtw组件中提供了一个专门面对vxworks的接口模块Async Interrupt(异步中断模块)(图 4-2),使其能在定步长仿真同时产生接收数据中断,在ISR中进行控制数据的接收以及状态数据的发送,即中断模块和动力学仿真模块是相互独立运行的,不会因为仿真的定步长而影响接收数据的实时性;
图 4-2 matlab的rtw中的异步中断模块 Figure 4-2 matlab rtw asynchron interrupt module
4、还需要一种机制来联系ISR中的数据和动力学仿真中的数据,使之能进行交换; 5、而Async Interrupt(异步中断模块)默认是为VME总线中断提供的模块,和其他中断在中断号、中断机制等方面有所不同,这就需要更改和Async Interrupt(异步中
断模块)有关的程序;
6、 Async Interrupt(异步中断模块)的程序包括两部分:一是与输入参数有关的s函数:vxinterrupt1.c,一是与自动代码生成有关的TLC文件:vxinterrupt1.tlc,它们都在:\MATLAB7\rtw\c\tornado\devices文件夹下; 7、由于最后运行的代码是由RTW自动程序创建过程来生成的,所以类似ISR.c的源文件无法直接加入到最后要下载的目标代码中,而是通过RTW的自动程序创建过程动态加入的,这就需要更改TLC文件。 4.3 rtw中TLC文件介绍:
RTW提供了一个实时开发环境,这个实时环境将MATLAB与Simulink连接为一个整体,并在这个基础上提供了从系统设计到实现的方法和简单易用的接口。RTW还提供了TLC来扩充自己的功能。通过使用TLC,可以修改、优化RTW生成的C程序,扩充RTW的功能,比如,硬件驱动程序与硬件有关,随系统改变而改变,就需要利用TLC,生成相应的驱动程序。TLC文件是在rtw的自动程序创建过程中调用的。TLC文件是一种生成程序的文件。在本项目中,就需要改写vxinterrupt1.tlc
RTW自动程序创建过程能在不同主机环境下生成用于实时应用的程序,该创建过程使用高级语言编译器中的联编实用程序,来控制所生成源代码的编译和链接过程。RTW使用一个高级的M文件命令控制程序创建过程,默认命令是make_rtw。RTW的自动程序创建过程如图(图 4-)所示。
用户开发的模型和模板联编文件
make_rtw.m
自动的程序创建过程
可执行的C语言程序
图 4-3 RTW的程序自动创建过程
Figure 4-3 RTW automatic program building process
4.4实现步骤:
1、探索性的运用matlab中的全局变量和局部变量解决了动力学仿真数据(s函数中)和中断服务程序ISR(TLC文件中)之间的数据联系、存储和传递问题,忽略了细节的数据传递关系如下图(图 4-):
动力学仿真计算机上的接收发送s函数 r_s.c
TLC文件
控制计算机
控制程序ffr_gnc.c动力仿真学模型
图 4-4 控制计算机与动力学仿真计算机 及其动力学仿真计算机内部的数据传递关系
2、将中断模块加入到原动力学仿真模块中,修改vxinterrupt1.c 和vxinterrupt1.tlc文件,在vxinterrupt1.tlc中加入ISR(中断服务程序),修改vxinterrupt1.c是为了使得原本为VME总线设计的Async Interrupt模块可以响应任何挂接上去的中断,在控制程序和ISR的接收发送程序中要注意波特率和数据传送结构的一致性;
3、在Async Interrupt模块参数设置对话框中配置参数来挂接串口中断,使得仿真计算机中的模块可以产生接收数据中断(图 4-);
图 4-5在Async Interrupt模块参数设置对话框中挂接串口中断
4、在simulink中build下载仿真模块到动力学仿真计算机,控制程序下载和控制计算机上;
5、运行仿真程序,在simulink中通过外部模式观察各种参数的控制效果,(图 4-)为带有中断模块的动力学仿真模型,(图 4-)为通过记录数据得到的部分仿真控制结果:如星体控制角速度曲线。
图 4-6 带有中断模块的动力学仿真模型
图 4-7 星体控制角速度曲线
5、vxworks下PCI设备驱动程序编写
5.1硬件和软件环境:
PCI9820CAN接口卡,PCI1612RS485串口卡,安装在pc机上;vxworks操作系统及其开发调试环境Tornado。
5.2实验目的和意义:
为了满足半物理仿真系统中各部分之间的有效通信,满足快速可靠的要求,本项目在总线上选择了RS485总线和CAN总线,pc机上没有对应接口,因此选择使用适应性好且有速度优势的PCI接口卡。在本项目中使用vxworks嵌入式操作系统,而目前工业上使用的PCI接口的板卡都不提供vxworks下的驱动程序,因此需要学习vxworks下设备驱动程序。近期工作中,主要负责PCI接口CAN卡在vxworks下的驱动,所选择是周立功公司的PCI桥CAN接口卡PCI9820,带有两路sja1000控制芯片的串口。
5.2有关vxworks的启动顺序以及驱动程序的安装位置:
1、vxworks的启动顺序如图(图 5-1);
2、分析vxworks硬件初始化位置以及参考vxworks其他PCI网络设备驱动的初始化位置,将PCI初始化放在 sysHwInit()中;
3、初始化包括根据厂商ID和设备ID找到硬件,得到总线号、设备号、功能号等信息,读写PCI桥的配置空间(图 5-2),得到PCI桥设备的物理地址、空间大小、中断号等,最后进行内存映射,将物理地址映射为处理器内存空间的虚拟地址,这样才能利用这个地址对sja1000控制器的寄存器进行配置;
4、根据初始化顺序,PCI设备中断的挂接放在sysHwInit2()中,由配置空间得到的中断号在这里和中断服务程序进行挂接;
5、PCI桥内存虚拟地址映射成功之后,就可以通过*(基地址+偏移量)来访问sja1000CAN控制器的寄存器了,通过对寄存器的操作完成驱动程序中 xxOpen()、xxClose()、xxRead()、xxWrite()、xxIoctl()等接口的功能。
5.3vxworks下字符型设备驱动程序主要包含三个层次结构:
1、任务与VxWorks的接口:
·fd =open (filename, flags, mode)
·fd=creat (filename, flags)
·read (fd, &buf, nBytes)
·write (fd, &buf, nBytes)
·ioctl (fd, command, arg)
·close (fd)
·remove (filename) ;
2、驱动程序表、设备列表、文件描述符表,他们是三个列表结构,其中并列记录着各种设备的相关信息,建立了从应用程序到底层驱动程序的联系;
3、 Driver的操作规整,参数规整和I/O管理,这主要是怎样将驱动安装在BSP中的操作以及设备驱动的调用规范,其中xx表示需要编写驱动的设备,这里是PCI9820,
xxOpen(pDevHdr, pName, flags, mode):返回设备Id号;
xxClose(deviceId)
xxRead(deviceId, pBuf, nBytes)
xxWrite(deviceId, pBuf, nBytes)
xxIoctl(deviceId, cmd, arg),
这些就是I/O接口(如open、read等)调用时的底层实现函数,在驱动程序中编写。
Copy the text and data to RAM; Copy the data to RAM;
with default stubs; all processor registers to known
default states;
all init needed before kernel start
the kernel by calling
cputoolvx.a;
vxworks facilities can’t be used here )
bss segement,Init interrupt
hardware to quiescent
sysHwInit())
memInit()(or memShowInit()
usrMmuInit());
agent’s commu.
Interface,start agent)
图 5-1 vxworks启动顺序
图 5-3 vxworks启动顺序
图 5-2 PCI配置空间简图 xxDrv(args,…):使用函数iosDrvInstall (xxCreat, xxDelete, xxOpen,xxClose, xxRead, xxWrite, xxIoctl) 往I/O系统驱动程序表添加Driver。xxDrv()在设备初始化阶段被调用,而且只能调用一次,输入参数是设备相关的; xxDevCreate(devName,arg,…) :为设备描述结构分配内存,执行设备相关的初始化,调用iosDevAdd(pDevHdr,devName,drvNum)往设备列表内添加设备描述符,并用设备名字(drvName)和驱动程序号(drvNum)初始化DEV_HDR; 如下就是应用程序I/O操作调用底层驱动的流程图(图 5-3):
三、后期拟完成的研究工作及安排:
1、完善PCI9820CAN接口卡vxworks驱动程序编写,满足CAN2.0协议的要求,实现CAN总线数据准确、稳定传输;
2、实现不同体系结构计算机vxworks操作系统下应用程序的移植;
3、调试加入电模拟器的仿真试验系统,完善数据校验,验证通信机制的准确和有效性;
4、参与半物理仿真桌面联试系统的调试和通信,建立有效数据通路;
5、参与卫星地面试验系统调试,学习通信机制。
四、存在的困难与问题
1、项目方向参考文献少,缺乏仿效例子,很多内容要进行探索性试验;
2、实际工程经验缺乏,一些细节问题或错误占有了大量的调试时间;
3、对硬件电气结构知识了解不够,导致对硬件编程缺乏足够的系统性和完善性,外部硬件环境的变化对程序执行的结构有一定影响。
基于ARM的嵌入式系统中从串配置FPGA
的实现
1引言
ARM(Advanced RISC Machines)既可
以认为是一个公司。也可以认为是对一类微处理器的统称,还可以认为是一项技术。基于ARM技术的微处理器应用约占据了32位RISC微处理器75%以上的市场份额,ARM技术正在逐步渗入到人们生活的各个方面[1]。到目前为止,ARM微处理器及技术已经广泛应用到各个领域,包括工业控制领域、网
络应用、消费类电子产品、成像和安全产品等。
FPGA(Field Programmable Gate Array)是一种高密度现场可编程逻辑器件,其逻辑功能是通过把设计生成的数据文件配置到器件内部的静态配置数据存储器(SRAM)来实现的。FPGA具有可重复编程性,能灵
活实现各种逻辑功能。
基于SRAM工艺的FPGA具有易失性。系统掉电以后其内部配置数据容易丢失,因此需要外接ROM保存其配置数据,系统上电后必须重新配置数据才能正常工作。目前有两种方案可以实现,一种是使用专用的PROM,以Xilinx公司FPGA,XCFxx系列PROM为例,能够提供FPGA的配置时序,上电时自动加载PROM中的配置数据到FPGA的SRAM中;另一种是在含有微处理器的系统(如嵌入式系统)中采用其他非易失性存储器如E2PROM、Flash存储配置数据,微处理器模拟FPGA的配置时序将ROM中的数据置入FPGA。
与第一种方案相比,该方案节省成本、缩小系统体积。适用于对成本和体积苛刻要求的系统。 在便携式虚拟仪器设计中,使用嵌入式系统和FPGA实现系统功能。嵌入式微处理器采用Samsung公司的ARM7TDMI系列处理器S3C44BOX:FPGA采用Xilinx公司的Spartan-3E系列XC3S100E,采用S3C44BOX
完成对XC3S100E的配置。取得了良好效果。
2 从串配置的原理
2.1从串配置原理
Xilinx公司的Spartan-3E系列FPGA产品是采用90 nm工艺的2.5 V低电压FPGA器
件,具有高性能、低功耗、可无限次编写的特点。XC3S100E是Spartan-3E系列FPGA中的一款,总门数达10万门,可采用从串、主串、从并、主并、JTAG等模式对其进行配置[2]。XC3S100E与从串配置
模式相关的主要引脚功能如下:
M[2:0]:配置模式选择。M2、M1、M0均接上拉电阻,即M[2:0]:111时为从串模式;
CCLK:配置时钟,微处理器提供时钟源,且上升沿有效:
DIN:串行配置数据输入:
DOUT:串行数据输出,用于菊花链式配置:
PROG_B:低电平异步复位FPGA内部逻辑,内部可配置:Memory完全复位后,该引脚指示高电平。
当此引脚为高时,才能配置FPGA:
INIT_B:由低电平到高电平跳变时,采样配置模式,即M[2:0]的值确定配置方式;配置过程中若出现
配置错误,INIT_B将呈现低电平;
DONE:复位时为低电平。若配置成功,则为高电平。
2.2微处理器从串配置:FPGA的时序
FPGA的配置过程如下:
系统上电后,将PROG_B拉低以复位FPGA内部逻辑重新配置FPGA,充分复位内部逻辑后(约100μs),
将PROG_置高。
INIT_B为低电平,PROG_B拉高保持300 ns后,FPGA将INIT_B置高。在INIT_B由低向高跳变的瞬间,
采样配置模式M[2:0]。此系统采用从串配置模式。
在FPGA采样配置模式后,微处理器就可以向FPGA配置时钟CCLK和数据,在CCLK的上升沿,传输数据至
DIN,数据字节先发送低位,再发送高位。配置过程中若发生错误,则INIT_B为低电平。
所有的配置数据传送完成,CRC校验无误。则DONE为高电平,否则为低电平。
DONE为高电平,FPGA释放全局三态(GTS),激活I/O引脚,释放全部置位复位(GSR)和全局写使能(GWE)
有效,开始执行配置区的逻辑。
微处理器从串配置FPGA的时序如图1所示。
2.3 配置文件的产生方法
利用Xilinx公司提供的开发工具ISE8.1,经过综合、映射、布局布线后可产生编程文件,编程文件含有.bit、.bin、.mcs、.tek、.hex等格式。其中,.bit格式用于JTAG下载,其他几种格式用于专用PROM编程。首先按照产生专用PROM编程文件的方法来产生.bin文件.然后将该.bin文件转换成ASCⅡ码文件的存储形式,并且各个字节之间用逗号分隔。再将该配置数据存放在系统程序的一个头文件的数组config_data_array[]中,作为系统程序源代码的一部分,并和其他程序一起编译。
3 硬件设计
嵌入式微处理器S3C44BOX内置ARM7TDMI核,集成了丰富的外围功能模块,内部8 kB Cache大大提高了性能。S3C44BOX可访问256MB的地址空间,最高工作频率达66 MHz 。采用4 MB Flash作为程序存储器,可用于存放系统运行的代码。XC3S100E从串配置程序和配置文件都固化于其中保存,该Flash支持低电压(1.65 V~3.3 V)写操作。8 MB的SDRAM是程序的运行空间,直接运行Flash中的代码,但速度非常慢。通常是将Flash中的代码移至SDRAM中。S3C44BOX与XC3S100E主要通过PROG_B、INIT_B、
DONE、CCLK、DIN 5根信号线连接,如图2所示。其中VCC33表示3.3 V,VCC25表示2.5 V。
4 软件设计
软件设计流程如图3所示。配置软件的编程要确保ARM完全按照配置信号的时序工作,关键问题
是采用S3C44BOX的通用I/O口GPF0、GPF1、GPF2、GPF3、GPF4模拟DIN、CCLK、DONE、INIT_B、PROG_B
的时序。
在S3C44BOX中,大多数引脚都是多功能引脚,可以通过端口配置寄存器选择相应的引脚功能。 以端口F为例,控制寄存器rPCONF用作设定引脚的输入、输出或特殊功能;数据寄存器rPDATF[0:8]对应于GPF0~GPF8引脚上的数据。读写寄存器rPDATF的各个位对应于引脚的读或写。例如,CCLK上
升沿时序是向GPF1先写0,再写1得到,延时程序则由for循环实现。
则一直循环等待
CCLK在每个上升沿把1 bit的数据置入DIN中,先将GPF1置低,在GPF0准备好1 bit数据,再将GPF1
置高即可,以此循环将config_data_array[]中的每个字节按先低位再高位的次序写入FPGA。 Xilinx的FPGA配置文件大小相同,与FPGA内部逻辑设计的复杂度无关。以Spartan_3E系列的10万门FPGA XC3S100E为例,它的配置文件固定为581 344 bit,若CCLK的时钟周期置为2μs,配置时间
约为1.2 s。
5 实验结果验证
验证环境:硬件采用自行开发的实验板和武汉创维特公司的:JTAG硬件仿真器;软件则使用Xilinx
公司的开发工具ISE8.1和武汉创维特公司的集成开发环境ADT 1000(支持ARM7,ARM9)。
利用Verilog HDL编写程序led.v在七段数码管上循环显示0~F,采用:ISE8.1编译、综合、映射、布局布线。生成用于编程专用PROM的led.bin文件。用一个简单的C程序将.bin文件转换成ASCⅡ码文件,再将ASCⅡ码文件复制到配置数据数组config_data_array[]中,然后在ADT环境下编译配置程序、配置数据和系统程序,将生成的.bin文件通过JTAG口烧写到Flash中。重新上电后,FPGA配
置正常,实验结果与预设相一致。
6 结束语
基于ARM的FPGA从串配置方案结构简单、接线容易、软件编程简单,非常适用于嵌入式系统设计。虽然该控制电路是为Xilinx公司Spartan-3E系列的FPGA设计的,但稍加修改也可用于其他系列FPGA器件,故具有一定的通用性。另外,由于FPGA具有可重复配置的灵活性,在嵌入式系统中可通过串口、网口远程烧写Flash,重构系统功能,这种在线重构技术为设备的智能化在线维护、功能重组和在线升级等提供了可能,而且灵活性很强。本文提出的方案对数字系统设计具有借鉴意义,有着广阔的应用
前景。