电子产业一站式赋能平台

PCB联盟网

搜索
查看: 1786|回复: 0
收起左侧

简易步进电机驱动

[复制链接]

2

主题

13

帖子

56

积分

一级会员

Rank: 1

积分
56
发表于 2022-5-1 20:45:47 | 显示全部楼层 |阅读模式
#include "reg52.h"
sbit anniu=P3^2;
//Motor
sbit A = P1^1;          //定义管脚
sbit b = P1^2;
sbit C = P1^3;
sbit D = P1^4;

///
//步进电机驱动
unsigned char MotorStep=0;  //步进马达步序
unsigned int  MotorDelay,Speed=1,TIM,CT;

#define speed  1  // 调整速度 数值不要设的太低 低了会引起震动。

/*****************************************************
*            初始化马达                                                                 *
******************************************************/
void InitMotor()
{
  A = 1;
  b = 1;
  C = 1;
  D = 1;
}



void SetMotor()
{


    MotorDelay=Speed;        //调整速度
    switch(MotorStep)
    {
       case 0:
          if(TIM)   // A
          {                                    
            A = 0;                    //0xf1  
            b = 1;
                        C = 1;
            D = 1;
            MotorStep = 1;
                        TIM=0;
          }
       break;

       case 1:                 // AB
         if(TIM)
          {       
            A = 0;                   //0xf3
            b = 0;
                   C = 1;
            D = 1;
            MotorStep = 2;
                        TIM=0;
          }
       break;

       case 2:           //B
         if(TIM)
          {
           
                  A = 1;
            b = 0;                  //0xf2
            C = 1;
            D = 1;
           
            MotorStep = 3;
                        TIM=0;
          }
       break;


       case 3:                //BC
         if(TIM)
          {       
            A = 1;
            b = 0;                    //0xf6
            C = 0;
            D = 1;
            MotorStep = 4;
                        TIM=0;
          }
       break;
     case 4:                 //C
         if(TIM)
          {       
            A = 1;
            b = 1;                    //0xf4
            C = 0;
            D = 1;
            MotorStep = 5;
                        TIM=0;
           }
       break;
        case 5:                          //CD
         if(TIM)
          {       
            A = 1;
            b = 1;                    //0xfc
            C = 0;
            D = 0;
            MotorStep = 6;
                        TIM=0;
          }
       break;
        case 6:                          //D
         if(TIM)
          {       
            A = 1;
            b = 1;                    //0xf8
            C = 1;
            D = 0;
            MotorStep = 7;
                        TIM=0;
          }
       break;
        case 7:                        //DA
         if(TIM)
          {       
            A = 0;
            b = 1;                    //0xf9
            C = 1;
            D = 0;
            MotorStep = 0;
                        TIM=0;
          }
       break;
       
        }

}


void system_Ini()
{
    TMOD|= 0x11;
    TH1=0xDC;//(65536-46080)/256;//0xDC; //11.0592M
    TL1=0x00;//(65536-46080)%256;//0x00;       
        IE = 0xff;       
    TR1  = 1;
        EX0=1;
        PX0=1;



}

main()
{
  
   system_Ini();
   InitMotor();
    while(1)
        {
         SetMotor();

         }



  }

/************************************************
*                                                                                                *
*              定时中断延时                                                    *
************************************************/
  void Tzd(void) interrupt 3
{
   TH1 = 0xfe;    //11.0592
         TL1 = 0x33;

        if( CT++==speed)
          {TIM=1;
           CT=0;
          }
}
void int0(void) interrupt 0        //interrupt是声明函数为中断服务函数,0是编译器对中断的编号
{                                                        //外部中断0
P1=0X00;                                                                   
while(anniu==0);            //低电频触发
}
回复

使用道具 举报

发表回复

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

本版积分规则


联系客服 关注微信 下载APP 返回顶部 返回列表