中文字幕 另类精品,亚洲欧美一区二区蜜桃,日本在线精品视频免费,孩交精品乱子片免费

<sup id="3hn2b"></sup>

    1. <sub id="3hn2b"><ol id="3hn2b"></ol></sub><legend id="3hn2b"></legend>

      1. <xmp id="3hn2b"></xmp>

      2. "); //-->

        博客專欄

        EEPW首頁(yè) > 博客 > 如何用4988驅(qū)動(dòng)器和Arduino控制步進(jìn)電機(jī)

        如何用4988驅(qū)動(dòng)器和Arduino控制步進(jìn)電機(jī)

        發(fā)布人:電子資料庫(kù) 時(shí)間:2023-03-19 來(lái)源:工程師 發(fā)布文章

        在這個(gè)Arduino教程中,我們將學(xué)習(xí)如何控制步進(jìn)電動(dòng)機(jī)使用A4988步進(jìn)驅(qū)動(dòng)程序。您可以閱讀下面的書面教程。

        概述

        A4988是一個(gè)微步進(jìn)驅(qū)動(dòng)器,用于控制雙極步進(jìn)電機(jī),它有內(nèi)置的轉(zhuǎn)換器,便于操作。這意味著我們可以用控制器的2個(gè)引腳來(lái)控制步進(jìn)電機(jī),或者一個(gè)用于控制旋轉(zhuǎn)方向,另一個(gè)用于控制步進(jìn)。


        驅(qū)動(dòng)程序提供五種不同的步進(jìn)分辨率:全步、半軸步、四分之一步、八步和十六步。此外,它還有一個(gè)電位計(jì),用于調(diào)節(jié)電流輸出、過(guò)熱關(guān)機(jī)和交叉電流保護(hù)。

        其邏輯電壓為3~5.5v,如果提供良好的附加冷卻,則每相的最大電流為2A,或者在沒有散熱器或冷卻的情況下,每相的最大電流為1A。


        A4988步進(jìn)驅(qū)動(dòng)器引腳


        現(xiàn)在讓我們仔細(xì)看看驅(qū)動(dòng)器的引腳,并將其與步進(jìn)電機(jī)和控制器連接起來(lái)。因此,我們將從按鈕右側(cè)的2個(gè)引腳開始,為驅(qū)動(dòng)器供電的VDD和接地引腳,我們需要將它們連接到3到5.5 V的電源上,在我們的情況下,這將是我們的控制器,Arduino板將提供5 V電壓。以下4個(gè)引腳用于連接電機(jī)。1A和1B引腳將連接到電機(jī)的一個(gè)線圈,2A和2B引腳連接到電機(jī)的另一個(gè)線圈。為了給電機(jī)供電,我們使用接下來(lái)的2個(gè)引腳,接地和VMOT,我們需要將它們連接到8到35 V的電源上,我們還需要使用至少47μF的去耦電容器來(lái)保護(hù)驅(qū)動(dòng)板免受電壓尖峰的影響。


        接下來(lái)的兩個(gè)引腳:Step和Dir是我們實(shí)際用于控制電機(jī)運(yùn)動(dòng)的引腳。DIR引腳控制著電機(jī)的旋轉(zhuǎn)方向,我們需要把它連接到微控制器上的一個(gè)數(shù)字管腳上,或者在我們的例子中,我將把它連接到我的Arduino板的4號(hào)管腳上。

        我們用Step引腳控制馬達(dá),每發(fā)送一個(gè)脈沖到這個(gè)引腳,馬達(dá)就移動(dòng)一步。所以這意味著我們不需要任何復(fù)雜的編程,相序表,頻率控制線等等,因?yàn)锳4988驅(qū)動(dòng)器的內(nèi)置轉(zhuǎn)換器處理一切。這里我們還需要指出,這2個(gè)引腳沒有拉到任何電壓內(nèi)部,所以我們的程序里不應(yīng)讓這2個(gè)引腳浮空。

        下一個(gè)是休眠引腳和邏輯低將電路板置于休眠模式,以便在電機(jī)不使用時(shí)將功耗降至最低。

        接下來(lái),復(fù)位引腳將轉(zhuǎn)換器設(shè)置為預(yù)定義的主狀態(tài)。從A4988數(shù)據(jù)表中的這些數(shù)據(jù)可以看出這種主狀態(tài)或主微步位置。所以這些是馬達(dá)啟動(dòng)的初始位置,它們根據(jù)微步分辨率的不同而不同。如果該引腳的輸入狀態(tài)為邏輯低,則所有階躍輸入將被忽略。復(fù)位引腳是一個(gè)浮動(dòng)引腳,因此如果我們不打算在我們的程序中控制它,我們需要將其連接到休眠引腳,以使其處于高位并啟用電路板。


        接下來(lái)的3個(gè)引腳(MS1、MS2和MS3)用于根據(jù)上述真值表選擇五步分辨率中的一個(gè)。這些引腳有內(nèi)部下拉電阻,所以如果我們讓它們斷開,電路板將以全步進(jìn)模式運(yùn)行。

        最后一個(gè),使能管腳用于打開或關(guān)閉FET輸出。所以邏輯高將保持輸出關(guān)閉。

        本Arduino教程所需的組件

        步進(jìn)電機(jī)(NEMA17)

        A4988步進(jìn)驅(qū)動(dòng)器

        12V 2A適配器

        電源插座

        Arduino板

        試驗(yàn)板和跨接導(dǎo)線


        電路原理圖

        這是完整的電路圖。我將在全步進(jìn)模式下使用驅(qū)動(dòng)器,這樣我將保持3個(gè)MS引腳斷開連接,只需將驅(qū)動(dòng)器的方向和步進(jìn)引腳連接到Arduino板上的3號(hào)和4號(hào)引腳,以及接地和5伏引腳,為主板供電。此外,我將使用100μF電容器去耦,12V,1.5A適配器為電機(jī)供電。我將使用NEMA 17雙極步進(jìn)電機(jī),其導(dǎo)線A和C將連接到插腳1A和1B,B和D導(dǎo)線連接到2A和2B引腳。


        限流

        在我們連接馬達(dá)之前,我們應(yīng)該調(diào)整驅(qū)動(dòng)器的電流限制,這樣我們就可以確定電流在馬達(dá)的電流限制之內(nèi)。我們可以通過(guò)使用板上的電位計(jì)調(diào)整參考電壓,并考慮以下等式:

        Current Limit = VRef x 2


        然而,這個(gè)等式并不總是正確的,因?yàn)锳4988驅(qū)動(dòng)板有不同的制造商。在這里,我的例子是,調(diào)整了電位計(jì)的參考電壓。所以電流限制值應(yīng)該是0.6*2,等于1.2A。


        因?yàn)槲以谌竭M(jìn)模式下使用驅(qū)動(dòng)器,根據(jù)A4988數(shù)據(jù)表,在這種模式下,繞組電流只能達(dá)到電流極限的70%,1.2A*0.7等于0.84A,為了檢查這一點(diǎn),我上傳了一個(gè)簡(jiǎn)單的代碼,將連續(xù)邏輯高電平發(fā)送到步進(jìn)管腳(以便我們更好地注意電流),并將我的儀表與電機(jī)的一個(gè)繞組串聯(lián)并通電。我得到的是0.5A,這意味著這個(gè)方程對(duì)我的情況是不正確的。


        Arduino和A4988代碼

        下面是一個(gè)示例代碼。首先,我們必須定義步進(jìn)和方向引腳。在我們的例子中,它們是Arduino板上的3號(hào)和4號(hào)管腳,它們被命名為stepPin和dirPin,設(shè)置部分我們必須將它們定義為輸出。

        /* Simple Stepper Motor Control Exaple Code

        *

        * by Dejan Nedelkovski, www.HowToMechatronics.com

        *

        */

        // defines pins numbers

        constintstepPin = 3;

        constintdirPin = 4;

        voidsetup(){

        // Sets the two pins as Outputs

        pinMode(stepPin,OUTPUT);

        pinMode(dirPin,OUTPUT);

        }

        voidloop(){

        digitalWrite(dirPin,HIGH);// Enables the motor to move in a particular direction

        // Makes 200 pulses for making one full cycle rotation

        for(intx = 0; x<200; x++){

        digitalWrite(stepPin,HIGH);

        delayMicroseconds(500);

        digitalWrite(stepPin,LOW);

        delayMicroseconds(500);

        }

        delay(1000);// One second delay

        digitalWrite(dirPin,LOW);//Changes the rotations direction

        // Makes 400 pulses for making two full cycle rotation

        for(intx = 0; x<400; x++){

        digitalWrite(stepPin,HIGH);

        delayMicroseconds(500);

        digitalWrite(stepPin,LOW);

        delayMicroseconds(500);

        }

        delay(1000);

        }

        在回路部分,我們首先將方向銷設(shè)置為高狀態(tài),這將使電機(jī)朝特定方向移動(dòng)?,F(xiàn)在使用這個(gè)循環(huán),我們將使電機(jī)進(jìn)行一個(gè)完整的循環(huán)旋轉(zhuǎn)。由于驅(qū)動(dòng)器設(shè)置為全步進(jìn)模式,我們的步進(jìn)電機(jī)有1.8度的步進(jìn)角,即200步,我們需要發(fā)送200個(gè)脈沖到步進(jìn)引腳進(jìn)行一個(gè)完整周期的旋轉(zhuǎn)。因此for循環(huán)將有200次迭代,每次它都會(huì)將步進(jìn)引腳設(shè)置為高,然后低狀態(tài),以產(chǎn)生脈沖。在每一次數(shù)字寫入之間,我們需要增加一些延遲,這將決定電動(dòng)機(jī)的速度。

        在這個(gè)完整循環(huán)旋轉(zhuǎn)之后,我們將延遲一秒鐘,然后通過(guò)將dirPin設(shè)置為低狀態(tài)來(lái)更改旋轉(zhuǎn)方向,現(xiàn)在使用400次迭代的循環(huán)進(jìn)行2次完整循環(huán)旋轉(zhuǎn)。最后還有一秒鐘的延遲?,F(xiàn)在讓我們上傳代碼,看看它將如何工作。

        我在本教程中又舉了一個(gè)例子,我用電位計(jì)控制電機(jī)的速度。以下是該示例的源代碼:

        /* Simple Stepper Motor Control Exaple Code

        *

        * by Dejan Nedelkovski, www.HowToMechatronics.com

        *

        */

        // Defines pins numbers

        constintstepPin = 3;

        constintdirPin = 4;

        intcustomDelay,customDelayMapped;// Defines variables

        voidsetup(){

        // Sets the two pins as Outputs

        pinMode(stepPin,OUTPUT);

        pinMode(dirPin,OUTPUT);

        digitalWrite(dirPin,HIGH);//Enables the motor to move in a particular direction

        }

        voidloop(){

        customDelayMapped =speedUp();// Gets custom delay values from the custom speedUp function

        // Makes pules with custom delay, depending on the Potentiometer, from which the speed of the motor depends

        digitalWrite(stepPin, HIGH);

        delayMicroseconds(customDelayMapped);

        digitalWrite(stepPin, LOW);

        delayMicroseconds(customDelayMapped);

        }

        // Function for reading the Potentiometer

        intspeedUp(){

        intcustomDelay =analogRead(A0);// Reads the potentiometer

        intnewCustom =map(customDelay, 0, 1023, 300,4000);// Convrests the read values of the potentiometer from 0 to 1023 into desireded delay values (300 to 4000)

        returnnewCustom;

        }


        *博客內(nèi)容為網(wǎng)友個(gè)人發(fā)布,僅代表博主個(gè)人觀點(diǎn),如有侵權(quán)請(qǐng)聯(lián)系工作人員刪除。



        關(guān)鍵詞: 驅(qū)動(dòng)器 電機(jī)

        相關(guān)推薦

        技術(shù)專區(qū)

        關(guān)閉