如何給一個步進電機 完成一個迴圈後 即停止動做的指令??-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 2185|回复: 4

[过期] 如何給一個步進電機 完成一個迴圈後 即停止動做的指令??

[复制链接]
发表于 2021-8-20 10:54 | 显示全部楼层 |阅读模式
本帖最后由 slivas2001 于 2021-8-24 13:55 编辑

新手求助 Arduino Uno+A4988+42步進電機 ,
小第寫了一個讓步進電機可以轉10圈的程序
以下是目前程序,不斷的循環迴圈~

請問要怎麼修改~才能讓步進電機完成一個迴圈後即停止的指令呢?
請大大們協助~非常感謝!!!

// A4988连接Arduino引脚号
const int dirPin = 2;  // 方向引脚
const int stepPin = 3; // 步进引脚

// 电机每圈步数
const int STEPS_PER_REV = 200;

void setup() {

  // Arduino控制A4988步进和方向的引脚为输出模式
  pinMode(stepPin,OUTPUT);
  pinMode(dirPin,OUTPUT);
}
void loop() {
// 设置电机顺时针旋转,LOW則為逆時針
  digitalWrite(dirPin,HIGH);

  // 电机慢速旋转X=2000代表轉10圈
  for(int x = 0; x < 2000; x++) {
    digitalWrite(stepPin,HIGH);
    delayMicroseconds(2000);
    digitalWrite(stepPin,LOW);
    delayMicroseconds(2000);
  }

  // 等待一秒
  delay(5000);

}

发表于 2021-8-21 00:24 | 显示全部楼层
將 loop() 中的程式碼剪貼到 setup() 中,
這樣程式只會在開機/重置後跑一次

另一種方式是用旗標,loop()中比對旗標狀態,
旗標未設立則執行程式,程式跑完後設立旗標,
第二次 loop() 就不會再執行程式了
 楼主| 发表于 2021-8-23 10:26 | 显示全部楼层
本帖最后由 slivas2001 于 2021-8-23 10:44 编辑
shouzama 发表于 2021-8-21 00:24
將 loop() 中的程式碼剪貼到 setup() 中,
這樣程式只會在開機/重置後跑一次

Shouzama大
感謝您的費心指導~我用您第一個方法可以了~
以下是修改後的程式碼

另外想請教您一下
我用A4988的步進馬達驅動器~發燙很嚴重~不知道這是驅動器IC本身的正常現象嗎?
電壓值我也有計算調整過 無論偏低或偏高都還是很燙~ 很怕連續用個一陣子驅動器就燒掉了
還是說有什麼方法可以讓一個迴圈結束後 可以讓步進馬達待機節省功耗?
不好意思我第一次接觸寫程式~完全沒有概念~




// A4988连接Arduino引脚号
const int dirPin = 2;  // 方向引脚
const int stepPin = 3; // 步进引脚

// 电机每圈步数
const int STEPS_PER_REV = 200;

void setup() {
  
  // Arduino控制A4988步进和方向的引脚为输出模式
  pinMode(stepPin,OUTPUT);
  pinMode(dirPin,OUTPUT);

  // 设置电机顺时针旋转,LOW則為逆時針
  digitalWrite(dirPin,HIGH);
  
  // 电机慢速旋转X=2000代表轉10圈
  for(int x = 0; x < 2000; x++) {
    digitalWrite(stepPin,HIGH);
    delayMicroseconds(2000);
    digitalWrite(stepPin,LOW);
    delayMicroseconds(2000);
  }
  

}
void loop() {


}
发表于 2021-8-23 13:27 | 显示全部楼层
本帖最后由 shouzama 于 2021-8-23 13:29 编辑
slivas2001 发表于 2021-8-23 10:26
Shouzama大
感謝您的費心指導~我用您第一個方法可以了~
以下是修改後的程式碼

您好,我沒弄過步進馬達耶,先看一下線有沒有接對吧:

照理講沒有驅動的狀況下不應該有明顯溫升的問題,
馬達電源是另外供給的,這電壓以馬達為準,最大驅動
電流 2A ,這點要留意一下免得重載燒掉 A4988

另外,我參考了其他人的程式 delayMicroseconds()
500 而已甚至也有完全不延遲的,如果想讓它轉慢一點,
在輸出 LOW 後面那行 delayMicroseconds(); 再
加上延遲值,視時間長度也可以改用 delay(); 就好



 楼主| 发表于 2021-8-23 15:35 | 显示全部楼层
本帖最后由 slivas2001 于 2021-8-23 15:44 编辑
shouzama 发表于 2021-8-23 13:27
您好,我沒弄過步進馬達耶,先看一下線有沒有接對吧:

照理講沒有驅動的狀況下不應該有明顯溫升的問題,

Shouzama大 您好
有的 我也是照這張圖相同的接續, 當馬達轉動停止時,A4988也是在發熱狀態
A4988我只有設定在1.5A左右(步進馬達標準電流是2A)
所以我也不懂為什麼A4988發熱度這麼高(有稍為爬文說這種要加個風扇吹幫助散熱)

因為我是用外接一個按鈕,當程序結束後停止不動,當我按一個按鈕reset後才會再轉一次流程.


還是很謝謝您前面的幫忙,至少可讓電機做動到我的理想狀態了
非常感恩

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

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-11-29 02:52 , Processed in 0.069013 second(s), 15 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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