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)

推荐阅读最新更新时间:2026-03-25 11:42

单片机 步进电机 驱动程序 ULN2003 28BYJ-48 5线4电机
/*************** writer:shopping.w ******************/ #include reg52.h #define uint unsigned int #define uchar unsigned char uchar code FFW = { 0x01, 0x03, 0x02, 0x06, 0x04, 0x0c, 0x08, 0x09 }; uchar code REV = { 0x09, 0x08, 0x0c, 0x04, 0x06, 0x02, 0x03, 0x01 }; sbit K1 = P3 ^ 0; sbit K2 =
[单片机]
单片机 <font color='red'>步进电机</font> <font color='red'>驱动</font>程序 ULN2003 <font color='red'>28BYJ-48</font> <font color='red'>5</font><font color='red'>线</font><font color='red'>4</font><font color='red'>相</font>电机
STM32】实战1—用STM32与ULN2003驱动步进电机28BYJ-48(一)
1 实验预期效果 完成步进电机的正转(不通过串口控制)。 2 硬件学习 2.2 28BYJ-48步进电机 2.2.1 规格书 2.2.2 原理认识 【该部分为视频第20讲-步进电机控制_哔哩哔哩_bilibili的学习记录】【强推看原视频】 电机参数: 1~4为相线,5为电源线 同一根绕线,面对面通电励磁,吸引转子转动 : 该图中,定子8个齿,平均相间45°(即360°/8);转子6个齿,平均相间60°(即360°/6)。所以相差15°。根据系列计算可知,得出的结果与规格书并不相符。 所以:货不对板!!!!!!!!!!! (即上面那张图片中的齿数与
[单片机]
【<font color='red'>STM32</font>】实战1—用<font color='red'>STM32</font>与ULN2003<font color='red'>驱动</font><font color='red'>步进电机</font><font color='red'>28BYJ-48</font>(一)
步进电机 28BYJ-48介绍和驱动及编程
28BYJ-48步进电机: 步进电机是一种将电脉冲转化为角位移的执行机构。通俗一点讲:当步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度(及步进角)。您可以通过控制脉冲个来控制角位移量,从而达到准确定位的目的;同时您可以通过控制脉冲频率来控制电机转动的速度和加速度,从而达到调速的目的。 步进电机28BYJ48型四相八拍电机,电压为DC5V DC12V。当对步进电机施加一系列连续不断的控制脉冲时,它可以连续不断地转动。每一个脉冲信号对应步进电机的某一相或两相绕组的通电状态改变一次,也就对应转子转过一定的角度(一个步距角)。当通电状态的改变完成一个循环时,转子转过一个齿距。四相步进电机可以在不同的
[单片机]
28BYJ-48步进电机加ULN2003驱动的51单片机的代码
#include reg51.h #define uint unsigned int #define ucher unsigned char unsigned char code ZZ ={0x09,0x01,0x03,0x02,0x06,0x04,0x0c,0x08};//28BYJ-48正时钟旋转相序表 unsigned char code FZ ={0x08,0x0c,0x04,0x06,0x02,0x03,0x01,0x09};//28BYJ-48逆时钟旋转相序表 void delay(unsigned int n)//毫秒级延时 { unsigned int i,j; for(j=n;j 0
[单片机]
步进电机28BYJ-48介绍和驱动及编程
28BYJ-48步进电机: 步进电机是一种将电脉冲转化为角位移的执行机构。通俗一点讲:当步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度(及步进角)。您可以通过控制脉冲个来控制角位移量,从而达到准确定位的目的;同时您可以通过控制脉冲频率来控制电机转动的速度和加速度,从而达到调速的目的。 步进电机28BYJ48型四相八拍电机,电压为DC5V DC12V。当对步进电机施加一系列连续不断的控制脉冲时,它可以连续不断地转动。每一个脉冲信号对应步进电机的某一相或两相绕组的通电状态改变一次,也就对应转子转过一定的角度(一个步距角)。当通电状态的改变完成一个循环时,转子转过一个齿距。四相步进电机可以在
[单片机]
实用的 28BYJ-48 步进电机控制程序
上面我们虽然完成了用中断控制电机转动的程序,但实际上这个程序还是没多少实用价值的,我们不能每次想让它转动的时候都上下电啊,是吧。还有就是它不但能正转还得能反转啊,也就是说不但能转过去,还得能转回来呀。好吧,我们就来做一个实例程序吧,结合第8章的按键程序,我们设计这样一个功能程序:按数字键1~9,控制电机转过1~9圈;配合上下键改变转动方向,按向上键后正向转1~9圈,向下键则反向转1~9圈;左键固定正转90度,右键固定反转90;Esc 键终止转动。通过这个程序,我们也可以进一步体会到如何用按键来控制程序完成复杂的功能,以及控制和执行模块之间如何协调工作,而你的编程水平也可以在这样的实践练习中得到锻炼和提升。 #include reg
[单片机]
使用STM32简单控制TMC5160驱动步进电机
首先先来了解一下TMC5160的3种工作模式 TMC5160通过两个引脚来控制它的工作模式: SD _MODE和S PI _MODE。 1、当SD_MODE接地,SPI_MODE拉高,TMC5160即工作在模式1(SPI控制模式)。在该模式下,用户通过SPI接口来设置TMC5160的 寄存器 。 TMC5160使用自己的梯形曲线发生器来控制 步进电机 转动,用户需要设置:开始运动速度VSTART、第一段折线末速度V1、最大速度VMAX、停止速度VSTOP、第一段折线的加速度A1、第二段折线加速度AMAX、第四段折线的减速度 DMA X、第五段折线的减速度D1。把上面的参数设置好,再设置工作模式:速度模式和位置模式。最后再设置
[单片机]
使用<font color='red'>STM32</font>简单控制TMC5160<font color='red'>驱动</font><font color='red'>步进电机</font>
stm32驱动TB6600控制42/57步进电机的案例(TIM中断和PWM实验)
步进电机的简单使用 接线: TB6600驱动盒的详细说明: 程序设计: 工程文件: 做毕业设计要用到57步进电机,所以花了两天时间做了一下电机函数 从淘宝查的资料: 接线如图: 接线: DIR- && PUL- 接 单片机GND DIR+ 接 PA1 PUL+ 接 PA0 驱动盒TB6600 VCC 24V 驱动盒TB6600 GND 24V的GND 我测出来的 A组(绿+蓝- ) B组(黄+红-) 如何确定AB两组看这个: 关于42步进电机驱动——基于STM32 HAL库实现 接线方法 TB6600驱动盒的详细说明: 先冲英说明: Microstep Driver 微步驱动程序 Microstep 微步
[单片机]
<font color='red'>stm32</font><font color='red'>驱动</font>TB6600控制42/57<font color='red'>步进电机</font>的案例(TIM中断和PWM实验)
小广播
最新单片机文章
何立民专栏 单片机及嵌入式宝典

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

厂商技术中心

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

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