找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2344|回复: 7
收起左侧

步进电机控制设置转动180度为什么不停止,在一直转动,求解,该怎么修改单片机代码

[复制链接]
ID:858009 发表于 2021-5-12 15:21 | 显示全部楼层 |阅读模式
  1. #include <reg51.h>     //*  单双八拍工作方式:A-AB-B-BC-C-CD-D-DA*
  2. unsigned char code shun[8] = {0x08,0x0c,0x04,0x06,0x02,0x03,0x01,0x09};
  3. unsigned char code ni[8] = {0x09,0x01,0x03,0x02,0x06,0x04,0x0c,0x08};
  4. void delay(char x)     //延时程序
  5. {                          
  6.    char i,j;
  7.    for(i=x;i>0;i--)
  8.      for(j=110;j>0;j--);
  9. }
  10. void  motor_1(float a)//a即想要转的圈数
  11. {
  12.    unsigned char b;
  13.    unsigned int  c;
  14.    for (c=0; c<8*64*a; c++)
  15.     {
  16.       for (b=0; b<8; b++)
  17.         {
  18.           P1 = shun[b];
  19.          delay(10);
  20.          }
  21.     }
  22. }
  23. void  motor_2(float a)//a即想要转的圈数
  24. {
  25.    unsigned char b;
  26.    unsigned int  c;
  27.    for (c=0; c<8*64*a; c++)
  28.     {
  29.       for (b=0; b<8; b++)
  30.         {
  31.           P1 = ni[b];
  32.          delay(10);
  33.          }
  34.     }
  35. }
  36. void main()//主程序
  37. {   
  38.         while(1)
  39.         {
  40.                 motor_1(0.5); //转动1圈(可以改动)         
  41.     delay(10);
  42.           P1 = 0;                    //防止电机发热
  43.           //motor_2(0.5); //转动1圈(可以改动)         
  44.     //delay(10);
  45.          // P1 = 0;                    //防止电机发热
  46.         }
  47. }
复制代码
回复

使用道具 举报

ID:858009 发表于 2021-5-12 15:22 | 显示全部楼层
该怎么修改代码控制步进电机转动一定的角度
回复

使用道具 举报

ID:227393 发表于 2021-5-12 16:05 来自手机 | 显示全部楼层
这样肯定是一直在转的了,while(1)一直在循环啊,你可以加按键设置条件再满足时调用转动函数就行了
回复

使用道具 举报

ID:883031 发表于 2021-5-13 11:45 | 显示全部楼层
a是浮点数,不对吧。
回复

使用道具 举报

ID:362023 发表于 2021-5-13 17:13 | 显示全部楼层
不知道你驱动函数里面第一个for(c)的循环有什么作用?但是如果你只想转动180度可以只让电机走四拍
回复

使用道具 举报

ID:362023 发表于 2021-5-13 17:15 | 显示全部楼层
for (b=0; b<8*a; b++)
        {
          P1 = ni[b];
         delay(10);
         }
去掉一个for 这样试试
回复

使用道具 举报

ID:824490 发表于 2021-5-13 17:45 | 显示全部楼层
  while(1)
        {
                motor_1(0.5); //转动1圈(可以改动)         
    delay(10);
          P1 = 0;                    //防止电机发热
          //motor_2(0.5); //转动1圈(可以改动)         
    //delay(10);
         // P1 = 0;                    //防止电机发热
        }
大循环while(1){}肯定是一直运行,所以你要有个条件,只运行一次

while(1)
{
flag=XXXXX;//比如,按键赋值
if (flag)  motor_1(0.5);
}



}
回复

使用道具 举报

ID:858009 发表于 2021-5-13 18:05 来自手机 | 显示全部楼层
如果想用蓝牙控制转到一次几停止呢
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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