玩轉X-CTR100 l STM32F4 l DRV8825 A4988 步進電機控制


我造輪子,你造車,創客一起造起來!塔克創新資訊【塔克社區 www.xtark.cn 】【塔克博客 www.cnblogs.com/xtark/

    

本文介紹X-CTR100控制器控制步進電機,實現步進電機精確轉速控制。

原理

如上圖所示,步進電機系統一般包括控制器、驅動器和步進電機三部分。

步進電機

步進電機是一種將電脈沖轉化為角位移的執行機構。通俗一點講:當步進驅動器接收到一個脈沖信號,它就驅動步進電機按設定的方向轉動一個固定的角度(或步進角)。可以通過控制脈沖個數來控制角位移量,從而達到准確定位的目的;同時也可以通過控制脈沖頻率來控制電機轉動的速度和加速度,從而達調速的目的。因此在需要准確定位或調速控制時均可考慮使用步進電機。

步進電機根據尺寸進行分類,常用小型步進電機有42、57型號。

    

本文使用42型四線步進電機接口及參數

    

本文選用電機參數

步進電機種類、參數眾多,詳細說明請查閱本文參考資料文件夾內容。

驅動器

    

上圖為常用步進電機驅動器,其中DRV8825和A4988為小型步進電機驅動器,驅動電流較小,常用於打印機、3D打印機、雕刻機等設備,支持的3d打印機有Prusa Mendel,ultimaker,printbot,makerbot等

TB6600為大功率驅動器,驅動電流更大,常用於大型設備。

驅動器雖然外形參數各異,驅動方法類似,一般包括EN(使能)、DIR(方向)、PLUS(脈沖)三個控制角。

本文以DRV8825為例進行說明。A4988與DRV8825引腳兼容,性能稍弱,詳見下表。

    

參考:https://reprap.org/wiki/A4988_vs_DRV8825_Chinese_Stepper_Driver_Boards

DRV8825 是德州儀器 (TI) 為打印機、 掃描儀和其他自動化設備設計的集成電機驅動芯片。 它集成了 2 個 H 橋電路, 以及片上 1/32 微步進分度器, 可以驅動一個雙極型電機,或兩個直流有刷電機。 輸入電壓范圍 8.2~45V, 可以提供 1.75A 的有效電流, 並可承受 2.5A的峰值電流(在 24 V、 25° C 的應用環境下 )。低至 0.2Ω 的導通電阻, 保證了芯片良好的熱特性。 另外, 還集成了快速響應的短路、 過熱、欠壓及交叉傳導保護功能電路, 能夠檢測故障狀況, 並迅速切斷 H 橋, 從而為電機和驅動芯片提供保護

    

DRV8825相對4988 特點優勢:

1、最大電流2.5A。

2、最高支持32細分。

3、4層PCB板,散熱性能更好。

4、芯片內阻更小,發熱更低,散熱性更好。

DRV8825特點:

1、適合驅動8.2V~45V 2.5A以下的步進電機;

2、只有簡單的步進和方向控制接口;

3、六個不同的步進模式:全、半、1/4、1/8、1/16、1/32;

4、可調電位器可以調節最大電流輸出,從而獲得更高的步進率;

5、自動電流衰減模式檢測/選擇;

6、過熱關閉電路、欠壓鎖定、交叉電流保護;

7、接地短路保護和加載短路保護

DRV8825模塊原理圖:

    

DRV8825接線示意圖

    

細分設置

    

電流調節

Rs電阻值市面上一般是0.1 歐(R100),對應的是驅動模塊上面S1 S2電阻。這里是0.1歐姆(標號R100=0.1歐)。

但市面DRV8825驅動模塊這個Vref出廠基本都是調到1.6V這樣算下來,電流I=3.2。這也是很多人用DRV8825驅動模塊發燙,電機發燙原因,這樣很容易損壞電機和驅動模塊。

所以拿到手第一時間把這個Vref參考電壓調小到0.5V左右再根據電機參數微調。

Vref電壓:電位器金屬旋鈕到GND的電壓。可以通過調節電位器改變。

    

常見問題

1)DRV8825驅動板可以驅動57電機嗎?

4988可以驅動的電機跟尺寸關系不大,主要與工作電流有關,理論上電流小於2A的步進電機都是可以驅動的,不論是42還是57電機。

2)可以驅動多大的電流?

如果DRV8825芯片上沒有加散熱片,電流最好在1.5以下。如果加散熱片,電流可以達到2.5A。

3)步進電機的連接方式是什么?

正如DRV8825板子背面所標識的,連接方式是依次連接步進電機的1B-1A-2A-2B,或者反向為2B-2A-1A-1B,或者1A-1B-2B-2A,其它的方式一次類推。如果你的電機線是標准的紅藍綠黑的顏色,可以按照顏色連接為:紅-藍-綠-黑,或相反:黑-綠-藍-紅。

4)接上電機后,電機不能正常運行,在左右抖動,是什么原因?

電機出現抖動一般有兩個原因,一是缺相:可能是DRV8825板子沒有焊接好或因為外力導致DRV8825的輸出端某一相斷開,造成電機缺相從而抖動。也有可能是步進電機接線只用一相沒有連接好;而是兩相接錯:如果步進電機沒有按照正確的順序進行連接,電機也會出現抖動的情況,請按照問題3進行正確的連接

5)電機丟步如何解決?

相電流的大小跟步進電機的扭力有直接關系,如果感覺你的步進電機扭力不足、丟步,可以加大4988板子的電流配置。驅動板是通過一個小的電位器來實現對輸出電流的配置的。可以通過用萬用表測量電位器中間管腳的電位。電位和電流的關系滿足下面的公式:Vref = I_TripMax= Vref/(5*Rs)(模塊的Rs電阻為R100).也就是如果你想配置電機工作電流為1A,則電位應該配置在0.5V

6)DRV8825可以驅動兩相六線或兩相無線的電機嗎?

可以,兩相連線按照問題3連接,將中間抽頭懸空即可。

7)電機停止轉動時會有滋滋的電流聲。

首先說明的是這是正常現象。步進電機的特點是走特定的角度而不是一直轉,所以步進電機都有一個參數,步距角。如果通過細分,可以最小走步距角/細分數的角度,比如步距角為1.8度的步進電機,采用16細分,最小可以走的角度是1.8/16=0.1125度。但由於這個角度非常小,並且不一定在電機物理所在的位置(1.8度為一個物理位置),所以步進電機停止時也需要通電,從而保證電機不會自動跳到物理步距角上。因為這個特性使得步進電機在靜止時會有電流聲,這屬於正常現象,不用擔心。

X-SOFT軟件生態,X-API文件如下。

參考自【開源&分享】蒙塵子 http://www.3dprinter-diy.com/forum.php?mod=viewthread&tid=1330

高級說明

步進電機主要參數

① 步進電機的相數:是指電機內部的線圈組數,目前常用的有兩相、三相、五相步進電機。

② 拍數:完成一個磁場周期性變化所需脈沖數或導電狀態,用m表示,或指電機轉過一個齒距角所需脈沖數。

③ 保持轉矩:是指步進電機通電但沒有轉動時,定子鎖住轉子的力矩。

④ 步距角:對應一個脈沖信號,電機轉子轉過的角位移。

⑤ 定位轉矩:電機在不通電狀態下,電機轉子自身的鎖定力矩。

⑥ 失步:電機運轉時運轉的步數,不等於理論上的步數。

⑦ 失調角:轉子齒軸線偏移定子齒軸線的角度,電機運轉必存在失調角,由失調角產生的誤差,采用細分驅動是不能解決的。

⑧ 運行矩頻特性:電機在某種測試條件下測得運行中輸出力矩與頻率關系的曲線 。

步進電機的特點

① 一般步進電機的精度為步距角的3-5%,且不累積;

② 步進電機外表允許的最高溫度取決於不同電機磁性材料的退磁點;

③ 步進電機的力矩會隨轉速的升高而下降( U=E+L(di/dt)+I*R),矩頻特性曲線

④ 空載啟動頻率:即步進電機在空載情況下能夠正常啟動的脈沖頻率,如果脈沖頻率高於該值,電機不能正常啟動,可能發生丟步或堵轉。

步進電機的起步速度一般在10~100RPM,伺服電機的起步速度一般在100~300RPM。根據電機大小和負載情況而定,大電機一般對應較低的起步速度。

⑤ 低頻振動特性:步進電動機以連續的步距狀態邊移動邊重復運轉。其步距狀態的移動會產生1 步距響應。

電機驅動電壓越高,電機電流越大,負載越輕,電機體積越小,則共振區向上偏移,反之亦然。步進電機低速轉動時振動和噪聲大是其固有的缺點,克服兩相混合式步進電機在低速運轉時的振

動和噪聲方法:

a. 通過改變減速比等機械傳動避開共振區;

b. 采用帶有細分功能的驅動器;

c. 換成步距角更小的步進電機;

d. 選用電感較大的電機

e. 換成交流伺服電機,幾乎可以完全克服震動和噪聲,但成本高;

f. 采用小電流、低電壓來驅動。

g. 在電機軸上加磁性阻尼器;

例程

本例程實現X-CTR100控制器對步進電機精確轉速控制。

由於步進電機特性,很難直接設置高轉速,一般需要加減速過程,本例程包括了步進電機加減速運行。

另外還包括零轉速和關閉使能狀態下的力矩情況。

硬件說明

硬件資源:

  • 串口UART1
  • DRV8825驅動器,轉接板(自備)
  • 42步進電機
  • 12V電源(3A)

硬件連接:

使用MicroUSB數據線連接X-CTR100 COM接口。

步進電機控制接口

STEP——PE9(RP接口)

DIR——PE4(RP接口)

EN——PE5(RP接口)

5V——5V(RP接口)

GND——GND(RP接口)

供電接口

12V外接供電電源連接到VIN1或VIN2,驅動器電源也連接至VIN1或VIN2,注意正負極。

步進電機連接轉接板,如下圖。

    

軟件生態

X-SOFT軟件生態,X-API文件如下。

ax_step.c——X-CTR100 步進電機操作源文件

ax_step.h——X-CTR100 步進電機操作頭文件

X-API接口函數如下:

void AX_STEP_Init(void); //STEP 步進電機初始化    

void AX_STEP_SetEnable(uint8_t en); //STEP 步進電機使能控制

void AX_STEP_SetSpeed(int16_t speed); //STEP 步進電機轉速控制

控制方法采用硬件定時器TIM1實現,通過在定時器中斷中修改ARR周期,實現頻率控制,通過CCR1實現50%占空比控制。

速度控制AX_STEP_SetSpeed()接口函數實現。

/**

* @簡 述 STEP 步進電機轉速控制

* @參 數 speed:電機轉速,脈沖頻率,單位20Hz,即1為20Hz,100為2000Hz,范圍±5000

* 實際電機轉速,與電機步距角,細分設置相關,例如1.8°電機,32細分,轉動一圈需要200x32個脈沖。

* @返回值 無

*/

void AX_STEP_SetSpeed(int16_t speed)

{

    if (speed > 0)

    {

        //設置方向

        GPIO_SetBits(GPIOE, GPIO_Pin_4);

 

        //計算速度

        step_period = 50000 / speed; //20hz = 1S/

 

                                     //初始化定時器

        TIM1->ARR = step_period - 1;

        TIM1->CCR1 = step_period >> 1;//周期的一半

        TIM_CtrlPWMOutputs(TIM1, ENABLE);    //MOE 主輸出使能    

        TIM_Cmd(TIM1, ENABLE);

    }

    else if (speed < 0)

    {

        //設置方向

        GPIO_ResetBits(GPIOE, GPIO_Pin_4);

 

        //計算速度

        step_period = 50000 / (-speed);

 

        //初始化定時器

        TIM1->ARR = step_period - 1;

        TIM1->CCR1 = step_period >> 1;//周期的一半

        TIM_CtrlPWMOutputs(TIM1, ENABLE);    //MOE 主輸出使能    

        TIM_Cmd(TIM1, ENABLE);

    }

    else

    {

        TIM_CtrlPWMOutputs(TIM1, DISABLE);

        TIM_Cmd(TIM1, DISABLE);

    }

}

軟件說明

主程序,實現步進電機變速正轉、變速反轉、和停止,串口有提示信息輸出,主程序代碼如下。

int main(void)

{

    int16_t i;

 

     //X-CTR100初始化

    AX_Init(115200);

    printf("***X-CTR100 步進電機控制例程***\r\n\r\n");

 

    //模塊初始化及配置

    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);

    AX_STEP_Init(); //初始化步進電機    

    AX_STEP_SetEnable(1);

 

    while (1)

    {

        printf("*步進電機正方向轉動測試\r\n\r\n");

        //加速

        for (i = 0; i <= 2000; i += 2)

        {

            AX_STEP_SetSpeed(i);

            AX_Delayms(2);

        }

        //恆速

        AX_Delayms(3000);

        //減速

        for (i = i; i >= 0; i -= 2)

        {

            AX_STEP_SetSpeed(i);

            AX_Delayms(2);

        }

        AX_Delayms(1000);

 

        printf("*步進電機反方向轉動測試\r\n\r\n");

        //加速

        for (i = 0; i <= 2000; i += 2)

        {

            AX_STEP_SetSpeed(-i);

            AX_Delayms(2);

        }

        //恆速

        AX_Delayms(3000);

        //減速

        for (i = i; i >= 0; i -= 2)

        {

            AX_STEP_SetSpeed(-i);

            AX_Delayms(2);

        }

        AX_Delayms(1000);

 

        printf("*步進電機零轉速和關閉使能測試\r\n");

        printf("*零轉速,有維持力矩\r\n");

        AX_Delayms(3000);

        printf("*關閉使能,無維持力矩\r\n\r\n");

        AX_STEP_SetEnable(0);

        AX_Delayms(3000);

        AX_STEP_SetEnable(1);

 

    }

}

實現效果

打開X-Assistant軟件,可以看到電機運行提示信息,DRV8825調節至32細分。

電機首先加速正轉,后恆速運行,后減速到停止;再次電機反轉,后恆速,后停止。

然后電機停止轉動,此時保持維持力矩;最后關閉使能,維持力矩消失,電流減小。

    

總結

本文實現了X-CTR100控制器控制步進電機精確轉動,實際步進電機系統因項目不同差異較大。

有些步進電機系統的控制遠遠比該例程復雜,一般包括精確位置閉環控制,相應速度控制,S曲線控制等。

本文采用基礎框架是步進電機通用編程框架,復雜功能可以根據項目需要在此基礎上添加。

參考

http://www.3dprinter-diy.com/forum.php?mod=viewthread&tid=1330

https://reprap.org/wiki/A4988_vs_DRV8825_Chinese_Stepper_Driver_Boards

雷賽科技·步進電機及驅動器知識講座


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM