打印
[应用相关]

SPI与DRV8889串行通讯,驱动步进电机

[复制链接]
980|20
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
tfqi|  楼主 | 2021-9-4 14:28 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
一、前言
DRV8889其实就是一款步进驱动器芯片,由大名鼎鼎的TI制造。这款步进驱动芯片体积相当小,比1元的硬币还要小一点。我用DRV8889设计了一款1托2的步进电机驱动器(使用两个DRV8889即可),整个项目的软件与硬件都自己完成,最后发现其效果还不错。值得注意的是,这个步进驱动芯片不集成步进电机的加减速算法。例如梯形速度曲线算法,S型速度曲线算法都需要自己实现。为什么需要速度曲线算法?说白了就是为了避免步进电机丢步。

后续我会更新梯形速度曲线算法的源代码与教程,还有S型速度曲线算法的源代码与教程。老实说,S型曲线算法比较复杂一些,大部分的应用使用梯形运动曲线即可。

这篇博文主要介绍使用我编写的DRV8889驱动代码(bsp_DRV8889.h与bsp_DRV8889.c),使得MCU与DRV8889通过SPI接口正常通讯,完成写入DRV8889的寄存器与读取DRV8889寄存器的功能,为驱动步进电机做好准备。以下是DRV8889-Q1的功能介绍。

Note : 并不是说有了DRV8889驱动代码就不需要看datasheet了,一定要多看datasheet(虽然是英文版,也要多看),尤其是寄存器章节。






使用特权

评论回复
沙发
tfqi|  楼主 | 2021-9-4 14:30 | 只看该作者
二、硬件设计
简单介绍一下硬件设计。

2.1、PCB原理图设计
DRV8889提供了原理图的参考设计,直接使用就好了。

MCU_SLEEP接到MCU的PH2
MCU_DRVOFF接到MCU的PH3
MCU_DIR接到MCU的PH4
MCU_STEP接到MCU的PA2
SPI1_SCK接到MCU的PA5
SPI1_MISO接到MCU的PA6
SPI1_MOSU接到MCU的PA7
SPI1_NSS接到MCU的PA4
MCU_FAULT接到MCU的PC4


2.2、PCB Layout
电容尽量接近IC,还有注意一下IC底部散热孔的设计。



使用特权

评论回复
板凳
tfqi|  楼主 | 2021-9-4 14:31 | 只看该作者
三、CubeMX
3.1、RCC


使用特权

评论回复
地板
tfqi|  楼主 | 2021-9-4 14:32 | 只看该作者
3.2、DEBUG


使用特权

评论回复
5
tfqi|  楼主 | 2021-9-4 14:33 | 只看该作者
3.3、Clock Configuration


使用特权

评论回复
6
tfqi|  楼主 | 2021-9-4 14:34 | 只看该作者
3.4、SPI配置



使用特权

评论回复
7
tfqi|  楼主 | 2021-9-4 14:35 | 只看该作者
3.5、GPIO配置


使用特权

评论回复
8
tfqi|  楼主 | 2021-9-4 14:36 | 只看该作者
3.6、TIM

先用定时器产生PWM波,控制步进电机转起来。


使用特权

评论回复
9
tfqi|  楼主 | 2021-9-4 14:37 | 只看该作者
3.7、Project Manager

生成代码。



使用特权

评论回复
10
tfqi|  楼主 | 2021-9-4 14:38 | 只看该作者
四、Keil
4.1、Target

我最近做项目都是使用V6.14,同学们也可以继续使用V5。Use MicroLIB一定要勾选!!!!


使用特权

评论回复
11
tfqi|  楼主 | 2021-9-4 14:39 | 只看该作者
4.2、Output


使用特权

评论回复
12
tfqi|  楼主 | 2021-9-4 14:40 | 只看该作者
4.3、C/C++(AC6)

我的优化等级一般选择3级,这个按大家的习惯来就好了。


使用特权

评论回复
13
tfqi|  楼主 | 2021-9-4 14:41 | 只看该作者
4.4、Debug配置


使用特权

评论回复
14
tfqi|  楼主 | 2021-9-4 14:42 | 只看该作者
4.5、添加DRV8889驱动代码


使用特权

评论回复
15
tfqi|  楼主 | 2021-9-4 14:43 | 只看该作者
4.6、添加include路径


使用特权

评论回复
16
tfqi|  楼主 | 2021-9-4 14:44 | 只看该作者
五、代码

我是使用MDK的中间件EventRecorder来重定向printf,也可以使用USART来重定向printf都可以的。一定要实现printf重定向。

5.1、main.h


使用特权

评论回复
17
tfqi|  楼主 | 2021-9-4 14:45 | 只看该作者
5.2、bsp_DRV8889.c

一般情况下,用户只需要修改相电流,脉冲细分数,还有转向。

当前我设置相电流是18.75%,脉冲细分数1/8(最大支持1/255),电机正转(CW)。其实电机的转向是根据DIR引脚决定的,这里只是封装了一下。



使用特权

评论回复
18
tfqi|  楼主 | 2021-9-4 14:46 | 只看该作者
5.3、tim.c

使用定时器17的定时器溢出来翻转STEP引脚,从而产生PWM脉冲给步进驱动器IC,当前使用的是一种调试手段,实际项目需要使用定时器的PWM模式输出PWM脉冲给步进驱动器IC。


使用特权

评论回复
19
tfqi|  楼主 | 2021-9-4 14:47 | 只看该作者
5.4、main.c



使用特权

评论回复
20
tfqi|  楼主 | 2021-9-4 14:48 | 只看该作者
六、DEBUG
6.1、观察实时变量

TRQ_DAC = 0x0D表示相电流设置了18.75%。
MICROSTEP_MODE = 0x05表示脉冲细分数为1/8。表示写入DRV8889寄存器成功了。


使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

56

主题

3317

帖子

4

粉丝