当前位置: 首页 > news >正文

STM32控制DRV8825驱动42BYGH34步进电机

最近想玩一下人工智能,然后买了个步进电机想玩一下,刚到了一脸懵逼,发现驱动器20多块,有点超预算,然后整了个驱动板,方便自己画线路板,经过各种搜索,终于转起来了,记录一下,下次方便自己回想

DRV8825简介

在这里插入图片描述
1:引脚定义
在这里插入图片描述
DIR : 控制电机正反转,高:正转 低:反转(还和接线有关,就是切换转的方向)
STP : 接受脉冲,驱动电机转动,脉冲速度越快,转动速度越快,接STM32的发送脉冲的引脚
SLP : 控制驱动器进入睡眠模式,低电平睡眠,高电平唤醒,不需要睡眠的话接STM32的3.3V
RST : 重置引脚,复位驱动器,低电平复位,高电平正常,接3.3V
**M2,M1,M0 😗*微步设置,设置分辨率,分辨率如下,通过对应的引脚设定高低电平来设定对应的分辨率,例如我的步进电机 步距角是1.8°,转一圈360°就是需要200次, 然后分辨率设定为1/32步(M2/M1/M0设定高/高/高)那么就是需要收到32次脉冲转1.8°,转一圈需要收到6400次脉冲
在这里插入图片描述
EN : 使能引脚,用于启用驱动器,低电平启用,所以设定为低电平(GND)就可以了
**GND 😗*接地
FLT : 不用接,出现故障后会进入休眠模式
2A/1A/1B/2B : 接步进电机的引脚,接法按照图片从上到下,A+/A-/B-/B+,B+/B-/A-/A+,A-/A+/B+/B-,B-/B+/A+/A-,我的理解就是上面两个都是A或者都是B,中间的两个正负要一样,下面的俩就是剩下的(个人总结,仅供参考)

**GND 😗*接地,我把外接电源的负极接到这里了
VMOT : 外部电源接口,8.2V至45V都行,电流尽量大一点的

步进电机

在这里插入图片描述
没啥说的,就是四根线

STM32代码
我的接线
在这里插入图片描述
其中PB10和PB11我分别接STM32的A6和A7

#include "stm32f10x.h"                  // Device header#define STEP_GPIO_PORT   GPIOA                       
#define STEP_GPIO_PIN    GPIO_Pin_7              #define DIR_GPIO_PORT    GPIOA                       
#define DIR_GPIO_PIN     GPIO_Pin_6void Motor_GPIO_Init(void)
{               //定义一个GPIO_InitTypeDef类型的结构体GPIO_InitTypeDef GPIO_InitStructure;//开启驱动板上引脚相关的GPIO外设时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);GPIO_InitStructure.GPIO_Pin = DIR_GPIO_PIN | STEP_GPIO_PIN;          //选择要控制的GPIO引脚GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;     //设置引脚模式为推挽输出GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;    //设置速率为50MHzGPIO_Init(DIR_GPIO_PORT, &GPIO_InitStructure);       //调用库函数,初始化GPIO              }/*** @brief  微秒级延时* @param  xus 延时时长,范围:0~233015* @retval 无*/
void Sleep_us(uint32_t xus)
{SysTick->LOAD = 72 * xus;				//设置定时器重装值SysTick->VAL = 0x00;					//清空当前计数值SysTick->CTRL = 0x00000005;				//设置时钟源为HCLK,启动定时器while(!(SysTick->CTRL & 0x00010000));	//等待计数到0SysTick->CTRL = 0x00000004;				//关闭定时器
}//步进电机驱动函数
//num:旋转一圈的电平次数
//sleepTime:一个脉冲的时间
void Rotate_Once(int num,int sleepTime)
{for(;num>0;num--){GPIO_SetBits(STEP_GPIO_PORT, STEP_GPIO_PIN);Sleep_us(sleepTime/2);GPIO_ResetBits(STEP_GPIO_PORT, STEP_GPIO_PIN);Sleep_us(sleepTime/2);}
}int main(void)
{Motor_GPIO_Init();while(1){GPIO_SetBits(DIR_GPIO_PORT, DIR_GPIO_PIN);Rotate_Once(6400,1000);//正转一圈GPIO_ResetBits(DIR_GPIO_PORT, DIR_GPIO_PIN);Rotate_Once(6400,1000);//反转一圈}   
}

出现的问题

发现烧录进去代码,然后步进电机哒哒响,但是不转
1:可能一个脉冲的时间太久,建议第一次调快点,放个胶带方便看
2:电流限位器需要调整,慢慢拧,直到驱动电机正常旋转

接线照片和视频

在这里插入图片描述
在这里插入图片描述

借鉴的文章

https://blog.csdn.net/qq_42250136/article/details/140999996

https://blog.csdn.net/weixin_39966909/article/details/112454121

相关文章:

  • 03_事务
  • redis 配置日志和数据存储位置
  • 【NLP 63、大模型应用 —— Agent】
  • 语义分割技术
  • ShenNiusModularity项目源码学习(18:ShenNius.Admin.Mvc项目分析-3)
  • OSPF区域间路由计算
  • gRPC 介绍及在嵌入式 Linux 下的成功编译及使用详解
  • chrome中的copy xpath 与copy full xpath的区别
  • 手机使用移动网络ip地址是固定的吗?如何查看
  • Android 不插SIM卡,手机不能拨打紧急电话;2g+gsm配置才支持112紧急拨号
  • Kubernetes》》K8S》》Pod调度机制
  • GitHub 19.2k Star 开源神器:ScrapeGraphAI——自然语言驱动的智能爬虫革命!
  • Actran声源识别方法连载(二):薄膜模态表面振动识别
  • HTTP协议与web服务器
  • uniapp开发微信小程序——获取头像和昵称
  • 智能sc一面
  • DSP、MCU、FPGA 的详细总结
  • 网络安全-第八阶段渗透测试阶段-第1章渗透系统安装和靶场部署
  • 人工智能与网络安全:AI如何预防、检测和应对网络攻击?
  • MBI6671Q聚积升降压LED驱动芯片车规级AEC-Q100
  • 习近平会见斯洛伐克总理菲佐
  • 湖南省职业病防治院通报3岁女童确诊“铊中毒”:去年病例,编辑误写为“近日”
  • 中方是否认同俄方关于新纳粹主义观点?外交部:联大曾多次通过相关决议
  • 人民时评:透过上海车展读懂三组密码
  • 盖茨:20年内将捐出几乎全部财富,盖茨基金会2045年关闭
  • 教育部、国家发改委联合启动实施教师教育能力提升工程