1.4 单片机的应用
1.4.1 单片机的应用范围
20世纪80年代以来,单片机的应用已经深入工业、交通、农业、国防、科研、教育以及日常生活用品(家电、玩具等)等各种领域。单片机的主要应用范围如下。
(1)工业方面
单片机在工业方面的应用包括电机控制、数控机床、物理量的检测与处理、工业机器人、过程控制、智能传感器等。
(2)农业方面
农业方面的应用包括植物生长过程要素的测量与控制、智能灌溉以及远程大棚控制等。
(3)仪器仪表方面
仪器仪表方面的应用包括智能仪器仪表、医疗器械、色谱仪、示波器、万用表等。
(4)通信方面
通信方面的应用包括调制解调器、网络终端、智能线路运行控制以及程控电话交换机等。
(5)日常生活用品方面
日常方面的应用包括移动电话、MP 3播放器、照相机、摄像机、录像机、电子玩具、电子字典、电子记事本、电子游戏机、电冰箱、洗衣机、加湿器、消毒柜、可视电话、空调机、电风扇、IC卡设备、指纹识别仪等。
(6)导航控制与数据处理方面
导航控制与数据处理方面的应用包括鱼雷制导控制、智能武器装置、导弹控制、航天器导航系统、电子干扰系统、图形终端、复印机、硬盘驱动器、打印机等。
(7)汽车控制方面
汽车控制方面的应用包括门窗控制、音响控制、点火控制、变速控制、防滑刹车控制、排气控制、节能控制、保安控制、冷气控制、汽车报警控制以及测试设备等。
几乎可以说,只要有控制的地方就有单片机的存在。
1.4.2 单片机应用系统的设计
学习单片机系统设计,需要具备下面的专业基础知识,如果某些知识没有学到或者不够熟练,请自行参考相关教科书进行学习。
1)电工学、数字电子技术基础。
2)微型计算机原理(可选)。
3)C语言及程序设计基础。
下面着重介绍单片机应用系统的开发流程与仿真调试方法。
1.单片机应用系统的开发流程
学习单片机的根本目的是应用单片机进行有关系统或产品的设计。以单片机为核心的应用系统的开发流程如图1-4所示。
(1)可行性调研
可行性调研的目的是分析完成项目的可能性。进行这方面的工作时,可参考国内外有关资料,看是否有人进行过类似的工作。如果有,则可分析他人是如何进行这方面工作的,有什么优点和缺点,有什么是值得借鉴的;如果没有,则需做进一步的调研,重点应放在“能否实现”这个环节,首先从理论上进行分析,探讨实现的可能性,所要求的客观条件是否具备(如环境、测试手段、仪器设计、资金等),然后结合实际情况,再决定能否立项的问题。
(2)系统方案设计
在进行可行性调研后,如果可以立项,下一步工作就是系统方案的设计。工作重点应放在该项目的技术难度上,此时可参考这一方面更详细、更具体的资料,根据系统的各个部分和功能,参考国内外同类产品的性能,提出合理而可行的技术指标,编写出设计任务书,完成系统方案设计。
(3)设计方案细化,确定软硬件功能
系统方案确定后,下一步可以将该项目细化,即需明确哪些部分用硬件来完成,哪些部分用软件来完成。由于硬件结构与软件方案会相互影响,因此,从简化电路结构、降低成本、减少故障率、提高系统的灵活性与通用性方面考虑,提倡软件能实现的功能尽可能由软件来完成;但也应考虑以软件代硬件的实质是以降低系统实时性、增加软件处理难度为代价的,而且软件设计费用、研制周期也将增加,因此系统的软、硬件功能分配应根据系统的要求及实际情况合理安排,统一考虑。在确定软硬件功能的基础上,设计工作开始涉及一些具体的问题,如产品的体积及与具体技术指标相对应的硬件实现方案,软件的总体规划等。在确定人员分工、安排工作进度、规定接口参数后,可以考虑硬件和软件的具体设计问题。
(4)硬件原理图设计
进行应用系统的硬件设计时,首要的问题是确定硬件电路的总体方案,并进行详细的技术论证。所谓硬件电路的总体设计,就是为实现该项目全部基本功能所需要的硬件电气连线原理图。就硬件系统来讲,电路的各部分紧密相关、互相协调,任何一部分电路的考虑不充分,都会给其他部分带来难以预料的影响,轻则使系统整体结构受破坏,重则导致硬件总体返工。从时间上看,硬件设计的绝大部分工作量往往在最初方案的设计阶段,一个好的设计方案往往会有事半功倍的效果。一旦总体方案确定下来,下一步的工作就会顺利进行,即使需要做部分修改,也只是在此基础上进行一些完善工作,而不会造成整体返工。
图1-4 以单片机为核心的应用系统的开发流程
在进行硬件的总体方案设计时,所涉及的具体电路可借鉴他人在这方面进行的工作经验。因为经过别人调试和考验过的电路往往具有一定的合理性(尽管这些电路常常与教科书或者手册上提供的电路可能不完全一致,但这正是经验所在)。在此基础上,结合自己的设计目的进行一些修改。这是一种简便、快捷的做法。当然,有些电路还需要自己设计,完全照搬是不太可能的。参考别人的电路时,需对其工作原理有较透彻的分析和理解,根据其工作机理了解其适用范围,从而确定其移植的可能性和需要修改的地方。对于有些关键性和尚不完全理解的电路,需要仔细分析,在设计之前先进行试验,以确定这部分电路的正确性,并在可靠性和精度等方面进行考验,尤其是模拟电路部分,更需进行这方面的工作。
为使硬件设计尽可能合理,根据经验,系统的电路设计应注意以下几个方面。
1)尽可能选择标准化、模块化的典型电路,提高设计的成功率和结构的灵活性。
2)在条件允许的情况下,尽可能选用功能强、集成度高的电路或芯片。因为采用这种器件可能代替某一部分电路,不仅元件数量、接插件和相互连线减少,使系统可靠性增加,而且成本往往比用多个元件实现的电路要低。
3)选择通用性强、市场货源充足的元器件,尤其在大批量生产的场合,更应注意这个问题。一旦某种元器件无法获得,也能用其他元器件直接替换或对电路稍作改动后用其他器件代替。
4)考虑硬件系统总体结构时,同样要注意通用性的问题。对于一个较复杂的系统,设计者往往希望将其模块化,即对中央控制单元、输入接口、输出接口、人机接口等分块进行设计,然后采用一定的连接方式将其组合成一个完整的系统。
5)在满足应用系统功能要求的基础上,系统的扩展及各功能模块的设计应适当留有余地,特别是某些具有特别功能的引脚尽量引出,以备将来修改、扩展之需。
6)设计时应尽可能地多做调研,采用最新的技术。因为电子技术发展迅速,器件更新换代很快,市场上不断推出性能更优、功能更强的芯片,只有时刻注意这方面的发展动态,采用新技术、新工艺,才能使产品具有最先进的性能,不落后于时代发展的潮流。
7)电路设计时,要充分考虑应用系统各部分的驱动能力。不同的电路有不同的驱动能力,对后级系统的输入阻抗要求也不一样。如果阻抗匹配不当,系统驱动能力不够,将导致系统工作不可靠甚至无法工作。值得注意的是,这种不可靠很难通过一般的测试手段来确定,而排除这种故障往往需要对系统做较大的调整。因此,在电路设计时,要注意增加系统的驱动能力或减少系统的功耗。
电路原理图设计可以使用专门的电路设计软件,如常见的KiCAD、Altium Designer、OrCAD、PADS等,特别是免费的电路设计软件KiCAD,更是应该首先予以考虑。
(5)印制电路板图设计
设计完了硬件原理图,就可以进行印制电路板(PCB)图的设计了。在进行PCB设计时,应注意以下几个方面:
1)元器件布局要尽量合理。
2)模拟地与数字地尽量分开,以减少干扰。
3)地线加粗、覆铜。
4)根据工艺要求,设计机箱、面板、配线、接插件等,这也是一个初次进行系统设计人员容易疏忽但又十分重要的问题。设计时要充分考虑到安装、调试、维修的方便。
印制电路板图设计好后,应进行检查,核对是否与原理图相符,并且检查有无其他的电气问题。特别要检查印制电路板图上元器件的封装是否和实际元器件的封装尺寸相符,最可靠的方法是将印制电路板图进行打印,将打印出来的元器件封装与实际元器件封装进行比对,若有差异,则需要对印制电路板图进行修改。确认所设计的印制电路板没有错误后,将设计的PCB文件交给电路板制作厂家进行印制电路板的制作。
印制电路板的设计可以使用专门的印制电路板设计软件,如Altium Designer或KiCAD。
(6)程序设计与模拟调试
印制电路板的制作需要一定的时间。在印制电路板制作期间,可以进行某些程序模块的编写和模拟调试。特别是可以对那些与硬件关系不大的程序模块进行模拟调试,如数据运算、逻辑关系测试等,这样可以加快项目的开发。目前,许多集成开发环境具有模拟调试功能,如著名的Keil μVision集成环境。
应用系统种类繁多,程序设计人员的编程风格也不尽相同,因此,应用程序因系统而异,因人而异。尽管如此,优秀的应用程序还是有其共同特点和规律的。设计人员在进行程序设计时应从以下几个方面加以考虑:
1)模块化、结构化的程序设计。根据系统功能要求,将软件分成若干个相对独立的模块,实现各功能程序的模块化、子程序化。根据模块之间的联系和时间上的关系,设计出合理的软件总体结构,使其清晰、简捷、流程合理。这样,既便于调试,又便于移植、修改。
2)建立正确的数学模型。根据功能要求,描述出各个输入和输出变量之间的数学关系,它是关系到系统性能好坏的重要因素。
3)为提高软件设计的总体效率,以简明、直观的方法对任务进行描述,在编写应用软件之前,一般应绘制出程序流程图。这不仅是程序设计的一个重要组成部分,而且是决定成败的关键部分。从某种意义上讲,设计正确恰当的程序流程图,可以缩短源程序编辑调试时间。
4)合理分配系统资源,包括ROM、RAM、定时/计数器、中断源等。其中,片内RAM的分配是关键,当资源规划好后,应列出一张资源详细分配表,以方便编程查阅。使用C语言编程时,应注意变量的命名规范。
5)注意在程序的相关位置写上功能注释,提高程序的可读性。
6)加强软件抗干扰设计,这是提高计算机应用系统可靠性的有力措施。
通过编辑软件编辑出的源程序,必须用编译程序汇编后生成目标代码。如果源程序有语法错误则返回编辑过程,修改源文件后再继续编译,直到无语法错误为止。这之后就可以利用目标码进行程序调试或者模拟调试了,在运行中,如果发现设计上的错误,则需要重新修改源程序并编译调试,如此反复直到成功。
(7)印制电路板的测试
印制电路制作完成后,需要对其进行必要的测试,如检查是否存在短路等。若无问题,则可进行元器件的焊接。元器件的焊接按照元器件的高度从低到高的顺序进行。焊接完毕,应在不接电源的情况下,再进行必要的检查(如检查是否存在因焊接引起的短路问题)。若没有问题,则可以上电进行仿真调试了。
(8)系统在线仿真调试
将焊接好的印制电路板连接到仿真环境中,进行程序的仿真调试工作。这个阶段的工作可以按照功能要求,分模块进行,将各个模块逐一进行仿真调试。各个模块都调试成功后,将各个模块组合到一起进行系统的整体仿真调试。直到所有的功能都能够正常工作为止。
(9)系统试运行
系统所有的功能模块都设计完毕并进行了仿真调试后,可以将程序写入单片机中,进行系统试运行。若试运行中出现问题,则对出现的现象进行分析,然后修改程序,并转到(8),直到系统试运行不出现问题为止。系统试运行成功后,可以进行项目的验收。
2.仿真调试
传统的单片机应用系统开发过程需要专门的仿真器进行仿真,其仿真模式如图1-5所示。
图1-5 传统的单片机应用系统开发仿真模式
其中,仿真头的位置就是应用系统中放入单片机的位置。在进行仿真调试时,最好将应用系统中的看门狗电路拔出,或者禁用单片机内部的看门狗电路。否则,当单步调试时,单片机经常被复位。
随着技术的进步,许多单片机生产厂家都推出了具有在系统调试(In System Debugging,ISD)功能的单片机,可以通过JTAG接口或者单片机中的一个串行口进行仿真(如宏晶科技的STC8系列单片机)。这样,可以省去价格较贵的专用仿真器。ISD技术已经成为目前单片机应用的一个发展趋势,如图1-6所示。
图1-6 在系统仿真调试模式
在系统仿真调试模式中,直接将单片机加入到应用系统。单片机的几个仿真调试引脚通过电平转换或时序控制电路与计算机的RS232C串行口或者USB接口相连。在计算机中安装相应的调试环境,通过调试环境对应用系统进行仿真调试。这种仿真调试模式的最大优点是能够真正仿真单片机的工作状态,并且,应用系统仿真调试完成后可以直接投入使用,省去重新制作电路板的费用。
本书以STC8A8K64S4A12单片机为背景机型进行介绍。用户可以不必购买昂贵的仿真器,就可以进行单片机应用系统的开发设计,开发环境的搭建非常容易,便于学习和使用。