×
单片机 > 单片机程序设计 > 详情

STM32之DRV8834电机驱动(PWM方式)

发布时间:2020-12-25 发布时间:
|

一、简介


本文介绍如何使用STM32通过DRV8834控制步进电机,使用PWM方式控制转动。


二、实验平台


库版本:STM32F10x_StdPeriph_Lib_V3.5.0


编译软件:MDK4.53


硬件平台:STM32开发板(主芯片stm32f103c8t6)


仿真器:JLINK


五、实验步骤


1、编写并添加电机驱动


1)编写驱动GUA_DRV8834.c(存放在“……HARDWARE”)


//******************************************************************************            

//name:             GUA_DRV8834.c           

//introduce:        DRV8834驱动    

//author:           甜甜的大香瓜                   

//email:            897503845@qq.com       

//QQ group          香瓜单片机之STM8/STM32(164311667)                    

//changetime:       2017.02.12     

//******************************************************************************   

#include "stm32f10x.h"

#include "GUA_DRV8834.h"

#include "GUA_SysTick.h"

#include "GUA_Timer3_PWM.h"

#include "GUA_Timer2.h" 

 

/*********************宏定义************************/   

#define GUA_DRV8834_STEP_PER_CIRCLE (GUA_32)(15331)   //电机转动一圈的步数

 

//引脚宏定义

#define GUA_DRV8834_SLEEP GPIOA

#define GUA_DRV8834_SLEEP_PIN GPIO_Pin_7

 

#define GUA_DRV8834_M1 GPIOB

#define GUA_DRV8834_M1_PIN GPIO_Pin_10

 

#define GUA_DRV8834_M0 GPIOB

#define GUA_DRV8834_M0_PIN GPIO_Pin_11

 

#define GUA_DRV8834_DIR GPIOB

#define GUA_DRV8834_DIR_PIN GPIO_Pin_2

 

#define GUA_DRV8834_STEP GPIOB

#define GUA_DRV8834_STEP_PIN GPIO_Pin_0

 

//查询电机剩余时间的宏

#define GUA_CHECK_MOVE_RESIDUE_TIME_FLAG_ON 0

#define GUA_CHECK_MOVE_RESIDUE_TIME_FLAG_OFF 1

 

/*********************内部变量************************/  

//初始化结构体变量

GUA_MOTOR_CONFIG stGUA_Motor_Config = {0, 500, 0x00, 0x00000000, GUA_MOTOR_CONFIG_STATUS_IDLE, 0x00000000}; //初始化电机参数为0步,500个脉冲每秒的速度,整步,本次电机转动时长为0,空闲,当前为0位置

//查询时间的标志

static GUA_U8 sGUA_CheckMoveResidueTime_Flag = GUA_CHECK_MOVE_RESIDUE_TIME_FLAG_OFF;

 

/*********************内部函数************************/ 

static void GUA_DRV8834_IO_Init(void);

static void GUA_DRV8834_Set_Direction(GUA_32 nGUA_Direction);

static void GUA_DRV8834_Set_Size(GUA_U8 nGUA_Size);

 

//******************************************************************************            

//name:             GUA_DRV8834_IO_Init           

//introduce:        电机驱动的IO初始化         

//parameter:        none                 

//return:           none         

//author:           甜甜的大香瓜                 

//email:            897503845@qq.com     

//QQ group          香瓜单片机之STM8/STM32(164311667)                  

//changetime:       2017.02.12                     

//******************************************************************************

static void GUA_DRV8834_IO_Init(void)

{

//IO结构体

GPIO_InitTypeDef GPIO_InitStructure;

//时钟使能

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB, ENABLE);

//SLEEP配置

GPIO_InitStructure.GPIO_Pin = GUA_DRV8834_SLEEP_PIN; 

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; 

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init(GUA_DRV8834_SLEEP, &GPIO_InitStructure);

//M1配置

GPIO_InitStructure.GPIO_Pin = GUA_DRV8834_M1_PIN; 

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; 

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init(GUA_DRV8834_M1, &GPIO_InitStructure);

//M0配置

GPIO_InitStructure.GPIO_Pin = GUA_DRV8834_M0_PIN; 

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; 

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init(GUA_DRV8834_M0, &GPIO_InitStructure);

 

//DIR配置

GPIO_InitStructure.GPIO_Pin = GUA_DRV8834_DIR_PIN; 

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; 

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init(GUA_DRV8834_DIR, &GPIO_InitStructure);

//STEP配置

GPIO_InitStructure.GPIO_Pin = GUA_DRV8834_STEP_PIN; 

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; 

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init(GUA_DRV8834_STEP, &GPIO_InitStructure);

}

 

//******************************************************************************        

//name:             GUA_DRV8834_Control

//introduce:        电机的配置      

//parameter:        nGUA_DRV8834_control:需要配置的参数;nGUA_DRV8834_control_vaule:配置的数值         

//return:           none      

//author:           甜甜的大香瓜                 

//email:            897503845@qq.com     

//QQ group          香瓜单片机之STM8/STM32(164311667)                  

//changetime:       2017.02.12                     

//******************************************************************************

void GUA_DRV8834_Control(GUA_U8 nGUA_DRV8834_control, GUA_U8 nGUA_DRV8834_control_vaule)

{

  switch(nGUA_DRV8834_control)

  {

    //睡眠模式选择

    case GUA_DRV8834_CONTROL_SLEEP: 

    {                  

      //睡眠

      if(nGUA_DRV8834_control_vaule == GUA_DRV8834_CONTROL_SLEEP_ON)

      {

        GPIO_WriteBit(GUA_DRV8834_SLEEP, GUA_DRV8834_SLEEP_PIN, Bit_RESET); //SLEEP 0       

      }

      

      //禁止睡眠

      if(nGUA_DRV8834_control_vaule == GUA_DRV8834_CONTROL_SLEEP_OFF)

      {

        GPIO_WriteBit(GUA_DRV8834_SLEEP, GUA_DRV8834_SLEEP_PIN, Bit_SET); //SLEEP 1      

      }

      

      break;          

    }

 

    //步数选择

    case GUA_DRV8834_CONTROL_MICROSTEP: 

    {                  

      //满步(M1=0, M0=0)

      if(nGUA_DRV8834_control_vaule == GUA_DRV8834_CONTROL_MICROSTEP_FULL)

      {

        GPIO_WriteBit(GUA_DRV8834_M1, GUA_DRV8834_M1_PIN, Bit_RESET); //M1  0        

        GPIO_WriteBit(GUA_DRV8834_M0, GUA_DRV8834_M0_PIN, Bit_RESET); //M0  0      

      }

      

      //1/2步(M1=0, M0=1)

      if(nGUA_DRV8834_control_vaule == GUA_DRV8834_CONTROL_MICROSTEP_1_2)

      {

        GPIO_WriteBit(GUA_DRV8834_M1, GUA_DRV8834_M1_PIN, Bit_RESET); //M1  0        

        GPIO_WriteBit(GUA_DRV8834_M0, GUA_DRV8834_M0_PIN, Bit_SET); //M0  1      

      }

/*      

      //1/4步(M1=0, M0=Z)

      if(nGUA_DRV8834_control_vaule == GUA_DRV8834_CONTROL_MICROSTEP_1_4)

      {

        GPIO_WriteBit(GUA_DRV8834_M1, GUA_DRV8834_M1_PIN, Bit_RESET); //M1  0        

        GPIO_WriteBit(GUA_DRV8834_M0, GUA_DRV8834_M0_PIN, GPIO_MODE_OUT_OD_HIZ_FAST); //M0  Z       

      }

*/

      //1/8步(M1=1, M0=0)

      if(nGUA_DRV8834_control_vaule == GUA_DRV8834_CONTROL_MICROSTEP_1_8)

      {

        GPIO_WriteBit(GUA_DRV8834_M1, GUA_DRV8834_M1_PIN, Bit_SET); //M1  1       

GPIO_WriteBit(GUA_DRV8834_M0, GUA_DRV8834_M0_PIN, Bi


关键字:STM32  DRV8834  电机驱动  PWM方式

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
STM32中断向量表的位置.重定向