步进电机如想设成一步一步反转,程序应怎样修改 (续集)

[复制链接]
3416|5
 楼主| yangguon 发表于 2007-9-6 08:23 | 显示全部楼层 |阅读模式
用89C51控制2相步进电机,按一次仿真器按键&quot;运行&quot;,电机反向进两步,按6次就转360度,如想设成转动一步,程序应怎样修改?<br /><br /><br />loop:<br /><br />mov&nbsp;p0,#0f9h<br />call&nbsp;delay<br /><br />mov&nbsp;p0,#0fCh<br />call&nbsp;delay<br /><br /><br />mov&nbsp;p0,#0f6h<br />call&nbsp;delay<br /><br /><br />mov&nbsp;p0,#0f3h<br />call&nbsp;delay<br /><br />;----------------------------------------------<br />mov&nbsp;p0,#0f3h<br />call&nbsp;delay<br /><br />mov&nbsp;p0,#0f6h<br />call&nbsp;delay<br /><br /><br />mov&nbsp;p0,#0fCh<br />call&nbsp;delay<br /><br /><br />mov&nbsp;p0,#0f9h<br />call&nbsp;delay<br /><br /><br /><br />ajmp&nbsp;loop<br /><br />DELAY:&nbsp;MOV&nbsp;R7,#100<br />D1:&nbsp;MOV&nbsp;R6,#250<br />D2:&nbsp;DJNZ&nbsp;R6,D2<br />DJNZ&nbsp;R7,D1<br />RET<br /><br />end<br /><br /><br /><br />
 楼主| yangguon 发表于 2007-9-8 10:49 | 显示全部楼层

步进电机如想设成一步一步反转,程序应怎样修改 (续集)

有些楼主说程序没办法看出你的控制细节,本人修改了程序,现在按照同样的电路原理图<br /><br />在89C51&nbsp;P2.1&nbsp;&nbsp;端接按键脚,另一端接地.&nbsp;按键名为CCW<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;P2.0&nbsp;&nbsp;端接按键脚,另一脚接地,按键名为CW<br /><br />&nbsp;此程序的功能为按一下CW开关,马达顺时针转60度,按一下CCW开关,则反时钟循环60度<br /><br />本程序使用20H.0与20H.1存放CW与CCW两开关新输入的数据,而使用21H.0与21H.1存放旧数据,用于检查是否有按键.<br /><br />ACTION子程序的前半部做正转控制,后半部则做反转控制.程序首先检查21H.0,若21H.0=0,则表示已按正转开关,所以将R5的低4位取出左循环1位,并自P1输出.而若21H.1=0,则表示已按反转开关,所以将R5的低4位取出右循环1位,并自P1输出.<br /><br />步进马达数据表<br />输入&nbsp;&nbsp;&nbsp;&nbsp;CCW&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CW<br />新&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;20H.1&nbsp;&nbsp;&nbsp;&nbsp;20H.0<br />旧&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;21H.1&nbsp;&nbsp;&nbsp;&nbsp;21H.0<br />&nbsp;<br />本人从仿真器调试过程序,当按下CCW键,步进电机反转一步,再按CW电机正转一步,但本人重复按正转或反按键,电动机都是向前向后原地踏步,请大家给点指示,我应怎样修改程序,我想按正转或反按键时电动机一步一步转动,可以转360度<br /><br />CW&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;P2.0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;CW=0表示按下正转开关<br />CCW&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;P2.1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;CCW=0表示按下反转开关<br />;--------R5:&nbsp;&nbsp;&nbsp;&nbsp;P1值暂存用---------------------<br />MAIN:&nbsp;&nbsp;&nbsp;MOV&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R5,#0FEH&nbsp;&nbsp;;设置R5的初值<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;20H,#00H&nbsp;&nbsp;;设置地址20H的初值<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;31H,#00H&nbsp;&nbsp;;设置地址21H的初值<br />CHEKSW:&nbsp;ACALL&nbsp;&nbsp;&nbsp;SWIN&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;输入按键值至20H<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A,20H&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;检查键值至20H<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;XRL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A,21H&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JZ&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CHEKSW&nbsp;&nbsp;&nbsp;&nbsp;;若无键被按,则跳回CHEKSW<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ACALL&nbsp;&nbsp;&nbsp;DELAY&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;等待抖动时间<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ACALL&nbsp;&nbsp;&nbsp;SWIN&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;再输入按键值至20H<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A,20H&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;检查键值是否改变<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;XRL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A,21H<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JZ&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CHEKSW&nbsp;&nbsp;&nbsp;&nbsp;;若无按键,则跳回CHEKSW<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;21H,20H&nbsp;&nbsp;&nbsp;;更新旧数据<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ACALL&nbsp;&nbsp;&nbsp;ACTION&nbsp;&nbsp;&nbsp;&nbsp;;调用主控制子程序:ACTION<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SJMP&nbsp;&nbsp;&nbsp;&nbsp;CHEKSW<br />;--------------输入按键值子程序:SWIN--------------------<br />SWIN:&nbsp;&nbsp;&nbsp;MOV&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;C,CW&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;CW为正转开关<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;20H.0,C<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;C,CCW&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;CCW为反转开关<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;20H.1,C<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RET<br />;-------------主控制子程序ACTION---------------------------<br />ACTION:&nbsp;JB&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;21H.0,REVERSE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;若未按CW开关,则至REVERSE<br />FORWARD:MOV&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A,R5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;取出R5的低4位左循环1位<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JB&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ACC.4,SKIP1<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A,#0FEH<br />SKIP1:&nbsp;&nbsp;MOV&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R5,A<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;P0,A<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SJMP&nbsp;&nbsp;&nbsp;&nbsp;RETURN<br />REVERSE:JB&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;21H.1,RETURN&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;若未按CCW开关,则至RETURN<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A,R5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;取出R5的低4位右循环1位<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;并自P1输出<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JB&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ACC.7,SKIP2<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A,#0F7H<br />SKIP2:&nbsp;&nbsp;MOV&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R5,A<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;P0,A<br />RETURN:&nbsp;RET<br />DELAY:&nbsp;&nbsp;MOV&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R0,#00H<br />XL2:&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R1,#00H<br />DL1:&nbsp;&nbsp;&nbsp;&nbsp;NOP<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DJNZ&nbsp;&nbsp;&nbsp;R1,DL1<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DJNZ&nbsp;&nbsp;&nbsp;R0,XL2<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RET<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;END<br />
懒人 发表于 2007-9-8 15:50 | 显示全部楼层

我认为

你的程序仅是按键一次,前进一步<br />在主控制子程序ACTION退出时,将21H清零,能实现<br />按正转或反按键时电动机一步一步转动,可以转360度<br /><br />
 楼主| yangguon 发表于 2007-9-10 09:36 | 显示全部楼层

步进电机如想设成一步一步反转,程序应怎样修改 (续集)

本人再详细说一次,从仿真器调试过程序,当第一次按下CCW键,步进电机反转一步,再按CCW键,电机再反转进一步,第三次按CCW键,电机后退一步,第四次按CCW键,电机又后退一步回到初始位置。<br />CW键的操和CCW键情况相同,电动机都是向前向后步进,请大家给点指示,本人认为是主控制子程序ACTION程序问世题,作天改了一个下午都不行,我想按正转或反按键时电动机一步一步转动,可以转360度.<br />
呆头呆脑 发表于 2007-9-10 11:22 | 显示全部楼层

那么长的程序,相信没人去看。

那么长的程序,相信没人去看。<br /><br />不过,从你发的图来看,你可能用1相驱动。你按完按键后,在没按按键的时间内,相位有保持么?<br /><br />你试试用1-2相驱动。用1相驱动,如果保持没做好,或者电机状态有点问题,在那么慢速的过程中,电机的一个步进就是有可能不是按照你设定的方向转,而是方向反转。
呆头呆脑 发表于 2007-9-10 11:25 | 显示全部楼层

--

另外,贴出来的论文哪里来的?<br /><br />这个论文也就只是可以用来做作业了,除了应付作业其他一点用也没有。20Hz的频率,1相的驱动,这个我相信没有一个实用中会应用到。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

10

主题

30

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部