找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2094|回复: 7
打印 上一主题 下一主题
收起左侧

单片机步进电机停不下来?如何修改程序?

[复制链接]
跳转到指定楼层
楼主
ID:722595 发表于 2020-4-11 11:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 召唤师 于 2020-4-11 13:43 编辑

#include<reg52.h>
unsigned char beatcode[]={0xe,0xc,0xd,0x9,0xb,0x3,0x7,0x6};        //步进电机控制时序
void delay();
unsigned char temp;
unsigned char index=0;
unsigned long j=0;
unsigned int n=2;//转动圈数

int  main(){

while(n!=0){
        temp=P1;                          //p1口低四位控制步进电机
        temp=temp&0xF0;
        temp=temp|beatcode[index];
        P1=temp;
        index++;
                 j++;
        delay();
                if(index==7)
                        {
                        index=0;
                        }
               
                if(j==(n*4096))         //4096是转动一圈的脉冲数
                  {
           n=0;
          }
          }
    P1=P1|0x0f;         //关闭电机所有相
   return 0;
}

void delay(){
unsigned int i=200;
while(i--);
}



用这个程序就是电机会一直转,不会按设定的两圈去停止。


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:626079 发表于 2020-4-11 15:13 | 只看该作者
   if(j==(n*4096))         //4096是转动一圈的脉冲数
                  {
           n=0;
          }
          }
    P1=P1|0x0f;         //关闭电机所有相
   return 0;
}

改为试试:

   if(j==(n*4096))         //4096是转动一圈的脉冲数
                  {
           n=0;
           P1=P1|0x0f;         //关闭电机所有相
          }
          }
  
   return 0;
} 如果还不能停,就该是这儿  if(j==(n*4096)) ,再改为  if(j==(2*4096))调试看看
回复

使用道具 举报

板凳
ID:722595 发表于 2020-4-11 17:19 | 只看该作者
xmfjfhcel 发表于 2020-4-11 15:13
if(j==(n*4096))         //4096是转动一圈的脉冲数
                  {
           n=0;

还是不行,我都想不明白了。
回复

使用道具 举报

地板
ID:722595 发表于 2020-4-11 19:18 | 只看该作者
本帖最后由 召唤师 于 2020-4-11 20:25 编辑
xmfjfhcel 发表于 2020-4-11 15:13
if(j==(n*4096))         //4096是转动一圈的脉冲数
                  {
           n=0;

还是不行。,用keil可以,但是实物不行,不知道为什么
回复

使用道具 举报

5#
ID:510570 发表于 2020-4-11 21:07 | 只看该作者
没试过在主函数中返回,你尝试把return 0 改成成while(1); 试试看
回复

使用道具 举报

6#
ID:722595 发表于 2020-4-11 21:24 | 只看该作者
有结果了:得在return 0前加一个死循环,while(1);
但是我还是没想明白为什么要这么做。
回复

使用道具 举报

7#
ID:722595 发表于 2020-4-12 19:12 | 只看该作者
流着汗的鱼 发表于 2020-4-11 21:07
没试过在主函数中返回,你尝试把return 0 改成成while(1); 试试看

恩,是的。谢谢。
回复

使用道具 举报

8#
ID:755092 发表于 2020-6-14 12:04 | 只看该作者
楼主解决了吗,有不用加while(1);的方法吗
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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