ARDUINO 控制兩台步進電機同步運轉

2021-10-11 21:01:06 字數 3963 閱讀 6100

要控制兩台步進電機同步進行運轉,即同時起步,同時加速,同時到達最大速度,同時減速,最後同時停止。

這是要有一定的演算法的:

假如b1電機所走的路程是b2的n倍,在同時起步的前提下,v1=n*v2,a1=n*v2, 才能保證以上的同步結果。

本文程式是在太極創客程式的基礎上對其修改後的,接線方式完全保持不變。主要的修改如下:

1, data(電機指令引數)和 steppernum(控制電機編號) 兩個變數改為陣列;

2,data(電機指令引數)和 steppernum(控制電機編號) 兩個變數由int改為long int;

3, runusercmd()例程中if語句邏輯關係的修改。

在輸入以下命令後,可以看到兩個步進電機的執行始終保持同步:

a100,20

x500,10

m10240,2048

/* arduino通過accelstepper庫控制28byj-48步進電機示例程式-2

by 太極創客(www.taichi-maker.com)

可通過arduino ide 串列埠監視器輸入電機指令

本程式旨在演示move/moveto/runtonewposition區別 (兩個28byj-48電機演示)

* 電機指令列表

* 'o' 利用currentposition獲取當前電機輸出軸位置並通過串列埠監視器輸出該資訊

* 'v' 利用moveto函式使電機執行到使用者指定座標位置,moveto函式不會「block」程式。

* 例:v1024 - 將電機moveto到1024位置

* 'm' 利用move函式使電機執行相應步數。move函式不會「block」程式。

* 例:m1024 - 使電機執行1024步

* 'r' 利用runtonewposition函式讓電機執行到使用者指定座標位置。runtonewposition函式功能

* 與moveto函式功能基本相同。唯一區別是runtonewposition函式將「block」程式執行。

* 即電機沒有到達目標位置前,arduino將不會繼續執行後續程式內容。

* 這一點很像arduino官方stepper庫中的step函式。

* 例:r1024 - 將電機runtonewposition到1024位置。arduino在電機達到1024位置前將停止

* 其它程式任務的執行。

* 's' 利用setcurrentposition函式設定當前位置為使用者指定位置值。

* 例:s0 - 設定當前位置為0

* 'a' 利用setacceleration函式設定加速度

* 例:a100 - 設定電機執行的加速度為100

* 'x' 利用setmaxspeed函式設定最大速度

* 例:x500 - 設定電機執行的最大速度為500

* 'd' 使用者通過此指令可指定哪乙個電機進行工作

* 例:d1 一號電機工作,d2 二號電機工作, d0 兩個電機同時工作*/

#include "accelstepper.h"

// 電機步進方式定義

#define fullstep 4 //全步進引數

#define halfstep 8 //半步進引數

// 定義步進電機引腳

#define motor1pin1 8 // 一號28byj48連線的uln2003電機驅動板引腳 in1

#define motor1pin2 9 // 一號28byj48連線的uln2003電機驅動板引腳 in2

#define motor1pin3 10 // 一號28byj48連線的uln2003電機驅動板引腳 in3

#define motor1pin4 11 // 一號28byj48連線的uln2003電機驅動板引腳 in4

#define motor2pin1 4 // 二號28byj48連線的uln2003電機驅動板引腳 in1

#define motor2pin2 5 // 二號28byj48連線的uln2003電機驅動板引腳 in2

#define motor2pin3 6 // 二號28byj48連線的uln2003電機驅動板引腳 in3

#define motor2pin4 7 // 二號28byj48連線的uln2003電機驅動板引腳 in4

// 定義兩個步進電機物件

// 定義中uln2003驅動板引腳順序為 in1-in3-in2-in4

// 1號電機設定為全步進執行,2號電機設定為全步進執行

accelstepper stepper1(fullstep, motor1pin1, motor1pin3, motor1pin2, motor1pin4);

accelstepper stepper2(fullstep, motor2pin1, motor2pin3, motor2pin2, motor2pin4);

char cmd; //電機指令字元

long int data[2]; //電機指令引數

long int steppernum[2]=; //控制電機編號

void setup()

void loop()

stepper1.run();

stepper2.run();}

void runusrcmd()

if (steppernum[1] == 1)

break;

case 'v': //利用moveto函式使電機執行到使用者指定座標位置,moveto函式不會「block」程式。

if (steppernum[0] == 1)

if (steppernum[1] == 1)

break;

case 'm': // 利用move函式使電機執行相應步數。move函式不會「block」程式。

if (steppernum[0] == 1)

if (steppernum[1] == 1)

break;

case 'r': //利用runtonewposition函式讓電機執行到使用者指定位置值。

if (steppernum[0] == 1)

if (steppernum[1] == 1)

break;

case 's': //利用setcurrentposition函式設定當前位置為使用者指定位置值。

if (steppernum[0] == 1)

if (steppernum[1] == 1)

break;

case 'a': //利用setacceleration函式設定加速度

if (steppernum[0] == 1)

if (steppernum[1] == 1)

break;

case 'x': //利用setmaxspeed函式設定最大速度

if (steppernum[0] == 1)

if (steppernum[1] == 1)

break;

case 'd': //使用者通過此指令可指定哪乙個電機進行工作

if ( data[0] + data[1] == 1 )

if (data[0] + data[1] == 2) else

break;

default: // 未知指令

使用Arduino開發板控制步進電機

目前為止,我還沒有真正深入了解過電機,特別是步進電機。最近我在計畫乙個專案,需要相對精確的電機控制,所以可能會使用到步進電機,但很快就意識到我首先應該更多地了解這些。本篇文章主要介紹我到目前為止學到的東西。什麼是步進電機?步進電機是一種離散步進運動的電磁裝置。它有幾個線圈,組成 相位 當每相依次通電...

微控制器控制步進電機 步進電機驅動器控制及驅動的要求

步進電機驅動控制系統由控制電路 驅動電路和步進電機三部分組成。其主要功能如下 1 控制電路 用於產生脈衝,控制電機的速度和方向。2 驅動電路 根據控制器輸入的脈衝和方向訊號,為步進電機各繞組提供正確的通電順序,以及電機所需的高電壓 高電流,並提供過電流 過熱等各種保護措施。3 步進電機 驅動器放大控...

plc控制電機實驗報告 PLC控制步進電機實驗報告

廣東技術師範學院實驗報告 學院 專業 班級 成績 姓名 學號 組別 組員 實驗地點 實驗日期 指導教師簽名 實驗 3 專案名稱 plc 控制四相步進電機 1.實驗專案名稱 plc 控制四相步進電機 2.實驗目的和要求 1 掌握功能指令的用法 2 掌握步進電機步進控制程式的設計 3.主要儀器裝置 1 ...