文章目录
一、前言
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(虽然是英文版,也要多看),尤其是寄存器章节。
官方网址:https://www.ti.com.cn/product/cn/DRV8889-Q1?keyMatch=DRV8889-Q1&tisearch=search-everything&usecase=GPN#product-details##features
STM32工程:
链接:https://pan.baidu.com/s/19kXSnA7eRpuwnroSJk21LQ
提取码:bxek
二、硬件设计
简单介绍一下硬件设计。
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底部散热孔的设计。
三、CubeMX
3.1、RCC
3.2、DEBUG
3.3、Clock Configuration
3.4、SPI
3.5、GPIO
3.6、TIM
先用定时器产生PWM波,控制步进电机转起来。
3.7、Project Manager
生成代码。
四、Keil
4.1、Target
我最近做项目都是使用V6.14,同学们也可以继续使用V5。Use MicroLIB一定要勾选!!!!
4.2、Output
4.3、C/C++(AC6)
我的优化等级一般选择3级,这个按大家的习惯来就好了。
4.4、Debug
4.5、添加DRV8889驱动代码
4.6、添加include路径
五、代码
我是使用MDK的中间件EventRecorder来重定向printf,也可以使用USART来重定向printf都可以的。一定要实现printf重定向。
5.1、main.h
5.2、bsp_DRV8889.c
一般情况下,用户只需要修改相电流,脉冲细分数,还有转向。
当前我设置相电流是18.75%,脉冲细分数1/8(最大支持1/255),电机正转(CW)。其实电机的转向是根据DIR引脚决定的,这里只是封装了一下。
5.3、tim.c
使用定时器17的定时器溢出来翻转STEP引脚,从而产生PWM脉冲给步进驱动器IC,当前使用的是一种调试手段,实际项目需要使用定时器的PWM模式输出PWM脉冲给步进驱动器IC。
5.4、main.c
六、DEBUG
6.1、观察实时变量
TRQ_DAC = 0x0D表示相电流设置了18.75%。
MICROSTEP_MODE = 0x05表示脉冲细分数为1/8。表示写入DRV8889寄存器成功了。
6.2、观测步进电机
步进电机在转动了。