极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 30430|回复: 11

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

[复制链接]
发表于 2014-2-28 23:49:01 | 显示全部楼层 |阅读模式
剛買了一套入門套件學習 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 revolution  in 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);
}
回复

使用道具 举报

发表于 2014-3-1 11:03:22 | 显示全部楼层
那是四相电机,接成两相试试。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-3-1 16:56:37 | 显示全部楼层
先謝謝幫忙.

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

請問轉成兩相是如何接線, 程式上要如何改變配合?
回复 支持 反对

使用道具 举报

 楼主| 发表于 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 直接插在 麵包板上接線, 結果也是一樣.
請問有沒有方法可以糾正呢?




本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-3-6 01:38:37 | 显示全部楼层
根據燈號, 改變線路的 配對, 可以用四個方向控制了.

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

就可以逆時針轉了.

但腳步還是很細, 不知是那裡出錯了.
回复 支持 反对

使用道具 举报

发表于 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;

要改成需要的。
回复 支持 反对

使用道具 举报

发表于 2014-3-6 09:50:43 | 显示全部楼层
只用2-4,1-3,可接成两相电机。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

 楼主| 发表于 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 的輸出反轉次序就是逆向的) .  真的想不通.

要再嘗試作不同的輸出, 看看是否可以找出當中原理.
回复 支持 反对

使用道具 举报

 楼主| 发表于 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;
    }


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

有人可以解釋給我知嗎?
回复 支持 反对

使用道具 举报

发表于 2014-3-7 20:28:21 | 显示全部楼层
能运行很好!不知能否达到电机设计的性能。按照上面电机的设计图,已给出了电机8拍运行。需要把程序改成8拍,stepMotor(this->step_number % 8 );     再按图给出的相序写case 0 至case 7.看你的4拍就是把相序中的一相通电的那4拍去掉了,整体方向没错所以也能运行!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-3-7 23:57:52 | 显示全部楼层
chensg 发表于 2014-3-7 20:28
能运行很好!不知能否达到电机设计的性能。按照上面电机的设计图,已给出了电机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
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-15 17:24 , Processed in 0.050559 second(s), 21 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表