再來是要說明接線方式,方法很簡單,把Arduino要輸出控制的pin接到ULN2003上,再把對應的腳位接到步進馬達上面。記得電源的負極也要接上ULN2003的pin 8以及Arduino的GND。
Video
Code
Arduino練習到這裡,code開始有很多種不同的層級了。一個是單純要求輸出,另一種會用到Stepper Library(類似Labview的子VI)。先說第一種:
//單純定義pin輸出,以及輸出的速度
int motorPin_A = 8;
int motorPin_AP = 9;
int motorPin_B = 10;
int motorPin_BP = 11;
int delayTime = 20;
void setup() {
pinMode(motorPin_A, OUTPUT);
pinMode(motorPin_AP, OUTPUT);
pinMode(motorPin_B, OUTPUT);
pinMode(motorPin_BP, OUTPUT);
}
void loop() {
digitalWrite(motorPin_A, LOW);
digitalWrite(motorPin_AP,HIGH);
digitalWrite(motorPin_B, HIGH);
digitalWrite(motorPin_BP,LOW);
delay(delayTime);
digitalWrite(motorPin_A, LOW);
digitalWrite(motorPin_AP,HIGH);
digitalWrite(motorPin_B, LOW);
digitalWrite(motorPin_BP,HIGH);
delay(delayTime);
digitalWrite(motorPin_A, HIGH);
digitalWrite(motorPin_AP,LOW);
digitalWrite(motorPin_B, LOW);
digitalWrite(motorPin_BP,HIGH);
delay(delayTime);
digitalWrite(motorPin_A, HIGH);
digitalWrite(motorPin_AP,LOW);
digitalWrite(motorPin_B, HIGH);
digitalWrite(motorPin_BP,LOW);
delay(delayTime);
}
----------------------------------------------------------------------------------------------------------
另一種層次,就是叫Library進來,以下是會用的函式:
Stepper(int steps, pin1, pin2, pin3, pin4):定義轉一圈所需的步數,以及輸出的腳位。
Stepper: setSpeed(long rpms):設定步進馬達每分鐘轉速 (RPMs) ,需為正數。
這個函式並不會讓馬達轉動,只是設定好轉速,當呼叫step()函式時才會開始轉動。
Stepper: step(int steps):啟動馬達行進steps步數,正的表示一個方向, 負數表示反方向。
這個函式並不會讓馬達轉動,只是設定好轉速,當呼叫step()函式時才會開始轉動。
Stepper: step(int steps):啟動馬達行進steps步數,正的表示一個方向, 負數表示反方向。
//#include <Stepper.h>
Stepper stepper(48, 11, 10, 9, 8);
//我手上的馬達轉一圈為48步 (360/7.5 deg),定義11, 10, 9, 8為輸出腳位
void setup()
{
stepper.setSpeed(20); // 將馬達的速度設定成20RPM (太大趕不上)
}
void loop()
{
stepper.step(24);//正半圈
delay(1000);
stepper.step(-24);//反半圈
delay(1000);
stepper.step(48);//正1圈
delay(1000);
stepper.step(-48);//反1圈
delay(1000);
}
Stepper stepper(48, 11, 10, 9, 8);
//我手上的馬達轉一圈為48步 (360/7.5 deg),定義11, 10, 9, 8為輸出腳位
void setup()
{
stepper.setSpeed(20); // 將馬達的速度設定成20RPM (太大趕不上)
}
void loop()
{
stepper.step(24);//正半圈
delay(1000);
stepper.step(-24);//反半圈
delay(1000);
stepper.step(48);//正1圈
delay(1000);
stepper.step(-48);//反1圈
delay(1000);
}
-----------------------------------------------------------
相關文章:
請問使用時您的ULN2003會過燙嗎??
回覆刪除之前使用的時候溫度有上升,但還不到燙手。
回覆刪除Spec寫的規格是2.5 A, 建議你可以量一下通過電流check一下!
你好!
回覆刪除想請問如果我用比較大顆的六線步進馬達,需要24V/1.2A的供電
一樣可以用這個方法嗎?
感謝!
可以,依它的spec你可以看到Vo輸出可以到50V
刪除http://www.doyoung.net/video/DATASHEET/PDF/ULN2003.pdf
請問灌12v進去 ARDIUNO會燒壞嗎
刪除我沒試過也,不過應該很危險。我只有試過灌到9V,目前還活著。
刪除12V會爆炸
刪除為什麼用arduino控制步進馬達要用到達靈頓電路
刪除請問ARDIUNO驅動步進馬達,且步進馬達連接一個四連桿機構,讓四連桿機構作動 且運動軌跡是無限大的符號(倒8) 那麼有可以ULN2003,還是需要額外購買其他的驅動器呢? 因為ARDIUNO輸出的電流很小,所以必須要連接一個電流放大器 感謝版主的回答
回覆刪除我的建議是
回覆刪除1. 你可以先算一下你的4-bar linkage對驅動端來說,需要多少扭力 (詳見機構學課本)
2. 依上述扭力挑選一顆扭力足夠的步進馬達
3. 看該馬達需要多少電壓電流
4. 回頭再看ULN2003的spec,看它供應的電流電壓是否足夠你使用。(50V,0.5A)
以上可以練習做一次。
不過也許你手上剛好有一顆不知道需要多少電流的步進馬達
ULN2003可以供到50V應該夠你用的了,只是它只能供應0.5A,小顆的應該夠用。
但如果很不幸的你的馬達太大顆,那你可以找其它可供應更多電流的達靈頓電晶體。
謝謝您寶貴的意見
刪除請問ULN2003這顆IC 只是適用於步進馬達嗎? 那DC直流馬達適用嗎? 如果要買的話 哪邊有賣呢 還是必須跟公司訂購 謝謝版主的回答
回覆刪除ULN2003屬於一種達靈頓電路,你想用在直流馬達也是ok的。光華商場的電子材料行就有在賣了,問IC櫃台的小姐就知道了。
刪除想請問一下我照你介紹的實作,但馬達只會正轉不會反轉
回覆刪除大概是何原因???
因為我沒有看到您的實際接的圖,只能用猜測的。
刪除最有可能的是A A' B B'的線沒有接正確,以至只能往一個方向推。
不過我建議你先把pin腳接LED燈出來檢查,看燈亮的順序是不是你要的。
說不定可以看出一些端倪。
作者已經移除這則留言。
刪除我參考以下網址
刪除可以正反轉
http://4tronix.co.uk/arduino/Stepper-Motors.php
馬達:28BYJ-48, 5V
馬達驅動器:ULN2003
想請問一下 我買了一顆L298N馬達驅動IC,與一顆24V的直流馬達和ARDUINO UNO先連接,而我的問題是單純一顆L298N馬達驅動IC,而不需要其他的電子元件,就可以達到H橋式電路的效果了嗎?並且驅動馬達運作,還是需要其他電子元件呢?(當然前題是接線要接對)感謝您的回答.
回覆刪除對,直流的H橋用L298N,或L293B之類都可以達到
刪除可參考 http://coopermaa2nd.blogspot.tw/2012/09/l298n.html
不好意思 我現在只有一顆L298N馬達驅動IC,並沒有整個L298N模組,如果沒有其他電子元件,就可以達到H橋式電路的效果了嗎?並且驅動馬達運作,另外直流馬達上面擁有encoder,所以如果買此類型的馬達驅動模組,擁有encoder的接槽嗎?感謝版主再次回答.
刪除可以啊,看一下L298N型錄,裡面應該有配線的說明,不用買模組也可以用。
刪除至於你馬達原有帶encoder,那有附IR interrupter嗎?有的話,參考以下網址,找一下線來接 http://ming-shian.blogspot.tw/2013/05/get-frequency-from-optical-encoder-by.html
接完把訊號拉裡arduino的板子裡就可以看到轉速了。
回收筒裡隨便拿的,你可以拿一個步進馬達,然後參閱
回覆刪除http://ming-shian.blogspot.tw/2013/05/blog-post_8.html
分辨是那一種步進馬達之後,就自己寫屬於它的脈波
朋友,我也是用這個,這個馬達是很有問題的.他本身好像有一個gearbox,你試試 把step 設為64
回覆刪除stepper.step(2048),應該會正轉一圈.
不過我就是不明白為何是2048而不是4096?
我剛剛瞄了一下28byj48,這一顆的軸心的確有偏位,而且spec裡有寫ratio 64倍了,所以各位所需step就是64x64。不過我原本的是2相,這一顆是4相,所以還要再除2。
回覆刪除uln2003可以耐到50v,應該夠你用了。至於Sensor的部分,你可以依型號上網找spec,工業用的sensor很多都是可以用5~12V的,如果是的話,你就不用另外電阻了,如果不是,你用降壓的晶片7805降下來就可以用了,另外加電阻不是很方便!
回覆刪除你好~ 我想問我買了一個步進馬達 他是4V電壓 0.95的電流 那ULN2003會有問題嗎?? 因為好像ULN2003只提供0.5的電流 謝謝!
回覆刪除可能會有問題,不然你就並聯兩個Pin腳試試看能不能這樣用。就是一個arduino的pin腳控制兩個ULN2003的腳位看看!
回覆刪除好的~ 但不好意思咧....因為我是新手 我想問並聯的話應該怎樣做呢??
刪除謝謝回覆!!
把ULN2003的4跟5接在一起當作輸入,12和13接在一起輸出。不過我不太確定這樣可以,你可以試試看!
刪除你好, "不過我原本的是2相,這一顆是4相,所以還要再除2"
回覆刪除請問為什麼四相還要再除 2?
請問一下
回覆刪除如果是5相5線步進馬達
也可以用類似的方法控制嗎?
還是一定要使用驅動器來控制
您可以找到激磁順序的圖來看,就以用類似的方法進行驅動。
刪除http://cache.amobbs.com/bbs_upload782111/files_9/ourdev_251669.gif
你好!請問一下
回覆刪除我使用六線步進馬達 兩相激磁
步進角1.8 (DEG) 電壓5(V) 電流1.5(A)
可否使用ULN2003元件驅動?
用Stepper寫(步數=200),試過很多次接線,四條(A B A/ B/)接上ULN2003的16.15.14.13,只有震動
反而 A A/ 接上ULN2003的16.15會轉,但正反轉不會照程式走..
煩請解答 感謝><
我想問這張圖的接法
回覆刪除12V會不會讓Arduino燒掉?
我程式都寫好也能用藍芽控是信號了
就剩放大電路
希望能幫解惑,謝謝
http://4.bp.blogspot.com/-LGTEyQKFWy8/UYjOyJUPI4I/AAAAAAAADPg/Pb21EzBS8fY/s1600/%E6%93%B7%E5%8F%96.PNG
是用arduino來控制12V能不能過ULN2003,12V沒有進去arduino
刪除請問這馬達能否用ULN2003控制?
回覆刪除http://shop.cpu.com.tw/html/949/190-0208.html
p=iv
i=0.416 感覺電流有點危險耶?
還是會建議我直接買 驅動馬達模組?
最重要的是這馬達能用pwm控制嗎?
我是剛接觸電子科的新手 很多東西不太熟悉...(努力學習中!
十分危險,建議您用其它電流放大電路,就自己湊達靈頓電路吧!
刪除那請問 那顆馬達能使用pwm控制嗎?
刪除不好意思喔,PWM是針對直流馬達在用的,步進馬達要調速是改pulse的頻率的,不同於PWM
刪除如果那顆馬達寫著" 直流"減速馬達的話是否可以使用pwm?
刪除我怕你用的是無刷直流,那就是另一件事了,不能用PWM,有照片嗎?看照片比較準!
刪除my email: b92502011@gmail.com
不好意思請問一下,我接了步進馬達燒了程式進去之後,馬達只會震動但是不會轉,請問是什麼原因 ?
回覆刪除mail : paste.ren@gmail.com
謝謝 :)
作者已經移除這則留言。
刪除接法
刪除STEP MOTOR 28BYJ-48(5V DC)<<-ULN2003<<-Arduino->>USB->>Macbook
兩種主要原因:
刪除1. 頻率不對,起動頻率太高
2. 相位不對,因為每種馬達的啟動相位順序不太一樣,要你查一下你這種馬達的相位順序對不對!
您好 不好意思想請問一下一開始的code
回覆刪除高低電位那個 跑出來是順時針轉 那請問逆時針的順序是?
感謝~
應該順序反過來就行了
刪除作者已經移除這則留言。
回覆刪除請問下面影片的廣告裝置
回覆刪除https://www.youtube.com/watch?v=z4otUEgV7Ak
用這種步進馬達;左右各一顆、用齒輪帶中間的圓柱去捲動中間的海報,然後現場用電腦控制速度、正反轉、執行上有困難嗎? 謝謝你
應該沒有問題
刪除您好! 我用了您的code ,但是step似乎有誤, 會在delay(8ms)左右時不旋轉且扭力極小,改了code順序之後才正常運作且恢復應有的扭力, 麻煩您檢查一下您的code是否有誤~
回覆刪除OK, 感謝您的建議,稍晚我會檢查一下!
刪除您好! 我最近仔細研究了一下arduino的官網reference, 您的code應該是用於unipolar mode的範例, 但是要用unipolar mode的話uln2003要多用兩個腳位和四個電阻才行, 所以直接接會有問題, 我覺得如果不太強調操作的彈性的話,unipolar mode反而比較好 因為只需要用掉arduino兩個腳位,比起用掉四個腳位好太多了! 現在我正在找有沒有直接接成unipolar情形的uln2003電路板~~
刪除作者已經移除這則留言。
刪除我發現uln2003電路板上面有預留沒用到的三個輸出接腳的小孔...不過實在不好焊...
刪除這個接線圖~用兩條線能達到您的code相同的功能, 咦? 不對啊, 那您的code應該沒有錯? 頂多順序和接腳要檢查一下,有可能是我接錯? (之前那個留言貼錯網址, 所以刪掉了~)
刪除http://www.arduino.cc/en/Reference/StepperUnipolarCircuit
歐歐歐! 我誤會那些洞了...那些洞是接背板的跳線...
刪除你好我用你下面這個函式就是叫Library進來,但驗證時有錯誤
回覆刪除您好! 請問如果一次插上5台28BYJ-48步進馬達(每次只會驅動一台,但其他四台處待機狀態),需要外接甚麼規格的外接供應電源呢? 我使用的是INPUT: 100-240V ~0.5A, 50-60Hz OUTPUT: +12V 2.00A 的外接電源,但這樣一次最多只能啟動待機3台馬達...
回覆刪除作者已經移除這則留言。
刪除文中的做法就是外接電源了,只是你的電源夠不夠力的問題。你的電源看來只有24W,其實很小,買個 50W 應該就夠你用了。
刪除不好意思,我想寫一個程式是
回覆刪除(當按下按鈕後,馬達自動上升下降,指示燈跟著馬達一起運作)
目前就差在指示燈不知道該如何寫,其他部分都OK,想請各位幫個忙
以下是我的程式
............................
#include
#define STEPS 500
const int PB = A0;
const int TM = 13;
Stepper stepper(STEPS, 12, 10, 8, 7);
void setup() {
pinMode(TM, OUTPUT);
pinMode(PB, INPUT);
stepper.setSpeed(160);
}
void UP() {
stepper.step(-10000);
stepper.step(-10000);
}
void DOWN() {
stepper.step(10000);
stepper.step(10000);
}
void loop() {
boolean val = digitalRead(PB);
if (val == LOW) {
UP();
delay(1000);
DOWN();
}else{
}
}
如果是這樣的話,我會把stepper.step ( -10000) 裡的 -10000指定為變數 val
刪除void DOWN () 把val定為10000,void UP () 的時候定為-10000
然後loop裡就看val的狀況來指定LED是否要亮。
請問12v5w200rpm的直流減速馬達可以做到嗎??
回覆刪除原理不同,您可以參考
刪除http://ming-shian.blogspot.tw/2013/05/arduniopwm.html
使用PWM來控直流馬達的速度比較恰當
作者已經移除這則留言。
回覆刪除int i = 0:
刪除i = i +1:
if (i <144) {
stepper.step(0):
}
請問2014.4.12的留言中,有人提到說他的馬達轉速很慢,我的馬達也是28byj48,希望跟你影片中的馬達一樣快要怎麼做呢?
回覆刪除轉速比較慢,我能猜想到的原因有:
刪除(1) delay time的時間要再縮短
(2) 您的線沒有接對,沒有依照您的馬達說明書上的接線「順序」接對。
您再查一下線路是否正確。
請問一下這個程式不管多大的轉速再馬達許可下都可以達到嗎?
回覆刪除單晶片發出訊號的速度不一定有這麼快,這是硬體的問題。
刪除甚至馬達也不一定可以跑這麼快,步進馬達有一個極限的速度,過了不是扭力不足,不然就是失步。
請問一下是不是只有這種方法可以控制步進馬達的轉速
回覆刪除當然不是囉,有太多方法可以了,工業專門的方法超多!
刪除請教
回覆刪除我的57步進馬達(標力矩達3N)馬達上有標示电流4.2A,(要大電流)那我要選那種驅。動器或lc來驅動呢?
謝謝
Sorry, 57的馬達,我都直接找工業用的驅動器了,我沒有試過自己焊晶片來用。因為4.2真的太大了。買一顆工業用的比較快。
刪除例如:http://www.extion.com.tw/c/product03.htm
太多顆了請問要怎麼選擇呢?
回覆刪除太多顆了請問要怎麼選擇呢?
回覆刪除找來找去,找不到明確想明步進馬達怎麼配驅動的說明。問賣家也問不出的答案,只好再來麻煩你。
回覆刪除我的步進57BYG HS(57步进电机 57BYG HS步进电机驱动器 加长112mm 力矩3N.m 4线 軸8)http://b.mashort.cn/S.ZfLmY4?sm=4fbfc0
機身標
57HS 11242A4
1.8 4.2A
SUMTOR
他說4.2A是相電流,那這是2相的我是不是要用到8.4A的驅動,還是驅動器的配置有什麼規則可以計算呢?看賣家選那個結果給個TB6560峰值電流標3A(這是相電流還是輸出總電流呢?)只是比較貴,這可以用嗎?
謝謝
找來找去,找不到明確想明步進馬達怎麼配驅動的說明。問賣家也問不出的答案,只好再來麻煩你。
回覆刪除我的步進57BYG HS(57步进电机 57BYG HS步进电机驱动器 加长112mm 力矩3N.m 4线 軸8)http://b.mashort.cn/S.ZfLmY4?sm=4fbfc0
機身標
57HS 11242A4
1.8 4.2A
SUMTOR
他說4.2A是相電流,那這是2相的我是不是要用到8.4A的驅動,還是驅動器的配置有什麼規則可以計算呢?看賣家選那個結果給個TB6560峰值電流標3A(這是相電流還是輸出總電流呢?)只是比較貴,這可以用嗎?
謝謝
may I have this circuit and code?
回覆刪除請問如果是4線步進馬達 那個12V要接在哪裡
回覆刪除您好請問 Arduino 可以控制這種步進馬達驅動器嗎?
回覆刪除http://tw.taobao.com/item/10122157818.htm?fromSite=main&spm=a1z10.5-c.w4002-2933553768.12.zUMnQq
若可以的話,要如何控制呢??
您好請問一下步進馬達可以透過讀取一個訊號來驅動嗎?
回覆刪除請問,我用ULN2003+28BYJ-48的步進馬達,原本可以轉,後來怎麼試都只會震動,但是燈有在閃,請問是麼問題?
回覆刪除