新手求助s7 200Plc怎样用脉冲信号驱动步进电机的啊

如题所述

//标题:用脉冲输出进行定位控制
//主程序
ld sm0.1
//仅首次扫描周期sm0.1才为1。
r m0.0,128
//md0至md12复位
atch 0,19
//把中断程序0分配给中断事件19(脉冲串终止)
eni
//允许中断
//脉冲输出功能的初始化
movw 500,smw68
//脉冲周期t=500us
movw 0,smw70
//脉冲宽度为0(脉冲调制)
movd 429496700,smd72
//为参考点设定的最大脉冲数
//设置逆时针旋转
ldn m0.1 //若电机停止
a i1.5 //且旋转方向开关=1
s q0.2,1 //则逆时针旋转(q0.2=1)
//设置顺时针旋转
ldn m0.1 //若电机停止
an i1.5 //且旋转方向开关=0
r q0.2,1 //则逆时针旋转(q0.2=0)
//联锁
ld i1.1
//若按“stop”(停止)按钮
s m0.2,1 //则激活联锁(m0.2=1)
//解除联锁
ldn i1.1
//若“start”(启动)按钮松开
an i1.0
//且“stop”(停止)按钮松开
r m0.2,1 //则解除联锁(m0.2=0)
//确定操作模式(参考点定位控制)
ld i1.4
//若按“设置/取消参考点”按钮
eu //上升沿
call 1 //则调用子程序1
//启动电机
ld i1.0
//若按“start”(启动)按钮
eu //上升沿
an m0.1 //且电机停止
an m0.2 //且无联锁
ad≥ smd72,1
//且步数≥1,则
movb 16#85,smb67
//置脉冲输出功能(pto)的控制位
pls 0 //启动脉冲输出(q0.0)
s m0.1,1
//“电机运行”标志位置位(m0.1=1)
//定位控制
ld m0.3
//若已激活“定位控制” 操作模式
an m0.1 //且电机停止
call 2 //则调用子程序2
//停止电机
ld i1.1
//若按“stop”(停止)按钮
eu //上升沿
a m0.1 //且电机运行,则
call 0 //则调用子程序0
mend //主程序结束
//子程序1
sbr 0 //子程序0停止电机
movb 16#cb,smb67
//激活脉宽调制
pls 0 //停止输出脉冲到q0.0
r m0.1,1
//“电机运行”标志位复位(m0.1=0)
ret //子程序0结束
sbr1
//子程序1,“确定操作模式”
ld m0.1 //若电机运行
call 0
//则调用子程序0,停止电机
//申请“参考点曲线”
ld m0.3
//若已激活“定位控制”,则
r m0.3,1
//参考点标志位;复位(m0.3=0)
r q1.0,1
//取消“定位控制激活”信息(q1.0=0)
movd 429496700,smd72
//为新的“参考点曲线”设定最大的脉冲数。
cret
//条件返回到主程序。
//申请“定位控制”
ldn m0.3
//若未设置参考点(m0.3=0),则
s m0.3,1
//参考点标志位置位(m0.3=1)
s q1.0,1
//输出“定位控制激活”信息(q1.0=1)
ret //子程序1结束
//子程序2
sbr2 //子程序2,“定位控制”
movb ib0,mb11
//把定位角度从ibo拷到md8的最低有效字节mb11。
r m8.0,24
//mb8至mb10清零
div 9,md8
//角度/9=q1+r1
movw mw8,mw14
//把r1存入md12
mul 25,md8
//q1×25→md8
mul 25,md12
div 9,md12
// r1×25/9= q2+r2
call 3
//在子程序3中循环步数
movw 0,mw12 //删除r2
+d md12,md8
//把步数写入md8
movd md8,smd72
//把步数传到smd72
ret //子程序2结束
//子程序3
sbr3 //子程序3,“循环步数”
ldw≥mw12,5 //如果r2≥5/9,则
incw mw14 //步数增加1。
ret
//子程序3结束
//中断程序0,“脉冲输出终止”
int0 //中断程序0
r m0.1,1
//“电机运行”标志位复位(m0.1=0)
ret //子程序0结束
6 结束语
温馨提示:答案为网友推荐,仅供参考
相似回答