STM32H743+CubeMX-SPI与DRV8889串行通讯,驱动步进电机
文章目錄
- 一、前言
- 二、硬件設計
- 2.1、PCB原理圖設計
- 2.2、PCB Layout
- 三、CubeMX
- 3.1、RCC
- 3.2、DEBUG
- 3.3、Clock Configuration
- 3.4、SPI
- 3.5、GPIO
- 3.6、TIM
- 3.7、Project Manager
- 四、Keil
- 4.1、Target
- 4.2、Output
- 4.3、C/C++(AC6)
- 4.4、Debug
- 4.5、添加DRV8889驅動代碼
- 4.6、添加include路徑
- 五、代碼
- 5.1、main.h
- 5.2、bsp_DRV8889.c
- 5.3、tim.c
- 5.4、main.c
- 六、DEBUG
- 6.1、觀察實時變量
- 6.2、觀測步進電機
一、前言
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、觀測步進電機
步進電機在轉動了。
總結
以上是生活随笔為你收集整理的STM32H743+CubeMX-SPI与DRV8889串行通讯,驱动步进电机的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: redis 图片2进制保存_Redis数
- 下一篇: java集合中中文排序_利用Collat