stm32+drv8825驱动42步进电机

关于drv8825的介绍,以及如何调节vref电压值请看博主上篇文章,有详细介绍http://t.csdn.cn/NpGIc

接线图

步进电机接线图

起初我也为如何接线烦恼,因为有些博客在讲述这些问题的时候没有讲的很透彻。
方法如下:

①用万用表调到欧姆档,用其中一个表笔搭在一个引脚上,依次测其它几个引脚当你发现有两个引脚的电阻值非常相近时,那两个引脚就为其中一组(A和~A,
B和~B),而你那个用表笔固定的那个引脚就是COM端(A还是B要看情况);
那么问题就来了,我不知道是什么原因,我测试的时候没有两个电阻值相近的两个引脚。

我的个人解决措施为:用短路的测试方法,当两个引脚导通时,我就确定它们两个引脚为其中一组,这样我就确定了A组和B组,这样的线序和淘宝给的资料图上的线序相同。

42步进电机转速范围

1、步进电机是适合应用在低速场合的,每分钟的转速不超过1000转,也就是说0.9度时6666PPS,最高转速大概就是1000-3000PPS(0.9度)之间这样的是最好的。

2、一般情况下,步进电机最佳的工作速度范围是90~900rpm,低速场合当然会更适合步进电机,因为规格会更符合步进电机的运行。

3、42步进电机的驱动电压一般是DC24V,42步进电机在2700rpm其实也是可以跑的,就是力矩比较小, 意思就是转数越大,力矩就越小。

简单的步进电机驱代码分析

main.c

#include "stm32f10x.h"
#include "delay.h" 
#include "bsp_stepper.h"
/************************************************
 ALIENTEK 精英STM32F103开发板实验0
 工程模板
 注意,这是手册中的新建工程章节使用的main文件 
 技术支持:www.openedv.com
 淘宝店铺:http://eboard.taobao.com 
 关注微信公众平台微信号:"正点原子",免费获取STM32资料。
 广州市星翼电子科技有限公司  
 作者:正点原子 @ALIENTEK
************************************************/


/*步进电机驱动函数*/
//void stepper(int num,int half_T)
//{
//	for(;num>0;num--)
//	{
//		STEP_HIGH;
//		Delay(half_T);
//		STEP_LOW;
//		Delay(half_T);
//	}
//}

int main(void)
{                                                                                                                   
	
	
	Stepper_GPIO_Config();
	delay_init();

	// GPIO_SetBits(GPIOB,GPIO_Pin_6);
  // GPIO_ResetBits(GPIOB, GPIO_Pin_7);
	
  while(1)
	{  uint32_t i,j;
		
		GPIO_ResetBits(DIR_GPIO_PORT ,DIR_GPIO_PIN);//正转
		
	  for(i=0;i<6400;i++)  //一个脉冲1.8度,全步下一圈要200个脉冲;这里是32细分
		{
			GPIO_SetBits(STEP_GPIO_PORT,STEP_GPIO_PIN);  //42步进电机脉冲频率最好在500us-1ms之间,要不然会很抖
			delay_us(600);
			GPIO_ResetBits(STEP_GPIO_PORT, STEP_GPIO_PIN);
			delay_us(600);
	
		}
	 	 delay_ms(1000);
		
		GPIO_SetBits(DIR_GPIO_PORT ,DIR_GPIO_PIN);//反转
		
		for(j=0;j<6400;j++)
		{
			GPIO_SetBits(STEP_GPIO_PORT,STEP_GPIO_PIN);
			delay_us(600);
			GPIO_ResetBits(STEP_GPIO_PORT, STEP_GPIO_PIN);
			delay_us(600);
		}
		
		delay_ms(1000);
	}
	
}

stepp.c

#include "bsp_stepper.h"


void Stepper_GPIO_Config(void)
{		
		/*定义一个GPIO_InitTypeDef类型的结构体*/
		GPIO_InitTypeDef GPIO_InitStructure;

		/*开启驱动板上引脚相关的GPIO外设时钟*/
		RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB,ENABLE);
	
		/*配置DIR*/
	  GPIO_InitStructure.GPIO_Pin = DIR_GPIO_PIN;	         //选择要控制的GPIO引脚
		GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;     //设置引脚模式为推挽输出
		GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;    //设置速率为50MHz
		GPIO_Init(DIR_GPIO_PORT, &GPIO_InitStructure);	     //调用库函数,初始化GPIO   
		
		/*配置STEP端口*/
	  GPIO_InitStructure.GPIO_Pin = STEP_GPIO_PIN;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;     //设置引脚模式为推挽输出
		GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;    //设置速率为50MHz	
		GPIO_Init(STEP_GPIO_PORT, &GPIO_InitStructure);
    GPIO_ResetBits(STEP_GPIO_PORT, STEP_GPIO_PIN);
}

发现问题:在实验中发现出现抖动情况,以为是细分的事;其实是脉冲频率的问题,脉冲频率太低,导致电磁铁转动卡顿,出现共振抖动现象。

代码链接:浏览器打开

https://wwf.lanzouv.com/iYBjt0f5dmyf

物联沃分享整理
物联沃-IOTWORD物联网 » stm32+drv8825驱动42步进电机

发表评论