基于S3C44B0步进电机的控制系统毕业设计论文.doc
毕业设计说明书(论文)基于S3C44B0步进电机的控制系统序言当今世界,以计算机技术、芯片技术和软件技术为核心的数字化技术取得了迅猛发展,不仅广泛渗透到社会、经济、军事、交通、通信等相关行业,而且深入到家电、娱乐、艺术、社会文化等各个领域,掀起了一场数字化技术革命。现代控制技术、多媒体技术与Internet的应用与普及,促使消费电子、计算机、通信一体化(3C)趋势步伐加快,嵌入式系统技术再度成为一个研究热点. 嵌入式系统技术是将先进的计算机技术、半导体技术和电子技术和各个行业的具体应用相结合后的产物,这一点就决定了它必然是一个技术密集、资金密集、高度分散、不断创新的知识集成系统。ARM (Advanced RISC Machines),是对一类微处理器的通称,还可以认为是一种技术的名字。目前,采用ARM技术知识产权的微处理器,即我们通常所说的ARM微处理器,己遍及工业控制、消费类电子产品、通信系统、网络系统、无线系统等各类产品市场,基于ARM技术的微处理器应用约占据了32位RISC微处理器75%以上的市场份额,ARM技术正在逐步渗入到我们生活的各个方面。随着人们生活水平的提高人们对智能产品的需求越来越高。很多产品用8位机已经很难满足要求,同时技术的进步已经使32位系统不再高高在上。32位微控制器的价格已经不比8位机高多少,有些系统使用32位机其整体成本甚至比用8 位机还要低。这样使用32位系统就没有技术和成本的障碍了。原先高高在上的32位嵌入式系统已经不再高贵,我们即将迎来32位应用普及的时代。作为电类非计算机专业的本科生很有必要了解和掌握32位嵌入式应用的开发技术。而目前在32位市场上ARM 占统治地位,因此为了适应社会发展的需求我们就很有必加入ARM嵌入式学习的环境中来了。第1章 绪论11 课题背景嵌入式系统是以应用为中心,以计算机技术为基础,并且软硬件是可裁剪的,适用于对功能、可靠性、成本、体积、功耗等有严格要求的专用计算机系统。嵌入式系统最典型的特点是与人们的日常生活紧密相关,任何一个普通人都可能拥有各类形形色色运用了嵌入式技术的电子产品,小到MP3. PDA等微型数字化设备,大到信息家电、智能电器、车载GPS,各种新型嵌入式设备在数量上己经远远超过了通用计算机。这也难怪美国著名未来学家尼葛洛庞帝在1999年1月访华时就预言,4-5年后嵌入式智能工具将成为继PC机和Internet之后计算机工业最伟大的发明。随着信息化、智能化、网络化的发展,嵌入式系统技术广泛应用于工业控制、信息家电、交通管理、农业、商业、服务业等各行业,己成为现代电子产品设计的一大领域和方向。同时在计算机领域里面,微型化和专业化成为了发展的新趋势,同样也需要嵌入式系统的支持。因此,研究嵌入式系统有着相当重要的理论和实际意义。本次设计即运用其基于S3C44B0实现对步进电机的控制,从而可扩展到其他运用的设计。12 嵌入式系统的简介嵌入式系统是嵌入到对象体系中的专用计算机系统。以嵌入式计算机为核心的嵌入式系统是继IT网络技术之后,又一个新的技术发展方向。IEEE(国际电气和电子工程师协会)对嵌入式系统的定义为:嵌入式系统是“用于控制、监视或者辅助操作机器和设备的装置”。这主要是从应用对象上加以定义,涵盖了软硬件及辅助机械设备。国内普遍认同的嵌入式系统定义为:以应用为中心,以计算机技术为基础,软硬件可裁减,适应应用系统对功能、可靠性、成本、体积、功耗等严格要求的专用计算机系统。相比较而言,国内的定义更全面一些,体现了嵌入式系统的“嵌入”、“专用性”、“计算机”的基本要素和特征。随着嵌入式应用领域的日益扩展,要完整的定义“嵌入式”这个概念变得越来越困难。嵌入式的分类可按如下:嵌入式系统按表现形式及使用硬件种类可分为:·系统中使用含程序或算法的处理器的嵌入式系统为芯片级潜入。·系统中使用某个核心模板的嵌入式系统为模块级潜入。嵌入式系统按软件实时性需求可分为:·非实时系统;·软实时系统(如消费类产品);·硬实时系统(工业实时控制系统)。 嵌入式系统开发是当今计算机软件发展的一个热点。随着嵌入式硬件技术的发展,嵌入式应用的不断增长以及嵌入式系统复杂性不断提高,要求嵌入式软件的规模和复杂性也不断提高,嵌入式软件的质量和开发周期对产品的最终质量和上市时间起到决定性的影响,嵌入式软件的调试工具成为了人们关注的重点。随着计算机硬件制造技术的进步,新的硬件设计理念不断涌现,硬件产品正以前所未有的速度更新换代。特别是ARM大力推广的内核定制技术,让芯片生产厂商能够根据实际应用的需求定制处理器功能,使嵌入式处理器的设计摆脱了结构固定、功能专一的传统处理器模式,嵌入式设备的硬件设计更为灵活多样1。13 本课题的主要任务 在本次设计中要了解嵌入式技术及其应用,熟悉S3C44BO微控制器的结构资源,了解ARM开发板的工作过程,并基于S3C44B0微控制器进行设计,从而熟悉嵌入式系统中步进电机的基本控制开发流程。本次设计的条件及技术指标是:了解S3C44B0的BootLoader编写;编制基于S3C44B0开发板上的步进电机控制;步进电机指标型号是:35BY4-08,+12V ;能将程序下载至目标板。 第2章 系统总体设计21 系统的开发流程 如图2-1所示,嵌入式系统的开发流程可包括:用户需求、选择嵌入式处理器及硬件平台、选择合适的嵌入式操作系统、在操作系统上开发应用程序、应用程序测试、整个系统测试、开发结束。各个阶段之间要求不断的反复和修改。直至最终完成设计目标。用户需求 选择嵌入式处理器及硬件平台选择合适的嵌入式操作系统在操作系统上开发应用程序应用程序测 试通过整个系统测试开发结束图2-1嵌入式开发流程确定设计任务和设计目标,并提炼出设计规格说明书,作为正式设计指导和验收的标准。需求一般分功能需求和非功能需求两方面。功能需求是系统的基本功能,如输入输出信号、操作方式等;非功能需求包括系统性能、成本、功耗、体积、重量等。操作系统是计算机中最基本的程序。操作系统负责计算机系统中全部软硬件资源的分配与回收、控制与协调等并发的活动;提供用户接口,使用户获得良好的工作环境;为用户扩展新的系统功能提供软件平台。根据如何实现系统的功能,对软硬件功能的划分进行系统软件、硬件的选型,这是设计成功与否的关键。22 需求分析在实际设计前我们要明确的就是嵌入式系统开发平台需要实现的功能,也就是对设计进行需求分析。要确定这个问题,首先对于我们刚接触这新技术的学生来说,就是如何学习嵌入式系统的开发和应用。嵌入式技术融合了具体应用系统技术、嵌入式微处理器、DSP技术、系统芯片SOC(嵌入式片上系统、System on Chip)设计制造技术、应用电子技术和嵌入式操作系统及应用软件技术,具有极高的系统集成性,可以满足不断增长的信息处理技术对嵌入式系统设计的要求。因此,这要求我们要有一定的硬件、软件基础,要不断的深入学习。此次设计是在一定的外部条件帮助下实现对电机的控制,设计的系统框图如图2-2所示,基本组成部分是软件和硬件。硬件包括ARM处理器、存储器,输入输出设备。软件包括启动代码,操作系统及应用程序等。实时操作系统(RTOS)是一段在嵌入式系统启动后首先执行的背景程序,用户的应用程序是运行于RTOS之上的各个任务,RTOS根据各个任务要求,进行资源(包括存储器、外设等)管理、消息管理、任务调度及异常处理等工作5。 应用程序实时操作系统外围设备微处理器 图2-2 系统框图在嵌入系统硬件系统中,除了中心控制部件(MCU, DSP, EMPU, SOC)以外,用于完成存储、通信、调试、显示等辅助功能的其他部件,事实上都可以算作嵌入式外围设备。目前常用的嵌入式外围设备按功能可以分为存储设备、通信设备和显示设备三类。存储设备主要用于各类数据的存储,常用的有静态易失型存储器(RAM,SRAM)、动态存储器(DRAM)和非易失型存储器(ROM、 EPROM、 EEPROM、FLASH)三种,其中FLASH凭借其可擦写次数多、存储速度快、存储容量大、价格便宜等优点,在嵌入式领域内得到了广泛应用。目前存在的绝大多数通信设备都可以直接在嵌入式系统中应用,包括RS-232接口(串行通信接口)、SPI(串行外围设备接口)、IrDA(红外线接口)、I2C(现场总线)、USB(通用串行总线接口)、Ethernet(以太网接口)等。由于嵌入式应用场合的特殊性,通常使用的是阴极射线管(CRT)、液晶显示器(LCD)和触摸板(Touch Panel)等外围显示设备。 23 系统设计框图 根据需求分析系统结构如图2-3所示,S3C44BOX开发板通过串口实现与PC机的通信及调试。通过应用程序调试进行模拟仿真控制步进电机的转动。步进电机PCServer 串口开发板串 S3C44B0口图2-3 系统结构图 此次设计选用的这块CPU核心板上除了S3C44BOX的最小系统外还增加了:两个串口,一个USB口,一个IDE接口,一套IIC电路,一个FLASH电路,RTC电路,液晶接口及调试电路,所以它可以完成独立的进行调试和工作。步进电机选用了S3C44B0II型实验仪上的步进电机电路,步进电机的型号为:35BY48。第3章 硬件电路设计31 硬件开发平台概述311 S3C44B0X开发板概述此次设计我们选用的是内核为RAM7 TDMI微控制器的开发板。图3-1为开发板框图。电源电路LCD电路串口1电路 串口0电路IIC电路24C08电池 FLASH电路(实时 RAM7 TDMI时钟 S3C44B0X RTC) SDRAM电路 (CPU) 复位电路 USB1。1 IDE接口电路 JTAG边界扫描 电路D12 调试电路图3-1 开发板框图这块CPU核心板上除了S3C44BOX的最小系统外还增加了:两个串口,一个USB口,一个IDE接口,一套IIC电路,一个FLASH电路,RTC电路,液晶接口及调试电路,所以它也可以完成独立的进行调试和工作。在此开发板上我们利用了RAM7TDMI芯片、电源电路及串口1电路等7。312 S3C44B0X简介 Samsung 公司的S3C44BOX16/32位RISC处理器为手持设备和一般应用提供了高性价比和高性能的微控制器解决方案。为了降低整个系统成本,S3C44BOX还提供以下部件:8KB Cache、可选内部SRAM,LCD控制器、2个UART, 4个DMA、系统管理(芯片选择逻辑、FP/EDO/SDRAM控制器)、6个带PWM的定时器、I/0口、RTC, 8通道12位ADC, IIC/IIS总线接口、同步SIO接口和时钟PLL.S3C44BOX如图3-2所示,是使用ARM7TDMI核、0.25 um的CMOS标准单元和存储器编译开发的。它的低功耗和全静态设计使得其特别适用于成本敏感和功耗敏感的应用。S3C44BOX的杰出特性是它的CPU核,是由ARM公司设计的ARM7TDMI RISC处理器。 图3-2 S3C44BOX封装图S3C44B0是基于ARM7TDMI的体系结构。ARM7TDMI是ARM公司最早为业界普遍认可且赢得了最广泛应用的处理器核。系统(存储)管理支持大,小端模式(通过外部引脚来选择);地址空间:包含8个地址空间,每个地址空间为32MB,总共有256MB的地址空间;8个地址空间中,6个地址空间可用于ROM,SRAM等存储器,2个用于ROM,SRAM,FP/EDO/SDRAM等存储器;时钟和功耗管理低功耗;片上PLL使得MUC的工作时钟频率最高为66MHZ;时钟可通过软件选择性的反馈回每个功能块。功耗管理模式为:正常模式正常运行模式;低速模式不带PLL的低频时钟;休眠模式只使CPU的时钟停止;停止模式所有时钟都停止。 通用输入/输出端口有8个外部中断端口,71个(多功能)复用输入/输出口。UART(通用异步收发器)有2个基于DMA或基于中断的UART,支持5位,6位,7位。8位串行数据传送/接收.看门狗定时器有16位看门狗定时器;定时器中断请求或系统超时复位 4。32 步进电机简介步进电机是一种能够将电脉冲信号转换成角位移或线位移的机电元件,它实际上是一种单相或多相同步电动机。单相步进电动机有单路电脉冲驱动,输出功率一般很小,其用途为微小功率驱动。多相步进电动机有多相方波脉冲驱动,用途很广。使用多相步进电动机时,单路电脉冲信号可先通过脉冲分配器转换为多相脉冲信号,在经功率放大后分别送入步进电动机各项绕组。每输入一个脉冲到脉冲分配器,电动机各相的通电状态就发生变化,转子会转过一定的角度(称为步距角)。正常情况下,步进电机转过的总角度和输入的脉冲数成正比;连续输入一定频率的脉冲时,电动机的转速与输入脉冲的频率保持严格的对应关系,不受电压波动和负载变化的影响。由于步进电动机能直接接收数字量的输入,所以特别适合于微机控制。321 步进电机概述步进电机作为执行元件,是机电一体化的关键产品之一, 广泛应用在各种自动化控制系统中。随着微电子和计算机技术的发展,步进电机的需求量与日俱增,在各个国民经济领域都有应用。(一)步进电机的内涵 步进电机是一种将电脉冲转化为角位移的执行机构。当步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度,它的旋转是以固定的角度一步一步运行的。可以通过控制脉冲个数来控制角位移量,从而达到准确定位的目的;同时可以通过控制脉冲频率来控制电机转动的速度和加速度,从而达到调速的目的。步进电机可以作为一种控制用的特种电机,利用其没有积累误差(精度为100%)的特点,广泛应用于各种开环控制。 现在比较常用的步进电机包括反应式步进电机(VR)、永磁式步进电机(PM)、混合式步进电机(HB)和单相式步进电机等。 永磁式步进电机一般为两相,转矩和体积较小,步进角一般为7.5度 或15度;反应式步进电机一般为三相,可实现大转矩输出,步进角一般为1.5度,但噪声和振动都很大。反应式步进电机的转子磁路由软磁材料制成,定子上有多相励磁绕组,利用磁导的变化产生转矩。混合式步进电机是指混合了永磁式和反应式的优点。它又分为两相和五相:两相步进角一般为1.8度而五相步进角一般为 0.72度。(二) 步进电机的一些基本参数: 1、电机固有步距角: 它表示控制系统每发一个步进脉冲信号,电机所转动的角度。电机出厂时给出了一个步距角的值,如86BYG250A型电机给出的值为0.9°/1.8°(表示半步工作时为0.9°、整步工作时为1.8°),这个步距角可以称之为电机固有步距角,它不一定是电机实际工作时的真正步距角,真正的步距角和驱动器有关。 2、步进电机的相数: 步进电机的相数是指电机内部的线圈组数,目前常用的有二相、三相、四相、五相步进电机。电机相数不同,其步距角也不同,一般二相电机的步距角为0.9°/1.8°、三相的为0.75°/1.5°、五相的为0.36°/0.72°。在没有细分驱动器时,用户主要靠选择不同相数的步进电机来满足自己步距角的要求。如果使用细分驱动器,则相数将变得没有意义,用户只需在驱动器上改变细分数,就可以改变步距角。 3、DETENT TORQUE: DETENT TORQUE是指步进电机没有通电的情况下,定子锁住转子的力矩。DETENT TORQUE 在国内没有统一的翻译方式,容易使大家产生误解;由于反应式步进电机的转子不是永磁材料,所以它没有DETENT TORQUE。(三)步进电机的特点: 1一般步进电机的精度为步进角的3-5%,且不累积。 2步进电机外表允许的最高温度。 步进电机温度过高首先会使电机的磁性材料退磁,从而导致力矩下降乃至于失步,因此,电机外表允许的最高温度应取决于不同电机磁性材料的退磁点,一般来讲,磁性材料的退磁点都在摄氏130度以上,有的甚至高达摄氏200度以上,所以步进电机外表温度在摄氏80-90度完全正常。 3步进电机的力矩会随转速的升高而下降。 当步进电机转动时,电机各相绕组的电感将形成一个反向电动势;频率越高,反向电动势越大。在它的作用下,电机随频率(或速度)的增大而相电流减小,从而导致力矩下降。4、步进电机低速时可以正常运转,但若高于一定速度就无法启动,并伴有啸叫声。 步进电机有一个技术参数:空载启动频率,即步进电机在空载情况下能够正常启动的脉冲频率,如果脉冲频率高于该值,电机不能正常启动,可能发生丢步或堵转。在有负载的情况下,启动频率应更低。如果要使电机达到高速转动,脉冲频率应该有加速过程,即启动频率较低,然后按一定加速度升到所希望的高频(电机转速从低速升到高速)。 步进电动机以其显著的特点,在数字化制造时代发挥着重大的用途。伴随着不同的数字化技术的发展以及步进电机本身技术的提高,步进电机将会在更多的领域得到应用。322 步进电机的工作原理现以反应式三相步进电机为例说明其工作原理。定子铁心上有六个形状相同的大齿,相邻两个大齿之间的夹角为60 度。每个大齿上都套有一个线圈,径向相对的两个线圈串联起来成为一项绕组。各个大齿的内表面上又有若干个均匀分布的小齿。转子是一个圆柱形铁心,外表面上圆周方向均匀的布满了小齿。转子小齿的齿距是和定子相同的。设计时应使转子齿数能被二整除。但某一项绕组通电,而转子可自由旋转时,该相两个大齿下的各个小齿将吸引相近的转子小齿,使电动机转动到转子小齿与该相定子小齿对齐的位置,而其它两相的各个大齿下的小齿必定和转子的小齿分别错开正负1/3 的齿距,形成“齿错位”,从而形成电磁引力使电动机连续的转动下去。和反应式步进电动机不同,永磁式步进电动机的绕组电流要求正、反向流动,故驱动电路一般要做成双极性驱动。混合式步进电动机的绕组电流也要求正、反向流动,故驱动电路通常也要做成双极性。(一)步进电机的控制原理 步进电机是一种将电脉冲转化为角位移的执行机构,步进电机的运行必须要有一电子装置进行驱动, 这种装置就是步进电机驱动器, 它是把控制系统发出的脉冲信号转化为步进电机的角位移, 或者说: 控制系统每发一个脉冲信号, 通过驱动器就使步进电机旋转一步距角。所以步进电机的转速与脉冲信号的频率成正比。 所以,控制步进脉冲信号的频率,可以对电机精确调速;控制步进脉冲的个数,可以对电机精确定位目的。 使用、控制步进电机必须由环形脉冲,功率放大等组成的控制系统,其方框图如下图3-3所示: 图3-3 电机控制系统 1、脉冲信号的产生。 脉冲信号一般由单片机或CPU产生,一般脉冲信号的占空比为0.3-0.4左右,电机转速越高,占空比则越大。 2、信号分配一般使用的感应子式步进电机以二、四相电机为主,二相电机工作方式有二相四拍和二相八拍二种,具体分配如下:二相四拍为,步距角为1.8度;二相八拍为,步距角为0.9度。四相电机工作方式也有二种,四相四拍为AB-BC-CD-DA-AB,步距角为1.8度;四相八拍为AB-B-BC-C-CD-D-AB,(步距角为0.9度)。我们运用的是二相电机。 3、功率放大 功率放大是驱动系统最为重要的部分。步进电机在一定转速下的转矩取决于它的动态平均电流而非静态电流(而样本上的电流均为静态电流)。平均电流越大电机力矩越大,要达到平均电流大这就需要驱动系统尽量克服电机的反电势。因而不同的场合采取不同的驱动方式,到目前为止,驱动方式一般有以下几种:恒压、恒压串电阻、高低压驱动、恒流、细分数等。步进电机一经定型,其性能取决于电机的驱动电源。步进电机转速越高,力矩越小则要求电机的电流越大,驱动电源的电压越高。(二) 步进电机的速度控制步进电机速度控制是靠输入的脉冲信号的变化来改变的,从理论上说,只需给驱动器脉冲信号即可,每给驱动器一个脉冲(CP),步进电机就旋转一个步距角(细分时为一个细分步距角)但是实际上,如果脉冲CP信号变化太快,步进电机由于惯性将跟随不上电信号的变化,这时会产生堵转和丢步现象,所以步进电机在启动时,必须有升速过程,在停止时必须有降速过程。一般来说升速和降速规律相同,以下为升速为例介绍: 升速过程由突跳频率加升速曲线组成(降速过程反之)。突跳频率是指步进电机在静止状态时突然施加的脉冲启动频率,此频率不可太大,否则也会产生堵转和丢步。升降速曲线一般为指数曲线或经过修调的指数曲线,当然也可采用直线或正弦曲线等。用户需根据自己的负载选择合适的突跳频率和升降速曲线,找到一条理想的曲线并不容易,一般需要多次试机才行。指数曲线在实际软件编程中比较麻烦,一般事先算好时间常数存贮在计算机存贮器内,工作过程中直接选取。如下图3-4所示: 图3-4 升速曲线降速曲线的设计直接影响电机运行的平稳性、升降速快慢、电机运行声音、最高速度、定位精度。步进电机的转速由脉冲信号的周期决定,脉冲信号周期由CPU通过延时子程序等方法确定,延时子程序可以设置控制信号的延时间来控制电机转速。转速n可以表示为: n=60/NT(转/每分钟) 公式3-1式中为电机转动一周应设定的字节数。工作时假设步距角为X。则有N=360/X,所以速度与频率成正比关系,特定步进电机步距角成反比。33 硬件电路设计(一)永磁式步进电机的控制在此次设计中选用的步进电机是永磁式步进电机,其型号是35BY48。35表示了电机的外径;BY表示电机系列代号;48表示每步转数。永磁式步进电机工作原理简述:永磁式步进电动机是一个永久磁铁电动子, 卷绕并且磁性地导电性定子。 通电导线形成一个磁场, 定子磁场分布的改变, 定子在磁场的作用下转动来带动负载。 例如一典型的步进电动机作用原理:一个两相绕阻。两相绕阻中的A向通电产生磁场, 因为转子受定子磁极吸引由向A向绕阻转动。然后对B向绕阻通电,使转子由A向绕阻向B向绕阻转动,即转子随磁场方向转动。磁场转到A向绕阻,转子由B向绕阻向A向绕阻转动。重覆以上这个过程。每使电动机转子顺时针转过90度,即步进电机向前进一步。(二)电机的驱动电路通过简单的驱动电路来实现对步进电机的控制。其中一路的电路原理如图3-5所示:图3-5 一路驱动电路原理图其余三路类似, 如下图3-6所示:图3-6 驱动电路原理图这是个驱动电路是简单的, 在实际运用中, 由于电机一般功率比较大, 我们在控制后端还要加上驱动电路,提高驱动能力。(三) 硬件电路 本次设计整个硬件电路连接图如3-7所示:步进电机 四相 RAM7TDMI 3C44B0X 68 69 70 71JB1JB2 驱动电路JB3 JB4 图3-7 硬件电路原理图35BY48型永磁步进电机共有四组线圈,四组线圈的一个端点连在一起引出,这样一共有5根引出线。要使用步进电机转动,只要轮流给各引出端通电即可用一个简单的单级驱动电路来作为驱动,通过JB1JB4来控制各线圈的接通与切断。开机时,JB1JB4均为高电平,依次将JB1JB4切换为低电平即可驱动步进电机运行,注意在切换之前将前一个输出引脚变为高电平。如果要改变电机的转动速度只要改变两次接通之间的时间,而要改变电机的转动方向,只要改变各线圈接通的顺序。第4章 系统软件设计41 嵌入式应用软件开发的基本流程由于嵌入式系统是一个受资源限制的系统,因此直接在嵌入式系统硬件上进行编程显然是不合理的。在嵌入式系统的开发过程中,一般采用的方法是先在通用PC机上编程;然后通过交叉编译和链接,将程序做成目标平台上可运行的二进制代码格式;最后将程序下载到目标平台上的特定位置,由目标板上启动代码运行这段二进制代码,从而运行起嵌入式系统。 整个过程中的部分工作在主机上完成,另一部分工作在目标板上完成。首先,是在主机上的编程工作。纯粹使用汇编代码编写源代码,除了编写困难外,调试和维护困难也是汇编代码的难题;而C语言可直接对硬件进行操作,而且又有高级语言变成结构化、容易移植等优点,因而嵌入式系统源代码主要由汇编和C语言混合编写。源代码编写完成后保存为源文件,在用主机上建立的交叉编译环境生成.obj文件,并且将这些.obj文件按照目标板的要求链接成合适的.image文件。最后通过重定位机制和下载过程,将.image文件下载到目标板上运行。由于无法保证目标板一次就可以运行编译、链接成功的程序,因此后期的调试排错工作就特别重要。调试只能在运行态完成,因此在主机和目标板之间通过连接,由主机控制目标板上程序的运行,可达到调试内核或者嵌入式应用程序的目标。 基于交叉开发环境的嵌入式应用软件开发主要分如下5个基本阶段:开发环境的建立、源代码编辑阶段、交叉编译和链接、重定位和下载、联机调试。1、 开发环境的建立按照发布的形式,交叉开发环境主要分为开放和商用2种类型。按照使用方式分,交叉开发工具主要分为使用Makefile和IDE开发环境2种类型。使用Makefile的开发环境需要编译Makefile来管理和控制项目的开发,可以自己手写,有时也可以使用一些自动化的工具。新类型的开发环境一般有一个用户友好的IDE界面,方便管理和控制项目的开发,如Code Warrior等。对交叉开发环境有了一定的了解后,就可根据开发需求选择一种开发环境进行代码编写。编写程序的第一件事就是要会写程序,即要先会程序的规划,将问题需求跟程序功能很明确地写下来,依据规划好的函数逐个写好。2、 源文件编译阶段源程序的启动代码、硬件初始化代码要用汇编语言编写,这样可以发挥汇编语言短小精悍的优势,以提高代码的执行效率。汇编语言编写完成后,代码转向C语言的程序入口点,执行C语言代码。C语言在开发软件时具有易模块化、易调试、易维护和易移植等优点,所以应用广泛,是目前嵌入式软件开发中最常用的语言。3、编译通常所说的编译程序能够把某一种语言的程序(称为源程序)转换成另一种语言程序语言(称为目标语言程序),而后者与前者在逻辑上是等价的。编译器主要负责的工作就是将源代码编译成特定的目标代码,顺便检查语法的错误,所产生的目标代码是不执行的,不过可从目标代码找出许多有用的信息。现在目标代码有2大类:COFF(common Object File Format)与ELF(Extended Linker Format)。在目标文件中规定了信息的组织方式,也即目标文件格式。目标文件格式的规定是为了不同的供应商提供的开发工具(如编译器、汇编器和调试器)可以遵循很好的标准,以实现相互操作。4、链接一个程序想要在内存中运行,除了编译之外,还要经过链接的步骤。编译器只能在一个模块内部完成符号名到地址的转换工作,不同模块间的符号解析需要由链接器完成。5、下载 下载就是把可执行映像文件烧写到ROM里。但在烧写之前,应先将BootLoader先烧写到ROM中,在启动系统时BootLoader就可以管理系统操作。当可执行的程序映像文件下载完成后,就可以打开电源运行系统。6、调试嵌入式系统的调试分为软件调试和硬件调试2种:软件调试是通过软件调试器调试嵌入式软件;硬件调试是通过仿真调试器完成调试过程。由于嵌入式系统特殊的开发环境,不可避免的是,调试是必然需要目标运行平台和调试器两方面的支持。通常作为调试软件部分的调试器是被集成在安装在目标机上的嵌入式软件开发集成环境(IDE)中的,软件调试工具一般都具有ISS功能,即完成代码在无硬件调试环境下的模拟调试。而由于真正的硬件运行环境与软件模拟环境有教大的差异,ISS只能用于开发者编程练习或者软件的初步调试。硬件调试器,可以获得比软件功能强大得多的调试性能。硬件调试器的原理一般是通过仿真硬件的真正执行过程,让开发者在调试过程中可时刻获得执行情况。在本次的设计中我们主要用软件调试方法。利用ADS1.2软件,它是一个使用方便的集成开发环境。42 嵌入式系统的程序设计方法不同于基于PC平台的程序开发,嵌入式系统的程序设计具有其自身的特点,程序设计的方法也会因系统或因人而异,但其程序设计还是有其共同的特点及规律的。在编写嵌入式系统应用程序时,可采取如下几个步骤:(1)明确所要解决的问题:根据问题的要求,将软件分成若干个相对独立的部分,并合理设计软件的总体结构。(2)合理配置系统资源:与基于8位或16位微控制器的系统相比较,基于32位微控制器的系统资源要丰富得多,但合理的资源配置可最大限度的发挥系统的硬件潜能,提高系统的性能。对于一个特定的系统来说,其系统资源,如Flash. EEPROM, SDRAM、中断控制等,都是有限的,应合理配置系统资源。(3)程序的设计、调试与优化:根据软件的总体结构编写程序,同时采用各种调试手段,找出程序的各种语法和逻辑错误,最后应使各功能程序模块化,缩短代码长度以节省存储空间并减少程序执行时间。此外,由于嵌入式系统一般都应用在环境比较恶劣的场合,易受各种干扰,从而影响到系统的可靠性,因此,应用程序的抗干扰技术也是必须考虑的,这也是嵌入式系统应用程序不同于其他应用程序的一个重要特点。(一) 应用系统中的存储映射在ARM体系结构中,系统复位后将跳转到地址0x0处执行,该处存放的是复位异常中断的中断向量。对于嵌入式系统来说,在系统复位时RAM中是不存在代码和数据的。因此在系统复位时,地址0x0处该为ROM,即系统复位后应该首先从ROM中开始执行。在S3C44B0X处理器的嵌入式系统开发中,也是通过存储控制器为片外存储器访问提供必要的控制信号,管理片外存储部件的。图4-1为S3C44B0X复位后的存储器地址分配图。从图可以看出:·特殊功能寄存器位于0x01C000000x02000000的4MB空间内;·Bank0Bank5的起始地址和空间大小都是固定的;·Bank6的起始地址是固定的,空间可配置为2/4/8/16/32MB;·Bank7的空间大小和Bank6一样是可变的,也可配置为2/4/8/16/32MB。图4-1 S3C44B0X复位后的存储器地址分配因为相对于ROM来说,RAM的数据宽度较大,速度较快,这会使系统响应异常中断的速度更快。而且如果异常中断向量表放在RAM中,程序在运行过程中程序可以修改中断向量表的内容,使得系统更为灵活。(二) 系统初始化尽管各种嵌入式系统结构以及功能相差很大,但其系统初始化部分完成的操作有很大一部分是相似的。系统初始化程序通常也称为Boot Loader,代码量虽少,但是作用非常大,相当于PC上的BIOS,负责将操作系统内核固化到Flash中和系统初始化工作,然后将系统控制权交给操作系统。(1)系统运行环境的初始化 对于嵌入式应用系统和具有操作系统支持的应用系统来说,相同运行环境初始化部分的工作是不同的。对于有操作系统支持的应用系统来说,在操作系统启动时将会初始化系统运行环境。操作系统在加载应用程序后,将控制权转交到应用程序的main()函数。然后,C运行时库中的_main()初始化应用程序。而对于嵌入式应用系统来说,由于没有操作系统的支持,存放在ROM中的代码必须进行所有的初始化工作。系统运行环境的初始化主要包括以下内容:·初始化存储系统如果系统中存在MMU或者MPU,在进行下列操作时必须初始化好这些部件:使能IRQ中断及FIQ中断、涉及到RAM的操作。·初始化数据指针 在ARM体系中,各种处理器模式都拥有其自己的数据栈。·初始化关键的IO设备·设置中断系统需要的RAM变量·使能异常中断(2)应用程序的初始化应用程序的初始化主要完成将己经初始化的数据搬运到可写的数据区,并初始化要用到的C程序的变量。在系统初始化完成之后,程序将执行权交给主函数main (),在main()中执行与系统功能相关的操作。43 本系统应用程序设计 431 系统软件部分设计构思一个完整的测试系统必须要有一个操作简洁方便、质量高的软件系统来支持。对于一个硬件电路,配以不同的软件,所实现的功能也就不同,而且有些硬件电路功能常可以用软件来实现。研制一台便携式仪器,软件工作量往往大于硬件,可以认为,便携式仪表的设计,很大程度上是软件的设计。本系统软件设计思想是采用结构化设计方法中的模块化程序设计。代码使用C语言来编写。为了使程序易于编写与调试,也为了便于检验和维护,总是设法把程序编写成一个个结构完整,相对独立的程序段。这样一个程序段,可以看作一个可调用的子程序,即一个程序模块。把整个程序按照“自顶向下”的设计来分块,一层层分下去,一直分到最下层的每一模块能容易编写为止,即所谓模块化编程。模块化编程有利于程序设计任务的划分,例如,各种可编程接口,电路的初始化程序等等,都是一个个独立的模块,能被任意调用;有利于大程序的搭建,也便于程序的修改。程序设计一般采用“自顶向下”的方法。这种方法在程序设计时的优点是明显的,但在具体编程时最好采用“自底向上”的方法,即从最低层的模块开始编程,然后进行上层的模块编程,直至最后完成。实践证明,这种方法可大大减少系统调试的难度,不易出现难以排除的故障或问题。根据设计内容要求编写的主程序流程图如图4-2所示:开 始定义变量分配系统空间确定工作频率 中断/I/O口/通用异步收发器(UART)初始化 电机控制延时