日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

STM32H743+CubeMX-SPI与DRV8889串行通讯,驱动步进电机

發布時間:2025/3/15 编程问答 52 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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串行通讯,驱动步进电机的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。