历史上的今天
今天是:2025年01月28日(星期二)
2020年01月28日 | STM32之DRV8834电机驱动(PWM方式)
2020-01-28 来源:eefocus
一、简介
本文介绍如何使用STM32通过DRV8834控制步进电机,使用PWM方式控制转动。
二、实验平台
库版本:STM32F10x_StdPeriph_Lib_V3.5.0
编译软件:MDK4.53
硬件平台:STM32开发板(主芯片stm32f103c8t6)
仿真器:JLINK
三、版权声明
四、实验前提
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
史海拾趣
|
本帖最后由 paulhyde 于 2014-9-15 09:17 编辑 电子设计竞赛与大学生素质能力培养 全国大学生电子设计竞赛是教育部倡导的四大学科竞赛之 一, 是面向大学生的群众性科技活动, 目的在于推动全国普通高 等学校促进信息与电子类学科面向二十一世纪 ...… 查看全部问答> |
|
用手机发送短信到12114,就能搜索各地的交通、天气、股票等多种生活资讯。这是上个月12114号码出台后,12114的监管部门对外所宣传的,其监管部门与服务商一直对外宣称,12114平台可以为消费者提供公益、公交、天气、交通、抢险、金融证券等资讯查询 ...… 查看全部问答> |
|
ATMega64工作在5伏电压下能够兼容3.3V的管脚电平么? 本信息来自合作QQ群:电子工程师技术交流(12425841) 群主在坛子ID:Kata ATMega64的 符号参数条件最小值典型值最大值单位 VIL 输入低电压除了 XTAL1 和RESET 引 脚-0.5 0.2 VCC (1) V VIL1 输入低电压XTAL1 引脚,外部时钟-0.5 0.1 VCC (1) V ...… 查看全部问答> |
|
一款5-7WLED驱动芯联的IC 就是不知道批量了会怎么样;有谁也有这种成熟的方案;批量的话精度都以可以接受的; 方便的话和我交流下哦, 现在这款IC适合宽电压,340MA;功率因素低了一点;才0.5; 电路里头就是一个pai型电路(2个电解一个电感) ...… 查看全部问答> |
|
本人以前一直在用Protel DXP,99用过一点,感觉没有DXP好用(个人感觉),所以一直在用DXP,不过后来一直听很多人说PADS和Cadence很好用,所以最近也想学习一下,谁那里有这两种软件破解版的可否给小弟发一份,在此万分感谢。如果哪位仁兄有的话, ...… 查看全部问答> |




