• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

单片机步进电机正反转反复运行,怎么修改程序

ec0e6e3491dfb562 2020-08-03 浏览量:1369
高手看一下,下面这程序我想让步进电机正转10-15秒后再反转10-15秒再正转,周而复始。程序需要怎样修改?谢谢!

/@@*
1、本程序用于测试4相步进电机常规驱动 
2、需要用跳帽或者杜邦线把信号输出端和对应的步进电机信号输入端连接起来
3、速度不可以调节的过快,不然就没有力矩转动了
可以按照给的原理图接线*/
#include <reg52.h>


unsigned char code F_Rotation[4]={0x040x080x100x20};//正转表格
unsigned char code B_Rotation[4]={0x200x100x080x04};//反转表格

void Delay(unsigned int i)//延时
{
         while(--i);
}

main()
{
        unsigned char i;

         while(1)
         {
                  for(i=0;i<4;i++)      //4相
             {
                     P3=F_Rotation[ i];  //输出对应的相 可以自行换成反转表格
                     Delay(750*10);        //改变这个参数可以调整电机转速
                 }
          }
}
0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • 1.需要定义一个正反转标志,在定时器中断中判断到达转到时间后进行翻转,进行正反转标志的切换。

    2.主函数中根据正反转标志选择执行的数据即可。

    比如

    if(正转标志)

    {

                      for(i=0;i<4;i++)      //4相
                 {
                         P3=F_Rotation[ i];  //输出对应的相 可以自行换成反转表格
                         Delay(750*10);        //改变这个参数可以调整电机转速
                     }
              }

    }

    else

    {

                      for(i=0;i<4;i++)      //4相
                 {
                         P3=B_Rotation[ i];  //输出对应的相 可以自行换成反转表格
                         Delay(750*10);        //改变这个参数可以调整电机转速
                     }
              }

    }

    要想控制的再准确点,那个延时也用定时器做。

    • 发布于 2020-08-03
    • 举报
    • 评论 0
    • 0
    • 0

其他答案 数量:5
  • 把for循环这句话改一下,把里面的4的倍数,比如40,400,800这样的,时间太短就增加数字
    • 发布于2020-08-03
    • 举报
    • 评论 0
    • 0
    • 0

  • 你的程序里只有正转啊,你要设一个标志位,当时间过后,把标志位修改一下,通过判断标志位来进行正转或是反转
    • 发布于2020-08-03
    • 举报
    • 评论 0
    • 0
    • 0

  • 把你WHILE里面的for循环再复制一个,然后将复制的FOR循环里的F_Rotation[4]改为B_Rotation[4]
    • 发布于2020-08-04
    • 举报
    • 评论 0
    • 0
    • 0

  • 这个实现比较容易,难点是确定这个10-15秒的延时是否准确,这个自己可以调

    #include <reg52.h>

    unsigned char code F_Rotation[4]={0x040x080x100x20};//正转表格
    unsigned char code B_Rotation[4]={0x200x100x080x04};//反转表格

    void Delay(unsigned int i)//延时
    {
             while(--i);
    }

    main()
    {
            unsigned char i;

             while(1)
             {
                      for(i=0;i<4;i++)      //4相
                     {
                         P3=F_Rotation[ i];  //输出对应的相 可以自行换成反转表格
                         Delay(750*10);        //改变这个参数可以调整电机转速
                     }

                    Delay(1000*10);       //这个参数自己调,调为10-15秒

                    

                    for(i=0;i<4;i++)      //4相
                     {
                         P3=B_Rotation[ i];  //输出对应的相 可以自行换成反转表格
                         Delay(750*10);        //改变这个参数可以调整电机转速
                     }

                    Delay(1000*10);       //这个参数自己调,调为10-15秒


              }
    }

    • 发布于2020-08-04
    • 举报
    • 评论 0
    • 0
    • 0

  • 程序里面需要有个正反转的标志,后面的程序判断这个标志决定正转还是反转
    • 发布于2020-09-19
    • 举报
    • 评论 0
    • 0
    • 0

相关问题

问题达人换一批

单片机步进电机正反转反复运行,怎么修改程序