STM32H743+CubeMX-SPI与DRV8889串行通讯,驱动步进电机
文章目錄
- 一、前言
- 二、硬件設(shè)計(jì)
- 2.1、PCB原理圖設(shè)計(jì)
- 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驅(qū)動(dòng)代碼
- 4.6、添加include路徑
- 五、代碼
- 5.1、main.h
- 5.2、bsp_DRV8889.c
- 5.3、tim.c
- 5.4、main.c
- 六、DEBUG
- 6.1、觀察實(shí)時(shí)變量
- 6.2、觀測(cè)步進(jìn)電機(jī)
一、前言
DRV8889其實(shí)就是一款步進(jìn)驅(qū)動(dòng)器芯片,由大名鼎鼎的TI制造。這款步進(jìn)驅(qū)動(dòng)芯片體積相當(dāng)小,比1元的硬幣還要小一點(diǎn)。我用DRV8889設(shè)計(jì)了一款1托2的步進(jìn)電機(jī)驅(qū)動(dòng)器(使用兩個(gè)DRV8889即可),整個(gè)項(xiàng)目的軟件與硬件都自己完成,最后發(fā)現(xiàn)其效果還不錯(cuò)。值得注意的是,這個(gè)步進(jìn)驅(qū)動(dòng)芯片不集成步進(jìn)電機(jī)的加減速算法。例如梯形速度曲線算法,S型速度曲線算法都需要自己實(shí)現(xiàn)。為什么需要速度曲線算法?說(shuō)白了就是為了避免步進(jìn)電機(jī)丟步。
后續(xù)我會(huì)更新梯形速度曲線算法的源代碼與教程,還有S型速度曲線算法的源代碼與教程。老實(shí)說(shuō),S型曲線算法比較復(fù)雜一些,大部分的應(yīng)用使用梯形運(yùn)動(dòng)曲線即可。
這篇博文主要介紹使用我編寫的DRV8889驅(qū)動(dòng)代碼(bsp_DRV8889.h與bsp_DRV8889.c),使得MCU與DRV8889通過SPI接口正常通訊,完成寫入DRV8889的寄存器與讀取DRV8889寄存器的功能,為驅(qū)動(dòng)步進(jìn)電機(jī)做好準(zhǔn)備。以下是DRV8889-Q1的功能介紹。
Note : 并不是說(shuō)有了DRV8889驅(qū)動(dòng)代碼就不需要看datasheet了,一定要多看datasheet(雖然是英文版,也要多看),尤其是寄存器章節(jié)。
官方網(wǎng)址: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
二、硬件設(shè)計(jì)
簡(jiǎn)單介紹一下硬件設(shè)計(jì)。
2.1、PCB原理圖設(shè)計(jì)
DRV8889提供了原理圖的參考設(shè)計(jì),直接使用就好了。
- 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底部散熱孔的設(shè)計(jì)。
三、CubeMX
3.1、RCC
3.2、DEBUG
3.3、Clock Configuration
3.4、SPI
3.5、GPIO
3.6、TIM
先用定時(shí)器產(chǎn)生PWM波,控制步進(jìn)電機(jī)轉(zhuǎn)起來(lái)。
3.7、Project Manager
生成代碼。
四、Keil
4.1、Target
我最近做項(xiàng)目都是使用V6.14,同學(xué)們也可以繼續(xù)使用V5。Use MicroLIB一定要勾選!!!!
4.2、Output
4.3、C/C++(AC6)
我的優(yōu)化等級(jí)一般選擇3級(jí),這個(gè)按大家的習(xí)慣來(lái)就好了。
4.4、Debug
4.5、添加DRV8889驅(qū)動(dòng)代碼
4.6、添加include路徑
五、代碼
我是使用MDK的中間件EventRecorder來(lái)重定向printf,也可以使用USART來(lái)重定向printf都可以的。一定要實(shí)現(xiàn)printf重定向。
5.1、main.h
5.2、bsp_DRV8889.c
一般情況下,用戶只需要修改相電流,脈沖細(xì)分?jǐn)?shù),還有轉(zhuǎn)向。
當(dāng)前我設(shè)置相電流是18.75%,脈沖細(xì)分?jǐn)?shù)1/8(最大支持1/255),電機(jī)正轉(zhuǎn)(CW)。其實(shí)電機(jī)的轉(zhuǎn)向是根據(jù)DIR引腳決定的,這里只是封裝了一下。
5.3、tim.c
使用定時(shí)器17的定時(shí)器溢出來(lái)翻轉(zhuǎn)STEP引腳,從而產(chǎn)生PWM脈沖給步進(jìn)驅(qū)動(dòng)器IC,當(dāng)前使用的是一種調(diào)試手段,實(shí)際項(xiàng)目需要使用定時(shí)器的PWM模式輸出PWM脈沖給步進(jìn)驅(qū)動(dòng)器IC。
5.4、main.c
六、DEBUG
6.1、觀察實(shí)時(shí)變量
TRQ_DAC = 0x0D表示相電流設(shè)置了18.75%。
MICROSTEP_MODE = 0x05表示脈沖細(xì)分?jǐn)?shù)為1/8。表示寫入DRV8889寄存器成功了。
6.2、觀測(cè)步進(jìn)電機(jī)
步進(jìn)電機(jī)在轉(zhuǎn)動(dòng)了。
總結(jié)
以上是生活随笔為你收集整理的STM32H743+CubeMX-SPI与DRV8889串行通讯,驱动步进电机的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: redis 图片2进制保存_Redis数
- 下一篇: java集合中中文排序_利用Collat