STM32+DRV8711驱动步进电机

本文介绍步进电机的驱动原理,基于电磁感应现象,通过H桥电路控制电机转向。详细解析了使用STM32定时器PWM模式产生PWM波驱动步进电机的方法,包括占空比和周期的影响,以及如何配置定时器寄存器。同时,讨论了步进电机的关键参数,如步距角、减速比和细分,并介绍了DRV8711驱动芯片的连接和配置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

步进电机的驱动原理

步进电机的知识涉及到比较多的东西,这里只是简单介绍一下,关于具体的知识之后再补充。 

步进电机的驱动原理时期就是电磁感应现象,给步进电机供电流,然后会产生磁场,再合成磁场的方向,驱动电机转动。

电机需要一个H桥来控制电机的转动方向。H桥其实就是4个mos管,要实现电机的方向控制,只需要控制对角的两个mos管就可以见下图

                                                                                              

电机的转动方向就是这样决定的,接下来说一下电机的驱动。

我们知道要驱动电机就得靠PWM波来实现, PWM波有两个重要的参数,一个是占空比,一个是周期(频率)。而占空比是影响电机转速的重要因素,占空比越大,电机转速越快。在stm32里就是修改定时器的分频系数和重装载值。

另外电机有几个参数比较重要

步距角:就是指输入一个脉冲给电机,电机转过的角度。例如博主使用的电机的步距角是1.8°(整步),所以需要360/1.8=200个脉冲才能让电机转一圈。

减速比:减速比1:x是指电机的转轴转动x圈,电机转动一圈(我们人眼看到的电机转动的一圈),x越小电机转速越快

细分:细分的作用是提高电机的转动精度和平稳性

 

stm32定时器的PWM模式可以可产生PWM波来驱动步进电机。

stm32产生pwm波的原理就是通过定时器的ARR和CCRx寄存器来产生PWM波,具体看下图

 

定时器工作之后定时器的CNT寄存器就会自加,自加一次就会跟CCRx寄存器去比较, 当CNT<CCRx就输出低电平,如果CNT>CCRx则输出高电平。当计数值到达ARR之后,又开始下一个比较周期。这样的话就可以得到一个PWM波了。由上面可以 看出,周期是由ARR决定的,CCRx决定占空比,关于这部分的内容之后再找时间去写,今天就到这里了。

DRV8711这个驱动芯片的功能还是很强大的,驱动能力很强,可以驱动很大的电机,但是驱动的是两相电机。具体的一些描述我就不说,就算说也是从手册上抄下来,有兴趣的可以自己去看一下手册。

我测试的时候是用demo板来测试的,所以我接下来所说的都是基于demo板的,如果自己layout一块pcb板的话可能有所不同,仅供参考。

所以说一下这个模块的连接。首先这个芯片是SPI通信的,关于SPI通信自己可以网上百度相关知识。我的连接情况是芯片的SDI->PA7,SDO->PA6,CLK->PA5,NSS->PC4。了解SPI的都知道必须要有这四根线。

然后要确保SPI通信成功,你还要配置两个引脚。第一个是reset,第二个是sleep。reset很简单就是复位,每次上电都执行复位,这个脚是低电平有效,然后是sleep,这个脚是唤醒芯片的,高电平有效,芯片工作,低电平的时候芯片处于休眠状态。这两个脚在SPI之前就一定要配置成低电平和高电平,否则芯片不能工作,建议直接接GND和VCC

然后有两个脚是可以获取电机或者说是芯片工作状态的。STALL和FAULT。STALL就是电机失步的时候输出一个低电平给芯片。同时,如果芯片工作出错(至于什么错我也不知道,我暂时没有遇到),就会输出一个低电平给芯片。在demo板上的直接表现就是有两个对应的等会亮。

另外还有两个BIN1和BIN2,按照手册描述这两个脚是桥B的输入1和2。在索引器模式的时候是没有作用的,外部PWM模式的时候控制桥B内部上拉。我在测试的时候直接把这两个脚悬空,但是推荐的电路是接地。这两个脚什么意思我也不太懂。

到这里大概就完成了。然后再配置你自己的需要的电机代码就OK了。开一个定时器就可以控制电机了。之后上传这个工程,自己写的工程是用cube生成的,cube生成的代码是用HAL库的,没用过的要谨慎下载!!!!

 

参考:https://baijiahao.baidu.com/s?id=1620634997231677691&wfr=spider&for=pc

           https://wenku.baidu.com/view/a32e7f6baaea998fcd220e3e.html

 

 

编写使用STM32F103微控制器和DRV8833驱动器来驱动步进电机的代码涉及几个步骤。首先,你需要确保你的硬件连接正确,STM32F103的GPIO(通用输入输出)引脚连接到DRV8833的输入引脚上,然后通过编写代码来控制这些引脚,以驱动步进电机按照指定的方向和步数进行旋转。 以下是编写代码的一个基本流程和简单示例: 1. 初始化GPIO引脚:设置GPIO引脚为输出模式,并配置为适合步进电机驱动器的电平。 2. 初始化定时器:配置STM32F103的定时器,以产生PWM波形,用于控制步进电机的速度。 3. 编写控制函数:编写控制步进电机方向、步进和停止的函数。 4. 主循环:在主循环中调用这些函数来控制步进电机。 示例代码(伪代码): ```c // 初始化GPIO引脚 void GPIO_Init(void) { // 初始化控制步进的GPIO引脚为输出模式 // 初始化方向控制的GPIO引脚为输出模式 } // 控制步进电机转动一定步数 void Step_Motor_Step(int steps, int direction) { // 根据方向设置方向引脚 // 循环steps次,每次切换步进引脚状态来驱动电机 } // 控制步进电机停止 void Step_Motor_Stop(void) { // 切换GPIO引脚状态来停止电机 } int main(void) { // 初始化GPIO GPIO_Init(); // 设置PWM定时器(省略具体实现) while(1) { // 电机正转100步 Step_Motor_Step(100, 1); // 延时(省略具体实现) // 电机反转100步 Step_Motor_Step(100, 0); // 延时(省略具体实现) // 停止电机 Step_Motor_Stop(); // 延时(省略具体实现) } } ``` 请注意,上述代码为伪代码,具体实现需要根据实际的硬件连接和STM32库函数来编写。在编程时,你需要查阅STM32F103的参考手册和库函数文档,以及DRV8833的数据手册来正确设置GPIO和定时器参数。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值