随着嵌入式实时系统复杂度的提高,设计工程师在定义和分析系统初始要求时必须认真考虑软硬件的协同关系。通常设计工程师还必须权衡系统的灵活性、速度、成本、计划和可用工具之间的关系。本文打算描述嵌入式系统和实时系统的关键特性,并探讨在选择或开发硬件和软件组件的基础上开发高效嵌入式系统的解决方案,同时详细说明嵌入式系统和实时系统开发所特有的关键工艺技术。
嵌入式系统通常是一个包含微处理器的特殊计算机系统,是一个较大系统或设备的组成部分,它在很大程度上决定了设备的功能特性。许多具备数字接口的设备如微波设备、录像机(VCR)和汽车等都会用到嵌入式系统。有些嵌入式系统需要使用操作系统,有些则用单个程序实现整个逻辑,但所有嵌入式系统提供的功能都要比通用计算系统更专业些。嵌入式系统功能包括:
1. 监视环境-从输入传感器读取数据,然后处理数据并显示结果。
2. 控制环境-产生并向激励器发送命令。
3. 转换信息-转换并处理收集到的数据。
虽然通过传感器和激励器完成与外部世界的交互是嵌入式系统的重要特点,但这些嵌入式系统还提供适合它们所在设备的特殊功能。嵌入式系统一般用来执行控制程序、有限状态机和信号处理算法。这些系统还必须检测内部计算环境和周围电磁系统中发生的故障并对此做出响应。
嵌入式系统特性 http://www.16sheji8.cn/
嵌入式系统的设计挑战是使嵌入式系统的独特性能与设备的特殊约束条件相一致。以下是一些嵌入式系统的重要特性:
1. 特殊应用系统-嵌入式系统不同于通用处理器,它针对特殊应用进行了优化。
2. 反应性系统-反应性计算的意思是系统(主要是软件部分)根据传感器信息对环境作出响应,并利用激励器控制环境,同时系统速度能与环境速度同步。
3. 分布式-嵌入式系统的一般特征是多个通信进程在多个通过通信链路链接的CPU或ASIC上运行。
4. 异类性-不同的嵌入式系统一般具有不同的结构,以便在处理严格设计约束的嵌入式系统时能够提供更好的设计便利性。
5. 苛刻环境-许多嵌入式系统并不工作在受控的环境中,因此它们必须能够经受过热、振动、冲击、电源波动和其它恶劣的物理环境条件的考验。
6. 系统安全性和可靠性-由于嵌入式系统复杂度和运算量的不断增长,需要更多地考虑系统安全因素。
7. 小型化、重量轻-为了达到便携目的,许多嵌入式系统的重量必须设计得很轻。
8. 成本敏感性-不同的嵌入式系统对成本的敏感性有很大的不同。
实时系统的特性
实时系统要求在外部环境指定的时间间隔内对来自环境的激励信号作出响应(包括物理时间的过渡)。从输入时间到输出时间的延迟必须足够小,以满足可以接受的时间值。通常实时系统需要对环境作出连续及时的响应。
计算的正确性不仅依赖于结果,而且取决于输出发生的时间。一个实时系统必须满足有限响应时间约束条件,否则会产生严重的后果。如果后果是性能的劣化而不是故障,那么这种系统可以看作是一个软实时系统。如果后果是系统发生故障,那么这种系统就是一种硬实时系统。
实时系统有反应式和嵌入式两种类型。反应式实时系统会与环境发生连续的互作用,而嵌入式实时系统主要用于控制大型系统中安装的特殊硬件。
嵌入式系统开发生命周期
许多系统设计工程师都会经历硬件/软件协同设计的过程(图1),此过程中硬件与软件将同时进行开发。理解硬件与软件功能相互之间的关系及界限有助于确保设计要求得到完整正确的理解和实现。
早在设计要求的定义与分析阶段,系统开发人员就必须与设计工程师协同分配硬件或/和软件方面的要求。这种分配的依据是早期系统仿真、原型设计和行为建模结果、工程师自己的经验以及上文提及的各种因素权衡结果(图2)。一旦分配结束,就可以立即着手具体的设计和实现。实时系统开发中软硬件的并行设计会使用到各种分析技术,包括:
1. 硬件与软件仿真; http://www.16sheji8.cn/
2. 硬件/软件协同仿真;
3. 可调度的建模技术,如速率恒定分析;
4. 原型设计和渐进式开发。
可以在各种抽象层次使用的仿真技术主要用于开展早期的性能评估。低层仿真可以用来为总线宽度和数据流程建模,这对性能评估是非常有用的。高层仿真可以满足功能的交互,并促成硬件/软件权衡研究及有效性设计。利用仿真可以将一个复杂的系统向下抽象成基础组件和行为。仿真还助于解决功能性问题(数据与算法)、行为(进程排序)或性能问题(资源利用、吞吐量和时序)。
理解设计要求
在作执行任何类型的处理器评估时,首先要详细理解用户的功能和非功能性要求。功能性要求通常比较容易获得,而非功能性要求较难定量测量。但对于实时系统来说,定义响应时间这样的要求是非常重要的。实时要求可以有以下几种:
1. 激励-激励(S-S):到系统去的两个激励之间的实时关系;
2. 激励-响应(S-R):一个激励与来自系统的一个后序响应之间的实时关系;
3. 响应-激励(R-S):一个响应与到系统去的一个后序激励之间的实时关系;
4. 响应-响应(R-R):来自系统的两个响应之间的实时关系。
S-R和R-R关系定义了对指定系统的时序要求。这种情况下所实现的功能必须足够快(或足够慢)才能满足时序要求。S-S和R-S约束暗示系统必须能够从环境(可能是一个用户或另外一个系统)中检测出特定时序约束的破坏。这些约束与功能的快慢没有关系,相反它们能够检测出某些遭到破坏的时序约束并采取必要的措施。
因此要从最初系统要求设计时就很好地理解这一点,因为S-R和R-R约束可以引导设计工程师进行代码优化,而S-S和R-S约束需要用额外的软件来检测和响应时序冲突。
处理器选择
嵌入式实时系统比较适合用于系统优化。由于这些系统主要用来解决范围相对较窄的问题,因此硬件和软件能够得到最佳优化,并很好地应用于单一设备。这样做的目的是要在软硬件最佳折衷状态下开展系统设计。影响这一阶段设计的主要因素是处理器的选择、软硬件的分割和总体系统集成。
在为嵌入式实时系统选择处理器时需要考虑以下几个方面:
1. 性能:处理器必须有足够的性能执行任务和支持产品生命周期。
2. 实现:根据具体应用情况,处理器可能需要被高度集成。在DSP应用中可以有好几种选择,专用集成电路(ASIC)就是其中的一种。这些器件可以被用作DSP协处理器,但对于许多通用信号处理来说显得不够灵活。另外可以选择精简指令集计算机(RISC)处理器。这些处理器的时钟速度特别快,但可扩展性不是很强,而且会发生其它实时(可预测性)问题。现场可编程阵列(FPGA)是一种快速器件,能够快速高效地完成某些DSP功能,但与DSP相比开发难度比较大,因为在DSP中一个简单的程序就能完成相同的功能。如果是主信号处理应用,则最好采用性能强大功耗也较大的通用处理器。如果需要快速升级信号处理应用,采用DSP等可编程器件比定制的硬件方案要更好些。
3. 工具支持:支持软件创建、调试、系统集成、代码调整和优化工具对整体项目成功与否非常关键。
4. 操作系统支持:嵌入式系统应用需要使用有帮助的抽象来减少其复杂性。针对处理器系列产品作过优化的商用操作系统(OS)能够缩短设备开发周期和上市时间。
5. 过去的经验:拥有处理器或处理器系列产品的开发经验可以减少可观的学习新处理器、工具和技术的时间。
6. 仿真支持:循环精确仿真对某些类型的应用来说非常重要,特别是数字信号处理应用中许多功能正确性验证都是采用仿真技术完成的。嵌入式系统的软硬件协同设计模型也促使处理器仿真器成为开发流程中一个非常有用的工具。
7. 应用支持:应用支持有多种方式,从通过热线或网站取得的应用专家支持,到预打包的软件和应用框架,甚至完好的测试平台。一些DSP处理器能够提供外围器件的驱动器、板级支持包和其它“启动帮助组件”。有了这些软件组件后,应用开发师就无需再编写器件驱动器等“无附加值”的软件,相反,他们可以把精力放在具有附加值的功能开发上,使他们的产品能独树一帜。
8. 成本:嵌入式应用对成本特别敏感,而产品成本的稍许差别都可能导致市场的失败。
9. 功耗:市场上有许多依靠电池工作的便携嵌入式实时系统,此时电池寿命将成为系统的重要参数。这种情况下应该考虑使用针对便携式应用优化的低功耗器件。 http://www.16sheji8.cn/
10. 传统代码:如果选中的处理器需要设计人员编写与现存代码的接口,将会导致整个设计流程的严重滞后。因此需要选择一款代码兼容的器件来避免或减少这一步骤造成的影响。
11. 算法复杂性:某些处理器能够非常高效地处理某类算法,因此最好选择能够与应用最佳匹配的处理器。例如,具有许多控制代码的有限状态机应用应该映射为类似ARM处理器的RISC器件。编码、解码和回波抵消等信号处理应用应该映射为数字信号处理器,或具有信号处理加速器的某种器件。
12. 上市时间:项目的完成时间会加快处理器的选择过程,这一过程与先前讲述的几个关键事项密切相关,如OS的可用性、其它软件组件以及便携性问题。
设计还是购买?
是自己设计还是购买成品呢?如果有可能不重新设计,价格也比较合理的话,购买要比自己开发更有利。由于嵌入式系统预算的缩减、实时操作系统(RTOS)和TCP/IP堆栈等商用技术的改进、嵌入式系统要求的扩展,采用商业性现成(COTS)技术正变得越来越普遍。采用COTS技术能够缩短开发周期中编码、调试、单元测试和代码检查阶段的时间。
然而,作出购买而非设计的决定会改变一个组织的基础开发流程。一个组织希望实现的新业务有:供应商调研和评估、产品评估以及实时的供应商交流与关系建立。产品开发的其它活动不会取消,但会作出一些改变。这些变化包括更关注如何将系统硬件与软件更好地组合在一起,而不再把重点放在模块自己内部的运作上。另外必须更侧重于兼容性、可配置性和可集成性等结构上的问题。
必须很好的理解和高效地管理由于决定采用“购买”而非“设计创建”方式所导致的结果。首先,自然是对供应商提出产品要求、产品可靠性、计划和产品文档等依赖请求。这种情况下产品要求中的灵活性会打些折扣。购买商用产品意味着接受现有的产品要求,但这种要求也许不能完美地匹配自身产品的要求,这就需要设计人员把这种缺点与COTS技术提供的成本与上市时间优势作一个理智的权衡。
因此重要的是最终用户与技术人员必须参与COTS供应商的选择,考虑的重点要放在业务需求上而非技术本身。性价比分析所要考虑的因素应包括易学性、易用性、供应商名声和长期稳定性、许可方式和培训。所有与性能有关的声明必须尽可能采用内部或外部基准或演示来到得有效性认证。为了避免可能出现的偏差,评估标准应该在收到供应商建议前就制定好。选择供应商的主要工作包括研究和理解技术标准和相当的文件、采用类似建议请求(RFP)的标准模式征求供应商的建议、对供应商建议进行评估和排序、选择供应商并签署合同。
除了评估技术外,还应对供应商本身进行评审。要充分了解供应商开业时间的长短、供应商的背景和名声、供应商的其它用户对它的评价和意见、供应商人力资源的投入和对你的计划或项目的支持情况,以及供应商对你业务和要求的理解程度,甚至对未来项目的承诺。以前软件团队认为软件开发方案遵循类似于创建架构的特定模式。提供符合一般模式的抽象方法能够使软件团队定制符合他们特殊要求的方案,同时遵循被前人证明是高效和正确的模式。
嵌入式系统供应商已经认识到需要通过提供软件组件和类似于设计模式的框架来加快软件开发进程。在DSP领域,供应商向DSP设计工程师提供包括参考框架(RF)在内的上百个以DSP为核心的软件组件用于产品和系统开发。设计完好的参考框架能够在设备开发的早期阶段让设计人员快速入门。RF内含方便易用并且适合多种应用的源代码。由此可以取消许多早期的低层设计决策,使开发人员能有更多的时间用在真正显示产品特色的代码开发上。设计人员可以选择能够最大程度满足他们系统需要的专业RF,然后集成适配的算法(可以是其它供应商出售的DSP COTS算法,或供应商自己的算法)生成适合各种终端设备的特殊应用,如宽带、语音、视频图像、生物测量和无线设施。这些RF提供百分之百的C语言源码,并且没有版税要求。 http://www.16sheji8.cn/
软件性能工程
许多嵌入式实时系统必须满足一系列性能目标。一般来讲,性能是一个软件系统或组件对时间要求满足程度的一种指示。这里的时间指标可以用响应时间和吞吐量来衡量,该时间值是指响应某种要求所需的时间,而吞吐量用以指示系统在特定时间间隔内能够处理的请求数量。可扩展性是嵌入式实时系统的另外一个重要指标,可以用它来衡量系统要求提高时系统能够继续满足响应时间或吞吐量要求的能力。
如果在整个开发生命周期内得不到正确的性能管理,那么即使选择了正确的处理器和软件也是徒劳的。性能故障的后果是非常严重的,它可能损伤与客户的关系,造成收入下降,甚至导致整个项目失败。因此在整个生命周期内需要随时关注性能问题。性能管理可以被动或主动完成。被动方式需要采用一个较大的处理器解决性能问题,它只在系统完成构架、设计和实现后处理性能问题,在解决问题前一直处于等待状态,直到实际需要测量的事件发生。主动方式是指整个生命周期内一直在跟踪和交流性能问题,同时开发用以识别性能劣化的进程,并在性能处理中培养团队成员。
本文小结
显然开发嵌入式实时系统是一个相当复杂的过程,本文旨在启发设计人员在分析初始要求时如何权衡硬件与软件之间的关系,要时刻在系统灵活性、速度、成本、计划和可用工具之间作出权衡,并充分考虑各个供应商提供长期可靠支持的可能性。
回路硬件仿真技术在直升机控制系统中的应用
软、硬件的并行开发方法可以加快设计进程,但在系统整合时常常出现很多问题,而硬件回路仿真能有效解决这些问题,采用该技术可以在开发周期初完成嵌入式软件仿真。本文以HIL技术在实验性动态直升机系统用嵌入式控制软件中的应用为例阐述该技术的应用特点和方法。align=RIGHT VSPACE=12 HSPACE=12 ALT="图1:直升机前视图和侧视图。">
设计工程师一直在努力缩短新产品开发周期,而软硬件并行开发就是一种比较好的方法。通常这种方法需要多个独立的软硬件开发小组参与,这些小组的工作相互间独立、并行地进行。当原型硬件和嵌入式代码的主要部分实现后,就可以在系统整合阶段将硬件与软件合并起来并开始测试工作。
在系统整合时经常会发生严重的问题,有些问题甚至会导致软件或硬件的重新设计。在问题成堆发生、成本持续升高或计划拖延太久的情况下,有可能中断设计项目,有时甚至不得不取消项目。因此,人们需要找到更好的方法来解决这些问题。
回路硬件(hardware-in-the-loop,HIL)仿真被证明是一种有效的解决方法。该技术能确保在开发周期早期就完成嵌入式软件的测试。到系统整合阶段开始时,嵌入式软件测试就要比传统方法做得更彻底更全面。这样可以及早地发现问题,因此降低了解决问题的成本。
本文所要讨论的就是采用了HIL仿真的一个嵌入式软件开发项目。该项目的目标是开发和测试实验性动态“直升机”系统用的嵌入式控制软件。有了HIL仿真后,人们无需使用除嵌入式处理器及其I/O接口外的任何硬件就能完成该控制器软件的设计和测试。 http://www.16sheji8.cn/
随后的实际系统硬件与运行新软件的嵌入式控制器的连接首次便获得成功。在硬件、软件整合阶段唯一要做的额外工作是对一些控制器参数的少量调整,这是由于实际系统硬件与其仿真模型之间毕竟存在差异。
直升机系统
本项目需要开发适合Quanser 3自由度(3DOF)直升机的控制器软件。这是一个桌面电磁系统,内含由两个独立电子马达控制的3个旋转轴,每个轴驱动一个推进器。图1是直升机系统及其运动轴的框图。align=RIGHT VSPACE=12 HSPACE=12 ALT="图2:直升机控制系统。">
假设倾斜轴的倾角接近零度,在对两个马达施加相同的高电压后直升机会垂直向上攀升。对两个马达施加不同的电压会使直升机绕倾斜轴旋转。为了使直升机向前移动,首先需要将直升机倾斜到一个非零角度,然后对两个马达同时施加适当的电压来产生向前的推力。
如图2所示,系统采用的控制计算机具有3个位置编码器输入信号、两个马达电压输出信号,以及用于模式选择与操纵杆控制的用户输入信号。控制计算机通过专门设计的接口卡接收位置编码器输入信号,同时产生模拟输出电压,并通过数模转换器(DAC)驱动那两个马达。为了提供足够大的马达工作电流,DAC的输出需要连接到随后的功率放大器进行放大。
位置编码器会随时监测每个轴的运动,这些编码器通过光学原理感知旋转运动并产生数字化的角度位置数值。位置编码器将以每360°4096个步距,或0.08789°的量化步距分辨率对这些数值进行量化。每个编码器的输出信号由两个TTL电平组成,即Phase A和Phase B,当对应轴反转时输出信号就在这两个高低电平之间来回切换。根据这两个信号之间的相位差可以判断每个轴的运动方向,如图3所示。脉冲频率正比于每个轴的旋转速率。
直升机控制器的性能指标满足要在一定时间内将前进和上升轴移动到任意一个指定位置,时间一般应控制在10秒以内。此外,直升机控制器的软件必须支持其它一些操作模式。全套控制器操作模式包括:
关闭模式:align=RIGHT VSPACE=12 HSPACE=12 ALT="图3:位置编码器输出信号。">
控制器软件以关闭模式启动,此时两个马达上的电压为零。一旦系统离开这个模式,就只能从空(Null)模式再次进入该模式。当从空模式进入关闭模式时,需要控制上升轴缓慢地下降到桌面正上方,然后将马达电压设置为零。
空模式:
当从关闭模式转变到该模式时,首选要给马达上电,并控制所有轴到零位置。如果从其它模式转变到空模式,那么只需要将所有轴控制到零位置。零位置是指倾斜轴和前进轴在系统启动位置,而推进组件被抬举到上升方向的水平位置,如图1所示。
随机模式:
在10秒时间间隔内为前进和上升轴位移命令产生预定义范围内的一个新随机值,然后由控制器软件将直升机移动到相应的位置。
自动驾驶模式:
在这种模式下,由操纵杆产生控制器所需的上升和水平行进命令。通过操纵杆的前后动作控制上升位置,通过左右动作来控制水平位置。控制器通过移动直升机来跟随命令所指定位置。
手动模式:
在手动模式下,操纵杆直接产生马达驱动用的电压和与电压差。操纵杆前后动作控制两个马达电压的和,左右运动控制两个马达电压的差。在这种模式下系统特别难以控制,如果任何轴的运动超过了某个位置限制,控制器就会自动切换到空模式。通常,在进入该模式后的几秒钟内可能产生违反限制的问题。
在确定系统功能和性能要求后,可以进行控制器软件的开发和测试。而仿真技术的应用可以加快直升机控制器软件的开发和测试速度。
项目规范
为了对嵌入式软件进行HIL仿真测试,需要使用嵌入式处理器及其附属I/O器件。对于许多嵌入式系统来说,这只是整个系统的一小部分,可以在早期开发阶段实现组合。可以创建一个直升机硬件及其与外部环境交互的仿真,并通过控制器的I/O接口把这个仿真与嵌入式控制器连接起来。嵌入式控制器和直升机仿真就如同实际系统一样工作。
在复杂的嵌入式产品开发早期,经常需要仿真一个完整系统在预期环境中的运行。这种利用动态系统仿真工具,如Simulink开发的仿真系统通常不是实时的,但可以作为HIL仿真的基础。某些时候需要对这些仿真系统中包含的模型进行简化和优化,使之适合实时仿真使用。不过在本项目中不需要修改这些模型。
复杂系统仿真需要用到许多高级的数学算法,但可以采用专门的软件工具来简化任务:Simulink是MATLAB的一个附件,它可以用来提供以框图为主的图形环境下的动态系统仿真。用Simulink进行仿真的方法是先把“调色板”上的模块拖到绘画区域,然后用代表信号流向的直线把这些模块连接起来。图4就是直升机项目中采用的位置编码模型的Simulink框图,该模型把以弧度表示的角度位置作为其输入信号,并产生Phase A和Phase B信号作为其输出。另外,它还输出指示信号,用来指示相应轴到达零位置的时刻。直升机位置编码器不会产生指示信号输出,因此不使用该Simulink模型的输出。
Stateflow是Simulink的一个附件,用以实现有限状态机模型。在这个直升机项目中,Stateflow模型用来实现直升机模式选择逻辑。
Real-Time Workshop根据Simulink框图产生C代码,其它工具需要使用这些代码来达成编译与执行目标。在本项目中,其它工具包括Real-Time Windows Target和xPC Target。
Real-Time Windows Target允许仿真的编译与执行作为PC机Windows系统中的一个实时进程,能与Windows操作系统同时运行。在本项目中,Real-Time Windows Target执行的是HIL系统仿真,所用主机正是开发和控制直升机软件的计算机。align=RIGHT VSPACE=12 HSPACE=12 ALT="图5:直升机和控制器模型。">
xPC Target允许在PC机上执行仿真,此时PC机的功能如同专门的实时控制器。xPC Target还提供实时的多任务内核供只有有限硬件资源的嵌入式处理器使用。xPC Target在本项目中用来在一台独立PC上产生和执行直升机控制器用的实时代码,此时该PC机就用作“嵌入式”控制器。
仿真开发 http://www.16sheji8.cn/
控制器软件开发的第一步是实现对整个直升机控制器系统的仿真,图5给出了仿真的顶层框图。其中两个较大的方框分别表示直升机系统本身和数字控制器,两个较小的带有“操纵杆”和“模式命令”标签的方框向控制器提供用户输入信号。图5中的“直升机”框图包含有直升机动态行为的Simulink模型,如图6所示。从图6可以看到,该模型采用了转移函数、求和函数和积分器等多个Simulink模块。带“有限运动”标签的模块包含有一个受限于向下靠近桌面方向的上升轴运动模型。当被仿真的直升机碰到桌面时,所有3个运动轴的速度都被置为零,因此非常接近实际直升机的行为。从靠近右边的3个量化器可以看出位置编码器的量化效果。
“有限运动”模块代表一个子系统。子系统模块允许在仿真开发期间通过分层图集(hierarchical sets of diagrams)来控制复杂性。子系统间可以进行任意多层的嵌套,类似于函数的嵌套调用。