1.单片机应用系统设计的基本原则
由于生产单片机的半导体厂商众多,单片机应用系统种类繁多,设计方案和技术指标千变万化,但是在单片机应用系统的设计与实现中,一般都有需要共同遵循的基本原则。
1)可靠性高
高可靠性是单片机系统应用的前提,在系统设计的每一个环节,都应该将可靠性作为首要的设计准则。提高系统的可靠性通常从以下几个方面考虑:
(1)使用可靠性高的元器件,防止因器件的损坏影响系统的运行。
(2)充分利用片内硬件资源,简化系统扩展。
(3)选择典型电路,电路板布线和接地要合理,严格安装硬件设备,排除电路的不稳定因素。
(4)对供电电源的输入输出通道采取必要的抗干扰措施,防止环境干扰。
(5)增加系统自诊断功能,使系统运行遇到某些错误时能自动检测并处理,继续执行正常程序。
2)性价比高
单片机具有高性能、低功耗、体积小、成本低等优点,相关产品设计应保持性价比高的优势以赢得市场。在保证系统功能和性能的前提下,应降低对单片机和其他器件技术指标的要求,采用成本较低的元器件。另外,在系统设计时,还应尽量简化外围电路,在系统性能许可的范围内,尽可能用软件程序替代硬件电路实现功能,降低制造成本。
3)设计周期短
系统设计周期长短直接影响产品的社会效益,只有缩短设计周期才能有效降低系统设计成本,充分发挥新系统的优势,及早占领市场。
4)操作维护方便
为了产品的推广,单片机系统应具有良好的人机交互接口,在用户无须掌握过多专业知识的情况下也能方便地进行操作。为了便于故障的查找和排除,设计时尽量采用功能模块式设计,便于维修更换。各功能模块上还应安装必要的工作指示灯和信号测试点,便于维修人员检查。
2.单片机应用系统的设计过程
单片机应用系统一般采用自上向下的设计方法,即首先采用顶层设计,再对各部分内容细化实现。单片机应用系统的设计过程主要包括总体设计、硬件设计、软件设计等几个部分。单片机应用系统设计流程如图2.13所示。
图2.13 单片机应用系统设计流程
1)总体设计
系统总体设计是单片机系统设计的前提,合理的总体设计是系统成败的关键。总体设计关键在于对系统的功能与性能的分析、单片机选型、确定系统结构组成和划分系统软、硬件功能。
(1)系统的功能与性能分析。在设计初期,必须根据用户提出的任务或者对市场需求进行全面的分析和研究,以确定单片机应用系统的设计目标,此目标包括系统功能和性能两个方面。
系统功能由输入通道、数据处理和输出通道三部分组成,每一个部分可根据实际需求再进行细分。输入通道,根据被测信号可分为数字量输入和模拟量输入,也可根据硬件类型分为按键输入、键盘输入、传感器数据传输输入等。数据处理可分为数据预处理、功能处理、抗干扰处理等。输出通道根据控制对象的不同,有多种子控制功能,如继电器控制、显示控制、D/A转换控制等。系统性能主要指系统的精度、速度、功耗、体积、质量、价格、工作环境、可靠性等一系列技术指标。
系统设计前应根据任务分析或市场调查结果,对系统的可靠性、通用性、可维护性和成本等进行综合考虑,提出合理、详尽的技术指标,然后按照系统功能与系统性能,来拟订性价比较高的方案。
(2)单片机选型。单片机是单片机应用系统的核心,在具体系统设计之前,首先应确定单片机的型号,不同的单片机具有不同的功能和结构,其构成的应用系统结构也不一样。目前,市场上生产单片机的半导体厂商众多,产品型号多达上千种。对于单片机的选型,应从以下几个方面考虑:
① 市场货源。系统设计者只能从市场提供的单片机型号中选择,尤其是设计需要批量生产的产品,必须选用应用较成熟且供货充足稳定的单片机。
② 单片机性能。设计时应根据系统的要求,选择既能实现系统功能,又能满足系统性能指标的单片机,并且达到较高的性价比。单片机的性能包括片内资源、扩展能力、运行速度和可靠性等。单片机性能太低,将影响系统的可靠性和稳定性,甚至不能实现某些功能;性能太高,又容易增加成本,且常因系统趋于复杂而带来不稳定因素。
③ 研发周期。在单片机性能类似的情况下,优先选择熟悉的机型,便于尽快投入系统设计。同时,还应考虑单片机的开发工具。优秀而成熟的开发工具,可以加快系统开发的速度。例如,采用可在线编程AT89S××系列的单片机,调试过程中无须反复拔插芯片,大大节省了设计时间。
(3)确定系统结构组成。确定单片机型号以后,还应根据系统要求和单片机设计系统总体结构,并选择相应的外围电路器件,如扩展存储器、驱动电路、传感器、显示电路、键盘等。选择外围电路器件同样应满足系统的精度、速度和可靠性要求,同时兼顾市场供货和成本。
(4)划分系统软、硬件功能。系统设计主要包括硬件设计和软件设计两个部分。选定核心单片机和外围电路之后,即确定各部分功能的实现方法。硬件除单片机芯片以外,还包括扩展存储器、输入输出通道、人机交互接口以及其他译码、驱动、锁存等外围电路。软件为各种指令的集合。高性能的单片机应用系统需要硬件与软件的紧密配合。一般来说,系统功能通过硬件实现,可提高运行速度,但是系统体积、成本、功耗都会增大,可靠性会降低;通过软件实现,运行速度虽然不及硬件,但是可以简化硬件结构,降低成本。
2)硬件设计
在系统基本结构确定,软、硬件功能划分以后,即可根据系统组成的要求,在所选单片机型号的基础上,确定系统外围电路及其所使用的元器件,画出硬件电路原理图及PCB图,制作PCB板,并焊接元器件。硬件设计主要涉及以下几个部分:
(1)程序存储器扩展电路。对于比较复杂的系统,单片机自带的程序存储器空间不足时,需要进行程序存储器的扩展。一般选用大容量EPROM芯片,如2764(8 KB)、27128(16 KB)或27256(32 KB)等芯片,原则上尽量避免采用多片小容量芯片扩展成大容量存储器,以简化译码电路。容量稍大的存储器芯片,能够提供的存储空间较大,与小容量芯片的价格差别并不大。
(2)数据存储器扩展电路。根据系统功能要求决定是否扩展数据存储器。扩展少量RAM,可选用8155;扩展大容量RAM,应选用大容量RAM芯片,如6116(2 KB)、6223(4 KB)或6264(8 KB)等芯片。(www.xing528.com)
(3)I/O扩展电路。I/O扩展电路一般可优先选用8155或8255等芯片。此类芯片具有接口简单、使用方便、扩充口线多等优点。A/D、D/A转换电路根据精度、速度、价格及接口类型来选用。而转换精度高、转换速度快的A/D、D/A芯片价格都较贵,如无必要,无须选择。在I/O口资源较紧张的情况下,应优先选择串口传输的A/D转换芯片。
(4)地址译码电路。通常采用全译码、部分译码和线选法,在选择时应充分考虑利用存储空间和简化逻辑电路两方面。MCS-51系统的可扩展存储空间较大,因此,一般情况下主要考虑简化逻辑电路。当存储器和I/O口扩展芯片较多时,可选用74LS138或74LS139等专用译码电路。
(5)总线驱动。一般单片机扩展总线接口的负载能力较差,一旦电路负载超过总线负载能力,系统将无法正常工作。因此,在负载过重的情况下,应增加使用总线驱动电路提高端口的驱动能力。如MCS-51单片机的P0口作为数据总线采用双向8路三态缓冲器74LS245,P2口作为地址总线才调用单向8路三态缓冲器74LS244。
(6)抗干扰电路。单片机应用系统的抗干扰性能是系统可靠性的主要指标。系统在不同环境中面临的干扰源不同,所采取的抗干扰措施也不尽相同。硬件的抗干扰措施主要从电源干扰、输入输出通道干扰、电磁场干扰及印刷电路板干扰这几个方面考虑。
(7)其他外围电路。在单片机应用系统中,根据需要还应设计人机交互接口、测量控制等外围电路,如键盘、显示器、打印机、传感器、A/D转换器、D/A转换器、采样、放大电路等。
3)软件设计
一般的单片机应用系统,由主程序和若干个子程序或中断服务程序构成。软件设计是设计过程中最繁重的工作,复杂应用系统不但要使用汇编程序,有时还需要使用C语言等高级语言。软件设计包括软件结构设计、建立数学模型、绘制程序流程图、编写程序和程序调试。软件设计的一般流程如图2.14所示。
图2.14 软件设计流程图
(1)程序总体设计。软件结构设计,要从系统总体考虑程序结构、数据格式和程序功能的实现方法,包括软件结构设计、建立数学模型、确定算法、绘制程序流程图。一般程序设计的方法有三种,应根据具体情况选用。
① 模块化程序设计。模块化程序设计的思想是将一个功能完整的程序分成若干个功能相对独立的小模块,各个模块分别进行设计、编程和调试,最后将各模块通过主程序联系起来,构成功能完整的程序。模块化设计的优点是各小模块的设计和调试较易实现,一个模块可以为多个程序共享,也有利于多个设计者同时工作,但是模块连接后的调试较复杂。
② 自顶向下式程序设计。自顶向下式程序设计方法,是先从主程序开始设计,子程序或中断服务程序仅用程序名替代。主程序编写完成后,再编写各个子程序和中断服务程序。自顶向下式设计的优点是设计思路清晰,符合人们日常思维,利于发现程序错误;缺点是程序之间关联紧密,一个错误或修改可能引起连锁反应。
不管采用何种方法,都应按照控制要求建立合理的数学模型,画出程序总体框图,并确定具体算法,画出所有子程序的流程图。
(2)程序编写。程序流程图确定以后,就可以构思各个模块的具体设计、模块间的数据接口和模块内的工作寄存器安排等。单片机应用程序可用汇编语言编写,但是,目前较流行用C语言等高级语言编写,或者采用汇编与高级语言混合编程。采用高级语言编程,CPU运行效率要比汇编程序低,但是可以大大缩短软件设计的周期,且后期维护也比汇编程序方便。另外,程序应添加适当的注释,以利于后期修改和调试。
3.单片机应用系统的调试
系统的调试一般分为硬件调试、软件调试和系统联调。硬件调试是利用基本的测试仪器和开发系统,通过执行开发系统的基本命令,运行特定测试程序来排除系统的硬件电路故障,如设计性错误或工艺性故障。软件调试是通过对目标程序的汇编、连接、执行来发现程序中存在的语法错误和逻辑错误,并加以排除。系统联调是在目标系统的软件在硬件电路上实际运行,将软件和硬件结合起来,以发现软、硬件故障或是软、硬件之间设计不匹配等问题。
1)硬件调试
硬件调试可分为静态调试和动态调试两个步骤。
(1)静态调试。静态调试是指系统在上电之前对硬件电路的检测,一般有如下步骤:
① 目测。根据硬件电路原理图和装配图,检查电路是否正确,并核对元器件型号、规格和焊接是否符合要求,观察印刷电路板是否有短路、开路,焊盘是否脱落,焊点是否有毛刺或虚焊。通过目测可以检查出一些明显的器件、设备故障并予以排除。
② 万用表测试。用万用表测试目测阶段认为可能短路或开路的连线或焊点后,再检查所有电源和地之间是否有短路现象,防止上电后因电源短路损坏硬件电路。
③ 上电检测。为硬件电路板接上电源,先检查各电源电压是否正常,然后检查各芯片电源端电压是否在正常范围内,固定端引脚电平是否正确。如芯片或器件出现过热、冒烟、异味、变色等异常现象,应立即断点,予以排查。
静态调试主要是检查印刷电路板及元器件的物理性故障,调试通过后可进入动态调试。
(2)动态调试。动态调试是在硬件电路正常工作的状态下,发现和排除硬件中存在的器件内部故障、器件间连接的逻辑错误等。动态调试又称联机仿真调试,需要在开发系统的支持下进行。联机调试一般需要将开发系统通过仿真器的仿真头连接到目标板上,某些具有ISP(在线可编程)功能的单片机也可直接连接下载程序。联机调试利用开发系统的交互界面,有针对性地对单片机外围电路进行访问控制,以便检查系统在运行过程中出现的问题。常用的测试方法是对外围电路进行循环读或写,再利用万用表或者示波器检测测试点运行状态,以判断被调试电路是否按预期状态运行。
2)软件调试
软件调试过程与软件结构和程序设计方法有关,但一般都需要遵循先独立后联机、先模块后组合、先单步后连续的原则。
(1)先独立后联机。虽然单片机应用系统中软件和硬件是紧密结合的,但是其中某些程序段或子程序与硬件无关,如对被测参数的数据处理。这样,将与硬件无关、功能相对独立的程序段抽取出来,便可脱离系统硬件,直接在开发系统上进行独立于硬件的调试。此类程序调试完毕后,再将目标系统与开发系统相连,对依赖于硬件的程序进行联机调试。
(2)先模块后组合。在规模较大、功能较复杂的系统中,往往采用模块化设计的软件设计方法。调试时,应先调试各子模块,保证子模块功能无误。然后将相关联的模块逐步组合起来加以调试,这一步应重点关注模块间的逻辑关系以及数据接口问题。最后将所有模块组合进行整体调试。采用这种方法进行调试,有利于判断错误所在模块,减少整体调试阶段的工作量。
(3)先单步后连续。为了准确定位程序的错误所在,最有效的方法是通过设置断点单步运行调试程序。可先在程序的某些关键指令设置断点进行粗调,找出错误的大概范围,再用单步运行的方式进行错误的精确定位。通常单步调试完成后,还要进行连续运行调试。
3)系统联调
系统联调主要是看软、硬件是否按设计的要求配合工作,系统运行是否有未预料的错误,系统的动态性能指标能否满足设计要求。系统联调时,首先调试与硬件相关的程序段,即可检验程序是否正确,又可以在各功能独立的情况下,检验软、硬件的配合情况;然后将软、硬件结合在一起综合运行,采用断点、连续运行的方式调试,使软、硬件协调。系统联调完毕后,即可将目标程序固化到程序存储器中,使应用系统脱离开发板独立运行。
如果单片机应用系统的环境条件比较恶劣,还应进行现场调试,保证系统在实际工作环境中运行的可靠性。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。