• 步进电机的单片机控制程序---单片机


    1.4相8拍-步进电机的控制程序,正传或者反转都转一周即停止

    #include <reg51.h>       //51芯片管脚定义头文件
    #include <intrins.h>     //内部包含延时函数 _nop_();
    #define uchar unsigned char
    #define uint  unsigned int
    uchar code FFW[8]={0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09};
    uchar code REV[8]={0x09,0x08,0x0c,0x04,0x06,0x02,0x03,0x01};
    sbit  K1   = P3^2;       //正转
    sbit  K2   = P3^3;       //反转
    sbit  K3   = P3^4;       //停止
    sbit  BEEP = P3^6;       //蜂鸣器
    
    /********************************************************/
    /*                                                  
    /* 延时t毫秒 
    /* 11.0592MHz时钟,延时约1ms                                     
    /*                                                      
    /********************************************************/
    void delay(uint t)
    {                           
       uint k;
       while(t--)
       {
         for(k=0; k<125; k++)
         { }
       }
    }
    
    /**********************************************************/
    void delayB(uchar x)    //x*0.14MS
     {
       uchar i;
       while(x--)
       {
         for (i=0; i<13; i++)
         { }
       }
     }
    
    /**********************************************************/
    void beep()
     {
       uchar i;
       for (i=0;i<100;i++)
        { 
         delayB(4);
         BEEP=!BEEP;                 //BEEP取反
        } 
         BEEP=1;                    //关闭蜂鸣器
     }
    
    /********************************************************/
    /*
    /*步进电机正转
    /*
    /********************************************************/
    void  motor_ffw()
     { 
       uchar i;
       uint  j;
       for (j=0; j<8; j++)         //转1*n圈 
        { 
            if(K3==0)
            {break;}                //退出此循环程序
          for (i=0; i<8; i++)       //一个周期转45度
            {
              P1 = FFW[i];          //取数据
              delay(2);            //调节转速
            }
        }
     }
    
    /********************************************************/
    /*
    /*步进电机反转
    /*
    /********************************************************/
    void  motor_rev()
    {
         uchar i;
         uint  j;
         for (j=0; j<8; j++)       //转1×n圈
          {
            if(K3==0)
             {break;}               //退出此循环程序
            for (i=0; i<8; i++)     //一个周期转45度
            {
              P1 = REV[i];          //取数据
              delay(2);            //调节转速
            }
          }
     }
    
    /********************************************************
    *                                                       
    *  主程序                                               
    *                                                      
    *********************************************************/
    
    main()
     { 
    
          uchar r,N=64;             //N 步进电机运转圈数 因为我们的步进电机是减速步进电机 减速比是1/64 所以这里N=64时 步进电机外部的主轴转1圈
       while(1)
        {  
          if(K1==0)
          {
            beep();
            for(r=0;r<N;r++)
             { 
               motor_ffw();       //电机正转
                if(K3==0)
                  {beep();break;}    //退出此循环程序
             }
          }
          else if(K2==0)
           { 
            beep();
            for(r=0;r<N;r++)
             {
               motor_rev();       //电机反转
               if(K3==0)
                  {beep();break;}    //退出此循环程序
             }
           }
           else  
             P1 = 0xf0;
        }
     }
    
    /********************************************************/              


  • 相关阅读:
    第2层交换和生成树协议(STP)__散知识点
    OSPF
    EIGRP和OSPF__EIGRP
    EIGRP和OSPF__邻居发现
    IP路由__距离矢量路由选择协议
    IP路由__动态路由
    IP路由__静态路由
    IP路由__IP路由选择过程
    Cisco的互联网络操作系统IOS和安全设备管理器SDM__CDP
    Cisco的互联网络操作系统IOS和安全设备管理器SDM__备份和恢复Cisco 配置
  • 原文地址:https://www.cnblogs.com/fhyfhy/p/4525474.html
Copyright © 2020-2023  润新知