要控制兩台步進電機同步進行運轉,即同時起步,同時加速,同時到達最大速度,同時減速,最後同時停止。
這是要有一定的演算法的:
假如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 ...