本篇博文最后修改时间:2017年02月12日,13:59。


一、简介

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

二、实验平台

库版本:STM32F10x_StdPeriph_Lib_V3.5.0

编译软件:MDK4.53

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

仿真器:JLINK

、版权声明

博主:甜甜的大香瓜

声明:喝水不忘挖井人,转载请注明出处。

原文地址:http://blog.csdn.NET/feilusia

联系方式:897503845@qq.com

香瓜BLE之CC2541群:127442605

香瓜BLE之CC2640群:557278427

香瓜BLE之Android群:541462902

香瓜单片机之STM8/STM32群:164311667
甜甜的大香瓜的小店(淘宝店):https://shop217632629.taobao.com/?spm=2013.1.1000126.d21.hd2o8i
四、实验前提
1、在进行本文步骤前,请先阅读以下博文:
1)《STM32之DRV8834电机驱动(IO方式)》:http://blog.csdn.net/feilusia/article/details/52853951

2、在进行本文步骤前,请先实现以下博文:
1)《STM32之系统滴答定时器》:http://blog.csdn.net/feilusia/article/details/52835711

2)《STM32之timer2的精准延时》:http://blog.csdn.net/feilusia/article/details/54434274

3)《STM32之timer3产生PWM》:http://blog.csdn.net/feilusia/article/details/53634882

五、基础知识

暂无

六、实验步骤

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, Bit_RESET);                                 //M0  0       }//1/16步(M1=1, M0=1)if(nGUA_DRV8834_control_vaule == GUA_DRV8834_CONTROL_MICROSTEP_1_16){GPIO_WriteBit(GUA_DRV8834_M1, GUA_DRV8834_M1_PIN, Bit_SET);                                      //M1  1        GPIO_WriteBit(GUA_DRV8834_M0, GUA_DRV8834_M0_PIN, Bit_SET);                                      //M0  1       }
/*//1/32步(M1=1, M0=Z)if(nGUA_DRV8834_control_vaule == GUA_DRV8834_CONTROL_MICROSTEP_1_32){GPIO_WriteBit(GUA_DRV8834_M1, GUA_DRV8834_M1_PIN, Bit_SET);                                       //M1  1        GPIO_WriteBit(GUA_DRV8834_M0, GUA_DRV8834_M0_PIN, GPIO_MODE_OUT_OD_HIZ_FAST);    //M0  Z       }
*/      break;          }//方向选择case GUA_DRV8834_CONTROL_DIR: {                  //正向if(nGUA_DRV8834_control_vaule == GUA_DRV8834_CONTROL_DIR_POSITIVE){GPIO_WriteBit(GUA_DRV8834_DIR, GUA_DRV8834_DIR_PIN, Bit_SET);                                 }//反向if(nGUA_DRV8834_control_vaule == GUA_DRV8834_CONTROL_DIR_NEGATIVE){GPIO_WriteBit(GUA_DRV8834_DIR, GUA_DRV8834_DIR_PIN, Bit_RESET);                       }break;          }  //其他default: {break;          }                     }
}//******************************************************************************
//name:             GUA_DRV8834_Set_Direction
//introduce:        电机的方向设置
//parameter:        nGUA_Direction:1为正向,0为反向
//return:           none
//author:           甜甜的大香瓜
//email:            897503845@qq.com
//QQ group          香瓜单片机之STM8/STM32(164311667)
//changetime:       2017.02.12
//******************************************************************************
static void GUA_DRV8834_Set_Direction(GUA_32 nGUA_Direction)
{//方向switch(nGUA_Direction){//电机转轴朝上,逆时针,反向case GUA_MOTOR_CONFIG_DIRECTION_NEGATIVE:{GUA_DRV8834_Control(GUA_DRV8834_CONTROL_DIR, GUA_DRV8834_CONTROL_DIR_NEGATIVE);        break;      }  //电机转轴朝上,顺时针,正向    case GUA_MOTOR_CONFIG_DIRECTION_POSITIVE:{GUA_DRV8834_Control(GUA_DRV8834_CONTROL_DIR, GUA_DRV8834_CONTROL_DIR_POSITIVE);        break;      } //其他default: {break;          } }
}//******************************************************************************
//name:             GUA_DRV8834_Set_Size
//introduce:        电机的步长设置
//parameter:        nSize:0为整步,1为半步
//return:           none
//author:           甜甜的大香瓜
//email:            897503845@qq.com
//QQ group          香瓜单片机之STM8/STM32(164311667)
//changetime:       2017.02.12
//******************************************************************************
static void GUA_DRV8834_Set_Size(GUA_U8 nGUA_Size)
{//步长大小switch(nGUA_Size){//整步case GUA_MOTOR_CONFIG_SIZE_FULL:{GUA_DRV8834_Control(GUA_DRV8834_CONTROL_MICROSTEP, GUA_DRV8834_CONTROL_MICROSTEP_FULL);         break;      } //半步case GUA_MOTOR_CONFIG_SIZE_1_2:{GUA_DRV8834_Control(GUA_DRV8834_CONTROL_MICROSTEP, GUA_DRV8834_CONTROL_MICROSTEP_1_2);         break;      } //其他default: {break;          } }
}//******************************************************************************
//name:             GUA_DRV8834_Move
//introduce:        电机的启动
//parameter:        pMotor_Config:电机核心参数结构体数据
//return:           none
//author:           甜甜的大香瓜
//email:            897503845@qq.com
//QQ group          香瓜单片机之STM8/STM32(164311667)
//changetime:       2017.02.12
//******************************************************************************
void GUA_DRV8834_Move(GUA_MOTOR_CONFIG *pGUA_Motor_Config)
{GUA_32         nGUA_Steps = pGUA_Motor_Config->DirectionSteps;                                                         //保存步数                                                    GUA_32        nGUA_Direction = (nGUA_Steps >= 0)?1:-1;                                                               //计算方向GUA_U8    nGUA_Size = pGUA_Motor_Config->Size;                                                                    //保存步长  GUA_U16   nGUA_PWM_Frequency = pGUA_Motor_Config->PulsePerSecond;                                                               //PWM需要的频率值GUA_U64   nGUA_PWM_Time = (1000L/pGUA_Motor_Config->PulsePerSecond)*(nGUA_Steps*nGUA_Direction); //PWM执行时间=周期*步数//如果电机开关没开启,则退出if(pGUA_Motor_Config->Status == GUA_MOTOR_CONFIG_STATUS_IDLE){return;}//唤醒GUA_DRV8834_Control(GUA_DRV8834_CONTROL_SLEEP, GUA_DRV8834_CONTROL_SLEEP_OFF); //设置方向GUA_DRV8834_Set_Direction(nGUA_Direction);//设置步长GUA_DRV8834_Set_Size(nGUA_Size);//电机转动GUA_Timer2_StartDelayMs_1(nGUA_PWM_Time);                                                                                                                   //开始定时  GUA_Timer3_PWM_Init(1000000/nGUA_PWM_Frequency);                                                                                                    //设置PWM频率GUA_Timer3_PWM_SetDutyCycle(50);                                                                                                                                   //设置PWM占空比GUA_Timer3_PWM_Status(GUA_TIMER3_PWM_STATUS_ON);                                                                                                  //使能PWM //打查询时间的标志sGUA_CheckMoveResidueTime_Flag = GUA_CHECK_MOVE_RESIDUE_TIME_FLAG_ON;
}//******************************************************************************
//name:             GUA_DRV8834_CheckMoveResidueTime
//introduce:        获取电机运行剩余时间
//parameter:        none
//return:           GUA_CHECK_MOVE_RESIDUE_TIME_RESULT_NOSTART
//                  GUA_CHECK_MOVE_RESIDUE_TIME_RESULT_ENDING
//                  GUA_CHECK_MOVE_RESIDUE_TIME_RESULT_RUNNING
//author:           甜甜的大香瓜
//email:            897503845@qq.com
//QQ group          香瓜单片机之STM8/STM32(164311667)
//changetime:       2017.02.12
//******************************************************************************
GUA_U8 GUA_DRV8834_CheckMoveResidueTime(void)
{//没开电机if(sGUA_CheckMoveResidueTime_Flag == GUA_CHECK_MOVE_RESIDUE_TIME_FLAG_OFF){return GUA_CHECK_MOVE_RESIDUE_TIME_RESULT_NOSTART;}//开了电机else{//运行时间到了if(GUA_Timer2_CheckDelayMs_1() == 0){return GUA_CHECK_MOVE_RESIDUE_TIME_RESULT_ENDING;}//运行时间没到{return GUA_CHECK_MOVE_RESIDUE_TIME_RESULT_RUNNING;}}
}//******************************************************************************
//name:             GUA_DRV8834_Stop
//introduce:        电机的停止
//parameter:        pGUA_Motor_Config:电机核心参数结构体数据
//return:           none
//author:           甜甜的大香瓜
//email:            897503845@qq.com
//QQ group          香瓜单片机之STM8/STM32(164311667)
//changetime:       2017.02.12
//******************************************************************************
void GUA_DRV8834_Stop(GUA_MOTOR_CONFIG *pGUA_Motor_Config)
{GUA_32         nGUA_Steps = pGUA_Motor_Config->DirectionSteps;                                                         //保存步数                                                    GUA_32        nGUA_Direction = (nGUA_Steps >= 0)?1:-1;                                                               //计算方向GUA_U64   nGUA_PWM_Time = (1000L/pGUA_Motor_Config->PulsePerSecond)*(nGUA_Steps*nGUA_Direction);  //PWM执行时间=周期*步数GUA_32      nGUA_StepsElapse;                                                                                                                                               //实际走的步数//停止PWMGUA_Timer3_PWM_Status(GUA_TIMER3_PWM_STATUS_OFF);    //清除状态pGUA_Motor_Config->Status = GUA_MOTOR_CONFIG_STATUS_IDLE; //睡眠GUA_DRV8834_Control(GUA_DRV8834_CONTROL_SLEEP, GUA_DRV8834_CONTROL_SLEEP_ON);   //计算实际运行时间pGUA_Motor_Config->TimeElapse = nGUA_PWM_Time - GUA_Timer2_CheckDelayMs_1(); //计算实际走的步数nGUA_StepsElapse = (pGUA_Motor_Config->TimeElapse)/(1000L/pGUA_Motor_Config->PulsePerSecond);//计算实际位移pGUA_Motor_Config->DirectionPosition += nGUA_StepsElapse;    //打查询时间的标志sGUA_CheckMoveResidueTime_Flag = GUA_CHECK_MOVE_RESIDUE_TIME_FLAG_OFF;
}//******************************************************************************
//name:             GUA_DRV8834_Init
//introduce:        电机的初始化
//parameter:        none
//return:           none
//author:           甜甜的大香瓜
//email:            897503845@qq.com
//QQ group          香瓜单片机之STM8/STM32(164311667)
//changetime:       2017.02.12
//******************************************************************************
void GUA_DRV8834_Init(void)
{//IO初始化GUA_DRV8834_IO_Init();  //睡眠GUA_DRV8834_Control(GUA_DRV8834_CONTROL_SLEEP, GUA_DRV8834_CONTROL_SLEEP_ON); //nENBL使能GUA_DRV8834_Control(GUA_DRV8834_CONTROL_OUTPUTS, GUA_DRV8834_CONTROL_OUTPUTS_ENABLE);
}

2)编写驱动头文件GUA_DRV8834.h(存放在“……\HARDWARE”)

//******************************************************************************
//name:             GUA_DRV8834.h
//introduce:        DRV8834驱动头文件
//author:           甜甜的大香瓜
//email:            897503845@qq.com
//QQ group          香瓜单片机之STM8/STM32(164311667)
//changetime:       2017.02.12
//******************************************************************************
#ifndef _GUA_DRV8834_H_
#define _GUA_DRV8834_H_/*********************宏定义************************/
//类型宏
#ifndef GUA_U8
typedef unsigned char GUA_U8;
#endif    #ifndef GUA_8
typedef signed char GUA_8;
#endif      #ifndef GUA_U16
typedef unsigned short GUA_U16;
#endif #ifndef GUA_16
typedef signed short GUA_16;
#endif         #ifndef GUA_U32
typedef unsigned long GUA_U32;
#endif #ifndef GUA_32
typedef signed long GUA_32;
#endif#ifndef GUA_U64
typedef unsigned long long GUA_U64;
#endif#ifndef GUA_64
typedef signed long long GUA_64;
#endif//睡眠模式选择
#define GUA_DRV8834_CONTROL_SLEEP                                       0
#define GUA_DRV8834_CONTROL_SLEEP_ON                                0
#define GUA_DRV8834_CONTROL_SLEEP_OFF                               1//步数选择
#define GUA_DRV8834_CONTROL_MICROSTEP                               1
#define GUA_DRV8834_CONTROL_MICROSTEP_FULL                  0
#define GUA_DRV8834_CONTROL_MICROSTEP_1_2                       1
#define GUA_DRV8834_CONTROL_MICROSTEP_1_4                       2
#define GUA_DRV8834_CONTROL_MICROSTEP_1_8                       3
#define GUA_DRV8834_CONTROL_MICROSTEP_1_16                  4
#define GUA_DRV8834_CONTROL_MICROSTEP_1_32                  5  //方向选择
#define GUA_DRV8834_CONTROL_DIR                                         2
#define GUA_DRV8834_CONTROL_DIR_POSITIVE                        0
#define GUA_DRV8834_CONTROL_DIR_NEGATIVE                        1//输出选择
#define GUA_DRV8834_CONTROL_OUTPUTS                                 3
#define GUA_DRV8834_CONTROL_OUTPUTS_ENABLE                  0
#define GUA_DRV8834_CONTROL_OUTPUTS_DISABLE                 1//电机参数的宏
#define GUA_MOTOR_CONFIG_DIRECTION_NEGATIVE         -1
#define GUA_MOTOR_CONFIG_DIRECTION_POSITIVE         1#define GUA_MOTOR_CONFIG_SIZE_FULL                  0
#define GUA_MOTOR_CONFIG_SIZE_1_2                   1#define GUA_MOTOR_CONFIG_STATUS_IDLE                0
#define GUA_MOTOR_CONFIG_STATUS_ACTIVE              1//查询电机剩余时间的结果宏
#define GUA_CHECK_MOVE_RESIDUE_TIME_RESULT_NOSTART  0
#define GUA_CHECK_MOVE_RESIDUE_TIME_RESULT_RUNNING  1
#define GUA_CHECK_MOVE_RESIDUE_TIME_RESULT_ENDING       2/*********************外部变量************************/
typedef struct
{  GUA_32               DirectionSteps;             //含方向的步数  GUA_U16               PulsePerSecond;             //每秒给的脉冲数 GUA_U8                Size;                                   //步长 GUA_U8             Status;                             //电机转动状态 GUA_32             DirectionPosition;      //含方向的位置GUA_U64             TimeElapse;                     //使用时间
}GUA_MOTOR_CONFIG; extern GUA_MOTOR_CONFIG stGUA_Motor_Config;/*********************函数声明************************/
void GUA_DRV8834_Control(GUA_U8 nGUA_DRV8834_control, GUA_U8 nGUA_DRV8834_control_vaule);
void GUA_DRV8834_Move(GUA_MOTOR_CONFIG *pGUA_Motor_Config);
GUA_U8 GUA_DRV8834_CheckMoveResidueTime(void);
void GUA_DRV8834_Stop(GUA_MOTOR_CONFIG *pGUA_Motor_Config);
void GUA_DRV8834_Init(void);#endif

3)工程中添加GUA_DRV8834.c

4)在MDK设置中添加驱动源文件路径

2、在应用层中调用

1)添加头文件(main.c中)

#include "GUA_DRV8834.h"

2)添加驱动初始化代码(main.c的main函数中)

  //电机初始化  GUA_DRV8834_Init();

3)添加测试代码(main.c中)

①添加一个电机转一圈的测试代码(main.c中)

//******************************************************************************
//name:             GUA_Test
//introduce:        测试代码
//parameter:        none
//return:           none
//author:           甜甜的大香瓜
//email:            897503845@qq.com
//QQ group          香瓜单片机之STM8/STM32(164311667)
//changetime:       2017.02.12
//******************************************************************************
#define GUA_DRV8834_STEP_PER_CIRCLE                  (GUA_U32)(15331)   //电机转动一圈的步数
static void GUA_Test(void)
{GUA_U8 nGUA_Ret = 0;//配置电机参数stGUA_Motor_Config.DirectionSteps = GUA_DRV8834_STEP_PER_CIRCLE; //步数,4字节 stGUA_Motor_Config.PulsePerSecond = 1000;                                                 //速度,2字节  stGUA_Motor_Config.Size = 0x00;                                                                       //步长,1字节                         stGUA_Motor_Config.Status = GUA_MOTOR_CONFIG_STATUS_ACTIVE;                //电机启动,1字节//启动电机GUA_DRV8834_Move(&stGUA_Motor_Config);//时刻查询电机运行时间,到时则停止while(1){nGUA_Ret = GUA_DRV8834_CheckMoveResidueTime();if(nGUA_Ret == GUA_CHECK_MOVE_RESIDUE_TIME_RESULT_ENDING){GUA_DRV8834_Stop(&stGUA_Motor_Config);}   }
}   

由于我使用的电机除了电机自带的减速,还有外壳上的减速,因此一圈为15331步。

②添加测试代码的调用(main.c的main函数中)

//测试代码
GUA_Test(); 

测试代码要放在初始化之后。

七、注意事项
暂无。
八、实验结果

仿真并设置断点在测试代码处,可发现电机转动至停止一共约15S多,这是因为一圈为15331步,速度设置为1000步每秒,计算可得约为15.331S。

因此实验成功。

【STM32】STM32之DRV8834电机驱动(PWM方式)相关推荐

  1. 【STM32】STM32之DRV8834电机驱动(IO方式)

    本篇博文最后修改时间:2017年02月12日,13:32. 一.简介 本文介绍如何使用STM32通过DRV8834控制步进电机,使用IO方式控制转动. 二.实验平台 库版本:STM32F10x_Std ...

  2. STM32入门(四)PWM与电机驱动

    STM32入门(四)PWM与电机驱动 一.PWM 所谓PWM,就是脉冲宽度调制技术,其具有两个很重要的参数:频率和占空比.频率,就是周期的倒数:占空比,就是高电平在一个周期内所占的比例.PWM方波的示 ...

  3. a4988 脉宽要求_基于STM32的微型步进电机驱动控制器设计

    基于STM32的微型步进电机驱动控制器设计 摘 要: 设计了一种微型步进电机驱动控制器,通过上位机界面修改步进电机转速.旋转角度.细分系数.该设计以STM32F103T8U6作为主控制器,以A4988 ...

  4. 【STM32】通用定时器的PWM输出(实例:PWM输出)

    STM32F1xx官方资料: <STM32中文参考手册V10>-第14章  通用定时器 通用定时器PWM概述 STM32定时器输出通道引脚 这里以TIM3为例来讲解.STM32的通用定时器 ...

  5. STM32芯片烧录的三种方式介绍,串口、STM32 ST-LINK Utility以及STM32CubeProgrammer

    STM32芯片烧录的三种方式介绍,串口.STM32 ST-LINK Utility以及STM32CubeProgrammer 1 概述 1.1资源概述 1.2 STM32串口烧录方式 2.KEIL软件 ...

  6. stm32+增量式pid+max6675 PWM温度控制

    stm32+增量式pid+max6675 PWM温度控制 本文采用的芯片为STM32F103RCT6 温度芯片为MAX6675 之前spi通讯的max6675代码: https://blog.csdn ...

  7. 基于STM32单片机闭环步进电机驱动调速仿真(仿真+源码+全套资料)

    资料编号:081 (1) 基本功能:本任务通过输出脉冲控制步进电机的停止.运动.方向.使用 两个按键分别控制步进电机的正转和反转,再次按下这两个按键,步进电机停止, 同时 LCD 显示电机状态信息. ...

  8. stm32的三种编程下载方式

    stm32的三种编程下载方式:参见FreedomXura旭日的博客: 网址http://blog.chinaunix.net/uid-20788517-id-263475.html

  9. 基于STM32的智能小车--电机驱动设计

    基于STM32的智能小车 第一章 基于STM32的智能小车方案设计 基于STM32的智能小车--电机驱动设计 基于STM32的智能小车 前言 一.电机是什么? 二.常见电机分类 1.有刷电机 2.无刷 ...

最新文章

  1. 如何取消掉计算机更新图标,XP系统如何关闭右下角中的自动更新图标?
  2. mybatis自动扫描注解
  3. Linux系统IP地址
  4. 会议交流 | “数据智能与知识服务”研讨会的专家报告题目已更新!
  5. java递归方法分析
  6. 怎么把度分秒化成小数_excel中批量将经纬度度分秒转换成十进制小数点的方法介绍...
  7. 测试理论----测试设计方法论
  8. Java web项目目录结构以及作用详解
  9. 中国行政区划代码(2020年版)附树形sql与excel
  10. 5步教你成功求职进入BAT
  11. nvm,node.js,npm,cnpm都是什么意思,怎么使用。
  12. 智能照明控制系统在城市夜景照明工程中的应用
  13. Exploratory Social Network Analysis with Pajek(第三版)8
  14. IIS + PHP 配置
  15. css设置背景图片随滚动缓慢滚动_h5页面背景图很长要有滚动条滑动效果的实现...
  16. 软件的第三方CNAS测试的目的和意义以及测试内容和流程
  17. 移动端手机调试的方法
  18. 如何使用 WordPress 创建和销售在线课程
  19. 华为研发投入全球第二!力压三星、苹果
  20. 微信小程序构建商城百度云_构建云存储应用程序

热门文章

  1. SWPUCTF_2019_p1KkHeap
  2. 怎么区分单线双线BGP线路的服务器?
  3. 问渠那得清如许,唯有源头活水来
  4. 《Undocumented Windows 2000 Secrets》翻译 --- 第一章(2)
  5. 数据挖掘技术特写(转)
  6. 什么是BGP高防?选择BGP多线还是单线?
  7. 苹果手机怎么把游戏隐藏在计算机,苹果手机隐藏了游戏怎么找出来
  8. Android 9 (P)之init进程启动源码分析指南之三
  9. 飞信java版2013_飞信(Fetion) 2013青春版
  10. 工行融e联,绿色通道便捷办理