单片机应用系统的设计既是一个理论问题,又是一个实际工程问题。它包括自动控制理论、计算技术、计算方法,还包括自动检测技术与数字电路,是一个多学科的综合运用。
单片机系统设计要具备以下几方面的知识和能力。
首先,必须具有一定的硬件基础知识。这些硬件不仅包括各种单片机、存储器及I/O接口,而且还包括对仪器或装置进行信息设定的键盘及开关、检测各种输入量的传感器、控制用的执行装置,以及单片机与各种仪器进行通信的接口、打印和显示设备等。
其次,需要具有一定的软件设计能力。能够根据系统的要求,灵活地设计出所需要的程序,主要有数据采集程序、A/D转换程序、D/A转换程序、数码转换程序、数字滤波程序,以及各种控制算法及非线性补偿程序等。
再次,需要具有综合运用知识的能力。必须善于将一台智能化仪器或装置的复杂设计任务划分成许多便于实现的组成部分。特别是对软件、硬件的折中问题能够恰当地运用。设计单片机应用系统的一般原理是先选择和组织硬件,构成最小系统。当硬件、软件之间需要折中协调时,通常解决的办法是尽量减少硬件(以便使仪器的价格减到最低)。接着应满足设计中各方对软件的要求。通常情况下,硬件实时性强,但将会增加仪器成本,且结构复杂;软件可避免上述缺点,但实时性比较差。为保证系统能可靠工作,在软、硬件的设计过程中还应包括系统的抗干扰设计。
图1-1单片机应用系统设计的一般过程
最后,还必须掌握生产过程的工艺性能及被测参数的测量方法,以及被控对象的动态、静态特性,有时甚至要建立被控对象的数字模型。
单片机应用系统设计的一般过程如图1-1所示。
单片机应用系统设计主要包括下面几方面内容。
(1)应用系统总体方案设计,包括系统的要求,应用方案的选择,以及工艺参数的测量范围等;
(2)选择各参数检测元件及变送器;
(3)建立数学模型及确定控制算法;
(4)选择单片机,并决定是自行设计还是购买成套设备;
(5)系统硬件设计,包括接口电路、逻辑电路及操作面板;
(6)系统软件设计,包括管理、监控程序以及应用程序的设计;
(7)系统的调试与实验。
本节将就单片机应用系统设计的几个主要方面进行阐述。
确定单片机应用系统总体方案,是进行系统设计最重要、最关键的一步,总体方案的好坏,直接影响整个应用系统的投资、调节品质及实施细则。总体方案的设计主要是根据被控对象的工艺要求而确定的。由于被控对象多种多样,要求单片机完成的任务也千差万别,所以确定应用系统的总体方案必须根据工艺的要求,结合具体被控对象而定。尽管如此,在总体设计方案中具有一定的共性。
在选择项目时,必须首先进行可行性分析和经济技术论证,基本原则如下:
(1)技术效果好和经济效益(或社会效益)高;
(2)技术先进,造价较低;
(3)可靠性高,维修方便;
(4)研制周期短;
(5)操作简便,容易掌握。
可行性调研的目的,是分析完成这个项目的可能性。进行这方面的工作,可参考国内外有关资料,看是否有人进行过类似的工作。若有,则可分析他人是如何进行这方面工作的,有什么优点和缺点,有什么是值得借鉴的;若没有,则需要进一步调研,此时的重点应放在能否实现这个环节,首先从理论上进行分析,探讨实现的可能性,所要求的客观条件是否具备(如环境、测试手段、仪器设备、资金等),然后结合实际情况,确定能否立项的问题。
在进行可行性调研后,如果可以立项,下一步工作就是系统总体方案的设计。首先确定是采用开环系统还是闭环系统,或是数据处理系统。如果是闭环控制系统,则还要确定整个系统是采用直接数字控制(DDC),还是选用计算机监督控制(SCC),或者选用分布式控制(DCS)等。工作的重点应放在该项目的技术难度上,此时可参考这一方面更详细、更具体的资料,根据系统的不同部分和要实现的功能,参考国内外同类产品的性能,提出合理而可行的技术指标,编写出设计任务书,从而完成系统总体方案设计。
一旦总体方案确定下来,下一步的工作就是将该项目细化,即需明确哪些部分用硬件来完成,哪些部分用软件来完成。由于硬件结构与软件方案会相互影响,因此,从简化电路结构、降低成本、减少故障率、提高系统的灵活性与通用性方面考虑,提倡软件能实现的功能尽可能由软件来完成。但也应考虑以软件代硬件的实质是以降低系统实时性、增加处理时间为代价的,而且软件设计费用、研制周期也将增加,因此系统的软件、硬件功能分配应根据系统的要求及实际情况而合理安排,统一考虑。在确定软件、硬件功能的基础上,设计者的工作就开始涉及一系列的具体问题,如仪器的体积及与具体技术指标相对应的硬件实现方案,软件的总体规划等。在确定人员分工、安排工作进度、规定接口参数后,就必须考虑软件、硬件的具体设计问题。系统软件、硬件设计工作可分开进行,同时并进。
在讨论具体设计问题之前,这里还要强调一下,对于一个具体应用系统的设计,上面这几部分工作是必不可少的,否则,可能导致设计方案的整体更改,甚至可能导致方案无法实现,造成人力、物力的浪费。这一点,对于设计者来讲,应加倍注意。
一个单片机应用系统的硬件设计包括两大部分内容:一是单片机系统的扩展部分设计,它包括存储器扩展和接口扩展;二是各功能模块的设计,如信号测量功能模块、信号控制功能模块、人机对话功能模块、通信功能模块等,根据系统功能要求配置相应的A/D、D/A、键盘、显示器、打印机等外围设备。
在进行应用系统的硬件设计时,首要问题是确定电路的总体方案,并需要进行详细的技术论证。
所谓硬件电路的总体设计,即是为实现该项目全部功能所需要的所有硬件的电气连线原理图。初次接触这方面工作的设计人员,往往急于求成,在设计总体方案上不愿花时间,过于仓促地开始制板和调试。这种方法不仅不妥当,而且常常得不偿失。因为就硬件系统来讲,电路的各部分都是紧密相关、互相协调的,任何一部分电路的考虑不充分,都会给其他部分带来难以预料的影响,轻则使系统整体结构受破坏,重则导致硬件总体大返工,由此造成的后果是可想而知的。因此,希望设计者不要吝啬在硬件总体方案上花的时间。从时间上看,硬件设计的绝大部分工作量往往是在最初方案的设计阶段,一个好的设计方案常常会有事半功倍的效果。一旦硬件总体方案确定下来,下一步工作就能很顺利进行,即使需要做部分修改,也只是在此基础上进行一些完善工作,不会造成整体返工。
在进行硬件总体方案设计时,所涉及的具体电路可借鉴他人在这方面进行的工作。因为经过别人调试和实验过的电路往往具有一定的合理性(尽管这些电路常与书籍或手册上提供的电路不完全一致,但这也可能正是经验所在)。在此基础上,结合自己的设计目的进行一些修改,是一种简便、快捷的做法。当然,有些电路还需自己设计,完全照搬是不太可能的。
在参考别人的电路时,需对其工作原理有较透彻的分析和理解,根据其工作机理了解其适用范围,从而确定其移植的可能性和需要修改的地方。对于有些关键和尚不完全理解的电路,需要仔细分析,在设计之前先进行试验,以确定这部分电路的正确性,并在可靠性和精度等方面进行试验,尤其是模拟电路部分,更需要进行这方面的工作。
为使硬件设计尽可能合理,根据经验,系统的电路设计应注意以下几个方面。
(1)尽可能选择标准化、模块化的典型电路,提高设计的成功率和结构的灵活性。
(2)在条件允许的情况下,尽可能选用功能强、集成度高的电路或芯片。因为采用这种器件可能代替某一部分电路,不仅元件数量、接插件和相互连线减少,体积减小,使系统可靠性增加,而且成本往往比用多个元件实现的电路要低。
(3)注意选择通用性强、市场货源充足的器件,尤其对需大批量生产的场合,更应注意这方面的问题。其优点是:一旦某种元器件无法获得,也能用其他元器件直接替换或对电路稍作改动后用其他器件代替。
(4)在对硬件系统总体结构考虑时,同样要注意通用性的问题。对于一个较复杂的系统,设计者常常希望将其模块化,即对中央控制单元,输入接口、输出接口、人机接口等分块进行设计,然后采用一定的连接方式将其组合成一个完整的系统。在这种情况下,连接方式就显得非常重要,有时可选用通用接口方式,因为对于这些总线结构的连接目前应用比较广泛,不少厂家已开发出适合于这些总线结构的接口板,如输入板、输出板、A/D板等。在必要的情况下,选用现成的模板作为系统的一部分,尽管成本有些偏高,但会大大缩短研制周期,提高工作效率。当然,在有些特殊情况和小系统的场合,用户必须自行设计接口,定义连线方式。此时要注意接口协议,一旦接口方式确定下来,各个模块的设计都应遵守该接口方式。
(5)系统的扩展及各功能模块的设计在满足应用系统功能要求的基础上,应适当留有余地,以备将来修改、扩展之需。实际上,电路设计一次成功而不做任何修改的情况是很少的,如果在设计之初未留有任何余地,后期很可能因为一点小小的改动或扩展而被迫进行全面返工。举例来说,在进行ROM扩展时,尽量选用2764以上的芯片,这样不仅将来升级方便,成本也会降低;在进行RAM扩展时,为使系统升级或增加内存方便,系统的RAM空间应留足位置,哪怕多设计一个RAM插座,不插芯片也好;在进行I/O接口扩展时,也应给出一定的余量,这样对临时增加一些测量通道或被控对象就极为方便了。另外在电路板设计时,可适当安排一些机动布线区,在此区域中安排若干集成芯片插座和金属化孔,但不布线,这样在样机研制过程中,若发现硬件电路有不足之处,需增加元器件时,可在机动布线区临时连线完成,从而避免整个系统返工。在进行模拟信号处理电路设计时,尤其要注意这一点。因为在调试这类电路时,经常会增加一些电容、电阻等元器件。当然,一旦试验完成,制作电路板时,可以去掉机动布线区。
(6)设计时应尽可能多做些调研,采用最新的技术。因为电子技术发展迅速,器件更新换代很快,市场上不断推出性能更优、功能更强的芯片,只有时刻注意这方面的发展动态,采用新技术、新工艺,才能使产品具有最先进的性能,不落后于时代发展的潮流。
(7)在电路设计时,要充分考虑应用系统各部分的驱动能力。一些经验欠缺者往往忽视电路的驱动能力及时序问题,认为原理上可行就行了,其实不然。因为不同的电路有不同的驱动能力,对后级系统的输入阻抗要求也不一样。如果阻抗匹配不当,系统驱动能力不够,将导致系统工作不可靠甚至无法工作。值得注意的是,这种不可靠很难通过一般的测试手段确定,而排除这种故障往往需要对系统做较大的调整。因此,在电路设计时,要注意增加系统驱动能力或减少系统的功耗。
(8)工艺设计,包括机箱、面板、配线和接插件等,这也是实际进行系统设计人员容易疏忽但又十分重要的一个问题。在设计时要充分考虑到安装、调试和维修的方便。
(9)系统的抗干扰设计。这个问题在硬件设计中也是十分重要的,有关这方面的内容,将在1.1.4节专门讨论。
除了上述几点之外,在应用系统的硬件设计过程中,还需注意以下几方面。
(1)选择好被测参数的测量元件,它是影响控制系统精度的重要因素之一。测量各种参数的传感器,如温度、流量、压力、液位、位移、重量、速度等,种类繁多、规格各异,因此,要正确地选择测量元件。
(2)执行机构是单片机控制系统的重要组成部件之一。执行机构的选择一方面要与控制算法匹配,另一方面要根据被控对象的实际情况决定,常用的执行机构有4种:电动执行机构具有响应速度快、与单片机接口容易等优点,成为单片机应用系统的主要执行机构;气动调节阀具有结构简单、操作方便、使用可靠、维护容易、防火防爆等优点,广泛用于石油、冶金和电力系统中;步进电动机可以直接接收数字量,而且具有动作速度快、精度高等优点,所以用步进电动机作为执行机构的控制系统越来越多;液压执行机构(如油缸和油马达)将油液的压力能转换成机械能,驱动负载直线或回转运动,能方便地进行无级调速,且高速范围大,控制和调节简单、方便、省力、易于实现自动控制和过载保护。
(3)过程通道的选择应考虑以下一些问题:被控对象参数的数量,各输入/输出通道是串行操作还是并行操作,各通道数据的传递速率,各通道数据的字长及选择位数,过程通道的结构形式等。
根据系统的复杂程度,MCS-51应用系统有3种典型结构。
(1)最小应用系统。
(2)小规模扩展系统:只扩展少量的RAM和I/O接口,地址在00H~0FFH之间。
(3)大规模扩展系统:需要扩展较大量的ROM、RAM和I/O接口,连接多片扩展芯片。
硬件设计的具体步骤如下。
(1)确定各输入/输出数据的传送方式是中断方式、查询方式还是无条件方式等。
(2)根据系统需要确定使用何种结构,确定系统中主要电路是最小系统,还是扩展系统。除单片机外,系统中还需要哪些扩展芯片、模拟电路等。
(3)资源分配:各输入/输出信号分别使用哪个并行口、串行口、中断、定时器/计数器等。
(4)电路连接:根据以上各步完成完整的线路连接图。
在进行应用系统的总体设计时,软件设计和硬件设计应统一考虑,相结合进行。当系统的电路设计定型后,软件的任务也就明确了。
系统中的应用软件是根据系统功能要求设计的。一般来说,单片机中的软件功能可分为两大类:一类是执行软件,能完成各种实质性的功能,如测量、计算、显示、打印、输出控制等;另一类是监控软件,专门用来协调各执行模块和操作者的关系,充当组织调度角色,也称为Debug程序,是最基本的调试工具。开发监控程序是为了调试应用程序。监控程序功能不足会给应用程序的开发带来麻烦,反之,用大量精力研究监控程序会贻误开发应用程序。因此,把监控程序控制在适当的规模是明智的。由于应用系统种类繁多,程序编制者风格不一,因此应用软件因系统而异、因人而异。尽管如此,作为优秀的应用软件还是有其共同特点及其规律的。设计人员在进行程序设计时应从以下几个方面加以考虑。
(1)根据软件功能要求,将系统软件分成若干个相对独立的部分。根据它们之间的联系和时间上的关系,设计出合理的软件总体结构,使其清晰、简洁、流程合理。
(2)培养结构化程序设计风格,各功能程序实行模块化、子程序化。既便于调试、链接,又便于移植、修改。
(3)建立正确的数学模型。即根据功能要求,描述出各个输入和输出变量之间的数学关系,它是关系到系统性能好坏的重要因素。
(4)为提高软件设计的总体效率,以简明、直观的方法对任务进行描述,在编写应用软件之前,应绘制出程序流程图。这不仅是程序设计的一个重要组成部分,而且是决定成败的关键部分。从某种意义上讲,多花一份时间来设计程序流程图,就可以节约几倍源程序编辑调试时间。
(5)要合理分配系统资源,包括ROM、RAM、定时器/计数器、中断源等。其中最关键的是片内RAM分配。例如对8051来讲,片内RAM指00H~7FH单元,这128个字节的功能不完全相同,分配时应充分发挥其特长,做到物尽其用,在工作寄存器的8个单元中,R0和R1具有指针功能,是编程的重要角色,避免作为它用;20H~2FH这16个字节具有位寻址功能,可用来存放各种标志位、逻辑变量、状态变量等;设置堆栈区时应事先估算出子程序和中断嵌套的级数及程序中栈操作指令使用情况,其大小应留有余量。若系统中扩展了RAM存储器,应把使用频率最高的数据缓冲器安排在片内RAM中,以提高处理速度。当RAM资源规划好后,应列出一张RAM资源详细分配表,以备编程查用方便。
(6)注意在程序的有关位置处写上功能注释,提高程序的可读性。
(7)加强软件抗干扰设计,它是提高单片机应用系统可靠性的有力措施。
实时测控程序一般包括以下几方面。
(1)初始化部分,包括设置工作模式、中断方式、堆栈指针和工作单元初始化等。
(2)参数设定部分,包括设定采样周期、控制参数和给定量等。
(3)中断请求管理,如有时需定时中断请求,CPU转去执行相应的数据采集服务程序,运行测控算法等。
(4)测控算法,根据系统的要求及被控对象的具体情况,选用不同的控制策略与算法。
(5)终端管理模块,包括修改参数、重新初始化和中止程序等工作。
软件开发大体包括以下几个方面。
(1)划分功能模块及安排程序结构。例如,根据系统的任务,将程序大致划分成数据采集模块、数据处理模块、非线性补偿模块、报警处理模块、标度变换模块、数据控制、计算模块、控制器输出模块和故障诊断模块等,并规定每个模块的任务及其相互间的关系。
(2)画出各程序模块详细流程图。
(3)选择合适的语言(如高级语言或汇编语言)编写程序。编写时尽量采用现有模块子程序,以提高程序设计速度。
(4)将各个模块连接成一个完整的程序。
通过编辑软件编辑出的源程序,必须用编译程序汇编生成目标代码。如果源程序有语法错误则返回编辑过程,修改源文件后再继续编译,直到无语法错误为止。之后就是利用目标码进行程序调试了,在运行中发现设计上的错误再重新修改源程序,如此反复直到成功。
用于现场的单片机应用系统,易受各种干扰侵袭,直接影响系统的可靠性。因此,单片机应用系统的抗干扰设计已经成为设计人员关注的重要课题。
由于各应用系统所处环境不同,面临的干扰源也不同,相应采取的抗干扰措施也不尽相同。在单片机应用系统中,主要考虑以下几个方面的问题。
(1)电压检测及掉电保护技术。若单片机系统的供电电源瞬间断电或电压突然下降,将使单片机系统陷入混乱状态,此时,即使单片机恢复正常,系统也很难恢复正常状态,掉电保护可解决此类问题。掉电保护是指通过硬件电路检测到系统供电电源的瞬间断电和电压突然下降,然后将检测信号加到单片机的外部中断输入端,使系统及时地对掉电做出反应。掉电引起的中断应作为高级中断。
(2)切断来自传感器、各功能模块部分的干扰。采取的措施有:模拟电路通过隔离放大器进行隔离,数字电路通过光电耦合器进行隔离,模拟地和数字地分开,或采用提高电路共模抑制比等手段。
(3)对空间干扰(来自于系统内部和外部的电磁场在线路、导线、壳体上的辐射、吸收与调制)的抗干扰设计主要考虑地线设计、系统的屏蔽与布局设计。
(4)地线设计是一个很重要的问题。在单片机应用系统中,地线结构大致有系统地、机壳地(屏蔽地)、数字地、模拟地等。在设计时,数字地和模拟地要分开,分别与电源端地线相连;当系统工作频率小于1MHz时,屏蔽线应采用单点接地;当系统工作频率在1MHz~10MHz时,屏蔽线应采用多点接地。
(5)在印刷电路板设计中,要将强、弱电路严格分开,尽量不要把它们设计在一块印刷电路板上,电源线的走向应尽量与数据传递方向一致,接地线应适当加粗,在印刷电路板的各个关键部位应配置去耦电容。
(6)对系统中用到的元器件要进行筛选,选择标准化以及互换性好的器件或电路。对硬件电路存在的故障可通过常规的电平检测、信号检测或编制自诊断程序来加以诊断。
(7)电路设计时要注意电平匹配。如TTL的1电平是2.4~5V,0电平是0~0.4V;而CMOS输入1电平是4.99~5V,0电平是0~0.01V。因此,当CMOS器件接收TTL输出时,其输入端就要加电平转换器或上拉电阻,否则,CMOS器件就会处于不确定状态。
(8)单片机进行扩展时,不应超过其驱动能力,否则将会使整个系统工作不正常。如果要超负载驱动,则应加上总线驱动器,如74LS244、74LS245等。
(9)CMOS电路不使用的输入端不允许浮空,否则会引起逻辑电平不正常,易接受外界干扰产生误动作。在设计时可根据实际情况,将多余的输入端与正电源或地相连接。
(10)软件的抗干扰设计是应用系统抗干扰设计的一个重要组成部分。在许多情况下,应用系统的抗干扰不可能完全依靠硬件来解决。而通过软件采取抗干扰设计,往往成本低、见效快,起到事半功倍的成效。在实际情况中,针对不同的干扰后果,采取不同的软件对策。例如,在实时数据采集系统中,为了消除传感器通道中的干扰信号,可采用软件数字滤波,如算术平均值法、比较舍取法、中值法和一阶递推数字滤波法等;在开关量控制系统中,为防止干扰进入系统,造成各种控制条件、输出控制失误,可采取软件冗余、设置当前输出状态寄存单元和自检程序等措施;为防止PC失控,造成程序“跑飞”而盲目运行,可设置软件WDT来监视程序运行状态,也可在非程序区设置软件陷阱,强行使程序回到复位状态。用硬件设置WDT电路强制系统返回也是一种常用的方法。
另外,为提高系统的可靠性,防止他人盗取技术信息,还应采取加密保护技术,包括硬件加密和软件加密。硬件加密主要有:数据线、地址线中的某些位换位,数据线、地址线中的某些位求反,使用内部程序存储器可加密的单片机。软件加密主要有:程序模块之间加一些加密字节,用返回指令取代条件指令,使程序中的某些字节为两个程序模块共同使用。需要说明的是,加密和解密是同时发展的,因此加密只是相对而言。