今日学习使用STM32 F103C8T6 与DRV8825模块 驱动42步进电机
本文就简单地用单片机驱动一下,不去了解更深层次的东西,只求能转就行的那种...
文章提供测试代码讲解、完整工程下载、测试效果图
目录
需要准备的模块:
DRV8825步进电机驱动器编辑
42步进电机:
步进电机相位判断:
万用表测量法:
短接法:
硬件接线:
程序设计:
相关代码:
实践效果视频:
整体工程下载:
TMC2225步进电机驱动模块:
网上查阅资料贴出:
需要准备的模块:
DRV8825步进电机驱动器
引脚设置:
SLEEP高电平为正常能耗模式,而RESET默认为高电平,将它们连接起来再接单片机电源正极就行。
EN使能引脚默认为低电平,低电平为工作状态。
DIR是方向控制引脚,低电平顺时针,高电平相反。
STEP是脉冲输入引脚,pwm从此引脚输入。
FAULT和下面的GND要接单片机(如果是电路设计,记得让它和单片机供地,否则转速和力矩不匹配)。
B2 B1 A2 A1 为42步进电机AB相输入
(AB相区分方法:方法一:万用表打到测通断挡位,两条相通的就是同相;方法二:万用表打到20欧姆档,哪两根线有显示电阻就为同相,电阻太大的电机有可能是损坏的)。
VMOT 和 GND的电源输入之间一定要加100uf的电解电容。
调节电流 :通过拧动表面的十字螺丝来调节大小,顺时针减小。
42步进电机:
其中的俩相表示有俩个线圈
额定电压3.8V不是实际的驱动电压,实际驱动电压是12V
在选择步进电机时,额定电流大点好,电阻电感是越小越好
最大空载起动频率是指电机在某种驱动形式、电压及额定电流下,在不加负载的情况下,能够直接起动的最大频率。这个频率是电机性能的一个重要指标,反映了电机在空载条件下的起动能力。
最大空载的运行频率是指电机在某种驱动形式、电压及额定电流下,电机不带负载的最高转速频率。这个频率反映了电机在空载条件下的最高转速能力。
最大空载运行频率是电机在空载条件下的性能指标,实际应用中电机可能会带有一定的负载,因此其实际运行频率可能会低于这个值。
步进电机相位判断:
42 步进电机有A1 A2 B1 B2 四个相位,接下来就解释俩种方式 来判断哪俩个引脚是同相的:
市面上步进电机有六个引脚,但其实其中有俩个都是悬空的,不使用的......
下图相同颜色就是我测出同相的俩对引脚
万用表测量法:
首先准备一个万用表,将其调整到比较小的Ω欧姆电阻档位(一般就几欧姆),然后红黑表笔接线,有较小电阻显示就表示这俩个接线位是通相的:
短接法:
这个方法最简单,直接短接同相位,发现转子变得比较难用手转动,就说明是同相位的:
这一步需要注意短接线接触良好,杜邦线接触不良的话,即使是同相也不会有转动阻力的:
硬件接线:
粗略地画了下接线图:
M0 M1 M2是设置细分的
这里我就不接了,不影响我们初步地驱动步进电机转动...
然后是实物接线如下:
顺便提一嘴,VMOT 与 GND 之间要短接一个100uf的电解电容....
我之前就因为突然地拔插而毁灭了一片 8825 电机驱动模块
程序设计:
这个程序设计了PA6引脚输出10k Hz的频率来驱动步进电机每秒 约 2转的速度
实际上需要6400 Hz 才能使步进电机每秒1转:
这是取决于你的细分程度的,我这里是接的32细分的 M0 \ M1 \ M2 的组合,也就是32个脉冲才能让步进电机转过1.8度的角度,360度( 一圈 ) 就是要200*32=6400个脉冲
(这里的200是来源于360/1.8=200)
但这个程序没有设定启用A0引脚,因此原本接A0的DIR就固定接地了.....
示波器测PA6引脚PWM频率约为10Khz
相关代码:
void Timer3_PWM_init(u16 arr,u16 psc)
{
GPIO_InitTypeDef GPIO_InitStructure;
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_OCInitTypeDef TIM_OCInitStructure;
//开时钟
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
//PWM输出管脚配置
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
TIM_TimeBaseStructure.TIM_Period = arr;
TIM_TimeBaseStructure.TIM_Prescaler =psc;
TIM_TimeBaseStructure.TIM_ClockDivision = 0;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);
//PWM模式配置
TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM1;
TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_High;
TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;
TIM_OC1Init(TIM3,&TIM_OCInitStructure);
TIM_OC1PreloadConfig(TIM3,TIM_OCPreload_Enable);
TIM_Cmd(TIM3,ENABLE);
}
#include "main.h"
uint16_t t1=50;
int main(void)
{
init_ALL(); //初始化所有函数:
t1=50;
while(1)
{
TIM_SetCompare1(TIM3,t1); //设置舵机占空比,控制舵机转动
}
}
//初始化所有函数:
void init_ALL(void)
{
Usart1_Init(115200); //初始化串口1
printf("HELLO \r\n"); //串口1 测试重定向Printf
SysTick_Init(72);
Timer2_Init();
Timer3_PWM_init(99,71);
}
实践效果视频:
初步驱动42步进电机
整体工程下载:
https://download.csdn.net/download/qq_64257614/89627610
TMC2225步进电机驱动模块:
这是我在学习中发现比DRV8825更好的步进电机驱动模块,而且引脚兼容8825,TMC2225可以将步进电机在低速运转的噪音减小、将高速运转的抖动更小
网上查阅资料贴出:
DRV8825步进电机驱动详细说明书————含接线图-CSDN博客
总结
**文章总结:STM32 F103C8T6与DRV8825模块驱动42步进电机指南**本文简述了如何使用STM32 F103C8T6单片机结合DRV8825步进电机驱动器来驱动42步进电机的基本方法和步骤。主要面向初学者,旨在快速实现电机转动的功能,而不深入探讨复杂的理论细节。
### 关键内容与步骤
#### 一、需要准备的模块
- **DRV8825步进电机驱动器**:
- 关键引脚设置,包括SLEEP、RESET、EN、DIR和STEP等,如何连接单片机进行控制。
- VMOT与GND电源输入之间需加100uF电解电容保护。
- 调节电流大小的方法通过驱动器表面螺丝。
- **42步进电机**:
- 额定电压3.8V,实际驱动电压通常为12V。
- 电机性能参数(额定电流、电感电阻、最大空载起动和运行频率)的解释。
#### 二、步进电机相位判断
- **A1、A2、B1、B2相**:使用万用表测量法和短接法来判断哪两个引脚是同相,以确保电机接线正确。
#### 三、硬件接线
- 提供了DRV8825与STM32、步进电机的接线图示例,包括可以不连接的M0、M1、M2细分设置引脚。
- 强调了VMOT与GND之间加电解电容的重要性以防止损坏驱动器。
#### 四、程序设计
- 使用STM32的TIM3定时器产生PWM信号,控制步进电机的转动速度和方向。
- 示例代码展示了TIM3的初始化和PWM配置,实现每秒约2转的转速。
- 实际代码根据电机细分设置(如32细分)计算脉冲数和频率,确保电机的精确控制。
#### 五、实践效果与资源
- 提供了初步驱动步进电机的视频演示链接。
- 提供了完整的工程代码下载链接,方便读者快速开始实验。
#### 六、进阶知识与推荐
- 介绍了TMC2225步进电机驱动模块的优势,如降低噪音和减小抖动,且引脚兼容DRV8825。
- 引导读者进一步查阅DRV8825的详细说明书和相关资料。
### 结语
本文为STM32初学者提供了一份易于理解和实施的步进电机驱动方案,通过简单的硬件连接和程序配置即可实现电机的基本控制功能,是学习STM32和步进电机控制的好起点。同时,也提供了一定程度的深入学习和实践方向。