标题: 步进电机停不下来,又锁不住 程序错在哪里,帮帮新手吧! [打印本页]

作者: tmxk0574    时间: 2017-6-13 13:49
标题: 步进电机停不下来,又锁不住 程序错在哪里,帮帮新手吧!
要求步进电机转过90度后,把电机轴锁住。结果既停不下来,又锁不住。程序错在哪里?求大家帮一帮。

  1. #include <reg51.h>              //要求步进电机转过90度后,把电机轴锁住。
  2. unsigned char code up_data[8]={ 0xf9,0xf1,0xf3,0xf2,0xf6,0xf4,0xfc,0xf8};     
  3. /********以下是延时函数,延时时间为speed×1ms********/
  4. void Delay(unsigned int speed)                                
  5. {                                             
  6.         unsigned int i,j;                     
  7.         for(i=speed;i>0;i--)                     
  8.                 for(j=110;j>0;j--);      
  9. }
  10. /********以下是主函数********/
  11. void main()
  12. {            
  13.           unsigned char i;
  14.         unsigned int  cnt=0;
  15.          for (i=0; i<8; i++)   //1个脉冲转5.625度,(16个脉冲转了90度)
  16.          {
  17.                  P1 = up_data[i];               
  18.                  Delay(5);
  19.                 cnt++;  
  20.                 if (cnt==16)
  21.                 {
  22.                  P1 = up_data[i]; //达到16个脉冲后,把电机轴锁住20秒钟。
  23.              Delay(20000);
  24.             }
  25.          }                                
  26. }
复制代码


作者: tmxk0574    时间: 2017-6-14 11:42
订正一下,方括号中的是数字1,我的原意是去读取0xf9,然后延时20秒使电机不断电而把电机锁住,不知道这样做对吗?
P1 = up_data[1]; //达到16个脉冲后,把电机轴锁住20秒钟。
作者: HC6800-ES-V2.0    时间: 2017-6-14 13:42
你没有图片,我不知道你是用的什么步进电机、什么驱动电路。
我这里有一个程序及资料,分享给你参考。
51单片机STC89C51RC
ULN2003步进电机驱动模块+步进电机套件
用按键控制:正转、反转、加减转速、只转90度、只转180度。
好像符合你的要求。
你只要根据自己的电路,作适当修改就可以了。

步进电机.rar

176.84 KB, 下载次数: 58


作者: zl2168    时间: 2017-6-14 16:12
本帖最后由 zl2168 于 2017-6-14 16:14 编辑

实例99  驱动二相步进电机
Proteus仿真一下,确认有效。
实例99 二相步进电机.rar (36.2 KB, 下载次数: 25)

以上摘自张志良编著《80C51单片机仿真设计实例教程——基于Keil CProteus》清华大学出版社ISBN 978-7-302-41682-1内有常用的单片机应用100案例,用于仿真实验操作,电路与程序真实可靠可信可行书中电路和程序设计有详细说明,程序语句条条有注解。仿真电路和Hex文件能在清华出版社网站免费下载,程序源代码只能到书上看了。到图书馆借,或到新华书店翻阅,或到网上书店打折购买。

作者: zl2168    时间: 2017-6-14 16:14
实例98  驱动四相步进电机
实例98 四相步进电机.rar (35.83 KB, 下载次数: 16)
Proteus仿真一下,确认有效。
以上摘自张志良编著《80C51单片机仿真设计实例教程——基于Keil CProteus》清华大学出版社ISBN 978-7-302-41682-1内有常用的单片机应用100案例,用于仿真实验操作,电路与程序真实可靠可信可行书中电路和程序设计有详细说明,程序语句条条有注解。仿真电路和Hex文件能在清华出版社网站免费下载,程序源代码只能到书上看了。到图书馆借,或到新华书店翻阅,或到网上书店打折购买。



作者: 奔波儿灞1    时间: 2017-6-14 16:16
貌似这个for循环写的不对把,感觉怪怪的
作者: tmxk0574    时间: 2017-6-14 22:06
回HC6800-ES-V2.0 ,我用的是28BYJ-48步进电机(去掉了减速部分) 、步距角5.625度,驱动器为ULN2003。
我的要求是:电机轴转过一个角度后(例如90度)停止转动,但要求某一组线圈仍要通电,目的是把电机轴“锁住”,(用手去拧轴,轴不会转了),这个状态要求持续20秒钟。
作者: HC6800-ES-V2.0    时间: 2017-6-15 08:18
tmxk0574 发表于 2017-6-14 22:06
回HC6800-ES-V2.0 ,我用的是28BYJ-48步进电机(去掉了减速部分) 、步距角5.625度,驱动器为ULN2003。
我 ...

抱歉,你给你的程序,只控制了转动90,没能“锁住”。我用的电机步距角也是5.625度,但是减速电机,减速比64:1,所以转动90度,要1024个脉冲,才能转动90度。昨天忘说了。锁住功能我也不会。
作者: 宫本无三四    时间: 2017-6-15 11:32
1,查查驱动板是否带锁死功能
2、如果驱动板没有,可以保持最后通电绕组通电来锁死
作者: hebinhao    时间: 2017-6-15 15:13
仔细检查下程序
作者: tmxk0574    时间: 2017-6-15 20:47
宫本无三四 发表于 2017-6-15 11:32
1,查查驱动板是否带锁死功能
2、如果驱动板没有,可以保持最后通电绕组通电来锁死

您好!我说的正是您第二点所说的意思,“保持最后通电绕组通电来锁死”,但在程序上怎么处理搞不明白,希望得到支持
作者: 湖南    时间: 2020-6-28 17:23
仔细检查自己的步进电机函数有没有编写错误,是否处于死循环里面出不去了




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1