1.2 概念
1.2.1 控制系统的意义
改进系统的控制方式可以获得更好的性能,提供附加的功能,降低购买或运营的成本,提高系统的可靠性。嵌入式计算机系统通常是指把计算机嵌入到大型系统中充当控制角色,以达到改善系统性能的目的。
图1.1所示为用于烹饪食物的电热炉,前面的控制旋钮用来打开、关闭电热炉或设置电热炉的温度。下面以该控制系统为例,分析其缺点和改进方法。
图1.1 电热炉示意图
图1.2展示了电热炉的内部组件,包括黑色控制旋钮、加热元件(覆盖银色金属线圈)、红色指示灯和温度控制系统,加热元件工作时会点亮指示灯。
图1.2 电热炉内部组件
图1.3所示的温度控制系统结构较为简单,仅包含温控(调节温度)开关这一个组件。开关触点由两种不同的金属制成,金属会随着温度的升高而弯曲。当开关过热时,开关触点将弯曲,使加热元件与电源断开,随后加热元件和温控开关逐渐冷却,触点恢复原来的形状,重新接通电源。控制旋钮通过调节开关触点之间的距离来设置温控开关打开或关闭的温度。接下来将分析这个控制系统的性能表现。
图1.3 控制加热元件的温控开关细节
电热炉的温度控制性能
电热炉烹饪时的表面温度可以使用热电偶(一种电温度计)来测量。图1.4展示了其温度随时间变化的曲线。t=0时,控制旋钮设置为低挡,加热元件开始工作;随后的5分钟内,温度升高至接近300℃;t=4分钟时加热元件短暂关闭后重新启动;t=5分钟时加热元件再次关闭;接近15分钟时,电热炉冷却至大约150℃;最终的温度在190℃左右。需要注意的是,电热炉的温度从未真正稳定,而是随着温控开关的打开或关闭,在误差±20℃的范围内波动。
图1.4 电热炉温度与时间的关系
该控制系统结构简单、成本较低,但不能很好地控制电热炉的温度。存在以下几点问题。
• 实际温度在前15分钟急剧变化,导致食物难以恒温加热;15~20分钟,温度逐渐稳定,烹饪前等待时间较长。
• 温控开关的温度是金属罩和内部空气的温度,而不是电热炉烹饪食物表面的实际温度。
• 热量需传导至开关触点,金属罩和内部空气温度变化与开关温度变化之间存在延迟。
• 控制系统未经过校准,控制旋钮仅有“关闭”“低”“中”“高”四个挡位,而不是准确的温度数值。
1.2.2 使用电子设备和嵌入式计算机的原因
电子设备可以从以下几个方面提高电热炉的温度控制性能。
• 使用反应更快、更小的温度传感器来减少温度变化与控制系统响应之间的延迟。
• 将温度传感器安装在电热炉底部,可以进一步减少延迟,能在5分钟内降低过高的温度,节省时间和能耗。
• 提高打开和关闭加热元件的频率,减少15分钟以后的温度波动(如图1.4所示)。
• 提高开关切换的速度,控制加热元件的工作时间,提供更大的输出热量范围,替代当前系统简单的开/关模式。
• 电子设备可以精确地测量温度,而温控开关只能提供简单的温度高/低信息。
• 精确的温度测量和加热比例控制可以实现更好的控制方案。例如,当温度仅稍低于设定点时,只打开部分加热器;当温度远低于设定点时,则完全打开加热器。这种方式可以提高响应速度并减少过度加热。
• 添加多个温度传感器同时监测电热炉上多个位置的温度,从而进一步改善对温度的控制。
以上方法可以通过设计专用的电子控制电路实现,但嵌入式计算机则更加实用。嵌入式计算机灵活性高、成本低、开发速度快;但不适用于在处理速度、功耗或单元成本方面要求极高的设备。
嵌入式计算机通过专用集成电路(Integrated Circuit,IC)(此处为微控制器)简化系统的监控和控制功能。微控制单元(MCU)中的CPU负责执行程序指令。
术语
集成电路(IC)
将元件制作在单个硅片上的电子电路,能够实现极小型化、量产和低成本。
术语
微控制单元(MCU)
包含CPU、外设、辅助电路、内存的集成控制器硬件电路。
术语
中央处理器单元(CPU)
执行程序指令的硬件电路。
术语
指令
处理器可执行(运行)的命令由操作码和操作数(可选参数)组成。
使用MCU的目的是降低复杂控制方法的实现成本。为应用定制计算机时,需要编写应用程序软件和设计简单的系统硬件接口。嵌入式系统的主要成本通常在软件的开发,而不在硬件本身。嵌入式计算机一般采用大批量生产的MCU,硬件成本较低;而且MCU中包含系统接口电路,大大简化了硬件开发工作,减小了电路复杂性,降低了系统成本。
如果系统中已经有MCU,添加以下功能来改善和区分产品将变得更加容易。
• 如果在设定时间内温度旋钮没有关闭,出于安全考虑,系统将自动关闭电热炉。
• 旋钮上标出具体的温度刻度,而不是“低”“中”或“高”挡位。
• 电热炉温度处于或接近设定值时,指示灯闪烁。
• 在显示面板上显示当前温度和所需(设定值)温度。
1.2.3 计算机嵌入的方式
本节将探讨如何通过嵌入式计算机来改进电热炉功能。改进后的电热炉系统框图如图1.5所示,采用MCU作为控制器,读取所需温度值和实际温度并决定如何控制输出。MCU通过监测输入信息来控制系统的状态。对于电热炉而言,输入信息包括温度控制旋钮的位置(所需温度)和电热炉温度。温度由温度传感器测出,传感器的电压随温度呈线性变化,MCU需要将该电压信号转换成可使用的数据。
图1.5 计算机控制的电热炉系统框图
使用简单的开/关信号来控制加热元件。MCU的输出信号——电压和电流均较低,无法驱动加热元件,因此需要使用驱动电路来将MCU的信号提升到足够的电平。
加热单元和指示灯工作在市电电压(110V或220V),MCU工作在更低的电压(3.3V),因此需要使用电源电路将输入电压转换为3.3V,该电路未在图1.5中画出。
控制器中的软件主要用于计算传感器实际温度与旋钮指示温度(设定值)之间的差值。随后,控制器将调整传递到加热元件的能量,以减少温度差值。
1.2.4 嵌入式系统案例
嵌入式系统有着不同的设计目标和约束,下面通过两个例子来深入学习。
四轴飞行器(如图1.6所示)是一种小型遥控玩具飞机。用户使用无线遥控器控制飞行器飞行,遥控器发送的命令可以改变飞行器的高度,控制其旋转、前进、后退或侧倾,甚至可以实现翻转180°和倒飞。四轴飞行器通过四个电机驱动四个转子提供升力,调整四个电机的速度可以实现飞行器不同方式的飞行,但是用户直接控制每个电机的速度非常困难。四轴飞行器的嵌入式计算机将用户的遥控指令转换为电机的速度指令,这种转换取决于当前四轴飞行器的方向和运行状态,并能实时改变。四轴飞行器用一组加速度传感器来检测三个方向(上/下、左/右、前/后)的加速度,用一组陀螺仪传感器来检测三个方向(滚转、俯仰、偏航)的旋转度。
图1.6 远程控制四轴飞行器
图1.7所示为一个带有冷冻室、制冰机和水冷却器的冰箱,图1.8所示是其控制面板、显示器以及部分水冷却器和制冰机。冰箱的主要功能包括:使两个隔室的温度保持在指定范围内,允许用户改变温度,开门时点亮隔室,完成制冰并分配冷水、冰块或碎冰。其他功能还包括:开门时间过长发出声音提示,指示何时需要更换过滤器。
图1.7 冰箱示意图
图1.8 用户控制面板
下面介绍四轴飞行器的内部硬件。图1.9和图1.10所示分别为飞行器的印制电路板(Printed Circuit Board,PCB)的正背面,长约4.5cm。图1.10中的两块黑色芯片分别是MCU(上)和加速度、旋转度传感器(下)。印制电路板拐角处有四个发光二极管(Light-Emitting Diode,LED)和连接四个电机的电线。MCU和传感器的右侧是一个隐藏在白色胶粘物和银筒下面的无线电接口芯片。
图1.9 四轴飞行器的控制板正面
图1.10 四轴飞行器控制板背面
有着三个引脚的黑色小长方形元件是晶体管,用来驱动四个电机。电池的电缆插头插在左边的橙色连接器上。
术语
印制电路板(PCB)
固定电子元件并用导电线路将电子元件连接的基板。
术语
发光二极管(LED)
发光的电子元件,用于指示灯、背光照明和一般照明。
下面来看冰箱的电路板。图1.11和图1.12所示分别是冰箱主电路板的正面和背面,长度约为25cm。MCU属于众多电子元件之一,位于电路板的背面。其他组件负责转换功率、放大并调节输入信号以及驱动输出设备。下面介绍一些主要的输入和输出设备。
图1.11 冰箱主电路板正面
图1.12 冰箱主电路板背面
• 输入设备:
• 用户控制面板、压缩机过载保护、冷冻室门、冷藏室门、冰桶满溢控制器、水/冰分配控制器、方形电机位置、制冰机测试、冰路电机位置等开关。
• 外部空气、冷冻室、冷冻室除霜器、冷藏室、冷藏室除霜器等温度传感器。
• 输出设备:
• 冷冻室灯光、冷藏室灯光、分配器灯光。
• 用户控制面板上的指示器。
• 冷冻室除霜器、冷藏室除霜器、水管、门盖、饮水器、水箱等加热器。
• 压缩机、自动除霜、螺旋钻、方形电机、冰磨机、冷冻室风扇、压缩机风扇、冷藏室风扇等电机。
• 水电磁阀、制冰机、电磁阀、水步进电机等水阀。
可以看出冰箱的内部构成非常复杂。
1.2.5 典型的嵌入式系统软件操作
工作过程中,嵌入式系统会执行以下一种或多种类型的操作。
闭环控制操作是指由一个或多个输入测量值控制输出变量。例如,当冰箱冷藏室温度过高时,冷藏室控制器会打开压缩机来维持温度;当温度过低时,则将压缩机关闭。类似地,四轴飞行器的控制器通过调整转子电机的功率来保持平稳飞行,这一调整过程是基于加速度和旋转度的测量值进行的。除此之外,还有更多更加复杂的控制方法,如考虑误差的大小(所需值与实际测量值的差值)、变化的速度以及持续的时间。
顺序工作操作是指由一系列步骤来控制输出。例如,制冰机遵循以下几个步骤来制冰。
• 在冰格里装满水。
• 冷藏直到水结冰。
• 加热冰格直到冰块与冰格分离。
• 从冰格取出冰块。
信号的调节和处理操作用于得出多个传感器测量值的平均值,以及滤除电机或其他设备的噪声。例如,在四轴飞行器飞行时,四个电机的振动将给加速度和旋转度的测量值带来噪声,取多个测量值求平均可以减少噪声带来的影响,提高准确度。
通信和网络操作用于设备与子系统或其他系统之间的交流。四轴飞行器通过无线电来接收控制器发送的控制数据包,而MCU需要对每个数据包进行解码,以确定哪些命令和参数已被发送。
1.2.6 嵌入式系统属性
接下来介绍嵌入式系统的属性,以及这些属性对软件和硬件的影响。这些属性使嵌入式系统与个人计算机应用程序在设计方法和决策上有所不同。
1. 输入和输出接口
嵌入式计算机通常在感知周围环境之后要控制设备做出反应,因此需要专门的电路向CPU发送消息和接收消息,并执行相应的指令。前面已经介绍了冰箱和四轴飞行器中的输入、输出设备。MCU由专门的外围电路和CPU组成,外围电路实现了大部分的接口功能,其他接口电路可从外部添加到电路板上。
大多数外部设备选用模拟信号,通过连续变化的电压(或电流)值来传达信息。例如,温度传感器可以把输出信号电压设置为0.05V/℃来表示读数,0.5V则表示10℃。该模拟信号必须转换为数字量后才能交给程序处理,这一步骤由模数转换器(Analog-to-Digital Converter,ADC)完成。为了准确地生成声音,MCU需产生模拟电压信号来驱动耳机或扬声器,这时由数模转换器(Digital-to-Analog Converter,DAC)将声音信号的数字量转换为模拟量。
术语
外围设备
为CPU连接或提供特殊功能的硬件电路。
术语
模拟量
可以取无穷个数值。
术语
数字量
可以取有限个数值。
术语
模数转换器(ADC)
把模拟量(例如:电压)转换为对应数字量的电路。
术语
数模转换器(DAC)
把数字量转换为对应模拟量(例如:电压)的电路。
在把信号转换为数字量交给CPU处理之前,必须先对其进行处理。例如,弱信号需要放大,高电压信号需要按比例缩小到安全水平且必须滤除噪声。除此之外,MCU无法驱动高耗能的输出设备(例如:电动机和螺线管),因此需要对信号进行放大处理。如图1.11和图1.12所示,冰箱控制器的主电路板中MCU无法直接驱动加热器、电机和阀门,因此需通过其他设备来完成。同时这种方式也把MCU(工作电压为3.3V)的低电压组件与主电压(120V或220V)隔离开,达到保护电路的效果。
2. 并发性
嵌入式控制器同时管理多个活动,有着精确的时间控制能力。
• 例如,四轴飞行器的MCU在通过无线电接收命令的同时,必须同时监视旋转度(约三轴)和加速度(三轴)数值,控制四台电机的速度以保持稳定的飞行、指示灯闪烁以及监视电池电压。
• 冰箱在控制冷藏室、冷冻室温度的同时,还要管理制冰过程并在前面板上显示信息,接收用户命令并执行诊断。
向系统添加更多功能将增加软件的复杂性。例如,一个液晶显示屏(Liquid Crystal Display,LCD)需要几个软件组件合作才能完成如下功能:①管理用户界面窗口、菜单和屏幕;②将文本、图形和图像转化成像素值;③更新显示器中存有这些像素值的存储器。更多的功能还包括:Wi-Fi、蓝牙通信和可移动存储(例如安全数字闪存卡和USB驱动器)。通常复杂外围集成电路制造商会提供软件模块(驱动程序)让连接更加便捷,嵌入式系统开发人员则使用这些第三方软件组件来简化开发过程。
MCU通过两种方式提供并发性:①在软件的不同部分(包括中断处理程序、任务、线程和进程)间共享CPU;②把一些处理过程放在硬件外设中,独立于CPU运行。
调度程序决定下一步在处理器上运行软件的哪个部分,并根据需要来切换执行环境,保证程序正确运行。可供使用的调度程序有很多,其中,最基础的调度程序使用方法简单,对处理器的开销小,适用于简单的系统,但只能为开发人员提供有限的帮助;高级的调度程序可以提供更好的响应(将在下文介绍)和更多的功能来帮助程序的开发。实时操作系统(例如Keil的RTX)中通常选用更加高级的调度程序,势必消耗更多处理器的时间和内存,因此需要配备高性能的MCU。添加更多功能的同时也带来了性能的多样性。成熟的操作系统(例如Linux)能够提供广泛的功能和服务来帮助嵌入式系统开发人员,这样的操作系统(Operating System,OS)需要更多处理器的时间和内存,因此也需要更加强大的MCU。
3. 响应
与其他活动共享CPU的同时还要保证足够的响应能力,是嵌入式系统开发人员面临的重要挑战。实时系统领域关注响应能力的设计和性能。
如果嵌入式控制器对命令和环境中的变化响应不够快,系统可能会对自身、人员或其他设备造成损害。通常嵌入式系统会对命令的响应时间设定上限。如果四轴飞行器在执行飞行控制命令时有1s的延迟,那么飞机将失控。
可以从两个方面来改善系统响应:处理速度和任务调度。
首先,处理器必须在限定时间之前完成关键处理。有两种方法可以解决这个问题。一种方法是让代码更加高效,即使用更少的指令完成必要的工作,称作优化。这也是嵌入式系统开发中的常见任务。另一种方法是使用更快速的处理器,以更快的速度执行指令。当然,两种方法也可以同时使用。
这里涉及一个权衡问题:优化代码需要耗费开发人员更多的时间,增加了开发成本,但没有增加硬件成本。相比于优化代码,使用更好的处理器并不会增加开发成本,但会增加硬件上的开销。速度更快的处理器的价格也会更高,同时需要更细致的电路设计。一旦处理器速度超过50MHz,闪存无法跟上,这将迫使CPU设计人员修改内存系统以降低此延迟。
其次,处理器需要时刻关注关键进程,避免被其他进程分散,导致延迟。因此,应尽可能使用外围硬件电路执行关键进程,以防止任何软件干扰,如果无法实现则需要使用软件调度。简单的调度方法可以提供一定的响应能力,若想获得最佳响应能力,系统需要使用中断和优先级调度器(例如实时内核或实时操作系统)来实现。操作系统(例如:Linux)的使用降低了系统的响应能力,因为有更多其他的操作引入了延时对关键进程造成影响。具体的调度方法将在第3章讨论。
一些嵌入式系统有非常高的处理要求,因此需要使用多核处理器同时从多个程序(或同一程序的多个部分)执行指令。类似地,还有一些系统使用多个单核处理器来提高性能。
最后,相比于提高处理器的处理速度,部分嵌入式系统选择使用多个处理器来简化设计,这种分离处理的方式减少了软件组件之间的时序干扰。很多现成的商业模块(例如,Wi-Fi接口)中内置集成MCU来完成这项工作。
4. 可靠性和故障处理
嵌入式系统能够保持正确、可靠地运行。这与个人计算机有所不同,用户无须重新启动嵌入式计算机。如果出现故障,嵌入式系统将尽可能减少该故障产生的影响,而不会进一步引起其他问题。
保证可靠性和处理故障的方法取决于具体的应用。考虑以下问题:哪些组件最有可能出错?是否有办法检测已经发生或即将发生的故障并在系统出现更多故障之前关闭系统?常用方法有以下几种:添加传感器(用于检测过热电机的热传感器、用于检测短路输出的电流传感器),采用易于在软件中检测故障的电路设计,通过分析历史数据来确定软件故障。嵌入式系统软件通常包含大量的故障处理代码来处理这些异常情况。
四轴飞行器只是一种玩具,预期寿命很短(约6个月),因此并不需要长期、高可靠的操作,在软件出错之前很可能飞行器的机械部件就已经发生故障。注意图1.10中的白色胶粘物,这种胶粘物可以让较大、易松动的物体减少晃动,加强与电路板的连接。
5. 诊断
对于一些系统来说,能够快速方便地查找和修复故障组件很重要。冰箱就是很好的例子,制造商总是希望尽可能减少在服务人员方面花费的成本和时间。诊断支持就可以帮助嵌入式计算机系统进行检测,识别哪些组件运行出错。
如图1.13所示的标签,左半部分解释了冰箱的自诊断功能。这让制造商的客服人员可以花费更少的时间来确定问题,从而降低服务通话费用。图1.11所示的PCB设计用于简化诊断和修复,其中大部分的连接都已经标出,在标有“SENSOR Check-Point”的图例中说明了测量这八种不同温度传感器的位置。
图1.13 冰箱的维修电路标签
6. 限制
对嵌入式系统的限制约束了设计人员在实现系统功能时的选择,包括对嵌入式系统的成本、体积、重量和耗能等的限制。
零部件成本对许多嵌入式系统来说很重要。四轴飞行器及其控制器的售价约为30美元,则其零部件(电子部分、机械部分等)的成本要低于8美元。选用最低成本的零部件完成任务具有很大的挑战性。四轴飞行器的MCU选用了STM32F031K6开发板,它包含了一个运行频率达48MHz的Cortex-M0 CPU、一个4KB SRAM和一个32KB闪存ROM。大多数嵌入式系统选用C或C++语言编程,很大程度上是因为这些语言可以编译成对硬件精确控制的代码,同时只占用少量的内存。类似地,由于复杂的操作系统(如Linux)需要大量内存和快速处理器才能良好地工作,所以大多数嵌入式系统不会选用这类操作系统来实现程序中多个部分间的资源共享。还有很多其他的方法可以帮助嵌入式计算机减少成本,并满足性能要求。
一些嵌入式系统对功率有约束,而功率约束限制了系统能源的利用率。例如,光伏(Photovoltaic,PV)电池可以产生的功率取决于环境的光强。如果电路需要使用的功率超出PV电池的供给能力,则电池电压下降,系统将停止工作。
电源上的约束限制了可以使用的总能量。例如,电池存储的能量可以快速或缓慢地消耗,但是容量有限。飞行速度越快的四轴飞行器耗电速度也越快,从而减少了最长飞行时间。因此,开发人员的目标之一就是使用节能的电机、灯具、无线电和MCU。
一些应用对重量极为敏感。较重的设备需要更多的能量来提升、移动和停止。轻便对于四轴飞行器来说很重要,较重的四轴飞行器将很快把能量消耗殆尽。提升较重的飞行器需要更多的提升力,因此马达需要旋转得更快以提供充足的动力,电池将很快消耗完。所以四轴飞行器使用非常小的部件来减轻重量。
此外,四轴飞行器有尺寸限制,其电路板上的组件都非常小,而且封装紧密。冰箱的MCU约为35mm×35mm,占用电路板面积约1225mm2,与体型大、电路板封装稀疏的冰箱相比,四轴飞行器的尺寸则小得多,为10mm×10mm,面积仅为100mm2。
嵌入式系统需要在很宽的温度范围内可靠地运行。消费类电子元件通常在0℃~70℃的环境下工作,要求更高的工业和汽车应用类组件则需要在−40℃~85℃的范围内正常工作。