




已阅读5页,还剩32页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
自动化工程训练自动化工程训练 设计报告设计报告 学 院: 信息科学与工程学院 班 级: 姓 名: 学 号: 指导老师: 时间:2011 年 9 月 7 日 -1- 目录目录 一、设计课题名称及要求一、设计课题名称及要求.1 1 二、设计思想和实施方案二、设计思想和实施方案.2 2 2.1 硬件部分硬件部分.2 2.1.1 步进电机步进电机.2 2.1.2 单片机及其他硬件电路单片机及其他硬件电路.5 三、硬件电路原理图及分析三、硬件电路原理图及分析.1010 四、典型程序模块及典型编程技巧分析四、典型程序模块及典型编程技巧分析.1111 4.1 单片机程序分析单片机程序分析.11 4.1.1 主程序步进电机控制模块主程序步进电机控制模块.11 4.1.2 DISPLAY数码管显示模块数码管显示模块.12 4.1.3 KEYSCAN 键盘扫描模块键盘扫描模块.12 4.1.4 定时器定时器 0 的初始化模块和中断服务子程序模块的初始化模块和中断服务子程序模块 .12 4.1.5 串口的初始化模块和中断服务子程序模块串口的初始化模块和中断服务子程序模块.12 4.1.6 DELAYMS软件延时模块软件延时模块.13 4.2 DELPHI程序分析程序分析.13 4.2.1 系统所用组件系统所用组件 .13 4.2.2 应用软件的具体操作步骤应用软件的具体操作步骤.17 五、设计中遇到的问题及解决方法五、设计中遇到的问题及解决方法.1919 六、程序清单和程序注释六、程序清单和程序注释.2020 七、收获与体会七、收获与体会.2020 八、参考文献八、参考文献.2121 附录:附录:.2222 附录附录 1:硬件电路图:硬件电路图.22 附录附录 2:单片机:单片机 C 语言程序清单语言程序清单 .23 附录附录 3:汇编程序清单:汇编程序清单 .30 -2- 一、设计课题名称及要求一、设计课题名称及要求 1. 课题开发与设计方向 基于 SST89E554RC 单片机实验系统的综合实验应用开发与设计:要求在掌 握相关基础性实验项目的基础上,完成综合性实验项目,并在此基础上增加键 盘输入功能、数据显示功能和通信功能等。 2设计课题:基于 Delphi 和单片机的串行通信的步进电机控制 3设计要求: (1)分别用 C 语言编程完成硬件接口功能设计; (2)基于单片机接口硬件电路设计调试; (3)控制功能要求:小键盘给定分段速度,数码管显示当前步进电机方向、 速度信息; (4)具有本地与远程(串行方式下)功能; (5)用 Delphi 设计人机交互界面,可通过人机界面在上位机上实现对步进 电机速度的控制。界面可显示当前电机速度信息。 4实验设备:PC 机一台、小型单片机试验箱(含 STC89C52RC 单片机、数码 管、独立键盘) 、步进电机。 二、设计思想和实施方案二、设计思想和实施方案 本次课程设计主要内容是步进电机的控制和运行状态显示,硬件部分主要 的涉及的步进电机、小键盘、数码管和相关控制电路。软件包括下位机单片机 程序设计和上位机中 Delphi 设计的人机交互界面,二者互相协作实现串口通信。 本次设计的思路是由计算机操作 Delphi 制作的人机交互界面通过串口通信 向单片机发送 0 到 15 之间的两位十进制数据或者十六进制数据作为速度设定, 由单片机产生一系列脉冲信号实现对步进电机进行控制。单片机发出的脉冲信 号控制步进电机的运行速度。同时单片机把步进电机运行状况反馈给计算机, 由所编写的 DELPHI 组件显示步进电机的运行状况并进行监控。此外还可以通过 硬件的独立键盘发给单片机控制信号,实现控制步进电机的启动、停止、转向 和速度等级,同时利用数码管显示步进电机当前的运转状态。 该设计实现了上位机对步进电机的控制。通过计算机与单片机通信发出脉 冲信号控制步进电机的启动停止运行。通过 C 语言编程,能够实现对步进电 机正反两个方向运行的控制,单片机控制板用来发送脉冲信号直接控制步进电 机各相线路电流的通断。根据计算机所发送的十进制数,再根据驱动电路的原 理和步进电机的特性说明来确定步进电机各相的具体通电步骤,同时控制板上 -3- 可以显示出步进电机的转向和速度等级。 2.1 硬件部分硬件部分 2.1.1 步进电机步进电机 步进电动机已成为除直流电动机和交流电动机以外的第三类电动机。传统 电动机作为机电能量转换装置,在人类的生产和生活进入电气化过程中起着关 键的作用。可是在人类社会进入自动化时代的今天,传统电动机的功能已不能 满足工厂自动化和办公自动化等各种运动控制系统的要求。为适应这些要求, 发展了一系列新的具备控制功能的电动机系统,其中较有自己特点,且应用十 分广泛的一类便是步进电动机。 步进电动机的发展与计算机工业密切相关。自从步进电动机在计算机外围 设备中取代小型直流电动机以后,使其设备的性能提高,很快地促进了步进电 动机的发展。另一方面,微型计算机和数字控制技术的发展,又将作为数控系 统执行部件的步进电动机推广应用到其他领域,如电加工机床、小功率机械加 工机床、测量仪器、光学和医疗仪器以及包装机械等。 步进电动机有如下特点: (1)步进电动机的角位移与输入脉冲数严格成正比,因此,当它转一转后, 没有累计误差,具有良好的跟随性。 (2)由步进电动机与驱动电路组成的开环数控系统,既非常简单、廉价, 又非常可靠。同时,它也可以与角度反馈环节组成高性能的闭环数控系统。 (3) 步进电动机的动态响应快,易与起停、正反转及变速。 (4) 速度可在相当宽的范围内平滑调节,低速下仍能保证获得大转 矩, 因此,一般可以不用减速器而直接驱动负载。 (5) 步进电动机只能通过脉冲电源供电才能运行,它不能直接使用交流 电源和直流电源。 (6) 步进电动机存在振荡和失步现象,必须对控制系统和机械负载采取 相应的措施。 (7)步进电动机自身的噪声和振动较大,带惯性负载的能力较差。 随着科学技术的进步,步进电机已广泛运用在需要高定位精度、高分解能、 高响应性、信赖性等灵活控制性高的机械系统中。在生产过程中要求自动化、 省人力、效率高的机器中,我们很容易发现步进电机的踪迹,尤其以重视速度、 位置控制、需要精确操作各项指令动作的灵活控制性场合步进电机用得最多。 步进电机是数字控制电机,它将脉冲信号转变成角位移,即给一个脉冲信号, 步进电机就转动一个角度,因此非常适合对数字系统的控制。步进电机可分为反 -4- 应式步进电机(简称“VR”) 、永磁式步进电机(简称“PM”)和混合式步进电机 (简称“HB”) 。步进电机区别于其他控制电机的最大特点是,通过输入脉冲信 号来进行控制,即电机的总转动角度由输入脉冲数决定,而电机的转速由脉冲信 号频率决定。步进电机的驱动电路根据控制信号工作,控制信号由各类控制器来 产生。其基本原理作用如下: (1)步进电机的转动和转向控制 在非超载的情况下,电机的转速、停止的位置只取决于脉冲信号的频率和 脉冲数。当步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向 转动一个固定的角度,即步距角。它的旋转是以固定的角度一步一步运行的。 通过控制脉冲个数来控制角位移量,可以达到准确定位的目的。通过控制脉冲 频率来控制电机转动的速度和加速度,达到调速的目的。步进电机作为执行元 件, 广泛应用在各种自动化控制系统中。本次课程设计控制的是实验室提供的 四项八拍步进电机,电压时 DC12V,其励磁线圈及励磁顺序如图 2.1 和表 2.1 所示。 表表 2.12.1 四项八拍步进电机励磁顺序四项八拍步进电机励磁顺序 图图 2.12.1 四项八拍步进电机励磁线圈四项八拍步进电机励磁线圈 -5- 制换相顺序,通电换相。这一过程称为“脉冲分配” 。例如:四相步进电机的 单四拍工作方式,其各相通电顺序为 A B CD。通电控制脉冲必须严格按 照这一顺序分别控制 A、B、C、D 相的通断,控制步进电机的转向。如果给定工 作方式正序换相通电,则步进电机正转;如果按反序换相通电,则电机就反转。 (2)步进电机的速度控制 如果给步进电机发一个控制脉冲,它就转一步,再发一个脉冲,它会再转一步。 两个脉冲的间隔越短,步进电机就转得越快。调整控制器发出的脉冲频率,就可 以对步进电机进行调速。 考虑到步进电机的转速、停止的位置只取决于脉冲信号的频率和脉冲,结 合单片机课程中所学的硬件知识,决定使用单片机 P1 向步进电机传送供电脉冲。 其中 P1.0 表示 A 相线路,P1.1 表示 B 相线路,P1.2 表示 C 相线路,P1.4 表示 D 相线路。当 P1.X=1 时,该相通电,当 P1.X=0 时,该相断电。通过控制 P1 口 的输出来控制步进电机的励磁顺序。设定步进电机共有 18 个速度等级,数字越 大,电机转动速度越快。利用软件编程实现不同延时,得到不同的脉冲频率, 从而实现对步进电机的转速控制。 2.1.2 单片机及其他硬件电路单片机及其他硬件电路 1.单片机 步进电机的控制系统主要由单片机 STC89C52RC、数码管及其显示电路、独 立键盘、USB 芯片转串口芯片 PL2303 、电源和时钟电路等几个单元组成,单片 机系统如图 2.2 所示: 显示系统 单 片 机 通 信 系 统 驱动器 步进电机 图图 2.22.2 系统整体方案设计系统整体方案设计 -6- 本设计所用的 STC89C52RC 是一个低功耗,高性能 8 位单片机。STC89C52RC 具有如下特点:40 个引脚,4k Bytes Flash 片内程序存储器,128 bytes 的随 机存取数据存储器(RAM) ,32 个外部双向输入/输出(I/O)口,5 个中断优先 级 2 层中断嵌套中断,2 个 16 位可编程定时计数器,2 个全双工串行通信口,看 门狗(WDT)电路,片内时钟振荡器。如图 2.3 所示。 图图 2.32.3 单片机单片机 STC89C52RCSTC89C52RC 示意图示意图 STC89C52RC 单片机中两条主电源引脚,两条外接晶体引脚,4 条控制电源 复位引脚,32 条 I/O 引脚。其中 19 脚、20 脚外接晶振 11.0592MHZ 及两个 30P 电容,9 脚外接复位电路,40 脚、20 脚分别接电源正负极,31 脚接+5V 电源, 以上所述是保证单片机能正常工作的外接条件。 P0 口:共 8 条引脚,即 3932 脚,是双向 8 为三态 I/O 口。本次设计 P0 口为数据端口。由于本次设计采用的共阴数码管,所以 8 位输出信号为欲输出 的 0-9 的共阴极段选码。 P1 口:共 8 条引脚,即 18 脚,P1 口是一个带有内部上拉电阻的 8 为双 向 I/O 口。本次设计中其中 P0.0 到 P0.4 控制步进电机驱动器,通过 P0.0 发出 的时钟脉冲来控制步进电机的起停,通过控制 P0.0 口各脉冲的快慢来实现对步 进电机的定速控制,通过 P0.0 时钟脉冲的次数来实现对步进电机的定位控制。 改变 P0.0 到 P0.4 输出脉冲的顺序来控制步进电机的正反转。 P3 口:共 8 条引脚,即 1017 脚。 P3 口的每个引脚都有各自的第二功能。 P3.0 口的第二功能时 RXD,既串行数据接收端,P3.1 口的第二功能是 TXD,既串 行数据发送端。因此 P3.0、P3.1 在系统中起着与计算机互传数据的作用,是步 进电机通信控制的主要端口。P3.2、P3.3 作为数码管显示电路锁存使能信号。 P3.2 为段锁存信号,P3.3 为位锁存信号。 -7- 2.串口通信 串口是计算机上一种非常通用设备通信的协议(不要与通用串行总线 Universal SerialBus 或者 USB 混淆) 。大多数计算机包含两个基于 RS232 的串 口。串口同时也是仪器仪表设备通用的通信协议;很多 GPIB 兼容的设备也带有 RS-232 口。同时,串口通信协议也可以用于获取远程采集设备的数据。 串口通信的概念非常简单,串口按位(bit)发送和接收字节。尽管比按字 节(byte)的并行通信慢,但是串口可以在使用一根线发送数据的同时用另一 根线接收数据。它很简单并且能够实现远距离通信。比如 IEEE488 定义并行通 行状态时,规定设备线总常不得超过 20 米,并且任意两个设备间的长度不得超 过 2 米;而对于串口而言,长度可达 1200 米。 典型地,串口用于 ASCII 码字符的传输。通信使用 3 根线完成:地线,发 送,接收。由于串口通信是异步的,端口能够在一根线上发送数据同时在另一 根线上接收数据。其他线用于握手,但是不是必须的。串口通信最重要的参数 是波特率、数据位、停止位和奇偶校验。对于两个进行通行的端口,这些参数 必须匹配: (1)波特率:这是一个衡量通信速度的参数。它表示每秒钟传送的 bit 的 个数。例如 300 波特表示每秒钟发送 300 个 bit。当我们提到时钟周期时,我 们就是指波特率例如如果协议需要 4800 波特率,那么时钟是 4800Hz。这意味 着串口通信在数据线上的采样率为 4800Hz。通常电话线的波特率为 14400,28800 和 36600。波特率可以远远大于这些值,但是波特率和距离成反 比。高波特率常常用于放置的很近的仪器间的通信,典型的例子就是 GPIB 设备 的通信。 (2)数据位:这是衡量通信中实际数据位的参数。当计算机发送一个信息 包,实际的数据不会是 8 位的,标准的值是 5、7 和 8 位。如何设置取决于你想 传送的信息。比如,标准的 ASCII 码是 0127(7 位) 。扩展的 ASCII 码是 0255(8 位) 。如果数据使用简单的文本(标准 ASCII 码) ,那么每个数据包 使用 7 位数据。每个包是指一个字节,包括开始/停止位,数据位和奇偶校验位。 由于实际数据位取决于通信协议的选取,术语“包”指任何通信的情况。 (3)停止位:用于表示单个包的最后一位。典型的值为 1,1.5 和 2 位。 由于数据是在传输线上定时的,并且每一个设备有其自己的时钟,很可能在通 信中两台设备间出现了小小的不同步。因此停止位不仅仅是表示传输的结束, 并且提供计算机校正时钟同步的机会。适用于停止位的位数越多,不同时钟同 步的容忍程度越大,但是数据传输率同时也越慢。 (4)奇偶校验位:在串口通信中一种简单的检错方式。有四种检错方式: -8- 偶、奇、高和低。当然没有校验位也是可以的。对于偶和奇校验的情况,串口 会设置校验位(数据位后面的一位) ,用一个值确保传输的数据有偶个或者奇个 逻辑高位。例如,如果数据是 011,那么对于偶校验,校验位为 0,保证逻辑高 的位数是偶数个。如果是奇校验,校验位位 1,这样就有 3 个逻辑高位。高位 和低位不真正的检查数据,简单置位逻辑高或者逻辑低校验。这样使得接收设 备能够知道一个位的状态,有机会判断是否有噪声干扰了通信或者是否传输和 接收数据是否不同步。 RS-232 是 IBM-PC 及其兼容机上的串行连接标准。可用于许多用途,比如 连接鼠标、打印机或者 Modem,同时也可以接工业仪器仪表。用于驱动和连线 的改进,实际应用中 RS-232 的传输长度或者速度常常超过标准的值。RS-232 只限于 PC 串口和设备间点对点的通信。RS-232 串口通信最远距离是 50 英尺。 目前 RS-232 是计算机与通信工业中应用最广泛的一种串行接口,考虑到计算机 有 RS-232 接口,可以很方便地与计算机之间通信,该系统通讯模块选用 RS- 232 串行数据接口。在电气特性上 RS-232 采用负逻辑,要求高、低两信号间有 较大的幅度。RS232 接口如图 2.4 所示。 图图 2.42.4 RS232RS232 接口示意图接口示意图 USB 中文含义是“通用串行总线” 。它不是一种新的总线标准,而是应用在 PC 领域的接口技术。它到现在已经发展为 2.0 版本,成为目前电脑中的标准扩 展接口。USB 用一个 4 针插头作为标准插头,采用菊花链形式可以把所有的外 设连接起来,最多可以连接 127 个外部设备,并且不会损失带宽。USB 具有传 输速度快(USB1.1 是 12Mbps,USB2.0 是 480Mbps, USB3.0 是 5 Gbps) ,使用方 便,支持热插拔,连接灵活,独立供电等优点,可以连接鼠标、键盘、打印机、 扫描仪、摄像头、闪存盘、MP3 机、手机、数码相机、移动硬盘、外置光软驱、 USB 网卡、ADSL Modem、Cable Modem 等,几乎所有的外部设备。 USB 需要主机硬件、操作系统和外设三个方面的支持才能工作。目前的主 板一般都采用支持 USB 功能的控制芯片组,主板上也安装有 USB 接口插座,而 且除了背板的插座之外,主板上还预留有 USB 插针,可以通过连线接到机箱前 -9- 面作为前置 USB 接口以方便使用。而且 USB 接口还可以通过专门的 USB 连机线 实现双机互连,并可以通过 Hub 扩展出更多的接口。USB 自从 1996 年推出后, 已成功替代串口和并口,并成为当今个人电脑和大量智能设备的必配的接口之 一。 在本次设计中,为了方便直接利用实验箱中的 USB 芯片转串口芯片 PL2303,将单片机的串行信号通过转换芯片实现 USB 的通信,利用专门的 USB 连机线实现双机互连实现单片机和计算机的串行通信。 3.显示系统 本电路显示系统有 8 个共阴数码管和内部集成的 74HC573 芯片组成,在单 片机系统中,通常用数码显示器来显示各种数字或符号。由于它具有显示清晰、 高亮度、使用电压低、寿命长的特点,因此使用非常广泛。 该系统 LED 显示方法采用动态扫描的方法。在多位 LED 显示时,为了简化 电路,降低成本,利用锁存器来实现段码和位码的分别锁存,点亮数码管。要 想显示不同的字符,就必须采用扫描的方法轮流点亮各位 LED,即在每一瞬间 只使某一位显示字符。在此瞬间,段选控制 I/O 口输出相应字符段选码(字型 码) ,而位选码则控制 I/O 口在该显示位送入选通电平(因为 LED 为共阴,故应 送低电平) ,以保证该位显示相应字符。如此轮流,使每位分时显示该位应显示 的字符。段选码和位选码每送入一次都会延时, ,因人眼的视觉暂留时间很短为 0.1s,所以显示的时间间隔不必超过 20ms,并保持延时一段时间,以造成视觉 暂留效果,给人看上去每个数码管总在亮。这种方式成为软件扫描显示。 利用 8 个数码管中的前三个实时显示系统当前状态。左起第一个数码管显 示当前电机的运行状态:“+”表示电机处于正转状态,不显示表示电机处于反 转运行状态。第二个数码管和第三个数码管用来显示当前步进电机的速度等级。 速度等级分为 01-15 等共 15 个等级。其中第二个数码管显示速度等级的十位数, 第三个数码管显示速度等级的个位数。当步进电机的转向和速度发生改变时, 数码管的显示也会随之发生改变,可实现实时显示步进电机的运转方向和运转 素等等信息。显示系统示意图如图 2.5 所示。 -10- 图图 2.52.5 显示系统示意图显示系统示意图 4.硬件控制系统 此外,本次设计还用到了实验箱中的独立键盘来控制步进电机的启动、暂 停、转动方向和转动速度等控制。其中第一行中的 5、6 键实现方向设定,使电 机转动方向为正向或者反向。3、4 键实现运行或暂停功能,使电机运行或者暂 停。2、7 键依次表示加速和减速, ,实现电机速度的设定。独立键盘的按键示 意图如图 2.3 所示。 图图 2.32.3 小键盘按键示意图小键盘按键示意图 -11- 三、硬件电路原理图及分析三、硬件电路原理图及分析 图图 3.13.1 步进电机控制系统硬件电路原理图步进电机控制系统硬件电路原理图 如图 3.1 所示,该原理图为步进电机控制系统硬件电路原理图,主要涉及 到单片机 STC89C52RC 芯片、独立键盘及数码管显示单元和步进电机及其驱动电 路。其中,单片机 P0 口的 P0.0P0.7 分别接数码管的 A、B、C、D、E、F、G 和 DP。P1 口低四位 P1.0P1.3 依次接电机驱动电路的 A、B、C 和 D。P2 口的 P2.0P2.7 分别接独立键盘 K1K8。P3 口的 P3.2 和 P3.3 分别接数码管单元 锁存芯片的使能端,P3.2 给定段锁存信号,P3.3 给定位锁存信号。 四、典型程序模块及典型编程技巧分析四、典型程序模块及典型编程技巧分析 4.1 单片机程序分析单片机程序分析 4.1.1 主程序步进电机控制模块主程序步进电机控制模块 主程序主要是判断操作,综合调用各子函数,从而完成对步进电机的相关 控制,并在 PC 机及数码管上实时显示电机的状态、转向和速度等级。 本次设计中,实现了电机运行状态、转向和 1-15 个速度等级的转速控制。 当程序开始运行时,电机进入初始状态:正转,速度等级为 1 级。数码管显示 信息为 01。操作如下: (1)当小键盘中“5”键被按下时,电机的转向变为正转。当小键盘中 -12- “6”键被按下时,电机的转向变为反转。在转向发生改变的同时,数码管第一 位显示也相应发生变化:当电机正转时,数码管不显示;当电机正转时,显示 “-” ,表示反转; (2)当小键盘中“3”键被按下时,电机开始转动。在运行过程中,当 “4”键被再次按下时,电机暂停转动; (3)当小键盘中“2”键被按下时,电机的转速发生改变,开始减速。当 小键盘中“7”键被按下时,电机的转速发生改变,开始加速。每按一次,速度 等级改变一级。速度改变的同时,数码管第二位和第三位显示相应速度档位两 位数值。数码管第二位显示十位,第三位显示个位。 主程序主要通过设置标志变量来控制实现以上操作。在 C 语言中设置运动 状态标志变量 StopFlag、方向标志变量 RunFlag、速度等级 Speed 和按键键值 num。通过 KeyScan 键盘扫描模块判断键盘哪个按键被按下,将键值赋给 num, 根据 num 的不同改变运动状态标志变量 StopFlag、方向标志变量 RunFlag、速 度等级 Speed。再通过 Display 数码管显示模块实现电机运行情况的数码管显 示。通过定时器中断服务子程序 void Timer0_isr(void) interrupt 1 来实现 步进电机的速度改变。通过串口中断服务子程序来实现上位机 Delphi 界面对于 单片机的控制和速度返回。步进电机的控制主要靠主程序中一下步骤实现: (1)单独开辟区域,存放数码管的段码和位码信息以及返回给上位机的数 字信息。 (2)将单片机定时器 0 和串口初始化,为下面步进电机转动和与上位机串 行通信做好准备。 (3)不断循环利用 KeyScan 键盘扫描函数判断是有有按键按下以及判断按 键键值,根据键值改变步进电机的运动状态标志变量 StopFlag、方向标志变量 RunFlag、速度等级 Speed。同时,根据改变后的方向标志变量 RunFlag 和速度 等级 Speed 延时经过运算,将其相应的共阴极段选码赋给数组 TempData 中的前 三位,已根据键盘输入刷新数码管,使数码管常亮。 4.1.2 Display 数码管显示模块数码管显示模块 该模块为数码管显示函数,用于动态扫描数码管。主要将主函数模块中保 存下的电机的转向和转速档位的信息送到数码管上显示。输入参数 FirstBit 表示需要显示的第一位,如赋值 2 表示从第三个数码管开始显示如输入 0 表示 从第一个显示。Num 表示需要显示的位数,如需要显示 99 两位数值则该值输入 2。为防止有交替重影,先清空数据,在根据输入参数依次锁存各个数码管的位 码和段码,从而实现数码管的动态扫描显示。 -13- 4.1.3 KEYSCAN 键盘扫描模块键盘扫描模块 键盘扫描模块主要用来扫描小键盘,确定在操作过程中那个按键被按下, 从而将设定信息反馈给系统,实现相关控制和数码管的显示。 在 KEYSCAN 子程序中,扫描主要包括以下几个步骤: (1) 判断是否有按键按下,若无键按下则反复检测 (2) 若有键按下,利用软件延时要消除键抖动,确认有键按下 (3) 根据按下的按键设置相应的键值。 通过单片机的 P2 口输入 K1K7 的信息。首先判断 P2 口数值,无任何键按 下则读入的全是“1” ,若有键按下则读入的对应位是“0” ,其余全是“1” 。调 用延时函数,如果右键按下,延时后,键值即 P2 口数据不改变,为“0”的位 为被按下的键,通过对比此时 P2 口的值,返回当前按下的数字键的键值。如果 没有键被按下,则返回键值为“0” 。 4.1.4 定时器定时器 0 的初始化模块和中断服务子程序模块的初始化模块和中断服务子程序模块 步进电机的运转由定时器 T0 来控制。有定时器来改变步进电机的各相通断 电时间。定时器 T0 的初始化模块定义了定时器使用模式 1,开中断,并令定时 器中断为高优先级。定时器中断服务子程序中首先定义定时器 0 约 1ms 中断一 次。首先根据 Speed 来控制励磁换相时间间隔,再根据 RunFlag 来控制励磁顺 序是正转还是反转。 4.1.5 串口的初始化模块和中断服务子程序模块串口的初始化模块和中断服务子程序模块 由于本次设计要实现上位机 Delphi 界面与单片机的串口通信,从而实现上 位机对于单片机的速度控制,且单片可将目前步进电机运行状态反馈给上位机 显示,因此要利用串口中断来实现上述串行通信。在串口初试化中通过设置 TMOD 和 SCON 将串行口工作方式设置为方式 1,将定时器 T1 设为方式 2,定时 器初值为 FDH,即波特率为 9600kbps,然后开中断。在串口中断服务子程序中, 首先判断是否为接收中断,如为接收中端,将标志位清零,然后将接收值赋给 Speed。接收后,单片机要将目前步进电机的运行状态返回给上位机,要利用发 送中断,根据 Speed 和 RunFlag 改变发送字符串的内容后将字符串发送给上位 机。 4.1.6 DelayMs 软件延时模块软件延时模块 程序中存在两个延时时间不同的延时模块,根据不同情况调用不同模块, 可以实现较好的效果。 -14- 4.2 Delphi 程序分析程序分析 本次设计中的一个难点就是上位机中界面的设计和上位机和单片机中间的 串行通信。 本此设计选用界面设计软件是 Borland 公司推出的快速应用开发工具 Delphi。它具有功能强大、易于学习和使用、编程效率高以及易于调试等特点。 它将可视化应用程序开发环境 IDE、面向对象程序设计语言 Object Pascal、快 速编译器和数据库编程工具完美地结合在一起,使用它可以更直观、更快捷地 开发出高质量的应用程序,具有丰富的组件集、强大的代码自动生成功能和丰 富的数据库管理工具等。使用它的集成开发环境,编程人员可以更快地建立应 用程序。 4.2.1 系统所用组件系统所用组件 本项目设计所用到的 Delphi 组件有:一个 BtnSend、三个 Button、一个 CheckBox、一个 CmbBaud、一个 CmbByteSize、一个 CmbParity、一个 CmbPort、一个 CmbStopBit、两个 Image、十二个 Label、两个 Memo、一个串行 通讯组件 SPComm 和一个 XPMnaifest 组件等。界面如图 4.1 所示。 -15- 图图 4.14.1 上位机上位机 DelphiDelphi 界面界面 目前,利用 Delphi 实现串口通信的常用的方法有 3 种:一是利用控件, 如 MSCOMM 控件和 SPCOMM 控件;二是使用 API 函数;三是调用其他串口通信 程序。其中利用 API 编写串口通信程序较为复杂,需要掌握大量的通信知识。 相比较而言,利用 SPCOMM 控件则相对较简单,并且该控件具有丰富的与串口 通信密切相关的属性及事件,提供了对串口的各种操作,而且还支持多线程。 所以此项目所用到的控件是 SPCOMM。SPCOMM 组件需要从网上自行下载。 1.SPCOMM 组件 (1)首先 SPCOMM 的安装 在 Delphi 中打开 SPCOMM 组件选择下拉菜单 Component 中的 Install 1 Component 选项,弹出如图 4.2 所示: -16- 图图 4.24.2 SPCOMMSPCOMM 组件的安装组件的安装 在 Library path 处填写 SPCOMM 控件所在的路径,其他各项可用默认值, 点击 OK 按钮。如图 4.3 所示: 图图 4.34.3 SPCOMMSPCOMM 组件属性设置组件属性设置 安装后,在 System 控件面板中将出现一个红色控件 COM。现在就可 2 以像 Delphi 自带控件一样使用 COM 控件了。 (2)其次 SPCOMM 的属性、方法和事件 属性 1 CommName:表示 COM1、 COM2 等串口的名字; BaudRate:根据实际需要设定的波特率,在串口打开后也可更改此值,实 际波特率随之更改; -17- ParityCheck:表示是否需要奇偶校验; ByteSize:根据实际情况设定的字节长度; Parity:奇偶校验位; StopBits:停止位; SendDataEmpty:这是一个布尔型属性,为 true 时表示发送缓存为空, 或者发送队列里没有信息;为 false 时表示发送缓存不为空,或者发送队列里 有信息。 方法 2 Startcomm 方法用于打开串口,当打开失败时通常会报错。错误主要有 7 种:串口已经打开;打开串口错误;文件句柄不是通信句柄;不能 够安装通信缓存;不能产生事件;不能产生读进程;不能产生写进程; StopComm 方法用于关闭串口,没有返回值; WriteCommData(pDataToWrite: PChar;dwSizeofDataToWrite:Word )方 法是个带有布尔型返回值的函数,用于将一个字符串发送到写进程,发送成功 返回 true,发送失败返回 false。执行此函数将立即得到返回值,发送操作随 后执行。该函数有两个参数,其中 pDataToWrite 是要发送字符串, dwSizeofDataToWrite 是发送字符串的长度。 事件 3 OnReceiveData :procedure (Sender: TObject;Buffer: Pointer;BufferLength: Word) of object 当有数据输入缓存时将触发该事件, 在这里可以对从串口收到的数据进行处理。 Buffer 中是收到的数据, BufferLength 是收到的数据长度。 OnReceiveError : procedure(Sender: TObject; EventMask : DWORD) 当接收数据出现错误时将触发该事件。 2.实现步骤 (1)制作窗体 启动 Delphi7.0,创建一个新的应用程序界面,在新窗体 Form 上放置上述 的组件。 (2)设置各个组件的属性 根据所要实现的功能设置所用的组件的属性如下: BtnSend 组件:该组件用来设置数据,当数据设置完成后点击即可将数据 发送给单片机。 Button 组件:这个组件是用来做各种开关的,有打开串口、清楚发送接受 速度数据。在打开串口(TButton)组件中的 Enabled 属性中设置成 true、其 -18- 它的 Enabled 属性中设置成 false,所起的作用是打开应用程序时默认的值有 打开串口开关可以操作其它的都不能操作。当打开以后,打开串口开关变成不 可操作的其他的开关可操作。 CheckBox 组件:用于选择发送十六进制数据。 CmbBaud 组件:该组件用来选择串口波特率,在组件的 Items 属性中设置 出 110、300、600、1200、2400、9600、14000 和 19200 八个选项供用户选择。 CmbByteSize 组件:该组件用来选择数据位,在组件的 Items 属性中设置 出 5、6、7 和 8 四个选项供用户选择。 CmbParity 组件:该组件用来选择校验位,在组件的 Items 属性中设置出 Even、Mark、None、Odd 和 Space 五个选项供用户选择。 CmbPort 组件:该组件用来选择端口号,在组件的 Items 属性中设置出 COM1、COM2、COM3、COM4 和 COM5 五个选项供用户选择。 CmbStopBit 组件:该组件用来选择停止位,在组件的 Items 属性中设置出 1、1.5、2 三个选项供用户选择。 Image 组件:该组件用于指示串口的打开和关闭状态。 Label 组件:这些组件的作用是用来输入提示文字。 Memo 组件:该组件是用来反映发送和接收到的数据。 4.2.2 应用软件的具体操作步骤应用软件的具体操作步骤 把硬件电路连接好,使用 USB 数据线与计算机相连接通上电源做好一切准 备。 打开应用软件,在窗口中选择通讯端口,设置好串行通信的波特率、数据 位、停止位和校验位后,点击打开串口按钮。当选择端口号错误时会提示错误 信息,如图 4.4 所示。 图图 4.44.4 端口错误提示端口错误提示 打开串口成功后,串口显示灯会变红。用户可以根据需要输入十进制或者 十六进制的速度等级,该信号就可通过串口发送给单片机,步进电机就可以根 据计算机发出的指令来工作。在应用程序的界面上就会返回当前步进电机的速 度等级和正反转信息。正常运作的界面如图 4.5 和图 4.6 所示。 -19- 图图 4.54.5 正转时正常运行界面正转时正常运行界面 图图 4.64.6 反转时正常运行界面反转时正常运行界面 -20- 当设定速度错误时,也会提示错误信息,如图 4.7 所示。 图图 4.74.7 速度设定错误提示速度设定错误提示 当按下清除信息键,对应信息将被清除。 五、设计中遇到的问题及解决方法五、设计中遇到的问题及解决方法 1.数码管看不到示数或数码管看上去全亮。 开始的时候,数码管总是很暗,可以隐约看到有数字,但是亮度过于微弱, 无法辨认。这主要是是调用数码管显示子函数的频率不够高,且子程序里的循 环扫描中延时过短,导致数字显示不满明显。 解决方法:提高函数频率,并增加子函数循环扫描时的延时时间。还有, 在子函数中每次显示之前都将数据清零,再赋值,防止出现重影,可使数码管 有个较好的显示效果。 2.串口通信时返回上位机的信息是乱码。 在串口通信调试过程中,可以实现由上位机发出命令控制单片机,从而控 制步进电机的运行状态。但是从单片机返回给上位机的信息是乱码。 解决方法:通过上网查询,出现乱码可能是波特率、数据位、停止位等协 议不同导致的。首先应该将上位机接收协议和单片机中设定的协议一致。调试 后,仍然出现乱码。除了上述情况会导致出现乱码,硬件线路也可能会导致乱 码的出现。最终换了一块 STC89C52RC 单片机,返回的信息正确,由此确定出现 乱码的原因是硬件线路问题。 3. 程序调试应遵循的步骤 查看各端口地址是否正确; 根据程序运行中的出现的现象分析出程序出错的位置; 在 TDDEBUG 中进行单步或设置断点进行调试; 使程序有少到多有简单到复杂逐一验证其的正确性,以排除错误。 -21- 六、程序清单和程序注释六、程序清单和程序注释 详见附录 七、收获与体会七、收获与体会 两个星期的自动化工程训练终于结束了。虽然时间看上去很长,但是我还 需要为保研做准备。当验收结束时,可以说得是苦尽甘来。在整个设计过程中, 回想起来,从刚开始的完全迷惑到最后的豁然开朗,真是经历了很多,过程虽 然艰辛,但是却让我们学到很多的东西,不仅巩固了课上所学过的理论知识, 而且学到了很多在书本上所没有学到过的知识。在上课的时候,老师经常强调 在写一个程序的时候,磨刀不误砍柴工,一定要事先把程序原理方框图画出来, 在这次课程设计,我深切体会到了这种编程方法的重要性。课程设计中设计的 问题都需要很多代码相互协作才能完成,画出程序方框图是很有必要的。通过 程序方框图,在做设计的过程中,我们每一步要做什么,每一步要完成什么任 务都有一个很清楚的思路,而且在程序测试的过程中也有利于查错。 其次,对于编程工具的使用还不太熟悉,虽然上机实验课用到过,但是始 终没有掌握得很牢靠。在课程设计时,通过大量调试,我对于如何排错、查错, 如何查看每一步的运行结果和每个寄存器的内容有了很明确的了解,从而帮助 我在调试过程中确保程序的正确性。这次的步进电机控制,虽然原理上很简单, 但是如果对实验箱中的芯片不熟悉不熟悉的话,还是需要下一番苦功的。因此, 在开始自动化工程训练后,我通过翻阅大量资料,对于设计中所涉及的芯片有 了初步的了解。接着在实验,通过设计,将实际与自己所学的联系起来,最终 做到对芯片的功能要熟练掌握。 除了硬件部分,此次设计还要设计人机交互界面。由于以前数据库这 门课上使用 Delphi 做过课程设计,因此我们再次选用了 Delphi 来设计界面。时 隔两年,再次使用 Delphi,我发现还是有许多东西已经忘记了。于是一边看以 前做的设计,一边结合借来的资料,开始了对 Delphi 的再次研究。幸好有以前 的基础,还算比较顺利。这次设计的难题在于单片机和 Delphi 设计界面实现串 口通信。而 Delphi 中并没相关控件,通过上网查询,了解了串口通信的定义以 及相关协议的设定,从网上下载安装了 SPCOMM 控件,最终编程实现了上位机 和单片机的串口通信。 通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知 识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结 论,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问 题,可以说得是困难重重,难免会遇到过各种各样的问题。如果自己单独钻研, -22- 很难发现其中的错误,这时,就应该和老师、同学和有经验的学长交流,发现 错误,解决错误。在交流和检查错误的过程中发现自己的不足之处,发现自己 对以前所学过的知识理解得不够深刻,掌握得不够牢固,同时对知识的理解和 接受能力还不是太强。 这次课程设计任务终于顺利完成了,在设计中遇到了很多问题,最后在自 己的努力
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论