Super169 发表于 2014-2-28 23:49:01

ULN2003 + 28BYJ-48 只可以順時針細步轉

剛買了一套入門套件學習 Arduino, 當中有一塊 ULN2003 驅動板 配 28BYJ-48 步進馬達.

按說明接上 5V 及 GND 供電, 把 IN1-4 連上 Pin8-11, 再插上步進.

執行 Examples -> Stepper -> stepper_oneRevolution 的 sketch (原碼在最後).
結果只有在 clockwise 時才會順時針轉, 每次只轉45度左右.當 counterclockwise 時就停了.即對 step 輸入負數不會轉動.
再三檢查接線, 完全無有問題.當試反過來用 IN1-4 對 Pin11-8 連接, 結果一樣是只會順時針轉.
另外, 我還發現 A 燈一直都沒有發亮....不知是否有地方出了問題.

請問是否 ULN2003模塊 或 28BYJ-48 出了問題?有無有其他方法可作簡單測試?

-------------------------------------------------------


#include <Stepper.h>

const int stepsPerRevolution = 200;// change this to fit the number of steps per revolution
                                     // for your motor

// initialize the stepper library on pins 8 through 11:
Stepper myStepper(stepsPerRevolution, 8,9,10,11);            

void setup() {
// set the speed at 60 rpm:
myStepper.setSpeed(60);
// initialize the serial port:
Serial.begin(9600);
}

void loop() {
// step one revolutionin one direction:
   Serial.println("clockwise");
myStepper.step(stepsPerRevolution);
delay(500);

   // step one revolution in the other direction:
Serial.println("counterclockwise");
myStepper.step(-stepsPerRevolution);
delay(500);
}

chensg 发表于 2014-3-1 11:03:22

那是四相电机,接成两相试试。

Super169 发表于 2014-3-1 16:56:37

先謝謝幫忙.

但小弟只是初學玩, 基本上都是看圖跟著做, 很多東西不太懂.

請問轉成兩相是如何接線, 程式上要如何改變配合?

Super169 发表于 2014-3-6 01:25:06

用 stepper.step(1) 一步步去行, 再加入 delay(2000) 細看每一步的變化, 發現訊號好像有問題.

根據說明, 每組應該有 8 個 step 而且次序如下.


但我的結果只有 4 組, 次序亦很怪.


1 2 3 4
4 - -
3 - -
2 - -
1 - -


變成只有四拍.而且, 如果 四條線的方向沒錯, 轉動真的有點問題.細看之下, 馬達只有在 4 -> 1 時會走, 即是每 4 步走一步.

之前發現 A 燈一直沒亮, 原來是產品焊接的問題, 把 LED 的兩腳接上了, 這個模塊品質太差.分開後就正常亮燈了, 亦給我看到四個訊號的問題.

另外, 步距角是 5.625/64, 設定 64 steps 是否正確?但現在每步都非常細, 走一圈要幾百步.   
可能是因為訊號出錯, 原本 8 拍變成 4 拍, 而每 4 步只走 1 步.而且磁場方向不正確, 走的一步也不太正常.

不知是那裡出錯, 我嘗試過拿出 ULN2003APG 直接插在 麵包板上接線, 結果也是一樣.
請問有沒有方法可以糾正呢?




Super169 发表于 2014-3-6 01:38:37

根據燈號, 改變線路的 配對, 可以用四個方向控制了.

在 sketch 中,
Stepper myStepper(stepsPerRevolution, 8,9,10,11);            
改成
Stepper myStepper(stepsPerRevolution, 8,11,9,10);            

就可以逆時針轉了.

但腳步還是很細, 不知是那裡出錯了.

chensg 发表于 2014-3-6 09:43:28

那个是带1/64减速的步进电机,转一圈要64×64步,速度估计不能到60 rpm。要按8拍运行,要修改库文件。

原文件,stepper.cpp的部分代码:
if (this->pin_count == 4) {
    switch (thisStep) {
      case 0:    // 1010
      digitalWrite(motor_pin_1, HIGH);
      digitalWrite(motor_pin_2, LOW);
      digitalWrite(motor_pin_3, HIGH);
      digitalWrite(motor_pin_4, LOW);
      break;
      case 1:    // 0110
      digitalWrite(motor_pin_1, LOW);
      digitalWrite(motor_pin_2, HIGH);
      digitalWrite(motor_pin_3, HIGH);
      digitalWrite(motor_pin_4, LOW);
      break;
      case 2:    //0101
      digitalWrite(motor_pin_1, LOW);
      digitalWrite(motor_pin_2, HIGH);
      digitalWrite(motor_pin_3, LOW);
      digitalWrite(motor_pin_4, HIGH);
      break;
      case 3:    //1001
      digitalWrite(motor_pin_1, HIGH);
      digitalWrite(motor_pin_2, LOW);
      digitalWrite(motor_pin_3, LOW);
      digitalWrite(motor_pin_4, HIGH);
      break;

要改成需要的。

chensg 发表于 2014-3-6 09:50:43

只用2-4,1-3,可接成两相电机。

Super169 发表于 2014-3-6 23:38:45

本帖最后由 Super169 于 2014-3-6 23:40 编辑

非常感謝你的資料, 不來可以自行修改 stepper.cpp.
當我嘗試修改後, 發現更奇怪的時, 原來要電機轉動, 只需兩拍....

我把 stepper.cpp 改成只有兩拍:

stepMotor(this->step_number % 2);

順時針時, 只需兩個設定:

      case 0:    // 0110
      digitalWrite(motor_pin_1, LOW);
      digitalWrite(motor_pin_2, HIGH);
      digitalWrite(motor_pin_3, HIGH);
      digitalWrite(motor_pin_4, LOW);
      break;
      case 1:    // 1001
      digitalWrite(motor_pin_1, HIGH);
      digitalWrite(motor_pin_2, LOW);
      digitalWrite(motor_pin_3, LOW);
      digitalWrite(motor_pin_4, HIGH);
      break;

要逆時針時, 只需改變設定為:

      case 0:    // 1010
      digitalWrite(motor_pin_1, HIGH);
      digitalWrite(motor_pin_2, HIGH);
      digitalWrite(motor_pin_3, LOW);
      digitalWrite(motor_pin_4, LOW);
      break;
      case 1:    // 0110
      digitalWrite(motor_pin_1, LOW);
      digitalWrite(motor_pin_2, LOW);
      digitalWrite(motor_pin_3, HIGH);
      digitalWrite(motor_pin_4, HIGH);
      break;

(雖然整體是逆向, 有點不順暢, 當中有時會突意正向走半步再改回逆向)

但就有問題了, 正向跟反向不是倒過來就可以, 因此輸入 負數的步數時, 自然不可能改變方向了.

不知是那裡出了問題, 還在推測 pin_1, pin_2, pin_3, pin_4 跟電機內的設定會是什麼關係, 為向只有兩拍就可以轉動?而正向跟反向亦不是反過來輸入 (steppper.cpp 原意是把 0,1,2,3 的輸出反轉次序就是逆向的) .真的想不通.

要再嘗試作不同的輸出, 看看是否可以找出當中原理.

Super169 发表于 2014-3-6 23:53:48

變成自問自答.....

終於想改好了, 可以正向及反向, 而且反順暢.

之前測試過, 當中兩個輸出可以正向, 而令外兩個可以反向, 可以互相起了緩衝的作用.
做了一個大膽的嘗試, 把兩段程式混合起來, 合出 4 拍, 先改回 4 拍, 再合耕各步的輸出 ......結果就成功了.

    switch (thisStep) {
      case 0:    // 1100 (逆向 - 1)
      digitalWrite(motor_pin_1, HIGH);
      digitalWrite(motor_pin_2, HIGH);
      digitalWrite(motor_pin_3, LOW);
      digitalWrite(motor_pin_4, LOW);
      break;
      case 1:    // 0110 (正向 - 1)
      digitalWrite(motor_pin_1, LOW);
      digitalWrite(motor_pin_2, HIGH);
      digitalWrite(motor_pin_3, HIGH);
      digitalWrite(motor_pin_4, LOW);
      break;
      case 2:    //0011 (逆向 - 1)
      digitalWrite(motor_pin_1, LOW);
      digitalWrite(motor_pin_2, LOW);
      digitalWrite(motor_pin_3, HIGH);
      digitalWrite(motor_pin_4, HIGH);
      break;
      case 3:    //1001 (正向 - 2)
      digitalWrite(motor_pin_1, HIGH);
      digitalWrite(motor_pin_2, LOW);
      digitalWrite(motor_pin_3, LOW);
      digitalWrite(motor_pin_4, HIGH);
      break;
    }


雖然改好了, 但....我是不知肯後的原因的.

有人可以解釋給我知嗎?

chensg 发表于 2014-3-7 20:28:21

能运行很好!不知能否达到电机设计的性能。按照上面电机的设计图,已给出了电机8拍运行。需要把程序改成8拍,stepMotor(this->step_number % 8 );   再按图给出的相序写case 0 至case 7.看你的4拍就是把相序中的一相通电的那4拍去掉了,整体方向没错所以也能运行!

Super169 发表于 2014-3-7 23:57:52

chensg 发表于 2014-3-7 20:28 static/image/common/back.gif
能运行很好!不知能否达到电机设计的性能。按照上面电机的设计图,已给出了电机8拍运行。需要把程序改成8拍 ...

這裡真是完全想不通.

單是用 2 拍控制轉動, 已經超出我的理解了.

如果用 4 拍, 1-2-3-4 是正向的話, 4-3-2-1 就會是逆向.

但 2 拍控制轉動, 1-3 跟 3-1 是完全沒有分別.
為何 1-3 是正向, 4-2 就變成反向.結果 1-2-3-4 / 4-3-2-1 可以順暢地 正向/逆向轉動.

當初以為是我買的一套當中出錯了, 已買了 另一套新的 ULN2003 + 28BYJ-48 的組合, 結果又是一樣.
真是奇怪, 如果 ULN2003 + 28BYJ-48 的結果就是這樣, 預設的 library 不能用, 在網上竟然找不到類似的報告.

難道大家都不喜歡這個組合?入門套件都是跟這個的.

喝西风 发表于 2015-10-9 15:24:48

注意图中接电机的线序:蓝黄粉橙红。

注意:对比买来的电机线序,需要将2、3线对调。我一开始没成功,就是这个原因!!!

至于为什么要对调,现在还没弄明白,只是这么接线是正确的!
http://www.geek-workshop.com/forum.php?mod=viewthread&tid=13231&highlight=28BYJ
页: [1]
查看完整版本: ULN2003 + 28BYJ-48 只可以順時針細步轉