STM32驱动5线4相步进电机部分代码(STM32F103RC+步进电机28BYJ-48)

发布者:快乐的舞蹈最新更新时间:2024-09-30 来源: cnblogs关键字:STM32  驱动  5线4相  步进电机  28BYJ-48 手机看文章 扫描二维码
随时随地手机看文章

其实用STM32驱动步进电机和51单片机驱动步进电机是一样的,只是简单的改变一下输出的引脚而已。

对于步进电机的原理我也不是很明白,我就简单的说一下步进电机简单的分为单极性步进电机和双极性步进电机。

单极性步进电机驱动方式:
单四拍: A-B-C-D;
双四拍:AB-BC-CD-DA;
单双八拍:A-AB-B-BC-C-CD-D-DA
对于单双八拍的方式:每次转动角度为3.75°,对于双四拍每次转动的角度为7.5°
双极性步进电机驱动方式:
单四拍:A/-B-A-B/
双四拍:A/B-AB-AB/-A/B/
单双八拍:A/-A/B-B-AB-A-AB/-B/-A/B/

我使用的单极性步进电机,驱动方式为单双八拍,驱动芯片是ULN2003,代码如下:

 #include 'stm32f10x.h'
 #include 'sys.h'
 #include 'delay.h'
 
 unsigned int  K, rate;




unsigned char  FFW[8]={0xf1,0xf3,0xf2,0xf6,0xf4,0xfc,0xf8,0xf9}; //正转
unsigned char  FFZ[8]={0xf9,0xf8,0xfc,0xf4,0xf6,0xf2,0xf3,0xf1}; //反转

/*对于下面这一组数组是因为有的在单片机输出之后加了一个74LS14反相器,最后才输入驱动电路的*/
//unsigned char  FFW[8]={0xfe,0xfc,0xfd,0xf9,0xfb,0xf3,0xf7,0xf6}; //正转
//unsigned char  FFZ[8]={0xf6,0xf7,0xf3,0xfb,0xf9,0xfd,0xfc,0xfe}; //反转

/*延迟函数,用于调速*/
 void delay()   
{                           
   unsigned int t;
    t=rate;
   while(t--)
   {
     delay_us(1000);
   }
}

/*STM32I/O引脚初始化*/
 void init_stepmotor_GPIO(void)
{
 GPIO_InitTypeDef GPIO_InitStructure; 
      RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
 
      GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;   
      GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;   
      GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15|GPIO_Pin_14|GPIO_Pin_13|GPIO_Pin_12;   
      GPIO_Init(GPIOB,&GPIO_InitStructure);  
}






/**********************************************************************
*  *
*                      电机正转
*  *
***********************************************************************/

void motor_cw(uint32_t circle)//circle??? delay????
{
  uint32_t i,j;
  for(i=0;i<=circle;i++)
  {
      for (j=0; j<8; j++)       //这一个for循环完成,电机转动30°
        {
          
            GPIO_Write(GPIOB, (FFW[j]&0x1f)<<12);
 
           delay_ms(1);                  //延迟1ms,用的STM32提供的库函数
        }
  
delay_ms(1);   
  }
}

/**********************************************************************
*  *
*                      电机反转
*  *
***********************************************************************/
void motor_ccw(uint32_t circle)
{
    uint32_t i,j;
  for(i=0;i<=circle;i++)
  {
      for (j=0; j<8; j++)       //电机转动30°
        {
          GPIO_Write(GPIOB, (FFZ[j]&0x1f)<<12);
 
           delay_ms(10);                       //?÷??×???
        }
  
  
delay_ms(10);      
  }
}


/**********************************************************
*  *
*                 电机利用延迟函数,变速转动
***********************************************************/
void  motor_ffw()
 { 
   unsigned char i;


      for (i=0; i<8; i++)       //?????30?
        {
          GPIO_Write(GPIOB, (FFZ[i]&0x1f)<<12);  //???

          delay();           //????
        }
     } 




main() 
 { 
 
   unsigned char x;
   rate=0x2a;
   x=0x40;
init_stepmotor_GPIO();
delay_init();
    while(1)
{
motor_cw(100);
motor_ccw(100);


/*下面这段代码是电机变速转动的调用代码*/
// do
//     {
//  motor_ffw();          //??
//      rate--;
// }while(rate!=0x03);
//   do
//     {   
//   motor_ffw();        //??
//   x--;
// }while(x!=0x01);
//  
//   do
//     {
//  motor_ffw();         //??
//      rate++;
// }while(rate!=0x2a);   
 }
}

关键字:STM32  驱动  5线4相  步进电机  28BYJ-48 引用地址:STM32驱动5线4相步进电机部分代码(STM32F103RC+步进电机28BYJ-48)

上一篇:STM32按键实验--连续闪烁的问题
下一篇:STM32通过IIC读写EEPROM(24C02)

小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved