STM32+DRV8711驱动步进电机

步进电机的驱动原理

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

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

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

                              STM32+DRV8711驱动步进电机_第1张图片                                                                STM32+DRV8711驱动步进电机_第2张图片

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

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

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

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

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

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

 

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

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

STM32+DRV8711驱动步进电机_第3张图片 

定时器工作之后定时器的CNT寄存器就会自加,自加一次就会跟CCRx寄存器去比较, 当CNTCCRx则输出高电平。当计数值到达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

 

 

你可能感兴趣的:(stm32)