找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 10743|回复: 11
收起左侧

步进电机停不下来,又锁不住 程序错在哪里,帮帮新手吧!

[复制链接]
ID:86913 发表于 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. }
复制代码

评分

参与人数 1黑币 +5 收起 理由
libicheng + 5 很给力!

查看全部评分

回复

使用道具 举报

ID:86913 发表于 2017-6-14 11:42 | 显示全部楼层
订正一下,方括号中的是数字1,我的原意是去读取0xf9,然后延时20秒使电机不断电而把电机锁住,不知道这样做对吗?
P1 = up_data[1]; //达到16个脉冲后,把电机轴锁住20秒钟。
回复

使用道具 举报

ID:164602 发表于 2017-6-14 13:42 | 显示全部楼层
你没有图片,我不知道你是用的什么步进电机、什么驱动电路。
我这里有一个程序及资料,分享给你参考。
51单片机STC89C51RC
ULN2003步进电机驱动模块+步进电机套件
用按键控制:正转、反转、加减转速、只转90度、只转180度。
好像符合你的要求。
你只要根据自己的电路,作适当修改就可以了。

步进电机.rar

176.84 KB, 下载次数: 58

回复

使用道具 举报

ID:111634 发表于 2017-6-14 16:12 | 显示全部楼层
本帖最后由 zl2168 于 2017-6-14 16:14 编辑

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

使用道具 举报

ID:111634 发表于 2017-6-14 16:14 | 显示全部楼层
实例98  驱动四相步进电机
实例98 四相步进电机.rar (35.83 KB, 下载次数: 16)
回复

使用道具 举报

ID:211201 发表于 2017-6-14 16:16 | 显示全部楼层
貌似这个for循环写的不对把,感觉怪怪的
回复

使用道具 举报

ID:86913 发表于 2017-6-14 22:06 | 显示全部楼层
回HC6800-ES-V2.0 ,我用的是28BYJ-48步进电机(去掉了减速部分) 、步距角5.625度,驱动器为ULN2003。
我的要求是:电机轴转过一个角度后(例如90度)停止转动,但要求某一组线圈仍要通电,目的是把电机轴“锁住”,(用手去拧轴,轴不会转了),这个状态要求持续20秒钟。
回复

使用道具 举报

ID:164602 发表于 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度。昨天忘说了。锁住功能我也不会。
回复

使用道具 举报

ID:154074 发表于 2017-6-15 11:32 | 显示全部楼层
1,查查驱动板是否带锁死功能
2、如果驱动板没有,可以保持最后通电绕组通电来锁死
回复

使用道具 举报

ID:211550 发表于 2017-6-15 15:13 | 显示全部楼层
仔细检查下程序
回复

使用道具 举报

ID:86913 发表于 2017-6-15 20:47 | 显示全部楼层
宫本无三四 发表于 2017-6-15 11:32
1,查查驱动板是否带锁死功能
2、如果驱动板没有,可以保持最后通电绕组通电来锁死

您好!我说的正是您第二点所说的意思,“保持最后通电绕组通电来锁死”,但在程序上怎么处理搞不明白,希望得到支持
回复

使用道具 举报

ID:280000 发表于 2020-6-28 17:23 | 显示全部楼层
仔细检查自己的步进电机函数有没有编写错误,是否处于死循环里面出不去了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表