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