步进电机的单片机控制系统软件设计.docx
《步进电机的单片机控制系统软件设计.docx》由会员分享,可在线阅读,更多相关《步进电机的单片机控制系统软件设计.docx(21页珍藏版)》请在冰豆网上搜索。
步进电机的单片机控制系统软件设计
步进电机的单片机控制系统软件设计
4.1控制程序总体设计
系统软件采用模块化程序设计,使程序流程清晰明了。
系统主程序主要完成的内容:
系统参数初始化、判断保护信号、打开中断启动电机。
系统主程序流程图如下图4-1所示[1]。
可以看出,主程序是一个死循环,在系统上电初始化完毕后,系统一直在不断的执行这个循环程序。
在循环过程中,若产生中断,则程序就转去执行相应的中断服务程序。
在后面将逐一介绍中断服务程序,功能子程序等的设计。
图4-1主程序流程图
步进电动机的速度控制通过控制单片机发出的步进脉冲频率来实现。
对于用软件实现脉冲分配,可以采用调整两个控制字之间的时间间隔来实现调速。
根据调速原理,控制步进电动机速度的方法可有两种:
一、通过软件延时的方法。
改变延时的时间长度就可以改变输出脉冲的频率,但这种方法使CPU长时间等待,占用大量机时,因此没有实用价值。
二、通过定时器中断的方法。
在中断服务子呈现中进行脉冲输出操作,调整定时器的定时常数就可以实现调速。
本系统软件延时的方法实现调速,从HSO.0通道输出连续脉冲信号。
在50H单元存放脉冲处于“1”电平时间值(单位为2),52H单元存放脉冲处于“0”电平时间值(单位为2)。
改变50H和52H单元的内容,就可以改变脉冲输出的频率及占空比。
程序如下:
主程序
ORG2080H
OUPSS:
LDSP,#00C0H;设栈指针
DI;关中断
ORBINT-MASK,#8H;允许HSO中断
LDTEMP,#HSO-INT;送HSO中断服务程序入口地址
STTEMP,2006H[0]
ADD54H,T1,52H;计算上跳变时刻
SCALLLDCAM;调CAM装载子程序
EI;开中断
HERE:
SJMPHERE;等待中断
中断服务程序
HSO-INT:
PUSHF;保护PSW,同时清PSW
SCALLLDCAM;调CAM装载子程序
POPF;恢复PSW
RET;返回主程序
CAM装载子程序
LDCAM:
LDBHSO-COMMAND,#20H;1→HSO.0
LDHSO-TIME,54H
ADD54H,50H;计算下跳变时刻
NOP
NOP;空操作
LDBHSO-COMMAND,#10H;0→HSO.0,并产生HSO中断
LDHSO-TIME,54H
ADD54H,52H;计算上跳变时刻
RET
其它高速输出口(HSO)的连续脉冲信号的产生程序可依据如上程序写入。
这样可通过改变输出脉冲的频率达到控制步进电动机速度和方向。
4.2键盘/显示器的自动扫描
8279是Intel公司生产的通用可编程键盘和显示器I/O接口芯片。
利用8279,可实现对键盘/显示器的自动扫描,并识别键盘上闭合键的键号,这样可以大大节省CPU对键盘/显示器的操作时间,从而减轻CPU的负担,而且显示稳定,程序简单,不会出现误动作。
主程序框图如下图4-2所示
图4-2主程序框图
图4-3中断服务子程序框图
;主程序
STATUSEQU7FFFH
DATAEQU7FFEH
AXEQU20H
ALEQU20H
AHEQU21H
BXEQU22H
BLEQU22H
BHEQU23H
CXEQU24H
CLEQU24H
CHEQU25H
DXEQU26H
DLEQU26H
DHEQ27H
EXEQ28H
ELEQU28H
EHEQU29H
FXEQU2AH
FLEQU2AH
FHEQU2BH
LDAX,#200EH
LDBX,#3000H
STBX,[AX]
LDBBL,#0DEH
STBBL,STATUS[R0]
LDBL,#00H
STBBL,STATUS[R0]
LDBBL,#34H
STBBL,STATUS[R0]
LDBAH,#00H
LDBAL,#00H
LDBAH,#00H
EI
中断服务程序
LDBBL,#40H
STBBL,STATUS[R0]
LDBBL,DATA[R0]
STBBL,[EL]
CLRC
SUBBBL,#38H
JCL1
LDBBL,[AH]
SHRBBL,#01H
JNCL2
INCBAL
LDBBL,[AL]
SHRBBL,#01H
JCL3
LDBBL,[EL]
STBBL,[EH]
INCB[FL]
L8:
LJMPL4
EI
RET
L3:
LDBBL,[EL]
STBBL,[DL]
LDB[FL],#80H
LJMPL8
L1:
CLRC
SUBBBL,#38H
JNZL5
INCBAH
LDBBL,[DH]
SHRBBL,#04H
ANLBBL,#0FH
STBBL,[DL]
LDB[FL],#80H
LJMPL4
LDBBL,[DH]
ANLBBL,#0FH
STBAL,[EH]
INCB[FL]
LJMPL4
L9:
EI
RET
L5:
LDBBL,[EL]
CLRC
SUBBBL,#39H
JNZL2
SHRBAL,#02H
JCL2
LDBAH,#00H
LDBAL,#00H
LDBBL,[DL]
SHLBBL,#04H
ANLBBL,#0F0H
ORBBL,[EH]
STBBL,[DH]
LJMPL9
4.3软件脉冲分配器
软件脉冲分配器是指实现脉冲分配控制的计算机程序,其控制的基本原理是:
根据步进电机与计算机的接线情况及通电方式列出脉冲分配控制数据表;运行时按节拍序号查表获得相应的控制数据;在规定时刻通过输出口将数据输出到步进电机驱动电路。
下面通过单片机8031对X-Y工作台的两台四相步进电机进行控制的接口电路原理图。
图中采用了负逻辑控制,即当8031的P1口某一口线输出低电平“0”时,对应的步进电机绕组被接通。
下图4-4是单片机与步进电机的接口电路图:
图4-4单片机与步进电机的接口电路图
下表4-1是按上图列出的四相八拍脉冲分配控制数据表:
表4-1四相八拍脉冲分配控制数据表
节拍序号
Y向电动机
X向电动机
通电相
控制数据
旋转方向
P1.7
P1.6
P1.5
P1.4
P1.3
P1.2
P1.1
P1.0
D
C
B
A
D
C
B
A
1
1
1
1
0
1
1
1
0
A
EEH
向下正转
向上反转
2
1
1
0
0
1
1
0
0
AB
CCH
3
1
1
0
1
1
1
0
1
B
DDH
4
1
0
0
1
1
0
0
1
BC
99H
5
1
0
1
1
1
0
1
1
C
BBH
6
0
0
1
1
0
0
1
1
CD
33H
7
0
1
1
1
0
1
1
1
D
77H
8
0
1
1
0
0
1
1
0
DA
66H
下图4-5为脉冲分配控制程序框图:
图4-5脉冲分配控制程序框图
对应的子程序清单如下:
XPD:
CLR01H
MOVR1,#52H
MOVC,02H
AJMPPPD
YPD:
SETB01H
MOVR1,#53H
MOVC,03H
PPD:
JCPPD2
INC@R1
CJNE@R1,#09H,PPD3
MOV@R1,#01H
AJMPPPD3
PPD2:
DEC@R1
CJNE@R1,#00H,PPD3
MOV@R1,#08H
PPD3:
MOVA,@R1
ADDA,#01H
MOVC@A+PC
AJMPPPD5
TABLE:
DB:
0EEH,0CCH,0DDH,99H
DB:
0BBH,33H,77H,66H
PPD5:
JB01H,PPD6
ANLA,#0FH
ANL55H,#0F0H
ORL55H,#0F0H
ORL55H,A
RET
PPD6:
ANLA,#0F0H
ANL55H,#0FH
ORL55H,A
RET
关于子程序的若干问题说明:
1)标号XPD和YPD分别为向X向及Y向步进电机分配脉冲时的子程序入口。
2)位02H、03H分别为X向、Y向步进电机正反转标志位,其值来自主程序。
3)55H为脉冲分配控制数据缓冲单元,其中的数据将从P1口输出给步进电机。
由于子程序每次运行只能对一个步进电机进行脉冲分配控制,故55H中的数据每次只有半个字节被修改,而另一半则保留。
4.4速度控制程序与方向控制程序
4.4.1速度控制程序
通过控制脉冲分配频率可实现步进电机的速度控制。
速度控制也有硬、软件两种方法。
硬件方法是在硬件脉冲分配器的时钟脉冲输入端(CP端)接一可变频率脉冲发生器,改变其振荡频率,即可改变步进电机速度。
下面主要介绍软件方法。
软件方法常采用定时器来确定每相邻两次脉冲分配的时间间隔,即脉冲分配周期,并通过中断服务器程序向输出分配控制数据[12]。
下面的程序即可实现这一功能,其中采用了单片机8031的CTC0(零号定时/计数器)。
FC:
MOVTL0,5BH;5AH、5BH中存放着与速度相关数据
MOVTH0,5AH;相应的定时常数
SETBTR0;启动定时器
.
.;其他程序
.
INTR0:
MOVTL0,5BH;重装定时常数
MOVTH0,5AH
MOVP1,55H;输出脉冲分配控制数据
RETI;中断返回
程序中前三条指令的作用是预置定时常数及启动定时器,可放在主程序中执行,也可作为子程序调用。
定时器启动后,计算机可进行其他工作。
当有定时中断申请时,CPU响应中断,从标号为INTR0的中断服务器程序入口开始进行中断服务。
首先重装定时器常数,为下个节拍做好准备,然后从P1口输出55H中寄存的脉冲分配控制数据。
速度控制的关键是定时常数的确定。
设数控X-Y工作台的脉冲当量为H(mm),要求的运动速度为v(mm/min),8031的晶振频率为fose(HZ),采用CTC0的工作模式1(即16位定时器模式),则定时常数Tx(s)可按下式确定。
4.4.2方向控制程序
在程序的编制中,要特别注意步进电机在换向时的处理。
为使步进电机在换向时能平滑过渡,不至于产生错步,应在每一步中设置标志位。
其中20H单元的各位为步进电机正转标志位;21H单元各位为反转标志位。
在正转时,不仅给正转标志位赋值,也同时给反转标志位赋值;在反转时也如此。
这样,当步进电机换向时,就可以上一次的位置作为起点反向运动,避免了电机换向时产生错步[13]。
下图4-6是方式1程序框图:
图4-6正反转程序框图
方式1源程序:
MOV20H,#00H;20H单元置初值,电机正转位置指针
MOV21H,#00H;21H单元置初值,电机反转位置指针
MOVP1,#0C0H;P1口置初值,防止电机上电短路
MOVTMOD,#60H;T1计数器置初值,开中断
MOVTL1,#0FFH
MOVTH1,#0FFH
SETBET1
SETBEA
SETBTR1
SJMP$
***********计数器1中断程序************
IT1P:
JBP3.7,FAN;电机正、反转指针
*************电机正转*****************
JB00H,LOOP0
JB01H,LOOP1
JB02H,LOOP2
JB03H,LOOP3
JB04H,LOOP4
JB05H,LOOP5
JB06H,LOOP6
JB07H,LOOP7
LOOP0:
MOVP1,#0D0H
MOV20H,#02H
MOV21H,#40H
AJMPQUIT
LOOP1:
MOVP1,#090H
MOV20H,#04H
MOV21H,#20H
AJMPQUIT
LOOP2:
MOVP1,#0B0H
MOV20H,#08H
MOV21H,#10H
AJMPQUIT
LOOP3:
MOVP1,#030H
MOV20H,#10H
MOV21H,#08H
AJMPQUIT
LOOP4:
MOVP1,#070H
MOV20H,#20H
MOV21H,#04H
AJMPQUIT
LOOP5:
MOVP1,#060H
MOV20H,#40H
MOV21H,#02H
AJMPQUIT
LOOP6:
MOVP1,#0E0H
MOV20H,#80H
MOV21H,#01H
AJMPQUIT
LOOP7:
MOVP1,#0C0H
MOV20H,#01H
MOV21H,#80H
AJMPQUIT
***************电机反转*****************
FAN:
JB08H,LOOQ0
JB09H,LOOQ1
JB0AH,LOOQ2
JB0BH,LOOQ3
JB0CH,LOOQ4
JB0DH,LOOQ5
JB0EH,LOOQ6
JB0FH,LOOQ7
LOOQ0:
MOVP1,#0A0H
MOV21H,#02H
MOV20H,#40H
AJMPQUIT
LOOQ1:
MOVP1,#0E0H
MOV21H,#04H
MOV20H,#20H
AJMPQUIT
LOOQ2:
MOVP1,#0C0H
MOV21H,#08H
MOV20H,#10H
AJMPQUIT
LOOQ3:
MOVP1,#0D0H
MOV21H,#10H
MOV20H,#08H
AJMPQUIT
LOOQ4:
MOVP1,#050H
MOV21H,#20H
MOV20H,#04H
AJMPQUIT
LOOQ5:
MOVP1,#070H
MOV21H,#40H
MOV20H,#02H
AJMPQUIT
LOOQ6:
MOVP1,#030H
MOV21H,#80H
MOV20H,#01H
AJMPQUIT
LOOQ7:
MOVP1,#0B0H
MOV21H,#01H
MOV20H,#80H
QUIT:
RETI
END
该驱动器经实验验证能驱动0.5N·m的步进电机。
将驱动部分的电阻、电容及续流二极管的有关参数加以调整,可驱动1.2N·m的步进电机。
该驱动器电路简单可靠,结构紧凑,对于I/O口线与单片机资源紧张的系统来说特别适用。
4.5自动升降速程序
步进电机允许的启动频率一般较低,当要求高速运行时,必须用较低的频率启动,然后逐渐加速,否则不能正常启动。
制动时也应该逐步降到较低的频率后再制动,否则定位不准。
步进电机自动升降速也可以通过硬、软件两种方法实现。
这里只介绍软件自动升降速控制。
软件自动升降速控制的基本原理是:
根据允许的启动频率确定定时器的初始定时常数,在升速过程中,按一定规律不断增加定时常数(对加法计数的定时器来讲),减小中间时间间隔,加快脉冲分配频率;在恒速过程中,保持定时常数不变;在降速过程中,按规律不断减小定时常数,降低脉冲分配频率,直到定时常数等于希望的制动频率所对应的值时,停止脉冲分配,使步进电机制动[14]。
升降速过程可按指数或直线(匀加速)规律控制,前者的特点是升降速过程短,与步进电机的阶跃响应规律吻合,但程序设计复杂;后者的特点是程序简单,但升降速过程较长。
下图4-7是采用分段直线规律进行的自动升降速控制的程序框图:
图4-7自动升降速控制的程序框图
对应的单片机程序清单如下:
VOU:
MOVA,58H
ANLA,#0FCH
ORLA,57H
JZVDON
MOVA,5AH
CLRC
CJNEA,1AH,VUP
MOVA,5BH
CJNEA,1BH,VUP
RETURN:
RET
VUP:
JNCRETURN
DJNZ4CH,RETURN
MOVA,5AH
CJNEA,1AH,VDV1
MON4CH,#02H
VDV1:
INC4CH
MOVA,5BH
ADDA,#01H
MOV5BH,A
MOVA,5AH
ADDCA,#00H
MOV5AH,A
RET
VDON:
MOVA,5AH
CLRC
CJNEA,18H,VD1
MOVA,5BH
CJNEA,19H,VD1
VD:
RET
VD1:
JCVD
MOVA,5BH
CLRC
SUBBA,#01H
MOV5BH,A
MOVA,5AH
SUBBA,#00H
MOV5AH,A
RET
对程序中若干问题说明如下:
1)57H、58H、59H三个字节中所寄存的距终点所需要的脉冲当量数最初由主程序设定,并在每分配出一个脉冲后作一次减1运算。
最终判别也在主程序中进行。
2)5AH、5BH中存放对应当前频率的定时常数,在升降速过程中作加1或减1修改;18H、19H中存放对应启动频率f0的定时常数;1AH、1BH中存放对应最高运行频率fmax的定时常数。
3)当至终点距离为03FFH个脉冲当量时,步进电机开始减速。
当频率减到启动频率f0后,步进电机恒速趋近终点,然后制动。