首頁 > 評測 > Sensortile評測----平坦度測量之42步進(jìn)電機(jī)調(diào)試

Sensortile評測----平坦度測量之42步進(jìn)電機(jī)調(diào)試

  
  • 作者:
  • 來源:
  • [導(dǎo)讀]
  • 項(xiàng)目需求,動作部分需要步進(jìn)電機(jī)參與,去年論壇送的3D打印機(jī)還在,那就用A4988驅(qū)動模塊和42步進(jìn)電機(jī)了。 一、模塊介紹: 1、步進(jìn)電機(jī): 1>步進(jìn)電機(jī):在非超載的情況下,電機(jī)的轉(zhuǎn)速、停止的位置只取決于脈沖信號
項(xiàng)目需求,動作部分需要步進(jìn)電機(jī)參與,去年論壇送的3D打印機(jī)還在,那就用A4988驅(qū)動模塊和42步進(jìn)電機(jī)了。
一、模塊介紹:

1、步進(jìn)電機(jī):
1>步進(jìn)電機(jī):在非超載的情況下,電機(jī)的轉(zhuǎn)速、停止的位置只取決于脈沖信號的頻率和脈沖數(shù),而不受負(fù)載變化的影響,當(dāng)步進(jìn)驅(qū)動器接收到一個(gè)脈沖信號,它就驅(qū)動步進(jìn)電機(jī)按設(shè)定的方向轉(zhuǎn)動一個(gè)固定的角度,稱為“步距角”,它的旋轉(zhuǎn)是以固定的角度一步一步運(yùn)行的??梢酝ㄟ^控制脈沖個(gè)數(shù)來控制角位移量,從而達(dá)到準(zhǔn)確定位的目的;同時(shí)可以通過控制脈沖頻率來控制電機(jī)轉(zhuǎn)動的速度。

圖1 四線兩相步進(jìn)電機(jī)原理圖

2〉42步進(jìn)電機(jī)
42意思是說安裝機(jī)座寬42mm,如下圖



圖2 42步進(jìn)電機(jī)機(jī)械圖

其額定轉(zhuǎn)矩為0.5Nm。

2、A4988步進(jìn)電機(jī)驅(qū)動模塊


圖3 A4988IC功能框圖

A4988一個(gè)帶轉(zhuǎn)換器和過流保護(hù)功能的DMOS(vertical double-diffused MOSFET)微步驅(qū)動芯片。

其MS1/2/3是模式選擇邏輯引腳,共有五種不同的步進(jìn)模式(全、半、1/4、1/8、1/16),模式根據(jù)應(yīng)用精度選擇,其具體介紹見官方datasheet。



圖4 模式邏輯表


圖5 時(shí)序圖


下面是A4988在3D打印機(jī)應(yīng)用中的經(jīng)典模塊電路

圖6 3D打印RAMPS1.4電路中的驅(qū)動模塊

RAMPS1.4電路板中,MS1/2/3、reset和sleep引腳被上拉,step、enable和dir,以及OUT1A、OUT1B、OUT2A、OUT2B引腳外留。

二、用Arduino開發(fā)板調(diào)試驅(qū)動塊:

開發(fā)板用的是ATmega2560 R3,驅(qū)動模塊的dir、step、enable分別接于開發(fā)板的28、26、24接口,前面說過A4988的模式,網(wǎng)上查來說,在全模式下,轉(zhuǎn)一圈要200個(gè)步進(jìn)值或一個(gè)步進(jìn)1.8°,而我們的板子是在1/16的模式下,即轉(zhuǎn)一圈需要16*200個(gè)步,這里的1步指的是step引腳的一個(gè)周期方波,方波的周期決定了旋轉(zhuǎn)的速度,而總的步進(jìn)數(shù)決定了旋轉(zhuǎn)的角位移,兩者其實(shí)耦合,不糾結(jié)了,經(jīng)測試方波的周期在300us至1600us之間電機(jī)運(yùn)行穩(wěn)定。


下面是這次調(diào)試的代碼:

  • char Dir=28;
  • char Step=26;
  • char Enable=24;
  • //MS1/2/3 5V
  • void setup() {
  •   // put your setup code here, to run once:
  •   pinMode(Enable,OUTPUT); // Enable
  •   pinMode(Step,OUTPUT); // Step
  •   pinMode(Dir,OUTPUT); // Dir
  •   digitalWrite(Enable,LOW); // Set Enable low
  •   //digitalWrite(Dir,HIGH); // Set Dir high
  • }
  • void loop() {
  •   // put your main code here, to run repeatedly:
  •   digitalWrite(Dir,HIGH); // Set Dir high  正轉(zhuǎn)
  •   for(int x = 0; x < 3200; x++)
  •   {
  •       digitalWrite(Step,HIGH); // Output high
  •       delayMicroseconds(800); //
  •       digitalWrite(Step,LOW); // Output low
  •       delayMicroseconds(800); //
  •   }
  • delay(5000);
  • digitalWrite(Dir,LOW); // Set Dir low 反轉(zhuǎn)
  •   for(int x = 0; x <3200; x++)
  •   {
  •       digitalWrite(Step,HIGH); // Output high
  •       delayMicroseconds(800); //
  •       digitalWrite(Step,LOW); // Output low
  •       delayMicroseconds(800); //
  •    }
  •     delay(5000); // pause five second
  • }

復(fù)制代碼




三、總結(jié):


此次調(diào)試唯一經(jīng)驗(yàn)就是,一定不忘以前養(yǎng)成的程序編寫習(xí)慣,切記,下面來說說這次遇到的坑,


首先、是第二次玩Arduino,對其編輯、編譯器和代碼書寫要求沒有任何好感,個(gè)人感覺。


其次、犯了一個(gè)很沒程序素養(yǎng)的問題,程序是先讓電機(jī)正轉(zhuǎn)一圈,延遲5s后再反轉(zhuǎn)一圈,如此輪回,結(jié)果一直在正轉(zhuǎn),怪了,什么鬼?于是拿著表測了一下方向控制腳,發(fā)現(xiàn)的確沒有執(zhí)行到這一步,看了半天沒看出來,于是就回頭去測電路板,排除硬件的影響,任然無效,于是從程序for循環(huán)開始排查,是不是步數(shù)轉(zhuǎn)多了,電機(jī)剩磁太大,老死機(jī)的經(jīng)驗(yàn),就慢慢改步數(shù),從3200改到了100,發(fā)現(xiàn)改到150時(shí)還是一樣,但改到100時(shí)可以反轉(zhuǎn)了,聰明的你知道是什么原因了吧,差不多找著你了,于是改到了126發(fā)現(xiàn)可以反轉(zhuǎn),又改到了130不反轉(zhuǎn),好家伙,x溢出了!??!,???恩,無緣無故你溢出個(gè)球,x怎么是char類型的,我明明定義的是int啊,于是想了想,當(dāng)初定義了一個(gè)全局變量x,char類型的,寫for的時(shí)候?yàn)榱耸∈拢陀昧怂?,這回是哭笑不得,好吧,老了,記性太差,改回來后,ok了,覺得好笑,寫這麼多,大家一起笑笑undefined。

  • 本文系21ic原創(chuàng),未經(jīng)許可禁止轉(zhuǎn)載!

網(wǎng)友評論

  • 聯(lián)系人:巧克力娃娃
  • 郵箱:board@21ic.com
  • 我要投稿
  • 歡迎入駐,開放投稿

熱門標(biāo)簽
項(xiàng)目外包 more+