前 言
步进电机最早是在1920年由英国人所开发。1950年后期晶体管的发明也逐渐应用在步进电机上,这对于数字化的控制变得更为容易。以后经过不断改良,使得今日步进电机已广泛运用在需要高定位精度、高分解性能、高响应性、信赖性等灵活控制性高的机械系统中。在生产过程中要求自动化、省人力、效率高的机器中。步进电机作为执行元件,是机电一体化的关键产品之一, 广泛应用在各种自动化控制系统中。随着微电子和计算机技术的发展,步进电机的需求量与日俱增,在各个国民经济领域都有应用。
步进电机是将电脉冲信号变换成角位移或直线位移的执行部件。步进电机可以直接用数字信号驱动,使用非常方便。一般电动机都是连续转动的,而步进电动机则有定位和运转两种基本状态,当有脉冲输入时步进电动机一步一步地转动,每给它一个脉冲信号,它就转过一定的角度。步进电动机的角位移量和输入脉冲的个数严格成正比,在时间上与输入脉冲同步,因此只要控制输入脉冲的数量、频率及电动机绕组通电的相序,便可获得所需的转角、转速及转动方向。在没有脉冲输入时,在绕组电源的激励下气隙磁场能使转子保持原有位置处于定位状态。因此非常适合于单片机控制。步进电机还具有快速启动、精确步进和定位等特点,因而在数控机床,绘图仪,打印机以及光学仪器中得到广泛的应用。步进电动机已成为除直流电动机和交流电动机以外的第三类电动机。传统电动机作为机电能量转换装置,在人类的生产和生活进入电气化过程中起着关键的作用。步进电机可以作为一种控制用的特种电机,利用其没有积累误差(精度为100%)的特点,广泛应用于各种开环控制。
第一章 步进电机概述
第一节 步进电机的特点
一般步进电机的特点有以下三个特点:
1) 一般步进电机的精度为步进角的3-5%,且不累积。
2)步进电机的力矩会随转速的升高而下降。当步进电机转动时,电机各相绕组的电感将形成一个反向电动势;频率越高,反向电动势越大。在它的作用下,电机随频率(或速度)的增大而相电流减小,从而导致力矩下降。
3)步进电机低速时可以正常运转, 但若高于一定速度就无法启动, 并伴有啸叫声。步进电机有一个技术参数:空载启动频率,即步进电机在空载情况下能够正常启动的脉冲频率,如果脉冲频率高于该值,电机不能正常启动,可能发生丢步或堵转。在有负载的情况下,启动频率应更低。如果要使电机达到高速转动,脉冲频率应该有加速过程,即启动频率较低,然后按一定加速度升到所希望的高频(电机转速从低速升到高速)。
第二节 步进电机的工作原理
步进电机是一种用电脉冲进行控制 ,将电脉冲信号转换成相位移的电机 ,其机械位移和转速分别与输入电机绕组的脉冲个数和脉冲频率成正比 ,每一个脉冲信号可使步进电机旋转一个固定的角度. 脉冲的数量决定了旋转的总角度 ,脉冲的频率决定了电机运转的速度. 当步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度(称为“步距角”) ,它的旋转是以固定的角度一步一步运行的。可以通过控制脉冲个数来控制角位移量,从而达到准确定位的目的;同时可以通过控制脉冲频率来控制电机转动的速度和加速度,从而达到调速的目的。
第三节 步进电机详细调速原理
步进电机的调速一般是改变输入步进电机的脉冲的频率来实现步进电机的调速,因为步进电机每给一个脉冲就转动一个固定的角度,这样就可以通过控制步进电机的一个脉冲到下一个脉冲的时间间隔来改变脉冲的频率,延时的长短来具体控制步进角来改变电机的转速,从而实现步进电的调速。具体的延时时间可以通过软件来实现。
这就需要采用单片机对步进电机进行加减速控制, 实际上就是改变输出脉冲的时间间隔, 单片机控制步进电机加减法运转可实现的方法有软件和硬件两种 ,软件方法指的是依靠延时程序来改变脉冲输出的频率, 其中延时的长短是动态的, 软件法在电机控制中, 要不停地产生
控制脉冲, 占用了大量的CPU 时间, 使单片机无法同时进行其他工作; 硬件方法是依靠单片机内部的定时器来实现的, 在每次进入定时中断后, 改变定时常数, 从而升速时使脉冲频率逐渐增大, 减速时使脉冲频率逐渐减小, 这种方法占用CPU 时间较少, 在各种单片机中都能实现, 是一种比较实用的调速方法。
第二章 本次设计的基本要求
研究步进电机的特性、工作原理、及其具体的调速原理。
第一节 基本要求
步进电机采用三相步进电机,功率为1W 。
调速范围为0到1000r/min
最高转速时,精度2%
要基本上完成毕业设计,作到步进电机能精确的调速,正反转、并能在起动时不失步,基本上没有振荡。
第三章 硬件电路的设计
第一节 单片机的选择
本次设计以CPU 选用89C5l 作为步进电机的控制芯片.89C51的结构简单并可以在编程器上实现闪烁式的电擦写达几万次以上.使用方便等优点,而且完全兼容MCS5l 系列单片机的所有功能。
单片机的引脚功能:
1)VCC (40):电源+5V。
2)VSS (20):接地,也就是GND 。
3)XTL1(19)和XTL2(18):振荡电路。
4)PSEN (29):片外ROM 选通信号,低电平有效。
5)ALE/PROG(30):地址锁存信号输出端/EPROM编程脉冲输入端。
6)RST/VPD(9):复位信号输入端/备用电源输入端。
7)EA/VPP(31):内/外部ROM 选择 端
8)P0口(39-32):双向I/O口。9.P1口(1-8):准双向通用I/0口。
9)P2口(21-28):准双向I/0口。原理图如4-1所示:
图3-1 AT89C51的引脚图
第二节 驱动电路的选择
因从CPU 输出的脉冲信号特别小,固应先经过PWM8713脉冲分配器对脉冲进行分配并经过放大然后再经过光耦驱动来驱动步进进电机。
PWM8713芯片介绍如下;
图3-2-1PWM8713的引脚图
PMM8713 功能介绍
PMM8713 是专用的步进电机的步进脉冲产生芯片, 它适用于三相和四相步进电机。如图3-2-1所示PMM8713 的引脚,Cu 为加脉冲输入端, 它使步进电机正转,Cp 为减脉冲输入端, 它使步进电机反转,Ck 为脉冲输入端, 当脉冲加入此引脚时,Cu 和Cp 应接地, 正反转由U/ D 的
电平控制,EA 和EB 用来选择励磁方式的, 可以选择的方式有一相励磁、二相励磁和一二相励磁, ΦC 用来选择三、四相步进电机,Vss 为芯片工作地,R 为芯片复位端, Φ4~Φ1 为四相步进
脉冲输出端, Φ3~Φ1 为三相步进脉冲输出端,Em 为励磁监视端,Co 为输入脉冲监视端,VDD 为芯片的工作电源( + 4~ + 18V).其具体的原理框图如3-2-2所示:
图3-2-2 驱动电路框图
第三节 显示电路与键盘的选择
显示电路的用8279芯片来驱动
8279芯片的具体介绍如下:
1) DB0~DB7:双向数据总线。在CPU 于827数 据与命令的传送。
2) CLK:8279的系统时钟,100KHZ 为最佳选择。
3) RESET:复位输入线,高电平有效。当 RESET 输入端出现高电平时,8279被初始复位。
4) /CS:片选信号。低电平使能,使能时可将命令写入8279或读取8279的数据。
5) A0:用于区分信息的特性。当A0=1时,CPU 向8279写入命令或读取8279的状态;当
A0为0时,读写一数据。
6) /RD:读取控制线。/RD=0,8279会送数据至外部总线。
7) /WR:写入控制线。/WR=0,8279会从外部总线捕捉数据。
8) IRQ :中断请求输出线,高电平有效。当FIFO RAM 缓冲器中存有键盘上闭合键的键码
时,IRQ 线升高,向CPU 请求中断,当CPU 将缓冲器中的输入键数的数据全部读取时,中断请求线下降为低电平。
9) L0~SL3:扫描输出线,用于对键盘显示器扫 描。可以是编码模式(16对1)或译
码模式(4对1)。
10) ~RL7:反馈输入线,由内部拉高电阻拉成高电平,也可由键盘上按键拉成低电平。
11) FT、CNTL/STB :控制键输入线,由内部拉高电 阻拉成高电平,也可由外部控制按
键拉成低电平。
12) TB0~3、OUTA0~3:显示段数据输出线,可分别作为两个半字节输出,也可作为8
位段数据输出口,此时OUTB0为最低位, OUTA3位最高位。
13) 消隐输出线,低电平有效。当显示器切换时或使用消隐命令时,将显示消隐。
8279引脚图
第四章 软件的设计
第一节 显示子程序的设计
图4-1 显示程序流程图
第二节 键盘子程序的设计
图4-2键盘程序流程图
第三节 驱动程序流程的设计
图4-3主程序流程图
第四节 正反转程序流程图
(一) 正反转程序流程图
图4-4-1 正反转程序流程图
(二) 转速快慢程序流程图
4-4-2 转速快慢程序流程图
(三)定时中断流程图
图4-4-3 中断子程序流程图
第五章 实验结果与分析
第一节 有关参数的计算与分析
在单相三拍方式控制中,假如A 相电源通电,B 、C 两相都不通电,在磁场作用下,使转子齿和A 相的定子齿对齐。若此时为初始状态,并设与A 相磁极对齐的齿为0号齿,由于B 相齿与A 相齿相差120度。且
1209
=13
13
不为整数。所以此转子不能和B 号齿对齐,只有13
号小齿靠近B 相磁极的中心线,与中心线相差3度,如果此时变为B 相通电,万里A 、C 两相不通电,则B 相磁极迫使与13号齿对齐,整个齿就转了3度,称为一步。步进电机就是以这种方式作为动力而转动。
在单相三拍A-B-C-A 通电一周,转子转动了9度。固步距角可用公式5-1表示:
Q S =
360NZ
ο
r
(5-1)
其中Q S 为步距角,N 为运行的拍数,Z r 为转子的齿数。其中N =m c *c ,
m c 为控制的相绕阻,C
在三拍中为1,在六拍中为2。
步距角的速度的控制是通过改变脉冲的时间间隔来控制的。如果步进电机每转20圈要2秒。则每进一步所在的时间为:计算公式如5-2所示:
2000ms t =
=100ms 3*1*40
=833μs
NZ
r
(5-2)
可见只要输出一个脉冲后延时833μs 再输脉冲就可以达到自定的速度。本次设计在求的转速范围为0到1000m in ,最高转速时的精度为2%。功率为1W 。
得:步进脉冲之间的延迟时间为T 1-T 2。T 1=0。
=499. 8μs ≈500μs
T 2=3*1*40 延迟时间在0到500μS 。精度是由步进电机的性能
60000
r
决定的。
第二节 理论与实际的分析
从Q S =
360N Z r
的公式看到, 改变步进电动机步距的大小有三种方式:
1) 改变步进电动机的相数。步进电动机的相数越多、步距角就越小。 2) 与步进电动机的定、转齿数有关。
3) 与定子控制绕组的通电方式有关。要改变步进电机步距角的大小也只能通过这三种方式。设计中步进电机为三相,功率为1W 。因步进电机的转子上没有绕阻而是由40个小齿均匀地分布在圆周上。定子的齿也是固定不变的,通电方式是选取用三相单三拍方式。可见步进电机的一但选定,其步距角就不能再改变了。要改变转束也就只能通过脉冲之间的延时来改变。但对步进电动机的步距角的控制, 可以实现对步进电动机的转速精度控制。
但实际上步进电机在用行时是带有一定量的负载,当运转时会存在许多误差,同时因为负载的存在可能引起失步和震荡。这就使步进电机不能按预定的规律运行,从而是很难达到转速精度的要求。为准确测量电机的转速稳定度, 须选用高精度测量仪器。光电编码器因光电式数字输出而更具抗干扰性强和处理简便的优势。增量式旋转编码器。其核心部件为光栅码盘, 玻璃盘表面的光栅道数决定了编码器的分辨率, 而后者制约了转速测量的精度。当编码器分辨率与系统误差相近时, 其影响将不复存在。
光电编码器的分辨率是决定着反馈的准确性与反馈的精度。也对步进电机的延时长短起到一定的作用。可见实际与理论是有一定的差别的。
第六章 总 结
蓦然回首,为期两个多月的毕业设计就要结束了,在这漫长而又短暂之中,通过自己不断地学习,不断地努力与拼搏、不断地对新知识的追求与索取、不断地自我发现、感到自己的知识结构水平提出高了许多,对知识的掌握程度也加深了许多,对知识之间的相互联系也有了更深的了解;通过不断地提高自己的认识水平与能力、不断地学习新方法、新思想、新的思维方式、不断地改变自己的人生观和方法论、感到自己不但成长且成熟了许多;通过不断地把课本知识应用于实际,不断地把查阅到的资料与文献中有用的东西应用于实现,不断地把所学的理论与方法应用于设计之中,从而提高了自己理论联系实际的能力。
通过这两个多月的毕业设计,把所学过的各种知识进行了一次全面而系统的综合,并融会贯通,把所学到的各种理论与思想进行可一次合理的应用,把所查阅到的各种文献及与设计相关的资料进行了合理的提取与分析,并应用到实际。这不但增强了自己的知识结构,同时对所学过的各种理论知识与专业知识进行了一次全面的终结。由于不断的上机操作与实践,不但加强了自己动手能力,同时对一些计算机软件的应用有了一定的掌握与理解,并加强了网上学习和查阅资料的能力。
步进电机调速系统适用各种现场自动化控制,特别应用于小功率负载的控制;具有成本底,性能稳定, 可靠性高等优点。步进电机作为执行元件,在科技的进步中起到了非常重要的作用,而步进电机调速系统可方便地应用与各种自动化控制系统与领域。毕业设计是对大学所学课程的一个高度的综合。无论是基础知识还是专业知识都被设计统一起来,使零散的知识系统化,形成了一种能力,这也是毕业设计所要达到的目的。这也为我们走入社会打下一个良好的基础,为走入社会对知识与理论的应用做了一个好的铺垫。人生的路是漫长而曲折的,在这漫长而曲折的道路上需要自己的不断努力与拼搏。作为即将离校的学生,走出校门就站在另一个人生起点上,还有很长的路要走,这必须有足够的勇气与自信去迎接挑战,克服困难,创造奇迹。特别对未来要充满期盼,充满希望,要微笑着走人生的每一步。“路漫漫其修远兮,我将上下而求索”。
参考文献
[1] 张洪润, 蓝清华. 单片机应用技术教程[M] ,清华大学出版社,1997. [2] 秦曾煌. 电工学[M] .高等教育出版社,1999.
[3] 常斗南, 等. 可编程序控制器原理、应用、实验[M] ,机械工业出版社,1998. [4] 于海生, 等. 微型计算机控制技术[M] ,清华大学出版社,1999.
[5] 王福瑞, 等. 单片机微机测控系统设计大全[M],北京航空航天大学出版社,1998. [6] 陈理壁. 步进电机及其应用[M], 上海科学技术出版社,1989.
[7] 刘保延, 等. 步进电机及其驱动控制系统[M],哈尔滨工业大学出版社,1997. [8] 季维发, 过润秋, 严武升等. 机电一体化技术[M],电子工业出版社,1995. [9] 郭敬枢, 庄继东, 孔峰. 微机控制技术[M],重庆大学出版社,1994. [10] 刘国荣. 单片微型计算机技术[M],机械工业出版社,1996.
[11] 王福瑞. 单片微机测控系统设计大全[M],北京航空航天大学出版社,1998. [12] 何立民. 单片机应用技术选编[M],北京航空航天大学出版社,1993.
附录
8279的初始化程序如下:
INIT:MOV DPTR,#7FFFH ;置8279命令/状态口地址 MOV A,#0D1H ;置清显示命令字 MOVX @DPTR,A ;送清显示命令 WEIT:MOVX A,@DPTR ;读状态
JB ACC.7,WEIT ;等待清显示RAM 结束 MOV A,#34H ;置分频系数,晶振12MHz MOVX @DPTR,A ;送分频系数 MOV A,#00H ;置键盘/显示命令 MOVX @DPTR,A ;送键盘/显示命令 MOV IE,#84H ;允许8279中断 RET
显示子程序如下:
DIS:MOV DPTR,#7FFFH ;置8279命令/状态口地址 MOV R0,#30H ;字段码首地址 MOV R7,#08H ;8位显示 MOV A,#90H ;置显示命令字 MOVX @DPTR,A ;送显示命令 MOV DPTR,#7FFEH ;置数据口地址 LP:MOV A,@R0 ;取显示数据 ADD A,#6 ;加偏移量
MOVC A,@A+PC ;查表,取得数据的段码 MOVX @DPTR,A ;送段码显示 INC R0 ;调整数据指针 DJNZ R7,LP ; RET
SEG:DB 3FH,06H ,5BH ,4FH ,66H ,6DH ;字符0、1、2、3、4、5段码
DB 7DH,07H ,7EH ,6FH ,77H ,7CH ;字符6、7、8、9、A 、B 段码 DB 39H,5EH ,79H ,71H ,73H ,3EH ;字符C 、d 、E 、F 、P 、U 段码 DB 76H,38H ,40H ,6EH ,FFH ,00H ;字符H 、L 、-、Y 、“空”段码 键盘中断子程序如下:
KEY:PUSH PSW PUSH DPL PUSH DPH PUSH ACC PUSH B SETB PSW.3
MOV DPTR,#7FFFH ;置状态口地址 MOVX A,@DPTR ;读FIFO 状态 ANL A,#0FH ; JZ PKYR ;
MOV A,#40H ;置读FIFO 命令 MOVX @DPTR,A ;送读FIFO 命令 MOV DPTR,#7FFEH ;置数据口地址 MOVX A,@DPTR ;读数据
LJMP KEY1 ;转键值处理程序 PKYR: POP B POP ACC POP DPH POP DPL POP PSW
RETI ; KEY1: „ „ ;键值处理程序 键盘程序清单:
KEY1: ACALL
KS1 ; 有无键按下子程序
JNZ LK1 ;有键按下,转去抖延时 AJMP
KEY1
;无键按下,继续扫描
LK1:
ACALL DELA12 ;12ms 延时程序调用
ACALL KS1 ;判断键是否真正按下
JNZ LK2 ;有键按下,转逐列扫描 AJMP
KEY1 ;无键按下,继续扫描
;设置首列扫描字
LK2:
MOV R2,#0FEH
MOV R4,#00H ;保存首列号
MOV DPTR,#7F01H;列扫描字送至PA 口
LK4:
MOV A,R2
MOVX
@DPTR,A
;指向PC 口
INC DPTR INC DPTR MOVX
A,@DPTR ;读入行状态
;第0行无键按下,转LONE
JB ACC.0,LONE
MOV A,#00H ;有键按下,设置行首键号 AJMP
LKP ;转求键号
LONE: JB ACC.1,LTWO ;第1行无键按下,转LTWO
MOV A,#08H ;有键按下,设置行首键号 AJMP
LKP ;转求键号
LTWO: JB ACC.2,LTHR ;第2行无键按下,转LTHR
LTHR: JB ACC.3,NEXT ;第3行无键按下,查下一列
MOV A,#18H ;有键按下,设置行首键
ADD A,R4
;求键号,键号=行首键号+列号
MOV A,#10H ;有键按下,设置行首键? AJMP
LKP ;转求键号
LKP:
PUSH ACC ;保护键号
LK3:
ACALL KS1 ;等待键释放
JNZ LK3 ;键未释放,继续等待 POP ACC ;键释放,键号送A AJMP
OVER
;键扫描结束
NEXT: INC R4 ;列号加1,指向下一列
MOV A,R2
;判断8列扫描完否
;8列扫描完,继续
JNB ACC.7,KND RL A
;扫描字左移一位
;送扫描字
MOV R2,A AJMP
LK4 ;转下一列扫描
KEY1
KND: AJMP
OVER: RET ;键扫描结束 KS1:
MOV DPTR,#7F01H ;指向PA 口
MOV A,#00H ;设置扫描字 MOVX
@DPTR,A ;扫描字送PA 口
;指向PC 口
INC DPTR INC DPTR MOVX
A,@DPTR ;读入PC 口状态
CPL ;以高电平表示有键按下 ANL A,#0FH ;屏蔽高4位 RET
初始化程序如下:
INIT:MOV DPTR,#7FFFH ;置8279命令/状态口地址 MOV A,#0D1H ;置清显示命令字 MOVX @DPTR,A ;送清显示命令 WEIT:MOVX A,@DPTR ;读状态
JB ACC.7,WEIT ;等待清显示RAM 结束 MOV A,#34H ;置分频系数,晶振12MHz MOVX @DPTR,A ;送分频系数 MOV A,#00H ;置键盘/显示命令
MOVX @DPTR,A ;送键盘/显示命令
MOV IE,#84H ;允许8279中断
RET
显示子程序如下:
DIS:MOV DPTR,#7FFFH ;置8279命令/状态口地址
MOV R0,#30H ;字段码首地址
MOV R7,#08H ;8位显示
MOV A,#90H ;置显示命令字
MOVX @DPTR,A ;送显示命令
MOV DPTR,#7FFEH ;置数据口地址
LP:MOV A,@R0 ;取显示数据
ADD A,#6 ;加偏移量
MOVC A,@A+PC ;查表,取得数据的段码
MOVX @DPTR,A ;送段码显示
INC R0 ;调整数据指针
DJNZ R7,LP ;
RET
键盘中断子程序如下:
KEY:PUSH PSW
PUSH DPL
PUSH DPH
PUSH ACC
PUSH B
SETB PSW.3
MOV DPTR,#7FFFH ;置状态口地址
MOVX A,@DPTR ;读FIFO 状态
ANL A,#0FH ;
JZ PKYR ;
MOV A,#40H ;置读FIFO 命令
MOVX @DPTR,A ;送读FIFO 命令
MOV DPTR,#7FFEH ;置数据口地址
MOVX A,@DPTR ;读数据
LJMP KEY1 ;转键值处理程序
PKYR: POP B
POP ACC
POP DPH
POP DPL
POP PSW
RETI ;
驱动电路子程序的设计
PUSH:MOV R3 , # NUM
PUSH A
PUSH PSW
LOOP: SETB P1.0
ACALL DELAY1
CLR P1.0
ACALL DELAY2
DJNZ R3,LOOP
POP PSW
POP A
RET
延时子程序的设计
MOV R2,#18H
LCALL 7FEBH
RET
ORG 7FEBH ;通用延时子程序(07EBH & 0FEBH & ...)
L7FEB: PUSH 02H ;R2(复位后R2即为02H) 存放时间常数, 进栈保护
L7FED: PUSH 02H ; R2进栈保护
L7FEF: PUSH 02H ; 进栈
L7FF1: DJNZ R2,$ ;R2不为零等待
POP 02H ;出栈
DJNZ R2,L7FEF ; R2不为零转
POP 02H ; 出栈
DJNZ R2,L7FED ; R2不为零转
POP 02H ; 出栈
DJNZ R2,L7FEB ; R2不为零转
RET ;子程序返回
END
主程序如下:
CON: MOV R3, # N
MOV TMOD , # 10H
MOV TL1 , # LOW
MOV TH1 , # H IGH
JNB FLAG ,LEFT
MOV R0 , RM
AJMP TIME - S
LEFT: MOV R0 , LM
TIME: SETB EA
SETB ET1
SETB TR1
步进电机控制程序p3.2正转,p3.3反转,p3.4停止 步进电机接p1.0p1.1p1.2p1.3
org 00h
stop: orl p1,#0ffh ; 步进电机停止
loop:jnB p3.2,for2 ; 如果p3.2按下正转
jnB p3.3,rev2 ; 如果p3.3按下反转
jnB p3.4,stop1 ; 如果p3.4按下停止
jmp loop ;反复监测键盘
for: mov r0,#00h ;正转到tAB 取码指针初值
for1:mov A,r0 ;取码
mov dptr,#tABle ;
movC A,@A+dptr
jz for ;是否到了结束码00h
Cpl A ;把ACC 反向
mov p1,A ;
jnB p3.4,stop1 ;
jnB p3.3,rev2 ;
CAll delAy ;
inC r0 ;
jmp for1 ;
rev:mov r0,#05h ;
rev1:mov A,r0
mov dptr,#tABle ;
movC A,@A+tABle
jz rev ;
Cpl A ;
mov p1,A ;
jnB p3.4,stop1 ;
jnB p3.3,rev2 ;
CAll delAy ;
inC r0 ;
jmp rev1 ;
stop1:CAll delAy ;
jnB p3.4,$ ; p3.4
CAll delAy ;
jmp stop
for2:CAll delAy ;
jnB p3.2,$ ; p3.2
输出到p1开始正转 如果p3.4按下停止 如果p3.3按下反转 转动的速度 取下一个码 继续正转 反转到tAB 取码指针初值 取码 是否到了结束码00h 把ACC 反向 输出到p1开始反转 如果p3.4按下停止 如果p3.3按下反转 转动的速度 取下一个码 继续反转 按p3.4的消除抖动 放开否? 放开消除抖动 按p3.2的消除抖动 放开否?
CAll delAy ;放开消除抖动
jmp for
rev2:CAll delAy ; 按p3.3的消除抖动
jnB p3.3,$ ; p3.3放开否?
CAll delAy ;放开消除抖动
jmp rev
delAy:mov r1,#40 ;步进电机的转速20ms
d1:mov r2,#248
djnz r2,$
djnz r1,d1
ret
tABle:
dB 03h,09h,0Ch,06h ;正转表
dB 00 ;正转结束
dB 03h,06h,0Ch,09h ;反转
dB 00 ;反转结束
end
步进电机正反快慢程序
org 00h
x1:mov r3,#48 ;一圈48步
stArt:mov r0,#00h ;正转取码初值
stArt1:
mov p1,#0ffh ;先停止
mov A,r0
mov dptr,#tABle
movC A,@A+dptr
jz stArt ;是否到了结束码00?
Cpl A
mov p1,A ;输出运转
CAll delAy ;调用慢速的延时转动
inC r0 ;取码指针加1取下一个码
djnz r3,stArt1 ;是否走了48步?
mov r3,#48 ;是则重新设定48步
stArt2:
mov p1,#0ffh
mov r0,#05 ;逆转的取码初值
stArt3:mov A,r0
mov dptr,#tABle
movC A,@A+dptr
jz stArt2
Cpl A
mov p1,A
CAll delAy2
inC r0
djnz r3,stArt3
jmp x1 ; 重复开始
DELAY: ; 延时程序 (慢速)
MOV R7,#255
D1:MOV R6,#50
D2: DJNZ R6,D2
DJNZ R7,D1
RET
DELAY2: ; 延时程序 (快速)
MOV R5,#255
D3:MOV R2,#25
D4: DJNZ R2,D4
DJNZ R5,D3
RET
tABle:
dB 03h,09h,0Ch,06h ;正转表
dB 00
dB 06h,0Ch,09h,03h ;反转表
dB 00
end
中断服务程序如下:
INTTO: PUSH A
PUSH PSW
MOV A , @R0
MOV P1 ,A
INC R0
MOV A , # 00H
XRL A , @R0
JNZ NEXT
MOV A , R0
CLR C
SUBB A , # 03H
MOV R0 , A
NEXT: DJNZ R3 , RETU
CLR ET1
CLR EA
RETU: POP PSW
POP A
RETI
利用软件形成脉冲序列的程序清单:
PULSE_S: MOV R7,#NUM ;设定脉冲个数
PUSH A ;保护现场
PUSH PSW
LOOP: SETB P1.0 ;输出高电平
ACALL DELAY1 ;延时
CLR P1.0 ACALL DJNZ ;输出低电平 DELAY2 ;延时 R7,LOOP ;R7≠0,继续输出脉冲 POP PSW ;恢复现场
POP A
RET
定时中断子程序
TIME0: CLR EA ;关中断
INC 30H MOV A,30H XRL A,#50H ;判断是否到8秒 JZ S_8 ;8秒定时到,转至S_8 AJMP RECOUN ;未到8秒,继续计时
P3.2 ;触发外部中断0 S_8:
SETB NOP CLR P3.2 NOP
RECOUN: MOV TH0,#3CH
MOV TL0,#0B0H SETB RETI ;设定定时器初值 EA ;开中断 ;中断返回
中断子程序
T_CON: PUSH
JNB FLAG,LEFT ;判断旋转方向
;正转模型起始地址 PUSH A ;保护现场 PSW ;设定控制步数 MOV R7,#N RIGHT: MOV R0,RM
AJMP ROTATE
LEFT: MOV R0,LM
ROTATE: MOV A,@R0
MOV P1,A ACALL ;取第一拍控制模型 ;输出第一拍控制模型 DELAY1 ;延时
INC R0
MOV A,@R0 MOV P1,A ACALL INC R0 MOV A,@R0 MOV P1,A ACALL DJNZ ;取第三拍控制模型 ;输出第三拍控制模型 ;取第二拍控制模型 ;输出第二拍控制模型 DELAY1 ;延时 DELAY1 ;延时 R7,ROTATE ;未走完要求的步数,继续 POP PSW ;恢复现场 POP A RET ;返回
致 谢
随着毕业设计的逐渐完成,离毕业离校的日子也就越来越近了。在这大学三年里,我非常感谢各位老师三年来对我的栽培,以及各位同学朋友对我的帮助,正是由于他们在学习和生活上给予我无微不至的关怀,才使我在这三年期间不仅学到了扎实的专业知识,还学到了很多为人处事的原则。
通过这次最后的毕业设计,又使我学到了很多专业知识,实验技能也有了很大的提高,其实,有些事并非我们想的那样难,世上无难事,只怕有心人,只要我们真正用心去做了,你就会发现一切就变得很容易了。虽然感觉自己做的还不是很好吧!但毕竟自己亲自去做了,所以还是有点成就感的。
在这次设计中我首先要感谢我的指导老师——赵玲,我能够顺利地完成这篇设计,很大程度上都要归功于她的细心指导,无论我们开始做的多么差,她都会细心的一个一个的给我们修改。其次,我还要感谢我的同学,感谢他们对我的支持和帮助。我想通过这次设计,对我以后的工作一定会有很大帮助的。
最后,我还要感谢我的母校——河南工程学院,感谢“她”为我提供了一个良好的学习和生活环境。如果没有“她”也就没有今天的我们,即将离开学校,还真有点舍不得,在以后的日子里我会时常想起这里的一幕幕,因为在这里曾经给我留下了太多的喜. 怒. 哀. 乐,有太多的人和事值得我去怀念了。
在这即将离开之即,愿我们的母校明天更加美好!
前 言
步进电机最早是在1920年由英国人所开发。1950年后期晶体管的发明也逐渐应用在步进电机上,这对于数字化的控制变得更为容易。以后经过不断改良,使得今日步进电机已广泛运用在需要高定位精度、高分解性能、高响应性、信赖性等灵活控制性高的机械系统中。在生产过程中要求自动化、省人力、效率高的机器中。步进电机作为执行元件,是机电一体化的关键产品之一, 广泛应用在各种自动化控制系统中。随着微电子和计算机技术的发展,步进电机的需求量与日俱增,在各个国民经济领域都有应用。
步进电机是将电脉冲信号变换成角位移或直线位移的执行部件。步进电机可以直接用数字信号驱动,使用非常方便。一般电动机都是连续转动的,而步进电动机则有定位和运转两种基本状态,当有脉冲输入时步进电动机一步一步地转动,每给它一个脉冲信号,它就转过一定的角度。步进电动机的角位移量和输入脉冲的个数严格成正比,在时间上与输入脉冲同步,因此只要控制输入脉冲的数量、频率及电动机绕组通电的相序,便可获得所需的转角、转速及转动方向。在没有脉冲输入时,在绕组电源的激励下气隙磁场能使转子保持原有位置处于定位状态。因此非常适合于单片机控制。步进电机还具有快速启动、精确步进和定位等特点,因而在数控机床,绘图仪,打印机以及光学仪器中得到广泛的应用。步进电动机已成为除直流电动机和交流电动机以外的第三类电动机。传统电动机作为机电能量转换装置,在人类的生产和生活进入电气化过程中起着关键的作用。步进电机可以作为一种控制用的特种电机,利用其没有积累误差(精度为100%)的特点,广泛应用于各种开环控制。
第一章 步进电机概述
第一节 步进电机的特点
一般步进电机的特点有以下三个特点:
1) 一般步进电机的精度为步进角的3-5%,且不累积。
2)步进电机的力矩会随转速的升高而下降。当步进电机转动时,电机各相绕组的电感将形成一个反向电动势;频率越高,反向电动势越大。在它的作用下,电机随频率(或速度)的增大而相电流减小,从而导致力矩下降。
3)步进电机低速时可以正常运转, 但若高于一定速度就无法启动, 并伴有啸叫声。步进电机有一个技术参数:空载启动频率,即步进电机在空载情况下能够正常启动的脉冲频率,如果脉冲频率高于该值,电机不能正常启动,可能发生丢步或堵转。在有负载的情况下,启动频率应更低。如果要使电机达到高速转动,脉冲频率应该有加速过程,即启动频率较低,然后按一定加速度升到所希望的高频(电机转速从低速升到高速)。
第二节 步进电机的工作原理
步进电机是一种用电脉冲进行控制 ,将电脉冲信号转换成相位移的电机 ,其机械位移和转速分别与输入电机绕组的脉冲个数和脉冲频率成正比 ,每一个脉冲信号可使步进电机旋转一个固定的角度. 脉冲的数量决定了旋转的总角度 ,脉冲的频率决定了电机运转的速度. 当步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度(称为“步距角”) ,它的旋转是以固定的角度一步一步运行的。可以通过控制脉冲个数来控制角位移量,从而达到准确定位的目的;同时可以通过控制脉冲频率来控制电机转动的速度和加速度,从而达到调速的目的。
第三节 步进电机详细调速原理
步进电机的调速一般是改变输入步进电机的脉冲的频率来实现步进电机的调速,因为步进电机每给一个脉冲就转动一个固定的角度,这样就可以通过控制步进电机的一个脉冲到下一个脉冲的时间间隔来改变脉冲的频率,延时的长短来具体控制步进角来改变电机的转速,从而实现步进电的调速。具体的延时时间可以通过软件来实现。
这就需要采用单片机对步进电机进行加减速控制, 实际上就是改变输出脉冲的时间间隔, 单片机控制步进电机加减法运转可实现的方法有软件和硬件两种 ,软件方法指的是依靠延时程序来改变脉冲输出的频率, 其中延时的长短是动态的, 软件法在电机控制中, 要不停地产生
控制脉冲, 占用了大量的CPU 时间, 使单片机无法同时进行其他工作; 硬件方法是依靠单片机内部的定时器来实现的, 在每次进入定时中断后, 改变定时常数, 从而升速时使脉冲频率逐渐增大, 减速时使脉冲频率逐渐减小, 这种方法占用CPU 时间较少, 在各种单片机中都能实现, 是一种比较实用的调速方法。
第二章 本次设计的基本要求
研究步进电机的特性、工作原理、及其具体的调速原理。
第一节 基本要求
步进电机采用三相步进电机,功率为1W 。
调速范围为0到1000r/min
最高转速时,精度2%
要基本上完成毕业设计,作到步进电机能精确的调速,正反转、并能在起动时不失步,基本上没有振荡。
第三章 硬件电路的设计
第一节 单片机的选择
本次设计以CPU 选用89C5l 作为步进电机的控制芯片.89C51的结构简单并可以在编程器上实现闪烁式的电擦写达几万次以上.使用方便等优点,而且完全兼容MCS5l 系列单片机的所有功能。
单片机的引脚功能:
1)VCC (40):电源+5V。
2)VSS (20):接地,也就是GND 。
3)XTL1(19)和XTL2(18):振荡电路。
4)PSEN (29):片外ROM 选通信号,低电平有效。
5)ALE/PROG(30):地址锁存信号输出端/EPROM编程脉冲输入端。
6)RST/VPD(9):复位信号输入端/备用电源输入端。
7)EA/VPP(31):内/外部ROM 选择 端
8)P0口(39-32):双向I/O口。9.P1口(1-8):准双向通用I/0口。
9)P2口(21-28):准双向I/0口。原理图如4-1所示:
图3-1 AT89C51的引脚图
第二节 驱动电路的选择
因从CPU 输出的脉冲信号特别小,固应先经过PWM8713脉冲分配器对脉冲进行分配并经过放大然后再经过光耦驱动来驱动步进进电机。
PWM8713芯片介绍如下;
图3-2-1PWM8713的引脚图
PMM8713 功能介绍
PMM8713 是专用的步进电机的步进脉冲产生芯片, 它适用于三相和四相步进电机。如图3-2-1所示PMM8713 的引脚,Cu 为加脉冲输入端, 它使步进电机正转,Cp 为减脉冲输入端, 它使步进电机反转,Ck 为脉冲输入端, 当脉冲加入此引脚时,Cu 和Cp 应接地, 正反转由U/ D 的
电平控制,EA 和EB 用来选择励磁方式的, 可以选择的方式有一相励磁、二相励磁和一二相励磁, ΦC 用来选择三、四相步进电机,Vss 为芯片工作地,R 为芯片复位端, Φ4~Φ1 为四相步进
脉冲输出端, Φ3~Φ1 为三相步进脉冲输出端,Em 为励磁监视端,Co 为输入脉冲监视端,VDD 为芯片的工作电源( + 4~ + 18V).其具体的原理框图如3-2-2所示:
图3-2-2 驱动电路框图
第三节 显示电路与键盘的选择
显示电路的用8279芯片来驱动
8279芯片的具体介绍如下:
1) DB0~DB7:双向数据总线。在CPU 于827数 据与命令的传送。
2) CLK:8279的系统时钟,100KHZ 为最佳选择。
3) RESET:复位输入线,高电平有效。当 RESET 输入端出现高电平时,8279被初始复位。
4) /CS:片选信号。低电平使能,使能时可将命令写入8279或读取8279的数据。
5) A0:用于区分信息的特性。当A0=1时,CPU 向8279写入命令或读取8279的状态;当
A0为0时,读写一数据。
6) /RD:读取控制线。/RD=0,8279会送数据至外部总线。
7) /WR:写入控制线。/WR=0,8279会从外部总线捕捉数据。
8) IRQ :中断请求输出线,高电平有效。当FIFO RAM 缓冲器中存有键盘上闭合键的键码
时,IRQ 线升高,向CPU 请求中断,当CPU 将缓冲器中的输入键数的数据全部读取时,中断请求线下降为低电平。
9) L0~SL3:扫描输出线,用于对键盘显示器扫 描。可以是编码模式(16对1)或译
码模式(4对1)。
10) ~RL7:反馈输入线,由内部拉高电阻拉成高电平,也可由键盘上按键拉成低电平。
11) FT、CNTL/STB :控制键输入线,由内部拉高电 阻拉成高电平,也可由外部控制按
键拉成低电平。
12) TB0~3、OUTA0~3:显示段数据输出线,可分别作为两个半字节输出,也可作为8
位段数据输出口,此时OUTB0为最低位, OUTA3位最高位。
13) 消隐输出线,低电平有效。当显示器切换时或使用消隐命令时,将显示消隐。
8279引脚图
第四章 软件的设计
第一节 显示子程序的设计
图4-1 显示程序流程图
第二节 键盘子程序的设计
图4-2键盘程序流程图
第三节 驱动程序流程的设计
图4-3主程序流程图
第四节 正反转程序流程图
(一) 正反转程序流程图
图4-4-1 正反转程序流程图
(二) 转速快慢程序流程图
4-4-2 转速快慢程序流程图
(三)定时中断流程图
图4-4-3 中断子程序流程图
第五章 实验结果与分析
第一节 有关参数的计算与分析
在单相三拍方式控制中,假如A 相电源通电,B 、C 两相都不通电,在磁场作用下,使转子齿和A 相的定子齿对齐。若此时为初始状态,并设与A 相磁极对齐的齿为0号齿,由于B 相齿与A 相齿相差120度。且
1209
=13
13
不为整数。所以此转子不能和B 号齿对齐,只有13
号小齿靠近B 相磁极的中心线,与中心线相差3度,如果此时变为B 相通电,万里A 、C 两相不通电,则B 相磁极迫使与13号齿对齐,整个齿就转了3度,称为一步。步进电机就是以这种方式作为动力而转动。
在单相三拍A-B-C-A 通电一周,转子转动了9度。固步距角可用公式5-1表示:
Q S =
360NZ
ο
r
(5-1)
其中Q S 为步距角,N 为运行的拍数,Z r 为转子的齿数。其中N =m c *c ,
m c 为控制的相绕阻,C
在三拍中为1,在六拍中为2。
步距角的速度的控制是通过改变脉冲的时间间隔来控制的。如果步进电机每转20圈要2秒。则每进一步所在的时间为:计算公式如5-2所示:
2000ms t =
=100ms 3*1*40
=833μs
NZ
r
(5-2)
可见只要输出一个脉冲后延时833μs 再输脉冲就可以达到自定的速度。本次设计在求的转速范围为0到1000m in ,最高转速时的精度为2%。功率为1W 。
得:步进脉冲之间的延迟时间为T 1-T 2。T 1=0。
=499. 8μs ≈500μs
T 2=3*1*40 延迟时间在0到500μS 。精度是由步进电机的性能
60000
r
决定的。
第二节 理论与实际的分析
从Q S =
360N Z r
的公式看到, 改变步进电动机步距的大小有三种方式:
1) 改变步进电动机的相数。步进电动机的相数越多、步距角就越小。 2) 与步进电动机的定、转齿数有关。
3) 与定子控制绕组的通电方式有关。要改变步进电机步距角的大小也只能通过这三种方式。设计中步进电机为三相,功率为1W 。因步进电机的转子上没有绕阻而是由40个小齿均匀地分布在圆周上。定子的齿也是固定不变的,通电方式是选取用三相单三拍方式。可见步进电机的一但选定,其步距角就不能再改变了。要改变转束也就只能通过脉冲之间的延时来改变。但对步进电动机的步距角的控制, 可以实现对步进电动机的转速精度控制。
但实际上步进电机在用行时是带有一定量的负载,当运转时会存在许多误差,同时因为负载的存在可能引起失步和震荡。这就使步进电机不能按预定的规律运行,从而是很难达到转速精度的要求。为准确测量电机的转速稳定度, 须选用高精度测量仪器。光电编码器因光电式数字输出而更具抗干扰性强和处理简便的优势。增量式旋转编码器。其核心部件为光栅码盘, 玻璃盘表面的光栅道数决定了编码器的分辨率, 而后者制约了转速测量的精度。当编码器分辨率与系统误差相近时, 其影响将不复存在。
光电编码器的分辨率是决定着反馈的准确性与反馈的精度。也对步进电机的延时长短起到一定的作用。可见实际与理论是有一定的差别的。
第六章 总 结
蓦然回首,为期两个多月的毕业设计就要结束了,在这漫长而又短暂之中,通过自己不断地学习,不断地努力与拼搏、不断地对新知识的追求与索取、不断地自我发现、感到自己的知识结构水平提出高了许多,对知识的掌握程度也加深了许多,对知识之间的相互联系也有了更深的了解;通过不断地提高自己的认识水平与能力、不断地学习新方法、新思想、新的思维方式、不断地改变自己的人生观和方法论、感到自己不但成长且成熟了许多;通过不断地把课本知识应用于实际,不断地把查阅到的资料与文献中有用的东西应用于实现,不断地把所学的理论与方法应用于设计之中,从而提高了自己理论联系实际的能力。
通过这两个多月的毕业设计,把所学过的各种知识进行了一次全面而系统的综合,并融会贯通,把所学到的各种理论与思想进行可一次合理的应用,把所查阅到的各种文献及与设计相关的资料进行了合理的提取与分析,并应用到实际。这不但增强了自己的知识结构,同时对所学过的各种理论知识与专业知识进行了一次全面的终结。由于不断的上机操作与实践,不但加强了自己动手能力,同时对一些计算机软件的应用有了一定的掌握与理解,并加强了网上学习和查阅资料的能力。
步进电机调速系统适用各种现场自动化控制,特别应用于小功率负载的控制;具有成本底,性能稳定, 可靠性高等优点。步进电机作为执行元件,在科技的进步中起到了非常重要的作用,而步进电机调速系统可方便地应用与各种自动化控制系统与领域。毕业设计是对大学所学课程的一个高度的综合。无论是基础知识还是专业知识都被设计统一起来,使零散的知识系统化,形成了一种能力,这也是毕业设计所要达到的目的。这也为我们走入社会打下一个良好的基础,为走入社会对知识与理论的应用做了一个好的铺垫。人生的路是漫长而曲折的,在这漫长而曲折的道路上需要自己的不断努力与拼搏。作为即将离校的学生,走出校门就站在另一个人生起点上,还有很长的路要走,这必须有足够的勇气与自信去迎接挑战,克服困难,创造奇迹。特别对未来要充满期盼,充满希望,要微笑着走人生的每一步。“路漫漫其修远兮,我将上下而求索”。
参考文献
[1] 张洪润, 蓝清华. 单片机应用技术教程[M] ,清华大学出版社,1997. [2] 秦曾煌. 电工学[M] .高等教育出版社,1999.
[3] 常斗南, 等. 可编程序控制器原理、应用、实验[M] ,机械工业出版社,1998. [4] 于海生, 等. 微型计算机控制技术[M] ,清华大学出版社,1999.
[5] 王福瑞, 等. 单片机微机测控系统设计大全[M],北京航空航天大学出版社,1998. [6] 陈理壁. 步进电机及其应用[M], 上海科学技术出版社,1989.
[7] 刘保延, 等. 步进电机及其驱动控制系统[M],哈尔滨工业大学出版社,1997. [8] 季维发, 过润秋, 严武升等. 机电一体化技术[M],电子工业出版社,1995. [9] 郭敬枢, 庄继东, 孔峰. 微机控制技术[M],重庆大学出版社,1994. [10] 刘国荣. 单片微型计算机技术[M],机械工业出版社,1996.
[11] 王福瑞. 单片微机测控系统设计大全[M],北京航空航天大学出版社,1998. [12] 何立民. 单片机应用技术选编[M],北京航空航天大学出版社,1993.
附录
8279的初始化程序如下:
INIT:MOV DPTR,#7FFFH ;置8279命令/状态口地址 MOV A,#0D1H ;置清显示命令字 MOVX @DPTR,A ;送清显示命令 WEIT:MOVX A,@DPTR ;读状态
JB ACC.7,WEIT ;等待清显示RAM 结束 MOV A,#34H ;置分频系数,晶振12MHz MOVX @DPTR,A ;送分频系数 MOV A,#00H ;置键盘/显示命令 MOVX @DPTR,A ;送键盘/显示命令 MOV IE,#84H ;允许8279中断 RET
显示子程序如下:
DIS:MOV DPTR,#7FFFH ;置8279命令/状态口地址 MOV R0,#30H ;字段码首地址 MOV R7,#08H ;8位显示 MOV A,#90H ;置显示命令字 MOVX @DPTR,A ;送显示命令 MOV DPTR,#7FFEH ;置数据口地址 LP:MOV A,@R0 ;取显示数据 ADD A,#6 ;加偏移量
MOVC A,@A+PC ;查表,取得数据的段码 MOVX @DPTR,A ;送段码显示 INC R0 ;调整数据指针 DJNZ R7,LP ; RET
SEG:DB 3FH,06H ,5BH ,4FH ,66H ,6DH ;字符0、1、2、3、4、5段码
DB 7DH,07H ,7EH ,6FH ,77H ,7CH ;字符6、7、8、9、A 、B 段码 DB 39H,5EH ,79H ,71H ,73H ,3EH ;字符C 、d 、E 、F 、P 、U 段码 DB 76H,38H ,40H ,6EH ,FFH ,00H ;字符H 、L 、-、Y 、“空”段码 键盘中断子程序如下:
KEY:PUSH PSW PUSH DPL PUSH DPH PUSH ACC PUSH B SETB PSW.3
MOV DPTR,#7FFFH ;置状态口地址 MOVX A,@DPTR ;读FIFO 状态 ANL A,#0FH ; JZ PKYR ;
MOV A,#40H ;置读FIFO 命令 MOVX @DPTR,A ;送读FIFO 命令 MOV DPTR,#7FFEH ;置数据口地址 MOVX A,@DPTR ;读数据
LJMP KEY1 ;转键值处理程序 PKYR: POP B POP ACC POP DPH POP DPL POP PSW
RETI ; KEY1: „ „ ;键值处理程序 键盘程序清单:
KEY1: ACALL
KS1 ; 有无键按下子程序
JNZ LK1 ;有键按下,转去抖延时 AJMP
KEY1
;无键按下,继续扫描
LK1:
ACALL DELA12 ;12ms 延时程序调用
ACALL KS1 ;判断键是否真正按下
JNZ LK2 ;有键按下,转逐列扫描 AJMP
KEY1 ;无键按下,继续扫描
;设置首列扫描字
LK2:
MOV R2,#0FEH
MOV R4,#00H ;保存首列号
MOV DPTR,#7F01H;列扫描字送至PA 口
LK4:
MOV A,R2
MOVX
@DPTR,A
;指向PC 口
INC DPTR INC DPTR MOVX
A,@DPTR ;读入行状态
;第0行无键按下,转LONE
JB ACC.0,LONE
MOV A,#00H ;有键按下,设置行首键号 AJMP
LKP ;转求键号
LONE: JB ACC.1,LTWO ;第1行无键按下,转LTWO
MOV A,#08H ;有键按下,设置行首键号 AJMP
LKP ;转求键号
LTWO: JB ACC.2,LTHR ;第2行无键按下,转LTHR
LTHR: JB ACC.3,NEXT ;第3行无键按下,查下一列
MOV A,#18H ;有键按下,设置行首键
ADD A,R4
;求键号,键号=行首键号+列号
MOV A,#10H ;有键按下,设置行首键? AJMP
LKP ;转求键号
LKP:
PUSH ACC ;保护键号
LK3:
ACALL KS1 ;等待键释放
JNZ LK3 ;键未释放,继续等待 POP ACC ;键释放,键号送A AJMP
OVER
;键扫描结束
NEXT: INC R4 ;列号加1,指向下一列
MOV A,R2
;判断8列扫描完否
;8列扫描完,继续
JNB ACC.7,KND RL A
;扫描字左移一位
;送扫描字
MOV R2,A AJMP
LK4 ;转下一列扫描
KEY1
KND: AJMP
OVER: RET ;键扫描结束 KS1:
MOV DPTR,#7F01H ;指向PA 口
MOV A,#00H ;设置扫描字 MOVX
@DPTR,A ;扫描字送PA 口
;指向PC 口
INC DPTR INC DPTR MOVX
A,@DPTR ;读入PC 口状态
CPL ;以高电平表示有键按下 ANL A,#0FH ;屏蔽高4位 RET
初始化程序如下:
INIT:MOV DPTR,#7FFFH ;置8279命令/状态口地址 MOV A,#0D1H ;置清显示命令字 MOVX @DPTR,A ;送清显示命令 WEIT:MOVX A,@DPTR ;读状态
JB ACC.7,WEIT ;等待清显示RAM 结束 MOV A,#34H ;置分频系数,晶振12MHz MOVX @DPTR,A ;送分频系数 MOV A,#00H ;置键盘/显示命令
MOVX @DPTR,A ;送键盘/显示命令
MOV IE,#84H ;允许8279中断
RET
显示子程序如下:
DIS:MOV DPTR,#7FFFH ;置8279命令/状态口地址
MOV R0,#30H ;字段码首地址
MOV R7,#08H ;8位显示
MOV A,#90H ;置显示命令字
MOVX @DPTR,A ;送显示命令
MOV DPTR,#7FFEH ;置数据口地址
LP:MOV A,@R0 ;取显示数据
ADD A,#6 ;加偏移量
MOVC A,@A+PC ;查表,取得数据的段码
MOVX @DPTR,A ;送段码显示
INC R0 ;调整数据指针
DJNZ R7,LP ;
RET
键盘中断子程序如下:
KEY:PUSH PSW
PUSH DPL
PUSH DPH
PUSH ACC
PUSH B
SETB PSW.3
MOV DPTR,#7FFFH ;置状态口地址
MOVX A,@DPTR ;读FIFO 状态
ANL A,#0FH ;
JZ PKYR ;
MOV A,#40H ;置读FIFO 命令
MOVX @DPTR,A ;送读FIFO 命令
MOV DPTR,#7FFEH ;置数据口地址
MOVX A,@DPTR ;读数据
LJMP KEY1 ;转键值处理程序
PKYR: POP B
POP ACC
POP DPH
POP DPL
POP PSW
RETI ;
驱动电路子程序的设计
PUSH:MOV R3 , # NUM
PUSH A
PUSH PSW
LOOP: SETB P1.0
ACALL DELAY1
CLR P1.0
ACALL DELAY2
DJNZ R3,LOOP
POP PSW
POP A
RET
延时子程序的设计
MOV R2,#18H
LCALL 7FEBH
RET
ORG 7FEBH ;通用延时子程序(07EBH & 0FEBH & ...)
L7FEB: PUSH 02H ;R2(复位后R2即为02H) 存放时间常数, 进栈保护
L7FED: PUSH 02H ; R2进栈保护
L7FEF: PUSH 02H ; 进栈
L7FF1: DJNZ R2,$ ;R2不为零等待
POP 02H ;出栈
DJNZ R2,L7FEF ; R2不为零转
POP 02H ; 出栈
DJNZ R2,L7FED ; R2不为零转
POP 02H ; 出栈
DJNZ R2,L7FEB ; R2不为零转
RET ;子程序返回
END
主程序如下:
CON: MOV R3, # N
MOV TMOD , # 10H
MOV TL1 , # LOW
MOV TH1 , # H IGH
JNB FLAG ,LEFT
MOV R0 , RM
AJMP TIME - S
LEFT: MOV R0 , LM
TIME: SETB EA
SETB ET1
SETB TR1
步进电机控制程序p3.2正转,p3.3反转,p3.4停止 步进电机接p1.0p1.1p1.2p1.3
org 00h
stop: orl p1,#0ffh ; 步进电机停止
loop:jnB p3.2,for2 ; 如果p3.2按下正转
jnB p3.3,rev2 ; 如果p3.3按下反转
jnB p3.4,stop1 ; 如果p3.4按下停止
jmp loop ;反复监测键盘
for: mov r0,#00h ;正转到tAB 取码指针初值
for1:mov A,r0 ;取码
mov dptr,#tABle ;
movC A,@A+dptr
jz for ;是否到了结束码00h
Cpl A ;把ACC 反向
mov p1,A ;
jnB p3.4,stop1 ;
jnB p3.3,rev2 ;
CAll delAy ;
inC r0 ;
jmp for1 ;
rev:mov r0,#05h ;
rev1:mov A,r0
mov dptr,#tABle ;
movC A,@A+tABle
jz rev ;
Cpl A ;
mov p1,A ;
jnB p3.4,stop1 ;
jnB p3.3,rev2 ;
CAll delAy ;
inC r0 ;
jmp rev1 ;
stop1:CAll delAy ;
jnB p3.4,$ ; p3.4
CAll delAy ;
jmp stop
for2:CAll delAy ;
jnB p3.2,$ ; p3.2
输出到p1开始正转 如果p3.4按下停止 如果p3.3按下反转 转动的速度 取下一个码 继续正转 反转到tAB 取码指针初值 取码 是否到了结束码00h 把ACC 反向 输出到p1开始反转 如果p3.4按下停止 如果p3.3按下反转 转动的速度 取下一个码 继续反转 按p3.4的消除抖动 放开否? 放开消除抖动 按p3.2的消除抖动 放开否?
CAll delAy ;放开消除抖动
jmp for
rev2:CAll delAy ; 按p3.3的消除抖动
jnB p3.3,$ ; p3.3放开否?
CAll delAy ;放开消除抖动
jmp rev
delAy:mov r1,#40 ;步进电机的转速20ms
d1:mov r2,#248
djnz r2,$
djnz r1,d1
ret
tABle:
dB 03h,09h,0Ch,06h ;正转表
dB 00 ;正转结束
dB 03h,06h,0Ch,09h ;反转
dB 00 ;反转结束
end
步进电机正反快慢程序
org 00h
x1:mov r3,#48 ;一圈48步
stArt:mov r0,#00h ;正转取码初值
stArt1:
mov p1,#0ffh ;先停止
mov A,r0
mov dptr,#tABle
movC A,@A+dptr
jz stArt ;是否到了结束码00?
Cpl A
mov p1,A ;输出运转
CAll delAy ;调用慢速的延时转动
inC r0 ;取码指针加1取下一个码
djnz r3,stArt1 ;是否走了48步?
mov r3,#48 ;是则重新设定48步
stArt2:
mov p1,#0ffh
mov r0,#05 ;逆转的取码初值
stArt3:mov A,r0
mov dptr,#tABle
movC A,@A+dptr
jz stArt2
Cpl A
mov p1,A
CAll delAy2
inC r0
djnz r3,stArt3
jmp x1 ; 重复开始
DELAY: ; 延时程序 (慢速)
MOV R7,#255
D1:MOV R6,#50
D2: DJNZ R6,D2
DJNZ R7,D1
RET
DELAY2: ; 延时程序 (快速)
MOV R5,#255
D3:MOV R2,#25
D4: DJNZ R2,D4
DJNZ R5,D3
RET
tABle:
dB 03h,09h,0Ch,06h ;正转表
dB 00
dB 06h,0Ch,09h,03h ;反转表
dB 00
end
中断服务程序如下:
INTTO: PUSH A
PUSH PSW
MOV A , @R0
MOV P1 ,A
INC R0
MOV A , # 00H
XRL A , @R0
JNZ NEXT
MOV A , R0
CLR C
SUBB A , # 03H
MOV R0 , A
NEXT: DJNZ R3 , RETU
CLR ET1
CLR EA
RETU: POP PSW
POP A
RETI
利用软件形成脉冲序列的程序清单:
PULSE_S: MOV R7,#NUM ;设定脉冲个数
PUSH A ;保护现场
PUSH PSW
LOOP: SETB P1.0 ;输出高电平
ACALL DELAY1 ;延时
CLR P1.0 ACALL DJNZ ;输出低电平 DELAY2 ;延时 R7,LOOP ;R7≠0,继续输出脉冲 POP PSW ;恢复现场
POP A
RET
定时中断子程序
TIME0: CLR EA ;关中断
INC 30H MOV A,30H XRL A,#50H ;判断是否到8秒 JZ S_8 ;8秒定时到,转至S_8 AJMP RECOUN ;未到8秒,继续计时
P3.2 ;触发外部中断0 S_8:
SETB NOP CLR P3.2 NOP
RECOUN: MOV TH0,#3CH
MOV TL0,#0B0H SETB RETI ;设定定时器初值 EA ;开中断 ;中断返回
中断子程序
T_CON: PUSH
JNB FLAG,LEFT ;判断旋转方向
;正转模型起始地址 PUSH A ;保护现场 PSW ;设定控制步数 MOV R7,#N RIGHT: MOV R0,RM
AJMP ROTATE
LEFT: MOV R0,LM
ROTATE: MOV A,@R0
MOV P1,A ACALL ;取第一拍控制模型 ;输出第一拍控制模型 DELAY1 ;延时
INC R0
MOV A,@R0 MOV P1,A ACALL INC R0 MOV A,@R0 MOV P1,A ACALL DJNZ ;取第三拍控制模型 ;输出第三拍控制模型 ;取第二拍控制模型 ;输出第二拍控制模型 DELAY1 ;延时 DELAY1 ;延时 R7,ROTATE ;未走完要求的步数,继续 POP PSW ;恢复现场 POP A RET ;返回
致 谢
随着毕业设计的逐渐完成,离毕业离校的日子也就越来越近了。在这大学三年里,我非常感谢各位老师三年来对我的栽培,以及各位同学朋友对我的帮助,正是由于他们在学习和生活上给予我无微不至的关怀,才使我在这三年期间不仅学到了扎实的专业知识,还学到了很多为人处事的原则。
通过这次最后的毕业设计,又使我学到了很多专业知识,实验技能也有了很大的提高,其实,有些事并非我们想的那样难,世上无难事,只怕有心人,只要我们真正用心去做了,你就会发现一切就变得很容易了。虽然感觉自己做的还不是很好吧!但毕竟自己亲自去做了,所以还是有点成就感的。
在这次设计中我首先要感谢我的指导老师——赵玲,我能够顺利地完成这篇设计,很大程度上都要归功于她的细心指导,无论我们开始做的多么差,她都会细心的一个一个的给我们修改。其次,我还要感谢我的同学,感谢他们对我的支持和帮助。我想通过这次设计,对我以后的工作一定会有很大帮助的。
最后,我还要感谢我的母校——河南工程学院,感谢“她”为我提供了一个良好的学习和生活环境。如果没有“她”也就没有今天的我们,即将离开学校,还真有点舍不得,在以后的日子里我会时常想起这里的一幕幕,因为在这里曾经给我留下了太多的喜. 怒. 哀. 乐,有太多的人和事值得我去怀念了。
在这即将离开之即,愿我们的母校明天更加美好!