单片机控制步进电机(毕设) - 图文

更新时间:2024-02-27 11:55:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

安徽工业大学 毕业设计(论文)报告纸

┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ 装 ┊ ┊ ┊ ┊ ┊ 订 ┊ ┊ ┊ ┊ ┊ 线 ┊ ┊ ┊ ┊ ┊

安徽工业大学

毕业设计(论文)任务书

课题名称 基于STC89C52单片机控制步进电机

学 院 XXXXXXX学院

专业班级 XXXXXXXXXXXXXXX班

姓 名 XXXX

学 号 XXXXXXXXX

毕业设计(论文)的主要内容:

完成基于STC89C52单片机控制步进电机的研究与设计,控制步进电机的正转、反转、加速、减速,设计包括系统的硬件和软件设计。 基本要求:

(1)根据课题内容,查阅搜索相关文献资料,并翻译不少于5000字的相关英文文献资料。

I

安徽工业大学 毕业设计(论文)报告纸

(2)熟悉并掌握步进电机件的工作原理、性能指标、电气特性、技术特点与应用。

(3)学习单片机的控制技术;熟悉MCS51/MC9S系列单片机的技

┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ 装 ┊ ┊ ┊ ┊ ┊ 订 ┊ ┊ ┊ ┊ ┊ 线 ┊ ┊ ┊ ┊ ┊

术性能;掌握软件设计开发方法;并进行系统硬件设计。

(4)对完成的工作进行总结,按格式撰写毕业设计论文,准时参加答辩。

指导老师签字

摘 要

步进电机是一种进行精确步进运动的机电执行元件,它是机电一体化的关键产品之一,广泛应用于各种自动化控制系统中。而且,随着单片机技术的不断发展以及单片机在日用电子产品中的广泛使用,步进电机的应用也得到了很大的提高。人们可以用它驱动时钟和其他各种采用指针的仪器,如,打印机、绘图仪、磁盘光盘驱动器、自动控制阀、以及机器人等机械装置。

本文主要工作是应用51单片机控制步进电机的系统设计。通过STC89C52单片机、驱动芯片ULN2003、多个独立按键等外围电路以及相应的C语言程序实现控制电机正转、反转、加速、减速等功能,并用液晶显示屏LCD1602显示步进电机当前的工作状态。

关键词:STC89C52;步进电机;自动控制;LCD1602

II

安徽工业大学 毕业设计(论文)报告纸

┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ 装 ┊ ┊ ┊ ┊ ┊ 订 ┊ ┊ ┊ ┊ ┊ 线 ┊ ┊ ┊ ┊ ┊

Abstract

The stepper motor is a precise step motion of the electromechanical actuator,it is one of the key products of mechanical and electrical integration ,and it is widely used in a variety of automation and control systems. With the continuous development of SCM technology, SCM has been widely applied in household electronic products.The applications of step motor have greatly improved. People use it to drive the clock and other instrument with pointer, such as the printers, plotters, disk, CD-ROM drive, a variety of automatic control valve, as well as robots and other mechanical device.

In this paper, a complete design scheme of step motor control system is put forward based on 51-SCM .Through STC89C52 SCM, drive chip ULN2003, some independent keys, other peripheral circuits and the corresponding C programs, we can control the motor to achieve the following functions as forward ,inversion, speed-up, slow-down and etc. The working status of step motor can also be displayed on LCD1602 in time. Key words: STC89C52 , step motor,automatic control,LCD1602

III

安徽工业大学 毕业设计(论文)报告纸

┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ 装 ┊ ┊ ┊ ┊ ┊ 订 ┊ ┊ ┊ ┊ ┊ 线 ┊ ┊ ┊ ┊ ┊

目录

摘 要 .......................................................................................................... II Abstract .......................................................................................................... III 目录 ............................................................................................................... IV 第1章 绪论 .................................................................................................... 1

1.1 课题研究的目的和意义 ................................................................... 1 1.2 国内外研究概 ................................................................................... 1 1.3 论文的主要研究内容 ....................................................................... 2 第2章 单片机与步进电机简介 .................................................................... 3

2.1 单片机简介 ....................................................................................... 3

2.1.1 STC89C52功能简介 .............................................................. 3 2.1.2 引脚功能说明 ........................................................................ 4 2.2 步进电机简介 ................................................................................... 6

2.2.1 步进电机的基本参数 ............................................................ 7 2.2.2 步进电机的工作原理 ............................................................ 9 2.2.3 步进电机的分类与选择 ...................................................... 10 2.3 步进电机驱动系统介绍 ................................................................. 11 第3章 系统整体设计 .................................................................................. 12

3.1 系统概述 ......................................................................................... 12

IV

安徽工业大学 毕业设计(论文)报告纸 3.2 系统整体结构框架 ......................................................................... 12 3.3 硬件电路主要器件选择 ................................................................. 13 3.4 系统原理图 ..................................................................................... 13 3.5 系统实物图 ..................................................................................... 14 第4章 硬件设计 .......................................................................................... 15

4.1 单片机最小系统的设计 ................................................................. 15

4.1.1 复位电路设计 ...................................................................... 16 4.1.2 晶振电路设计 ...................................................................... 16 4.2 驱动电路设计 ................................................................................. 17

4.2.1 ULN2003芯片简介 ............................................................. 17 4.2.2 驱动硬件电路 ..................................................................... 19 4.3 键盘电路的设计 ............................................................................. 19 4.4 蜂鸣器电路的设计 ......................................................................... 20 4.5 显示电路的设计 ............................................................................. 20 第5章 软件设计 .......................................................................................... 24

5.1 软件开发环境 ................................................................................. 24

5.1.1 工程文件的建立 .................................................................. 25 5.1.2 ISP源程序下载工具 ............................................................ 28 5.2软件设计总体流程图 ...................................................................... 30 5.3 换向数列 ......................................................................................... 30 5.4 显示程序 ......................................................................................... 31 5.5 按键扫描程序 ................................................................................. 32 5.6 主程序设计 ..................................................................................... 33 结论 ............................................................................................................... 35 参考文献 ....................................................................................................... 36 致谢 ............................................................................................................... 37 附录 源程序代码 ........................................................................................ 38

V

┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ 装 ┊ ┊ ┊ ┊ ┊ 订 ┊ ┊ ┊ ┊ ┊ 线 ┊ ┊ ┊ ┊ ┊

安徽工业大学 毕业设计(论文)报告纸 ┊ ┊ ┊ ┊

┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ 装 ┊ ┊ ┊ ┊ ┊ 订 ┊ ┊ ┊ ┊ ┊ 线 ┊ ┊ ┊ ┊ ┊

VI

安徽工业大学 毕业设计(论文)报告纸

第1章 绪论

1.1 课题研究的目的和意义

┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ 装 ┊ ┊ ┊ ┊ ┊ 订 ┊ ┊ ┊ ┊ ┊ 线 ┊ ┊ ┊ ┊ ┊

步进电动机是用电脉冲信号进行控制,将电脉冲信号转换成相应的角位移或线位移的微电动机,它最突出的优点是可以在宽广的频率范围内通过改变脉冲频率来实现调速,快速起停、正反转控制及制动等,并且用其组成的开环系统既简单、廉价,又非常可行,因此在打印机等办公自动化设备以及各种控制装置等众多领域有着极其广泛的应用。随着微电子和计算机技术的发展,步进电动机的需求量与日俱增,研制步进电机驱动器及其控制系统具有十分重要的意义。

1.2 国内外研究概

步进电机是国外发明的。中国在文化大革命中已经生产和应用,例如江苏、浙江、北京、南京、四川都生产,而且都在各行业使用,驱动电路所有半导体器件都是完全国产化的,当时是全分立元器件构成的逻辑运算电路,还有电容耦合输入的计数器,触发器,环形分配器。 国外在大功率的工业设备驱动上,目前基本不使用大扭矩步进电动机,因为从驱动电路的成本,效率,噪音,加速度,绝对速度,系统惯量与最大扭矩比来比较,比较不划算,还是用直流电动机,加电动机编码器整体技术和经济指标高。一些少数高级的应用,就用空心转杯电机,交流电机。

国外在小功率的场合,还使用步进电机,例如一些工业器材,工业生产装备,打印机,复印件,速印机,银行自动柜员机。国外用许多现代的手段将步进电机排挤出驱动应用,除了前面提到的旋转编码器,打印机还使用光电编码带或感应编码带配合直流电动机,实现闭环直线位移控制。

国内过去是用大力矩步进电动机实现机床数控,有实力的公司现在也采用交流电动机驱动数控机床,在驱动设备的主要差距,是国外对交流电动机的控制理论与工程分析和应用能力强,先进的控制理论作为软件,写在控制器内部。

总的来说,步进电机是一种简易的开环控制,对运用者的要求低,不适合在大功率的场合使用。

在卫星、雷达等应用场合,中国在文化大革命后期,就生产了力矩电机,就生产了环形力矩电机,在高品质的控制场合,有时还不能使用

1

安徽工业大学 毕业设计(论文)报告纸 步进电机。步进电机的细分控制,在改革开放初期,国内就已经基本掌握,这与交流电动机的矢量控制相比,难度要低得多。

1.3 论文的主要研究内容

┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ 装 ┊ ┊ ┊ ┊ ┊ 订 ┊ ┊ ┊ ┊ ┊ 线 ┊ ┊ ┊ ┊ ┊

本论文所选的步进电机是四相步进电机,采用的方法是利用单片机控制步进电机的驱动。步进电机是一种将电脉冲转化为角位移的执行机构。当步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度(称为“步距角”),它的旋转是以固定的角度一步一步运行的。可以通过控制脉冲个数来控制角位移量,从而达到准确定位的目的;同时可以通过控制脉冲频率来控制电机转动的速度和加速度,从而达到调速的目的。本次毕业设计就是通过改变脉冲频率来调节步进电机的速度的,并且通过LCD显示其转速的级别。另外通过单片机实现它的正反转加减速,步进电机可以作为一种控制用的特种电机,利用其没有积累误差(精度为100%)的特点,广泛应用于各种开环控制。

2

安徽工业大学 毕业设计(论文)报告纸

第2章 单片机与步进电机简介

2.1 单片机简介

┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ 装 ┊ ┊ ┊ ┊ ┊ 订 ┊ ┊ ┊ ┊ ┊ 线 ┊ ┊ ┊ ┊ ┊

随着材料科学、工艺技术、计算机技术的发展与进步,电路系统向着集成度极高的方向发展,单片机在控制系统中的应用越来越普遍。单片机是一种集成在电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计时器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到一块硅片上构成的一个小而完善的计算机系统。单片机控制系统是以单片机(CPU)为核心部件,扩展一些外部接口和设备,组成单片机工业控制机,主要用于工业过程控制。

单片机在目前的发展形势下,表现出几大趋势:可靠性及应用越来越水平高和互联网连接已是一种明显的走向。所集成的部件越来越多;NS(美国国家半导体)公司的单片机已把语音、图象部件也集成到单片机中,也就是说,单片机的意义只是在于单片集成电路,而不在于其功能了;如果从功能上讲它可以讲是万用机。原因是其内部已集成上各种应用电路。功耗越来越低和模拟电路结合越来越多。随着半导体工艺技术的发展及系统设计水平的提高,单片机还会不断产生新的变化和进步,最终人们可能发现:单片机与微机系统之间的距离越来越小,甚至难以辨认。

2.1.1 STC89C52功能简介

STC89C52是一种低电压,高性能CMOS 8位单片机,片内含8k bytes 的可反复擦写的Flash只读程序存储器和256 bytes的随机存取数据存储 器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器和Flash存储单元,STC89C52单片机在电子行业中有着广泛的应用。

3

安徽工业大学 毕业设计(论文)报告纸

2.1.2 引脚功能说明

STC89C52是标准的40脚双列直插式集成电路芯片,引脚排列请参见图2-1:

┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ 装 ┊ ┊ ┊ ┊ 图2-1 AT89C52的引脚图

┊ VCC:电源电压; 订 ┊ GND:地;

┊ P0口:P0口是一组8位漏极开路型双向I/O口,也即地址/数据总┊ 线复用口。作为输出口用时,每位能吸收电流的方式驱动8个TTL逻辑┊ 门电路,对端口写1可作为高阻抗输入端用。

┊ 在访问外部数据存储器或程序存储器时,这组口线分时转换地址(低线 8位)和数据总线复用,在访问期间激活内部上拉电阻。

┊ ┊ 在FLASH编程时,P0口接受指令字节,而在程序效验时,输出指令┊ 字节,效验时,要求外接上拉电阻。

┊ P1口:P1口是一个带有内部上拉电阻的8位双向I/O口,P1的输出┊

缓冲级可驱动 (吸收或输出电流)4个TTL逻辑门电路。对端口写1,通过内部的上拉电阻把端口拉到高电平,此时可作输入口。作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉底时会输出一个电流。

FLASH编程和程序效验期间,P1接收低8位地址。

4

安徽工业大学 毕业设计(论文)报告纸

P2口:P2口是一个带有内部上拉电阻的8位双向I/O口,P2的输出缓冲级可驱动 (吸收或输出电流)4个TTL逻辑们电路。对端口写1,通过内部的上拉电阻把端口拉到高电平,此时可作输入口。作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉底时会输出一个电流。

在访问外部程序存储器或16位地址的外部数据存储器(例如执行MOVX@DPTR指令)时,P2口送出高8位地址数据。在访问8位地址的外部数据存储器(如执行MOVX@RI)时,P2口线上的内容(也即特殊功能寄存器(SFR)区中R2寄存器的内容),在整个访问期间不改变。

FLASH编程或效验时,P2亦接收高位地址和其它控制信号。

P3口:P3口是一个带有内部上拉电阻的8位双向I/O口,P3的输出缓冲级可驱动 (吸收或输出电流)4个TTL逻辑们电路。对端口写1,通过内部的上拉电阻把端口拉到高电平,此时可作输入口。作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉底时会输出一个电流。

P3口除了作为一般的I/O口线外,更重要的用途是他的第二个功能,如下表所示:

表1 P3口AT89C2051特殊功能 端口引脚 P3.0 P3.1 P3.2 P3.3 P3.4 P3.5 P3.6 P3.7

P3口还接收一些用于FLASH闪速存储器编程和程序效验的控制信号。

RST:复位输入。其引脚一旦变成两个机器周期以上的高电平,所有的I/O口都将复位到1状态,当振荡器正在工作时,持续两个机器周期以上高电平便可完成复位,每个机器周期为12个振荡时钟周期。

EA/VPP:外部访问允许,欲使CPU仅访问外部程序存储器(0000H—FFFFH),EA端必须保持低电平接地,需注意的是:如果加密位LB1被编程,复位是内部会锁存EA端状态。

5

┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ 装 ┊ ┊ ┊ ┊ ┊ 订 ┊ ┊ ┊ ┊ ┊ 线 ┊ ┊ ┊ ┊ ┊

功能特性 RXD(串行口输入) TXD(并行口输入) INT0(外部中断0) INT1(外部中断1) T0(定时计数外部输入0) T1(定时计数外部输入0) WR(外部数据存储器写选通) RD(外部数据存储器读选通) 安徽工业大学 毕业设计(论文)报告纸

如EA端为高电平(接VCC端),CPU则执行内部程序存储器中的指令。

FLASH存储器编程时,该引脚加上+12V的编程允许电源VPP,当然这必须是该器件是使用12V编程电压VPP。

XTAL1:振荡器反相放大器的及内部时钟发生器的输入端。 XTAL2:振荡器反相放大器输出端

┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ 装 ┊ ┊ ┊ ┊ ┊ 订 ┊ ┊ ┊ ┊ ┊ 线 ┊ ┊ ┊ ┊ ┊

2.2 步进电机简介

步进电机是将电脉冲信号转变为角位移或线位移的开环控制元件。在非超载的情况下,电机的转速、停止的位置只取决于脉冲信号的频率和脉冲数,而不受负载变化的影响,即给电机加一个脉冲信号,电机则转过一个步距角。这一线性关系的存在,加上步进电机只有周期性的误差而无累积误差等特点。使得在速度、位置等控制领域用步进电机来控制变的非常的简单。

正常情况下,步进电机转过的总角度和输入的脉冲数成正比;连续输入一定频率的脉冲时,电动机的转速与输入脉冲的频率保持严格的对应关系,不受电压波动和负载变化的影响。由于步进电动机能直接接收数字量的输入,所以特别适合于微机控制。

本次毕业设计采用的是步距角为1.8度的永磁式步进电机。

图2-2 步进电机实体图

6

安徽工业大学 毕业设计(论文)报告纸

2.2.1 步进电机的基本参数

(1)步进电机的静态指标术语

① 相数:产生不同对N、S磁场的激磁线圈对数。常用m表示。 ②拍数:完成一个磁场周期性变化所需脉冲数或导电状态用n表示,或指电机转过一个齿距角所需脉冲数,以四相电机为例,有四相四拍运行方式即AB-BC-CD-DA-AB,四相八拍运行方式即 A-AB-B-BC-C-CD-D-DA-A.

③步距角:对应一个脉冲信号,电机转子转过的角位移用θ表示。θ=360度(转子齿数*运行拍数),以常规二、四相,转子齿为50齿电机为例。四拍运行时步距角为θ=360度/(50*4)=1.8度(俗称整步),八拍运行时步距角为θ=360度/(50*8)=0.9度(俗称半步)。

④定位转矩:电机在不通电状态下,电机转子自身的锁定力矩(由磁场齿形的谐波以及机械误差造成的)

⑤静转矩:电机在额定静态电作用下,电机不作旋转运动时,电机转轴的锁定力矩。此力矩是衡量电机体积(几何尺寸)的标准,与驱动电压及驱动电源等无关。

虽然静转矩与电磁激磁安匝数成正比,与定齿转子间的气隙有关,但过份采用减小气隙,增加激磁安匝来提高静力矩是不可取的,这样会造成电机的发热及机械噪音。

(2)步进电机动态指标及术语: ① 步距角精度:

步进电机每转过一个步距角的实际值与理论值的误差。用百分比表示:误差/步距角*100%。不同运行拍数其值不同,四拍运行时应在5%之内,八拍运行时应在15%以内。

② 失步:

电机运转时运转的步数,不等于理论上的步数。称之为失步 ③ 失调角:

转子齿轴线偏移定子齿轴线的角度,电机运转必存在失调角,由失调角产生的误差,采用细分驱动是不能解决的。

④ 最大空载起动频率:

电机在某种驱动形式、电压及额定电流下,在不加负载的情况下,能够直接起动的最大频率。

⑤ 最大空载的运行频率:

电机在某种驱动形式,电压及额定电流下,电机不带负载的最高转速频率。

⑥ 运行矩频特性:

电机在某种测试条件下测得运行中输出力矩与频率关系的曲线称为

7

┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ 装 ┊ ┊ ┊ ┊ ┊ 订 ┊ ┊ ┊ ┊ ┊ 线 ┊ ┊ ┊ ┊ ┊

安徽工业大学 毕业设计(论文)报告纸 运行矩频特性,这是电机诸多动态曲线中最重要的,也是电机选择的根本依据。电机一旦选定,电机的静力矩确定,而动态力矩却不然,电机的动态力矩取决于电机运行时的平均电流(而非静态电流),平均电流越大,电机输出力矩越大,即电机的频率特性越硬。 要使平均电流大,尽可能提高驱动电压,使采用小电感大电流的电机。

⑦ 电机的共振点:

步进电机均有固定的共振区域,二、四相感应子式步进电机的共振区一般在180-250pps之间(步距角1.8度)或在400pps左右(步距角为0.9度),电机驱动电压越高,电机电流越大,负载越轻,电机体积越小,则共振区向上偏移,反之亦然,为使电机输出电矩大,不失步和整个系统的噪音降低,一般工作点均应偏移共振区较多。

⑧ 电机正反转控制:

当电机绕组通电时序为A-AB-B-BC-C-CD-D-DA时为正转,通电时序为DA-D-CD-C-BC-B-AB-A时为反转。 (3)步进电机的特征如下:

① 一般步进电机的精度为步进角的3%-5%,且不积累。

② 步进电机外表允许的最高温度。

步进电机温度过高首先会使电机的磁性材料退磁,从而导致力矩下降乃至于失步,因此电机外表允许的最高温度应取决于不同电机磁性材料的退磁点;一般来讲,磁性材料的退磁点都在摄氏130度以上,有的甚至高达摄氏200度以上,所以步进电机外表温度在摄氏80-90度完全正常。

③ 步进电机的力矩会随转速的升高而下降。

当步进电机转动时,电机各相绕组的电感将形成一个反向电动势;频率越高,反向电动势越大。在它的作用下,电机随频率(或速度)的增大而相电流减少,从而导致力矩下降。

④步进电机低速时可以正常转动,但若高于一定速度就无法启动,并伴有啸叫声。

步进电机有一个技术参数:空载启动频率,即步进电机在空载情况下能够正常启动的脉冲频率,如果脉冲频率高于该值,电机不能正常启动,可能发生丢步或堵转。在有负载的情况下,启动频率应更低。如果要使电机达到高速转动,脉冲频率应该有加速过程,即启动频率较低,然后按一定加速度升到所希望的高频(电机转速从低速升到高速)。

步进电动机以其显著的特点,在数字化制造时代发挥着重大用途。伴随着不同数字化技术的发展以及步进电机本身技术的提高,步进电机将会在更多的领域得到应用。

┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ 装 ┊ ┊ ┊ ┊ ┊ 订 ┊ ┊ ┊ ┊ ┊ 线 ┊ ┊ ┊ ┊ ┊

8

安徽工业大学 毕业设计(论文)报告纸

2.2.2 步进电机的工作原理

步进电机的工作就是步进转动,其功用是将脉冲电信号变换为相应的角位移或是直线位移,就是给一个脉冲信号,电动机转动一个角度或是前进一步。步进电机的角位移量与脉冲数成正比,它的转速与脉冲频率(f)成正比,在非超载的情况下,电机的转速、停止的位置只取决于脉冲信号的频率和脉冲数,而不受负载变化的影响,即给电机加一个脉冲信号,电机则转过一个步距角。

如下所示的步进电机为一四相步进电机,采用单极性直流电源供电。只要对步进电机的各相绕组按合适的时序通电,就能使步进电机步进转动。图2-3是该四相反应式步进电机工作原理示意图。

┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ 装 ┊ ┊ ┊ ┊ ┊ 订 ┊ ┊ ┊ ┊ ┊ 线 ┊ ┊ ┊ ┊ ┊

图2-3 四相步进电机步进示意图

开始时,开关SB接通电源,SA、SC、SD断开,B相磁极和转子0、3号齿对齐,同时,转子的1、4号齿就和C、D相绕组磁极产生错齿,2、5号齿就和D、A相绕组磁极产生错齿。

当开关SC接通电源,SB、SA、SD断开时,由于C相绕组的磁力线和1、4号齿之间磁力线的作用,使转子转动,1、4号齿和C相绕组的磁极对齐。而0、3号齿和A、B相绕组产生错齿,2、5号齿就和A、D相绕组磁极产生错齿。依次类推,A、B、C、D

四相绕组轮流供电,则转子会沿着A、B、C、D方向转动。

单四拍、双四拍与八拍工作方式的电源通电时序与波形分别如图2-4所示:

9

安徽工业大学 毕业设计(论文)报告纸

┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ 装 ┊ ┊ ┊ ┊ ┊ 订 ┊ ┊ ┊ ┊ ┊ 线 ┊ ┊ ┊ ┊ ┊

图2-4 步进电机工作时序波形图

2.2.3 步进电机的分类与选择

现在比较常用的步进电机包括反应式步进电机(VR)、永磁式步进电机(PM)、混合式步进电机(HB)和单相式步进电机等。

反应式步进电动机采用高导磁材料构成齿状转子和定子,其结构简单,生产成本低,步距角可以做的相当小,一般为三相,可实现大转矩输出,步进角一般为1.5度,但噪声和振动都很大。反应式步进电机的转子磁路由软磁材料制成,定子上有多相励磁绕组,利用磁导的变化产生转矩,但动态性能相对较差。

永磁式步进电机转子采用多磁极的圆筒形的永磁铁,在其外侧配置齿状定子。用转子和定子之间的吸引和排斥力产生转动,它的出力大,动态性能好,但步距角一般比较大。一般为两相,转矩和体积较小,步进角一般为7.5度 或15度。

混合式步进电机是指混合了永磁式和反应式的优点。它又分为两相和五相:两相步进角一般为1.8度而五相步进角一般为

0.72度。这种步进电机的应用最为广泛,它是PM和VR的复合产品,其转子采用齿状的稀土永磁材料,定子则为齿状的突起结构。此类电机综合了反应式和永磁式两者的优点,步距角小,出力大,动态性能好,是性能较好的一类步进电动机,在计算机相关的设备中多用此类电机。

步进电机有步距角(涉及到相数)、静转矩、电流三大要素组成。一旦三大要素确定,步进电机的型号便确定下来了。

1、步距角的选择

电机的步距角取决于负载精度的要求,将负载的最小分辨率(当量)换算到电机轴上,每个当量电机应走多少角度(包括减速)。电机的步距角应等于或小于此角度。目前市场上步进电机的步距角一般有0.36度/0.72度(五相电机)、0.9度/1.8度(二、四相电机)、1.5度/3度 (三相电机)等。

2、静力矩的选择

10

安徽工业大学 毕业设计(论文)报告纸

步进电机的动态力矩一下子很难确定,我们往往先确定电机的静力矩。静力矩选择的依据是电机工作的负载,而负载可分为惯性负载和摩擦负载二种。单一的惯性负载和单一的摩擦负载是不存在的。直接起动时(一般由低速)时二种负载均要考虑,加速起动主要考虑惯性负载,恒速运行进只要考虑摩擦负载。一般情况下,静力矩应为摩擦负载的2-3倍内好,静力矩一旦选定,电机的机座及长度便能确定下来(几何尺寸)。

3、电流的选择

静力矩一样的电机,由于电流参数不同,其运行特性差别很大,可依据矩频特性曲线图,判断电机电流(参考驱动电源、及驱动电压)。

4、力矩与功率换算 步进电机一般在较大范围内调速使用、其功率是变化的,一般只用力矩来衡量,力矩与功率换算如公式(2-1):

P= Ω·M Ω=2π·n/60 P=2πnM/60 (2-1)

其中P为功率单位为瓦,Ω为每秒角速度,单位为弧度,n为每分钟转速,M为力矩单位为牛顿·米,半步工作如公式2-2

P=2πfM/400 (2-2)

其中f为每秒脉冲数(简称PPS)

┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ 装 ┊ ┊ ┊ ┊ ┊ 订 ┊ ┊ ┊ ┊ ┊ 线 ┊ ┊ ┊ ┊ ┊

2.3 步进电机驱动系统介绍

步进电机不能直接接到交直流电源上工作,而必须使用专用设备——步进电机驱动器。步进电机驱动系统的性能,除与电机本身的性能有关外,也在很大程度上取决于驱动器的优劣。典型的步进电机驱动系统是由步进电机控制器、步进电机驱动器和步进电机本体三部分组成。步进电机控制器发出步进脉冲和方向信号,每发一个脉冲,步进电机驱动器驱动步进电机转子旋转一个步距角,即步进一步。步进电机转速的高低、升速或降速、启动或停止都完全取决于脉冲的有无或频率的高低。控制器的方向信号决定步进电机的顺时针或逆时针旋转。通常,步进电机驱动器由逻辑控制电路、功率驱动电路、保护电路和电源组成。步进电机驱动器一旦接收到来自控制器的方向信号和步进脉冲,控制电路就按预先设定的电机通电方式产生步进电机各相励磁绕组导通或截止信号。控制电路输出的信号功率很低,不能提供步进电机所需的输出功率,必须进行功率放大,这就是步进电机驱动器的功率驱动部分。功率驱动电路向步进电机控制绕组输入电流,使其励磁形成空间旋转磁场,驱动转子运动。保护电路在出现短路、过载、过热等故障时迅速停止驱动器和电机的运行。

11

安徽工业大学 毕业设计(论文)报告纸

第3章 系统整体设计

3.1 系统概述

┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ 装 ┊ ┊ ┊ ┊ ┊ 订 ┊ ┊ ┊ ┊ ┊ 线 ┊ ┊ ┊ ┊ ┊

本控制系统主要作用是通过单片机来控制步进电机旋转,想要实现这一功能必须要对单片机软件部分和硬件设计有很多的了解,软件部分主要是通过C语言编译而硬件部分是由单片机、ULN2003、键盘、LCD等。完成硬件和软件的设计就能够实现并控制步进电机旋转。

3.2 系统整体结构框架

系统的整体结构如图3-1所示,本系统总体设计思路是:由键盘发出电平信号,单片机接受并转换成控制信号发送给ULN2003。ULN2003主要作用连接步进电机从而驱动步进电机,LCD显示当前步进电机的工作状态,而蜂鸣器的作用就是产生按键音,按键的作用是控制整个系统的。

复位电路驱动电路STEP MOTOR晶振电路STC89C52LCD1602 显示电路键盘电路蜂鸣器电路

图3-1 系统的整体结构图

12

安徽工业大学 毕业设计(论文)报告纸

3.3 硬件电路主要器件选择

根据系统整体结构的设计,可以确定系统所需的元器件,由于本次设计最小系统板采用生产实习所用的开发板,只需焊接部分外围电路即可。所需元器件清单如表3-1所示。

表3-1 元器件清单 元器件名称 型号 数量 步进电机 M35SP-7T 1个 单片机最小系统板 1块 液晶显示屏 JGD1602A 1块 驱动芯片 ULN2003 1块 蜂鸣器 1个 三极管 S8050 1个 电阻 1K 1个,10K 4个 按键 四角轻触开关 4个 排针 单排 若干 杜邦线 若干 多孔板 1块

┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ 装 ┊ ┊ ┊ ┊ ┊ 订 ┊ ┊ ┊ ┊ ┊ 线 ┊ ┊ ┊ ┊ ┊

3.4 系统原理图

根据系统所要实现的功能,已经主要元器件的选择,对硬件电路的进行设计,具体电路分析见第4章。原理图的制作是在软件protel99se的环境下完成的。最小系统开发板和外围电路原理图分别如图3-2,3-3所示。

图3-2 最小系统开发板原理图

13

安徽工业大学 毕业设计(论文)报告纸

┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ 装 ┊ ┊ ┊ ┊ ┊ 订 ┊ ┊ ┊ ┊ ┊ 线 ┊ ┊ ┊ ┊ ┊

图3-3 外围电路原理图

3.5 系统实物图

由于实验条件和成本的考虑,本次设计没有做PCB板,而是采用多孔板焊接的方式完成硬件焊接。具体实物图如图3-3所示。

图3-3 硬件实物图

14

安徽工业大学 毕业设计(论文)报告纸

第4章 硬件设计

本系统的硬件电路可分为单片机系统电路和外围电路。单片机的系统电路也就是单片机的最小系统,首先就要了解单片机的工作原理设计单片机最小系统。外围电路的作用就是控制显示步进电机的旋转转向等功能。以下就是对电路的主要部分进行介绍。

┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ 装 ┊ ┊ ┊ ┊ ┊ 订 ┊ ┊ ┊ ┊ ┊ 线 ┊ ┊ ┊ ┊ ┊

4.1 单片机最小系统的设计

单片机最小系统也就是最小应用系统,是指最少的元件组成单片机可以工作的系统。通常最小系统包括单片机、晶振电路和复位电路。具体的电路如图4-1所示。

图4-1 单片机最小系统

15

安徽工业大学 毕业设计(论文)报告纸

4.1.1 复位电路设计

为确保单片机稳定可靠工作,复位电路是必不可少的一部分。单片机在启动时都需要复位,以使CPU及系统各部件处于确定的初始状态,并从初态开始工作。单片机的复位信号是从RST引脚输入到芯片内的施密特触发器中的。当系统处于正常工作状态时,且振荡器稳定后,如果RST引脚上有一个高电平并维持2个机器周期(24个振荡周期)以上,则CPU就可以响应并将系统复位。单片机系统的复位方式有:手动按钮复位和上电复位。本次设计采用的手动按钮复位。这个复位电路的原理就是利用RC电路的充电时间,使得RST端能够保持在高电平一段时间。一般取经验值R=10KΩ,C=10uF。RST在高电平复位,低电平时正常工作10μF电容和10K电阻组成一个RC延时电路,为单片机提供上电复位,加入10μF电容目的是不会让两边电压发生突变。电路图如图4-2所示。

┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ 装 ┊ ┊ ┊ ┊ ┊ 订 ┊ ┊ ┊ ┊ ┊ 线 ┊ ┊ ┊ ┊ ┊

图4-2 复位电路

4.1.2 晶振电路设计

在最小系统中,采用的是最常用的内部时钟方式,一般情况下,单片机选用的是12MHz晶振(在此频率上,T1可以很容易的产生9600的波特率供串口使用)。再由两只瓷片电容构成并联谐振电路,接在放大器的反馈回路中。事实上对外接电容并没有严格的要求,典型值选用20PF-30PF的电容。本电路中使用2个20PF的电容,晶振选择为12MHZ,该电路

16

安徽工业大学 毕业设计(论文)报告纸 的主要作用是为单片机提供工作时钟。电路图如图4-3所示。

┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ 装 ┊ ┊ ┊ ┊ ┊ 订 ┊ ┊ ┊ ┊ ┊ 线 ┊ ┊ ┊ ┊ ┊

图4-3 晶振电路

4.2 驱动电路设计

由于本次设计所选用的STC89C52单片机的IO口工作输出电流较小,一般4-7mA,而选用的步进电机的驱动电流需要0.3A,IO口的输出电流无法满足,这个时候我们可以通过三极管放大电路来放大电流从而驱动步进电机。随着科技发展,集成芯片的运用越来越广泛,驱动电路集成化成为一种趋势,本次设计也不例外。本次设计采用的就是集成驱动芯片ULN2003。它的输出电流达到0.5A,符合驱动步进电机的要求。

4.2.1 ULN2003芯片简介

ULN2003是高耐压、大电流复合晶体管阵列,由七个硅NPN复合晶体管组成,内部方框图如图4-4所示。它的的每一对达林顿都串联一个2.7K的基极电阻,在5V的工作电压下它能与TTL和CMOS电路直接相连,可以直接处理原先需要标准逻辑缓冲器来处理的数据。ULN2003工作电压高,工作电流大,灌电流可达500mA,并且能够在关态时承受50V 的电压,输出还 可以在高负载电流并行运行。

17

安徽工业大学 毕业设计(论文)报告纸

┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ 装 ┊ ┊ ┊ ┊ ┊ 订 ┊ ┊ ┊ ┊ ┊ 线 ┊ ┊ ┊ ┊ ┊

图4-4 ULN2003 内部方框图

ULN2003的芯片引脚为:

引脚1:CPU脉冲输入端,端口对应一个信号输出端。 引脚2:CPU脉冲输入端。 引脚3:CPU脉冲输入端。 引脚4:CPU脉冲输入端。 引脚5:CPU脉冲输入端。 引脚6:CPU脉冲输入端。 引脚7:CPU脉冲输入端。

引脚8:接地。

引脚9:该脚是内部7个续流二极管负极的公共端,各二极管的正极分别接各达林顿管的集电极。用于感性负载时,该脚接负载电源正极,实现续流作用。如果该脚接地,实际上就是达林顿管的集电极对地接通。

引脚10:脉冲信号输出端,对应7脚信号输入端。

引脚11:脉冲信号输出端,对应6脚信号输入端。 引脚12:脉冲信号输出端,对应5脚信号输入端。 引脚13:脉冲信号输出端,对应4脚信号输入端。 引脚14:脉冲信号输出端,对应3脚信号输入端。

引脚15:脉冲信号输出端,对应2脚信号输入端。 引脚16:脉冲信号输出端,对应1脚信号输入端。

18

安徽工业大学 毕业设计(论文)报告纸

4.2.2 驱动硬件电路

目前,已有多种步进电机驱动集成电路芯片,它们大多集驱动和保护于一体,作为小功率步进电机的专用驱动芯片,广泛用于小型仪表、计算机外设等领域,使用起来非常方便。本设计采用ULN2003芯片。ULN2003芯片适用于四相步进电机的驱动。驱动电路如图4-5所示。

┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ 装 ┊ ┊ ┊ ┊ ┊ 订 ┊ ┊ ┊ ┊ ┊ 线 ┊ ┊ ┊ ┊ ┊

图4-5 步进电机驱动电路

4.3 键盘电路的设计

键盘是单片机常用的输入设备,是实现人机对话的重要纽带。键盘就是有一组排列规则的按键组成,而按键就是一种开关元件。常见的按键开关可分为触点式开关和无触点式开关。本次设计所用的四角清楚开关就是一种触点式开关。

系统中通过按键来发送控制信号,按键的打开与闭合决定了输入口的高低电平,从而起到产生控制信号的作用。本次设计采用了四个按键,分别控制步进电机的启动停止位、加速、减速和转向的控制。按键电路如图4-6所示。

图4-6 按键电路

19

安徽工业大学 毕业设计(论文)报告纸

4.4 蜂鸣器电路的设计

蜂鸣器是一种一体化结构的电子讯响器,采用直流电压供电,因其体积小(直径只有llmm)、重量轻、价格低、结构牢靠,而广泛地应用在各种需要发声的电器设备、电子制作和单片机等电路中。

本次设计应用蜂鸣器的主要作用就是产生按键音,使设计更加完善。蜂鸣器的驱动也很简单,只需对驱动口输出驱动电平并通过三极管放大驱动电流就能使蜂鸣器发出声音,具体的电路如图4-7所示。当IO口置1时,三极管导通蜂鸣器发出声音;当IO口置0时,三极管关闭蜂鸣器不发出声音。

┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ 装 ┊ ┊ ┊ ┊ ┊ 订 ┊ ┊ ┊ ┊ ┊ 线 ┊ ┊ ┊ ┊ ┊

图4-7 蜂鸣器电路

4.5 显示电路的设计

为了能更直观的显示步进电机当前的工作状态,包括电机运行状态、转速和转向,普通的数码管无法显示,这时我们可以选择液晶显示屏来完成本次设计的显示功能。液晶显示屏选用LCD1602,它的驱动更简单更方便。

1602液晶也叫1602字符型液晶,它是一种专门用来显示字母、数字、符号等的点阵型液晶模块.它有若干个5X7或者5X11等点阵字符位组成,每个点阵字符位都可以显示一个字符。每位之间有一个点距的间隔,每行之间也有也有间隔,起到了字符间距和行间距的作用,正因为如此,所以他不能显示图形.

其显示的内容为16X2,即可以显示两行,每行16个字符。LCD1602通常有14条引脚线或16条引脚线的LCD,多出来的2条线是背光电源线VCC(15脚)和地线GND(16脚)。其接口信号说明如表4-1所示:

20

安徽工业大学 毕业设计(论文)报告纸

表4-1 1602信号说明

引脚号 1 2 ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ 装 ┊ ┊ ┊ ┊ ┊ 订 ┊ ┊ ┊ ┊ ┊ 线 ┊ ┊ ┊ ┊ ┊

3 4 引脚名 Vss Vcc Vee RS 电平 0/1 输入/输出 输入 作用 电源地 电源(+5v) 对比调节电压 0=输入指令 1=输入数据 5 R/W 0/1 输入 0=向LCD写入指令或数据 1=从LCD读取信息 6 E 1,1->0 输入 使能信号,1时读取信息 1->0(下降沿)执行指令 7 8 9 10 11 12 13 14 15 16 DB0 DB1 DB2 DB3 DB4 DB5 DB6 DB7 A K 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 + Vcc 接地 输入/输出 输入/输出 输入/输出 输入/输出 输入/输出 输入/输出 输入/输出 输入/输出 数据总线line0(最低位) 数据总线line1 数据总线line2 数据总线line3 数据总线line4 数据总线line5 数据总线line6 数据总线line7 LCD背光源正极 LCD背光源负极 其内置了DDRAM,用来寄存待显示的字符代码。共80个字节,其地址和屏幕的对应关系如下表4-2:

表4-2 屏幕位置对应DDRAM地址

DDRAM 地址 显示位置 第一行 第二行 1 00H 40H 2 3 4 5 6 7 ?? 40 ?? 27H ?? 67H 0102H 03H 04H 05H 06H H 4142H 43H 44H 45H 46H H 在地址中写入显示数据,可以直接显示或者通过移屏指令显示出来。

21

安徽工业大学 毕业设计(论文)报告纸 LCD1602的基本操作时序: 读状态 输入:RS=L,RW=H,E=H

输出: DB0~DB7=状态字

┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ 装 ┊ ┊ ┊ ┊ ┊ 订 ┊ ┊ ┊ ┊ ┊ 线 ┊ ┊ ┊ ┊ ┊

写指令 输入:RS=L,RW=L,E=下降沿脉冲,DB0~DB7=指令码 输出:无

读数据 输入:RS=H,RW=H,E=H

输出:DB0~DB7=数据

写数据 输入:RS=H,RW=L,E=下降沿脉冲,DB0~DB7=数据 输出:无 写操作时序如图4-8所示:

图4-8 写操作时序图

一般写操作1602液晶的流程如下:

(1) 通过RS确定是写数据还是写命令。 (2) 读写控制端设置为写,即低电平。 (3) 将数据或命令送到数据线上。

(4) 给E一个高脉冲将数据送入液晶控制器,完成写操作。

22

安徽工业大学 毕业设计(论文)报告纸

读操作时序图如图4-9所示:

┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ 装 ┊ ┊ ┊ ┊ ┊ 订 ┊ ┊ ┊ ┊ ┊ 线 ┊ ┊ ┊ ┊ ┊

图4-9 读操作时序图

1602的接口电路很简单不需要驱动电路,具体的电路如图4-10所示。其中R是改变显示屏的对比度,通常选用一个10K的电位器。端口4为数据命令选择端,接单片机的P3.5口。5端为读写选择端,接单片机的P3.6口。6端为使能信号,接P3.4口。D0-D7与P0口相连。:

图4-10 LCD1602接口电路

23

安徽工业大学 毕业设计(论文)报告纸

第5章 软件设计

5.1 软件开发环境

┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ 装 ┊ ┊ ┊ ┊ ┊ 订 ┊ ┊ ┊ ┊ ┊ 线 ┊ ┊ ┊ ┊ ┊

Keil C51是美国Keil Software公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。用过汇编语言后再使用C来开发,体会更加深刻。Keil C51软件提供丰富的库函数和功能强大的集成开发调试工具,全Windows界面。另外重要的一点,只要看一下编译后生成的汇编代码,就能体会到Keil C51生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。在开发大型软件时更能体现高级语言的优势。下面详细介绍Keil C51开发系统各部分功能和使用。

图5-1 C51工具包整体结构图

Keil C51单片机软件开发系统的整体结构C51工具包的整体结构,如图5-1所示,其中uVision与Ishell分别是C51 for Windows和for DOS的集成开发环境(IDE),可以完成编辑、编译、连接、调试、仿真等整个开发流程。开发人员可用IDE 本身或其它编辑器编辑C 或汇编源文件。然后分别由C51及A51编译器编译生成目标文件(.OBJ)。目标文件可由LIB51创建生成库文件,也可以与库文件一起经L51连接定位生成绝对目标文件(.ABS)。ABS文件由OH51转换成标准的Hex文件,以供调试器dScope51或tScope51使用进行源代码级调试,也可由仿真器使用直接对目标板进行调试,也可以直接写入程序存贮器如EPROM 中。

24

安徽工业大学 毕业设计(论文)报告纸

5.1.1 工程文件的建立

Keil是目前进行51单片机开发最常用的编译软件。关于Keil的使用,有很多的资料介绍,这里只介绍其整个编译过程,在最短时间内开始使用Easy 51DP-2开发板。对于Keil更详细的介绍,可以参考一些专门书籍资料。在Keil里,每一个完整的程序,都是以一个工程的形式建立的。一个工程里可以有一个或多个*.c文件和*.h文件,但只可以有一个main()函数。一般的做法是将包含main()函数的C文件加入到工程中,其他文件以#include头文件的形式加到这个C文件里。这样,在编译的时候,其他的文件会被自动的导入到工程里来。

打开Keil软件后,出现(图5-2)所示界面。当然,如果Keil在上次关闭时有打开的工程,再一次打开时它会自动加载上一次的工程文件。

┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ 装 ┊ ┊ ┊ ┊ ┊ 订 ┊ ┊ ┊ ┊ ┊ 线 ┊ ┊ ┊ ┊ ┊

图5-2 Keil软件主界面

首先点击Project->New Project?(Project->Open Project?为打开一个已经存在的工程),如图5-3所示。

25

安徽工业大学 毕业设计(论文)报告纸

图5-3 Keil软件打开新工程界面

点开后,在出现的对话框中选择工程存在路径,单击“保存”后,出现(如图5-4所示)界面。在此界面上选择电路板上所用的单片机型号:Atmel AT89S51(或者是AT89S52,视开发板上具体型号而定),单击“确定”。

┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ 装 ┊ ┊ ┊ ┊ ┊ 订 ┊ ┊ ┊ ┊ ┊ 线 ┊ ┊ ┊ ┊ ┊

图5-4 选择电路板上所用的单片机型号

设置完成后,软件会提示“是否将8051上电初始化程序添加入工程?”如图5-5所示,这个一般选择“否”。(关于STARTUP.A51的相关内容可查阅相应资料)

图5-5 是否将8051上电初始化程序添加入工程

这样,就建立了一个空的51工程。

接下来的事,就是在这个工程里面加入自己的程序代码。点击

或者File->New,便建立了一个空的文本框。现在,就可以开始在里面输入你的代码了。

保存时注意:如果是用C语言写的程序,则将文本保存成*.c,如果是用汇编写的程序,则将文本存成*.asm。

26

安徽工业大学 毕业设计(论文)报告纸

到目前为步,我们已经建立了一个工程,也写了一个程序代码。但现在还不能开始编译。因为还没有将程序代码添加到工程里面去。

下一步就是将写完的程序添加到工程里面,如图5-6所示,在左边Project Workspace里的Source Group 1上右击,选择Add Files to Group ’Source Group 1’。在打开的对话框中,选择刚存的文件路径和对应的扩展名。这样,程序就添加进了这个工程。

┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ 装 ┊ ┊ ┊ ┊ ┊ 订 ┊ ┊ ┊ ┊ ┊ 线 ┊ ┊ ┊ ┊ ┊

图5-6 添加文件到工程中

下一步,就开始编译刚输入进去的代码。点击工具栏中的接着,Keil会打出下面的提示:

Build target 'Target 1' assembling led.asm... linking...

Program Size: data=8.0 xdata=0 code=100 \

其中“\”说明现在的工程编译通过,0个错误和0个警告。建立工程的时候,默认是不生成HEX文件的,得在编译做如下设置:单击

,或者在Project Workspace里

按钮。

Target 1上右击,选择“Options for Target ‘Target 1’”。出现

27

安徽工业大学 毕业设计(论文)报告纸 如图5-7所示对话框,选择“Output”按图示,将箭头所指的多选框勾上,点“确定”。

现在再点击

重新编译,系统提示:“creating hex file from

\”。便会在工程所在文件夹里生成HEX文件。

┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ 装 ┊ ┊ ┊ ┊ ┊ 订 ┊ ┊ ┊ ┊ ┊ 线 ┊ ┊ ┊ ┊ ┊

图5-7 生成HEX文件

5.1.2 ISP源程序下载工具

51单片机下载源程序是通过ISP下载工具(如图5-8)来完成的,也就是下载上述生成的HEX文件,具体步骤为为:

图5-8 STC单片机下载工具图标

1.打开软件后见如图5-9界面

28

安徽工业大学 毕业设计(论文)报告纸

┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ 装 ┊ ┊ ┊ ┊ ┊ 订 ┊ ┊ ┊ ┊ ┊ 线 ┊ ┊ ┊ ┊ ┊

图5-9 STC单片机下载工具界面

2.选择单片机型号(图5-10).

图5-10 单片机型号选择

3.选择要下载的HEX文件(图5-11)

图5-11选择要下载的HEX文件

4.选择串口和波特率,其中串口号可在设备管理器中查看或更改(图5-12)

图5-12选择串口和波特率

5.单片机去电,点击下载,得到提示后上电,完成下载,进行测试。

29

安徽工业大学 毕业设计(论文)报告纸

5.2软件设计总体流程图

整个系统软件可分为启动停止、正反转和加减速三个部分。通过按键来调用延时子程序改变延时时间来控制步进电机。系统的总体流程图如图5-13所示。

┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ 装 ┊ ┊ ┊ ┊ ┊ 订 ┊ ┊ ┊ ┊ ┊ 线 ┊ ┊ ┊ ┊ ┊

图5-13 整体流程图

5.3 换向数列

换向数列决定了电机4线的接收信号,1或0之间的变化决定了ULN2003输出的电流高低。步进电机的励磁方式分为全步励磁和半步励磁两种方式。本次设计采用的就是半步励磁,每送一个励磁信号步进电机旋转0.9度。特点是分辨率高,运转平滑。控制步进电机正转的励磁顺序见表5-1。若励磁信号反向传送则步进电机反转。下面是半步励磁工作方式。

正转数组:0001,0011,0010,0110,0100,1100,1000,1001

code uchar runz[8]={ 0xf1,0xf3,0xf2,0xf6,0xf4,0xfc,0xf8,0xf9};

反转数组:1001,1000,1100,0100,0110,0010,0011,0001

code uchar runf[8]={ 0xf9,0xf8,0xfc,0xf4,0xf6,0xf2,0xf3,0xf1};

30

安徽工业大学 毕业设计(论文)报告纸

表5-1 正转时序表 STEP 1 2 3 ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ 装 ┊ ┊ ┊ ┊ ┊ 订 ┊ ┊ ┊ ┊ ┊ 线 ┊ ┊ ┊ ┊ ┊

4 5 6 7 8 A 1 1 0 0 0 0 0 1 B 0 1 1 1 0 0 0 0 C 0 0 0 1 1 1 0 0 D 0 0 0 0 0 1 1 1 5.4 显示程序

显示程序也就是LCD1602驱动程序,驱动程序包括1602的初始化、判忙函数、清屏函数、写命令、写数据函数和写字符串函数,具体分析如下。

写命令操作和写数据操作分别用两个独立的函数来完成,函数的区别就是液晶数据命令选择端的电平,写命令函数的具体流程如下:

① 选择命令模式

② 将写的命令字送到数据总线 ③ 使能端拉高

④ 使能端置0以完成高脉冲

两个命令之间可稍做延时以等待数据的稳定。

初始化函数中的几个命令都是调用上述写命令函数,命令功能如下 wirte_com(0X38); 设置16X2显示, 5X7点阵,8位数据接口 wirte_com(0X0C); 设置开显示,不显示光标

wirte_com(0X06); 写一个字符后地址指针自动加1 wirte_com(0X01); 显示清0,数据指针清0 清屏函数就是利用上述清0命令和延时来完成的。

进入主函数,执行完初始化函数后,用“wirte_com(0X80);”命令先将数据指针定位到第一行第一个字处,然后写完第一行要显示的字,在每两个字之间做简短延时来确保控制器接受数据的稳定性,当显示第二行时需要重新定位数据指针:wirte_com(0X80+0X40)。

写字符函数void write_Char(uchar x,uchar y,uchar Data) ,首先要判断 写入字符的位置,然后再执行write_Data( Data),位置判断如下:

If y=0 then wirte_com(0X80+ x) If y≠0 then wirte_com(0XC0+ x)

31

安徽工业大学 毕业设计(论文)报告纸

写字符串函数void write_Char(uchar x,uchar y,uchar *s),只需

要将上述字符改为数组即可,写入数据时调用数组内的成员并将数组数组指针加1。

5.5 按键扫描程序

┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ 装 ┊ ┊ ┊ ┊ ┊ 订 ┊ ┊ ┊ ┊ ┊ 线 ┊ ┊ ┊ ┊ ┊

理想的按键的闭合和断开时,接触点的电压应该立即变高或者变低,但是由于机械触点的弹性以及按键按动时电压突变等原因,在触点闭合或断开的瞬间会出现电压抖动现象,如图5-14所示。在发生抖动的时间一般在5-10ms。因此单片机在检测键盘是否按下时都要加上去抖电路,有专用的去抖电路,也有专用的去抖芯片,但通常我们用延时的方法就能很容易解决抖动问题。

图5-14 按键闭合断开时的电压波动示意图

软件消抖的基本原理是在软件中对按键进行两次检测确认,记载第一次检测到按键按下后,间隔5ms左右再次检测按键是否按下,只有在两次都检测到按键按下时才最终确认有键按下,这样就避开了按键的抖动时间,从而消除了抖动的影响。

在按键接口软件的设计中,除了要考虑按键消抖外,一般还要判别按键的释放,只有检测到按键释放后,才能确定为一次完整的按键动作。本次设计就是采用这种软件消抖的方式,具体的程序流程图图如图5-15所示。

32

安徽工业大学 毕业设计(论文)报告纸

START寄存器初始化单片机IO口初始化 ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ 装 ┊ ┊ ┊ ┊ ┊ 订 ┊ ┊ ┊ ┊ ┊ 线 ┊ ┊ ┊ ┊ ┊

检测按键是否按下?Y延时5MSN检测按键是否按下?Y检测按键是否释放?Y执行相应代码NN

图5-15 按键检测流程图

5.6 主程序设计

本次设计用按键控制步进电机正转、反转、加速、减速等。驱动方式采用两相励磁,即4条信号线每次有两个为高电平,LCD显示步进电机的正反转、速度等级等。其程序流程图如图5-16所示

33

┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ 装 ┊ ┊ ┊ ┊ ┊ 订 ┊ ┊ ┊ ┊ ┊ 线 ┊ ┊ ┊ ┊ ┊

安徽工业大学 毕业设计(论文)报告纸

按键检测启动停止Y启动停止按键是否按下?标志位取反N查看启动Y标志位是否为0?电机停止NY减速按键Y判断是否N速度是否按下?为最低速?标识减1N加速按键Y判断是否N速度是否按下?为最高速?标识加1NY正反转按键Y正反转标志是否按下?位取反N查看正反标志位N是否为0?反转Y正转取正转码取反转码根据速度标识控制脉根据速度标识控制脉冲频率从而控制电机冲频率从而控制电机速度,并用LCD显示速度,并用LCD显示YNNY是否结束?是否结束?

图5-16 程序流程图

34

安徽工业大学 毕业设计(论文)报告纸

结论

本次毕业设计是大学四年最后一次实践,也是一次比较完整的实践,从硬件到软件自己都做了一遍。从开始资料的查询,芯片的选择,硬件电路的设计与焊接,软件的编写调试和论文的撰写。这样一个过程让我学到很多东西,学会如何查询相关资料,芯片的工作原理和独立思考问题并解决问题的能力。

这次设计基本上达到了设计的要求,实现了对步进电机的控制。但系统还是有很多不完善的地方。一个就是硬件部分完全是纯手工焊接没有制作PCB板,由于实验条件和经验的限制,焊接完成的电路不是很美观还容易出现问题,检查修改都相当麻烦。所以建议以后有做类似设计任务或者实际应用的时候,尽量采用PCB电路板的形式,这样最大的好处就是硬件的可靠性高,外观美观简洁,尤其是在大量设计的时候,采用PCB电路板成本也不高,值得采用。软件设计方面也有所缺陷,步进电机脉冲频率的处理采用的是延时函数而没采用定时器,没有做到精确控制步进电机。

35

┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ 装 ┊ ┊ ┊ ┊ ┊ 订 ┊ ┊ ┊ ┊ ┊ 线 ┊ ┊ ┊ ┊ ┊

安徽工业大学 毕业设计(论文)报告纸

参考文献

[1] 张毅刚,刘杰.MCS-51单片机原理及应用[M].哈尔滨:哈尔滨工业大

学出版社,2008.

[2] 童诗白,华成英.模拟电子技术基础[M].北京:高等教育出版社, 2009.

[3] 谭浩强.C程序设计(第三版)[M].北京:清华大学出版社,2008. [4] 郭天祥.51单片机C语言教程.电子工业出版社,2008. [5] 王鉴光.电机控制系统.机械工业出版社[M].

[6] 王晓明.电动机的单片机控制[M].北京北京航空航天大学出版社, 2002.

[7]孙江宏,李良玉等.Protel99电路设计与应用,机械工业出版社. 2004

[8] Eli Flaxer, Compact programmable controller for a linear piezo-stepper motor[J], Mechatronics 16 (2006) 303–308.

[9] M. Abouzeid, Use of a reluctance stepper motor for solartracking based on a programmable logic array(PLA) controller[J], Renewable Energy 23 (2001) 551–560.

36

┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ 装 ┊ ┊ ┊ ┊ ┊ 订 ┊ ┊ ┊ ┊ ┊ 线 ┊ ┊ ┊ ┊ ┊

安徽工业大学 毕业设计(论文)报告纸

致谢

经过一学期的忙碌和工作,本次毕业设计已经接近尾声,感谢我的老师和同学们在毕设期间给了我很大帮助,尤其是我的指导老师XX老师。如果没有导师的督促指导,想完成设计是难以想象的。从选题的确定、硬件的设计进度、论文的写作,导师都给我提供了很大的帮助。特别是她多次询问我的设计进程,并为我指点迷津,帮助我开拓思路。

然后还要感谢图书馆,图书馆提供的大量的资源,让我们有足够多的资料可以查询。同时也要感谢大学四年来所有的老师,为我们打下方面的专业知识的基础,虽然本次毕业设计已经结束,但是在自己的专业领域这才是刚刚开始。

最后感谢我的母校安徽工业大学四年来对我的大力栽培。

37

┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ 装 ┊ ┊ ┊ ┊ ┊ 订 ┊ ┊ ┊ ┊ ┊ 线 ┊ ┊ ┊ ┊ ┊

安徽工业大学 毕业设计(论文)报告纸

附录 源程序代码

/*----------------------------------------------- 功能:LCD动态显示字符

引脚定义如下:1-VSS 2-VDD 3-V0 4-RS 5-R/W 6-E 7-14 DB0-DB7 15-BLA 16-BLK

------------------------------------------------*/ #include

#define uchar unsigned char

sbit jiasu=P3^6; sbit jiansu=P3^7; sbit zhengfan=P3^5; sbit tingzhi=P3^4; sbit buzzer=P3^0; bit flag=0; bit start=0;

uchar speed=0,maichong=4,table_begin=0;

uchar code table []={0xf1,0xf3,0xf2,0xf6,0xf4,0xfc, 0xf8,0xf9,0xf9,0xf8,0xfc,0xf4,0xf6,0xf2,0xf3,0xf1}; sbit RS = P0^5; //LCD控制端口 sbit RW = P0^6; sbit EN = P0^7;

#define DataPort P2 //LCD数据端口

#define RS_CLR RS=0 #define RS_SET RS=1

#define RW_CLR RW=0 #define RW_SET RW=1

#define EN_CLR EN=0 #define EN_SET EN=1

void DelayUs2x(unsigned char t) {

while(--t);

38

┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ 装 ┊ ┊ ┊ ┊ ┊ 订 ┊ ┊ ┊ ┊ ┊ 线 ┊ ┊ ┊ ┊ ┊

安徽工业大学 毕业设计(论文)报告纸 }

/*------------------------------------------------

mS延时函数,含有输入参数 unsigned char t,无返回值 unsigned char 是定义无符号字符变量,其值的范围是 0~255 这里使用晶振12M,精确延时请使用汇编

------------------------------------------------*/ ┊ void DelayMs(unsigned char t) ┊ { ┊

┊ while(t--) ┊ {

┊ ┊ //大致延时1mS

┊ DelayUs2x(245); ┊ DelayUs2x(245); ┊ } ┊ }

┊ /*------------------------------------------------ ┊ 判忙函数

装 ┊ ------------------------------------------------*/ ┊ bit LCD_Check_Busy(void)

┊ {

┊ DataPort= 0xFF; ┊ RS_CLR; 订 RW_SET; ┊ ┊ EN_CLR; ┊ _nop_(); ┊ EN_SET;

┊ return (bit)(DataPort & 0x80); 线 }

┊ /*------------------------------------------------ ┊ 写入命令函数

┊ ┊ ------------------------------------------------*/ ┊

void LCD_Write_Com(unsigned char com) {

while(LCD_Check_Busy()); RS_CLR; RW_CLR; EN_SET;

39

/*忙则等待*/

安徽工业大学 毕业设计(论文)报告纸 DataPort= com;

_nop_(); EN_CLR; }

/*------------------------------------------------ 写入数据函数

------------------------------------------------*/ void LCD_Write_Data(unsigned char Data) {

while(LCD_Check_Busy()); /*忙则等待*/ RS_SET;

RW_CLR; EN_SET;

DataPort= Data; _nop_(); EN_CLR; }

/*------------------------------------------------ 清屏函数

------------------------------------------------*/ void LCD_Clear(void) {

LCD_Write_Com(0x01); DelayMs(5); }

/*------------------------------------------------ 写入字符串函数

------------------------------------------------*/

void LCD_Write_String(unsigned char x,unsigned char y,unsigned char *s) {

if (y == 0) { LCD_Write_Com(0x80 + x); } else

40

┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ 装 ┊ ┊ ┊ ┊ ┊ 订 ┊ ┊ ┊ ┊ ┊ 线 ┊ ┊ ┊ ┊ ┊

安徽工业大学 毕业设计(论文)报告纸

{

┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ 装 ┊ ┊ ┊ ┊ ┊ 订 ┊ ┊ ┊ ┊ ┊ 线 ┊ ┊ ┊ ┊ ┊

LCD_Write_Com(0xC0 + x); } while (*s) {

LCD_Write_Data( *s); s ++; } }

/*------------------------------------------------ 写入字符函数

------------------------------------------------*/

void LCD_Write_Char(unsigned char x,unsigned char y,unsigned char Data) {

if (y == 0) {

LCD_Write_Com(0x80 + x); } else

{

LCD_Write_Com(0xC0 + x); }

LCD_Write_Data( Data); }

/*------------------------------------------------ 初始化函数

------------------------------------------------*/ void LCD_Init(void) {

LCD_Write_Com(0x38); /*显示模式设置*/ DelayMs(5);

LCD_Write_Com(0x38); DelayMs(5);

LCD_Write_Com(0x38); DelayMs(5);

LCD_Write_Com(0x38);

LCD_Write_Com(0x08); /*显示关闭*/

41

安徽工业大学 毕业设计(论文)报告纸 LCD_Write_Com(0x01); /*显示清屏*/

LCD_Write_Com(0x06); /*显示光标移动设置*/ DelayMs(5);

LCD_Write_Com(0x0C); /*显示开及光标设置*/ } ┊ ┊

┊ void keyscan() ┊ {

┊ if(jiasu==0) ┊ ┊ {

┊ DelayMs(5); ┊ if(jiasu==0) ┊ { ┊ if(speed==4) speed=3; ┊ speed++; ┊ buzzer=1;

装 ┊ while(jiasu==0); ┊

buzzer=0;

┊ ┊ } ┊

订 }

┊ ┊ if(jiansu==0) ┊ {

┊ DelayMs(5); ┊ if(jiansu==0) 线 { ┊ buzzer=1; ┊ if(speed!=0) speed--; ┊ ┊ else start=0; ┊

while(jiansu==0); buzzer=0; }

}

42

/*判断加速按键是否按下*/ /*若为最高速,速度不变 */

/*速度标识加1*/ /*判断减速按键是否按下*/ /*不是最低速速度标识减1*//*启动标识取0*/ 安徽工业大学 毕业设计(论文)报告纸

if(zhengfan==0) /*判断正反转按键是否按下*/ { buzzer=1; if(zhengfan==0) { flag=~flag; /*正反转标志位取反*/

while(zhengfan==0); buzzer=0; }

┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ 装 ┊ ┊ ┊ ┊ ┊ 订 ┊ ┊ ┊ ┊ ┊ 线 ┊ ┊ ┊ ┊ ┊

}

if(tingzhi==0) /*判断启动停止按键是否按下*/ { buzzer=1;

if(tingzhi==0) { start=~start; /*启动停止标志位取反*/

while(tingzhi==0); buzzer=0; } } }

void process()

{

/*------------------------------------------------

根据脉冲数确定延时时间,从而决定电机转速,脉冲数越小电机转速越快,P0口的赋值决定LED灯的亮灭指示电机转速等级,LCD写字符函数是写入当前电机转速等级,用1、2、3、4表示电机的转速等级。 ------------------------------------------------*/

switch(speed) {

43

安徽工业大学 毕业设计(论文)报告纸

case 0:maichong=5;P0=0xfe;

┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ 装 ┊ ┊ ┊ ┊ ┊ 订 ┊ ┊ ┊ ┊ ┊ 线 ┊ ┊ ┊ ┊ ┊

LCD_Write_Char(15,0,'1');break; case 1:maichong=4;P0=0xfd;

LCD_Write_Char(15,0,'2');break;

case 2:maichong=3;P0=0xfb;

LCD_Write_Char(15,0,'3');break;

case 3:maichong=2;P0=0xf7;

LCD_Write_Char(15,0,'4');break;

default:break; }

/*------------------------------------------------

根据正反标志位确定table_begin的值,若标志位为0表示电机正转,table_begin为0,取电机的正转码即为table[]数组的前八位。标志位为1,去数组后八位,电机反转。

------------------------------------------------*/ if(flag==0) { table_begin=0; LCD_Write_String(0,1,\

} else { table_begin=8; LCD_Write_String(0,1,\ }

}

void qudong() { uchar i,j;

44

本文来源:https://www.bwwdw.com/article/bkqa.html

Top