📄 单片机控制步进电机驱动器工作原理 - panjun_316 - 网易博客.htm
字号:
<P style="TEXT-INDENT: 2em"><FONT size=3> 3.软件设计</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT
size=3> 该驱动器根据拨码开关KX、KY的不同组合有三种工作方式供选择:</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT
size=3> 方式1为中断方式:P3.5(INT1)为步进脉冲输入端,P3.7为正反转脉冲输入端。上位机(PC机或<NOBR>单片机</NOBR>)与驱动器仅以2条线相连。</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT
size=3> 方式2为串行通讯方式:上位机(PC机或单片机)将控制命令发送给驱动器,驱动器根据控制命令自行完成有关控制过程。</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT
size=3> 方式3为拨码开关控制方式:通过K1~K5的不同组合,直接控制步进电机。</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT
size=3>当上电或按下复位键KR后,AT89C2051先检测拨码开关KX、KY的状态,根据KX、KY
的不同组合,进入不同的工作方式。以下给出方式1的程序流程框图与源程序。</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT
size=3> 在程序的编制中,要特别注意步进电机在换向时的处理。为使步进电机在换向时能平滑过渡,不至于产生错步,应在每一步中设置标志位。其中20H单元的各位为步进电机正转标志位;21H单元各位为反转标志位。在正转时,不仅给正转标志位赋值,也同时给反转标志位赋值;在反转时也如此。这样,当步进电机换向时,就可以上一次的位置作为起点反向运动,避免了电机换向时产生错步。</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT size=3> </FONT></P>
<P style="TEXT-INDENT: 2em"><FONT size=3><IMG
src="单片机控制步进电机驱动器工作原理 - panjun_316 - 网易博客.files/234.jpg" border=0></FONT></P>
<P style="TEXT-INDENT: 2em"><FONT size=3> 图4 方式1程序框图</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT size=3> 方式1源程序:</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT size=3> MOV 20H,#00H
;20H单元置初值,电机正转位置指针</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT size=3> MOV 21H,#00H
;21H单元置初值,电机反转位置指针</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT size=3> MOV P1,#0C0H
;P1口置初值,防止电机上电短路</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT size=3> MOV TMOD,#60H
;T1计数器置初值,开中断</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT size=3> MOV TL1,#0FFH</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT size=3> MOV TH1,#0FFH</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT size=3> SETB ET1</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT size=3> SETB EA</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT size=3> SETB TR1</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT size=3> SJMP $</FONT> </P>
<P style="TEXT-INDENT: 2em"><FONT
size=3>;***********计数器1中断程序************</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT size=3> IT1P: JB P3.7,FAN
;电机正、反转指针</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT
size=3> ;*************电机正转*****************</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT size=3> JB 00H,LOOP0</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT size=3> JB 01H,LOOP1</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT size=3> JB 02H,LOOP2</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT size=3> JB 03H,LOOP3</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT size=3> JB 04H,LOOP4</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT size=3> JB 05H,LOOP5</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT size=3> JB 06H,LOOP6</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT size=3> JB 07H,LOOP7</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT size=3> LOOP0: MOV P1,#0D0H</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT size=3> MOV 20H,#02H</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT size=3> MOV 21H,#40H</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT size=3> AJMP QUIT</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT size=3> LOOP1: MOV P1,#090H</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT size=3> MOV 20H,#04H</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT size=3> MOV 21H,#20H</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT size=3> AJMP QUIT</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT size=3> LOOP2: MOV P1,#0B0H</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT size=3> MOV 20H,#08H</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT size=3> MOV 21H,#10H</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT size=3> AJMP QUIT</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT size=3> LOOP3: MOV P1,#030H</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT size=3> MOV 20H,#10H</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT size=3> MOV 21H,#08H</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT size=3> AJMP QUIT</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT size=3> LOOP4: MOV P1,#070H</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT size=3> MOV 20H,#20H</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT size=3> MOV 21H,#04H</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT size=3> AJMP QUIT</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT size=3> LOOP5: MOV P1,#060H</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT size=3> MOV 20H,#40H</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT size=3> MOV 21H,#02H</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT size=3> AJMP QUIT</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT size=3> LOOP6: MOV P1,#0E0H</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT size=3> MOV 20H,#80H</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT size=3> MOV 21H,#01H</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT size=3> AJMP QUIT</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT size=3> LOOP7: MOV P1,#0C0H</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT size=3> MOV ; 20H,#01H</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT size=3> MOV 21H,#80H</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT size=3> AJMP QUIT</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT
size=3> ;***************电机反转*****************</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT size=3> FAN: JB 08H,LOOQ0</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT size=3> JB 09H,LOOQ1</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT size=3> JB 0AH,LOOQ2</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT size=3> JB 0BH,LOOQ3</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT size=3> JB 0CH,LOOQ4</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT size=3> JB 0DH,LOOQ5</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT size=3> JB 0EH,LOOQ6</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT size=3> JB 0FH,LOOQ7</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT size=3> LOOQ0: MOV P1,#0A0H</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT size=3> MOV 21H,#02H</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT size=3> MOV 20H,#40H</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT size=3> AJMP QUIT</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT size=3> LOOQ1: MOV P1,#0E0H</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT size=3> MOV 21H,#04H</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT size=3> MOV 20H,#20H</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT size=3> AJMP QUIT</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT size=3> LOOQ2: MOV P1,#0C0H</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT size=3> MOV 21H,#08H</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT size=3> MOV 20H,#10H</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT size=3> AJMP QUIT</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT size=3> LOOQ3: MOV P1,#0D0H</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT size=3> MOV 21H,#10H</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT size=3> MOV 20H,#08H</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT size=3> AJMP QUIT</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT size=3> LOOQ4: MOV P1,#050H</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT size=3> MOV 21H,#20H</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT size=3> MOV 20H,#04H</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT size=3> AJMP QUIT</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT size=3> LOOQ5: MOV P1,#070H</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT size=3> MOV 21H,#40H</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT size=3> MOV 20H,#02H</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT size=3> AJMP QUIT</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT size=3> LOOQ6: MOV P1,#030H</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT size=3> MOV 21H,#80H</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT size=3> MOV 20H,#01H</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT size=3> AJMP QUIT</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT size=3> LOOQ7: MOV P1,#0B0H</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT size=3> MOV 21H,#01H</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT size=3> MOV 20H,#80H</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT size=3> QUIT: RETI</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT size=3> END</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT size=3> 4.结论</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT
size=3> 该驱动器经实验验证能驱动0.5N.m的步进电机。将驱动部分的电阻、电容及续流二极管的有关参数加以调整,可驱动1.2N.m的步进电机。该驱动器电路简单可靠,结构紧凑,对于I/O口线与单片机资源紧张的系统来说特别适用。</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT size=3></FONT></P></DIV>
<DIV class=g_p_center style="WIDTH: 760px">
<DIV class="g_blog_circle g_circle_perm g_t_hide"
id=relateBlogCircle_fks_084066081084082067080081083095087083081070093082094075
style="MARGIN-LEFT: 25px"></DIV></DIV>
<DIV class=g_p_center style="WIDTH: 760px">
<DIV class="g_recent_read g_t_hide"
id=blogReader_fks_084066081084082067080081083095087083081070093082094075
style="MARGIN-LEFT: 25px"></DIV></DIV></DIV>
<DIV class=g_tab_btn00
id=cssTabBar_fks_084066081084082067080081083095087083081070093082094075>
<DIV class=bdl
id=ShareDiv_fks_084066081084082067080081083095087083081070093082094075><A
class=c05
onclick="NEBlog.gPermaLinkPage.updownMenu.upDownShare('fks_084066081084082067080081083095087083081070093082094075','blog/3505948820082894550575.track','blog/static/3505948820082894550575');return false;"
href="http://blog.163.com/panjun_316/blog/static/3505948820082894550575/#">分享(<NOBR
id=tbCount_fks_084066081084082067080081083095087083081070093082094075>?</NOBR>)<SPAN
class="n_ n32 g_p_none"> </SPAN></A></DIV>
<DIV class="bdl bdr"
id=ComDiv_fks_084066081084082067080081083095087083081070093082094075><A
class=c05
onclick="NEBlog.gPermaLinkPage.updownMenu.upDownComments('fks_084066081084082067080081083095087083081070093082094075', '单片机控制步进电机驱动器工作原理', 'blog/static/3505948820082894550575');return false;"
href="http://blog.163.com/panjun_316/blog/static/3505948820082894550575/#">评论(<NOBR
id=comCount_fks_084066081084082067080081083095087083081070093082094075>?</NOBR>)<SPAN
class="n_ n32 g_p_none"> </SPAN></A></DIV>
<DIV class="bdl bdr c09">分类:<A class=c05
id=aBelongClsfks_084066081084082067080081083095087083081070093082094075
onclick="NEBlog.gPermaLinkPage.updownMenu.openSameClass('fks_081068083081084065080095074064081086084074080094094', '电机');"
href="http://blog.163.com/panjun_316/blog/static/3505948820082894550575/#">电机</A></DIV>
<DIV class=c08><NOBR
id=accessCount_fks_084066081084082067080081083095087083081070093082094075>?</NOBR>次阅读</DIV>
<DIV class=c09> 2008-03-08 09:45</DIV><INPUT
id=openCom_fks_084066081084082067080081083095087083081070093082094075
type=hidden value=-1> <INPUT
id=openShare_fks_084066081084082067080081083095087083081070093082094075
type=hidden value=-1> </DIV>
<DIV class="g_p_clear g_t_space"></DIV>
<DIV class="g_p_relative g_h_1"
id=com_fks_084066081084082067080081083095087083081070093082094075>
<DIV
id=comShow_fks_084066081084082067080081083095087083081070093082094075></DIV>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -