单片及驱动步进电机出现了点问题请指教

[复制链接]
4019|14
 楼主| 许世霞 发表于 2007-12-19 19:47 | 显示全部楼层 |阅读模式
#include&ltreg51.h&gt&nbsp;<br />#include&ltintrins.h&gt&nbsp;<br />typedef&nbsp;unsigned&nbsp;char&nbsp;&nbsp;BYTE;<br />typedef&nbsp;unsigned&nbsp;int&nbsp;&nbsp;&nbsp;WORD;<br />typedef&nbsp;bit&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BOOL;<br />#define&nbsp;M_PORT&nbsp;&nbsp;&nbsp;P1<br />code&nbsp;&nbsp;BYTE&nbsp;MCW[]={1,2};&nbsp;//{1,3,2}<br />code&nbsp;&nbsp;BYTE&nbsp;MCCW[]={2,1};&nbsp;//{2,3,1}<br />Delay(WORD&nbsp;ms)<br />{BYTE&nbsp;i;<br />&nbsp;while(ms--)<br />&nbsp;&nbsp;{for(i=0;i&lt100;i++)<br />&nbsp;&nbsp;&nbsp;{_nop_();<br />&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;}<br />}<br />main()<br />{BOOL&nbsp;Direction;<br />&nbsp;BYTE&nbsp;i;<br />&nbsp;&nbsp;&nbsp;while(1)<br />&nbsp;&nbsp;&nbsp;{if(Direction=1)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(i=0;i&lt2;i++)&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{M_PORT=MCW;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Delay(50);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;else<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(i=0;i&lt2;i++)&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{M_PORT=MCCW;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Delay(50);}<br />&nbsp;&nbsp;&nbsp;}<br />}<br />硬件电路:单片机的P1.0&nbsp;P1.1加在ULN2003的一侧,另一侧接两相的步进电机。12V供电。现在问题是我把程序下进去,只是振动,不转动。我的软件仿真没有问题呀。请高手指点
 楼主| 许世霞 发表于 2007-12-20 16:16 | 显示全部楼层

帮个忙看过的给点意见

我用的是AT89S52&nbsp;单片机,我是个新手,很多地方有不明白的地方,现在进行不下去了!&nbsp;我也不知哪里出现了问题!&nbsp;有个高手说我的延时有问题我就把延时设置大了!没想到连振都不振了。&nbsp;按说是很简单的。可是对于新手来说就是感觉比较难的
sdqiang 发表于 2007-12-20 16:33 | 显示全部楼层

步数不对.

  
 楼主| 许世霞 发表于 2007-12-20 18:21 | 显示全部楼层

哪里不对了!请指出来吧!

身在庐山的人一般都不知道庐山的真面目呀!我就是觉得没有问题呀
他乡人 发表于 2007-12-21 01:59 | 显示全部楼层

两相的步进电机,只是振动,不转动

硬件电路:单片机的P1.0&nbsp;P1.1加在ULN2003的一侧,另一侧接两相的步进电机。22V供电。现在问题是我把程序下进去,只是振动,不转动。我的软件仿真没有问题呀。请高手指点小弟谢了.<br />主程序如下<br />org&nbsp;00h<br />stop:&nbsp;orl&nbsp;p1,#0ffh&nbsp;;&nbsp;步进电机停止<br />loop:jnb&nbsp;p3.0,for2&nbsp;;&nbsp;如果p3.2按下正转<br />jnb&nbsp;p3.1,rev2&nbsp;;&nbsp;如果p3.3按下反转<br />jnb&nbsp;p3.2,stop1&nbsp;;&nbsp;如果p3.4按下停止<br />jmp&nbsp;loop&nbsp;;反复监测键盘<br />for:&nbsp;mov&nbsp;r0,#00h&nbsp;;正转到tab取码指针初值<br />for1:mov&nbsp;a,r0&nbsp;;取码<br />mov&nbsp;dptr,#tabla&nbsp;;<br />movc&nbsp;a,@a+dptr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;10<br />jz&nbsp;for&nbsp;;是否到了结束码00h<br />cpl&nbsp;a&nbsp;;把acc反向<br />mov&nbsp;p1,a&nbsp;;输出到p1开始正转<br />jnb&nbsp;p3.2,stop1&nbsp;;&nbsp;如果p3.4按下停止<br />jnb&nbsp;p3.1,rev2&nbsp;;&nbsp;如果p3.3按下反转<br />call&nbsp;delay&nbsp;;转动的速度<br />inc&nbsp;r0&nbsp;;取下一个码<br />jmp&nbsp;for1&nbsp;;继续正转<br />rev:mov&nbsp;r0,#00h&nbsp;;反转到tab取码指针初值<br />revs:mov&nbsp;a,r0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;20<br />mov&nbsp;dptr,#tabla&nbsp;;取码<br />movc&nbsp;a,@a+dptr<br />jz&nbsp;rev&nbsp;;是否到了结束码00h<br />cpl&nbsp;a&nbsp;;把acc反向<br />mov&nbsp;p1,a&nbsp;;输出到p1开始反转<br />jnb&nbsp;p3.2,stop1&nbsp;;&nbsp;如果p3.4按下停止<br />jnb&nbsp;p3.1,rev2&nbsp;;&nbsp;如果p3.3按下反转<br />call&nbsp;delay&nbsp;;转动的速度<br />inc&nbsp;r0&nbsp;;取下一个码<br />jmp&nbsp;revs&nbsp;;继续反转&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;30<br />stop1:call&nbsp;delay&nbsp;;&nbsp;按p3.4的消除抖动<br />jnb&nbsp;p3.2,$&nbsp;;&nbsp;p3.4放开否?<br />call&nbsp;delay&nbsp;;放开消除抖动<br />jmp&nbsp;stop<br /><br />for2:call&nbsp;delay&nbsp;;&nbsp;按p3.2的消除抖动<br />jnb&nbsp;p3.0,$&nbsp;;&nbsp;p3.2放开否?<br />call&nbsp;delay&nbsp;;放开消除抖动<br />jmp&nbsp;for<br />rev2:call&nbsp;delay&nbsp;;&nbsp;按p3.3的消除抖动<br />jnb&nbsp;p3.1,$&nbsp;;&nbsp;p3.3放开否?<br />call&nbsp;delay&nbsp;;放开消除抖动<br />jmp&nbsp;rev<br /><br />delay:mov&nbsp;r1,#255;步进电机的转速20ms<br />d1:mov&nbsp;r2,#255<br />djnz&nbsp;r2,$<br />djnz&nbsp;r1,d1<br />ret<br />tabla:<br />db&nbsp;01,02&nbsp;;正转表<br />db&nbsp;00&nbsp;;正转结束<br />db&nbsp;02,01&nbsp;;反转<br />db&nbsp;00&nbsp;;反转结束<br />end<br />
soso 发表于 2007-12-21 08:10 | 显示全部楼层

可能的几种状况

&nbsp;&nbsp;1、驱动频率太高,现象:电机啸叫;<br />&nbsp;&nbsp;2、电机相序接线错误,现象:进一步退一步;<br />&nbsp;&nbsp;3、烂电机。
tuwen 发表于 2007-12-21 13:29 | 显示全部楼层

两相步进电机不能这样驱动

你的硬件方案就是错误的。<br />两相步进电机的线圈需要有双极性的驱动电流,也就是要有正、反向的驱动电流。一般需用H桥电路。<br />如果能换四相步进电机,就可以用你这样的方案,只是单片机要再多占用两个口线。<br />
awey 发表于 2007-12-21 13:59 | 显示全部楼层

没记错的话四相步进电机其实也是两相的

只是两相6线,驱动电路简单点,可以不用H桥
 楼主| 许世霞 发表于 2007-12-21 14:16 | 显示全部楼层

7楼8楼注意了!再帮我看看!

我用的步进电机是混合式步进电机57BYG007&nbsp;网址是www.czxmt.com.你们帮我看看它的接线图我有点不明白我觉得它可以做4相的步进电机使用的!&nbsp;我没有见过这样的接线圈!当时买的时候就在贺么一种了!所以就买了!以为两相和四相没有太的区别了!一定要帮个忙呀。
tuwen 发表于 2007-12-21 14:38 | 显示全部楼层

57BYG007是四相的

<br /><img src="https://bbs.21ic.com/upfiles/img/200712/20071221143922333.jpg"><br />&nbsp;<br />上面的A图,黑白两线接+12V,其它四根线接ULN2003。<br />它也可以当成两相的用,但必须要双极性驱动。<br />&nbsp;
 楼主| 许世霞 发表于 2007-12-21 16:53 | 显示全部楼层

谢谢了好心人

  
龙飞天下 发表于 2007-12-26 00:18 | 显示全部楼层

我希望你不要到处分贴。

一件事情在一个贴子里面说。
cwh 发表于 2007-12-26 23:42 | 显示全部楼层

欢迎浏览我的步进电机博客

欢迎浏览我的步进电机博客<br />http://blog.gongkong.com/Index.Asp?Id=12094<br />
cby981541 发表于 2007-12-31 14:27 | 显示全部楼层

同意7楼的意见,6楼的意见一般是针对驱动器没有问题的回答

LZ使用2003驱动57系列电机,电源电压又只取了12V。如果电路和程序本身没有问题,这个方案成功的可能性也不大。其原因有:(1)电机工作时需要提供比较大的功率,57系列电机通常工作在DC40V是比较常见的,工作电压高时电机的高频驱动特性和加速特性都比较好;(2)2003作驱动时电流太小,电机驱动器的电压满足正常工作时,如果驱动电流太小也不会转动;(3)同意7楼的说法,正规的步进电机驱动器设计时通常采用H桥(或带H桥的集成模块)驱动,很少采用单片机教材上讲的2003之类驱动方案(这种方案是小孩子做着玩的,其设计出来的方案不能当作产品使用);(4)驱动器一般都带有各种电流电压反馈控制环路,以完成电机可靠运行;(5)如果电机驱动功率较大(50W以上),通常要作散热处理。。。
lhz10213 发表于 2009-6-24 18:14 | 显示全部楼层
有没有做电视的遇上这样的问题呀?上怎么解决的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

439

主题

3781

帖子

4

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