步进电机驱动笔记1:STM32+DRV8825模块_初步驱动42步进电机

今日学习使用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博客

  • 13
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
要在STM32上编写控制 drv8825 驱动 42 步进电机的程序,您需要使用适当的库和编程语言来与驱动器进行通信。以下是一个示例程序,使用STM32Cube HAL库和C语言来控制步进电机: ```c #include "stm32f4xx_hal.h" // 步进电机引脚定义 #define STEP_PIN GPIO_PIN_0 #define DIR_PIN GPIO_PIN_1 #define ENABLE_PIN GPIO_PIN_2 #define STEP_PORT GPIOA #define DIR_PORT GPIOA #define ENABLE_PORT GPIOA // 步进电机细分设置 #define MICROSTEPS 16 // 步进电机初始化函数 void stepper_init(void) { // 初始化步进电机引脚 GPIO_InitTypeDef GPIO_InitStruct = {0}; GPIO_InitStruct.Pin = STEP_PIN | DIR_PIN | ENABLE_PIN; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; HAL_GPIO_Init(STEP_PORT, &GPIO_InitStruct); // 禁用步进电机 HAL_GPIO_WritePin(ENABLE_PORT, ENABLE_PIN, GPIO_PIN_SET); } // 步进电机移动函数 void stepper_move(int steps, uint8_t direction) { // 设置方向引脚 if (direction == 1) { HAL_GPIO_WritePin(DIR_PORT, DIR_PIN, GPIO_PIN_SET); } else { HAL_GPIO_WritePin(DIR_PORT, DIR_PIN, GPIO_PIN_RESET); } // 激活步进电机 HAL_GPIO_WritePin(ENABLE_PORT, ENABLE_PIN, GPIO_PIN_RESET); // 发送脉冲信号移动步进电机 for (int i = 0; i < steps; i++) { HAL_GPIO_WritePin(STEP_PORT, STEP_PIN, GPIO_PIN_SET); HAL_Delay(1); // 设置脉冲宽度,单位为毫秒 HAL_GPIO_WritePin(STEP_PORT, STEP_PIN, GPIO_PIN_RESET); HAL_Delay(1); // 设置脉冲间隔,单位为毫秒 } // 禁用步进电机 HAL_GPIO_WritePin(ENABLE_PORT, ENABLE_PIN, GPIO_PIN_SET); } int main(void) { // 初始化STM32硬件和外设 // 初始化步进电机 stepper_init(); while (1) { // 根据需要调用 stepper_move() 函数来控制步进电机的移动 // 例如,stepper_move(1000, 1) 将步进电机向正方向移动1000步 HAL_Delay(1000); // 设置延迟时间,单位为毫秒 } } ``` 这是一个简单的程序示例,使用STM32的HAL库和C语言来控制步进电机。您可以根据需要调用 `stepper_move()` 函数来控制步进电机的移动。在 `main()` 函数的主循环中,您可以根据需要设置步进电机的移动参数,并使用适当的延迟来控制脉冲信号的频率。 请注意,这只是一个示例程序,具体的实现可能会因硬件配置和需求而有所不同。您可能需要根据您的具体情况进行适当的修改和调整。 希望对您有所帮助!如有任何疑问,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

NULL指向我

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值