在本篇文章中,我們將學(xué)習(xí)如何使用搖桿和Arduino開發(fā)板控制步進(jìn)電機(jī)的知識(shí)。在這里,我們將使用Arduino UNO開發(fā)板和PS2游戲桿控制步進(jìn)電機(jī)的速度和旋轉(zhuǎn)方向。
我們使用帶有內(nèi)部驅(qū)動(dòng)器的單極5V DC步進(jìn)電機(jī)28BYJ-48。因此,不需要任何步進(jìn)電機(jī)驅(qū)動(dòng)。相反,我們將使用ULN2003A達(dá)林頓雙電機(jī)驅(qū)動(dòng)器IC。 PS2游戲桿由兩個(gè)10k歐姆的電位器組成,即一個(gè)用于X軸,另一個(gè)用于Y軸。它還包括一個(gè)按鈕。但是我們將僅使用X軸來控制步進(jìn)電機(jī)的運(yùn)動(dòng)。
所需的組件
● Arduino UNO開發(fā)板
● 28BYJ-48 5V DC步進(jìn)電機(jī)
● ULN2003芯片
● PS2游戲桿
● 5V DC電源
什么是步進(jìn)電機(jī)
步進(jìn)電動(dòng)機(jī)(stepper motor)是一種無刷直流電動(dòng)機(jī),它將完整的全周長分為多個(gè)相等的步長。然后可以命令電機(jī)的位置移動(dòng)并保持在其中一個(gè)步進(jìn),而無需任何位置傳感器進(jìn)行反饋(開環(huán)控制器),只要在轉(zhuǎn)矩和速度方面仔細(xì)選擇適合電動(dòng)機(jī)尺寸的電動(dòng)機(jī)即可。
步進(jìn)電機(jī)28-BYJ48的連接方式
步進(jìn)電動(dòng)機(jī)28-BYJ48是一個(gè)具有5引線線圈布置的單極電動(dòng)機(jī)。必須按特定順序?yàn)樗膫€(gè)線圈通電。紅線連接到+ 5V電壓,其余四根線將被拉到接地以觸發(fā)相應(yīng)的線圈。我們使用Arduino開發(fā)板以特定順序?yàn)檫@些線圈通電,并使電動(dòng)機(jī)執(zhí)行所需的步數(shù)。
步進(jìn)電機(jī)需要借助驅(qū)動(dòng)器芯片才能進(jìn)行操作。原因是控制器需要較高的電流才能運(yùn)行,但是僅步進(jìn)電機(jī)將無法從其I / O引腳提供足夠的電流來使電機(jī)運(yùn)行。因此使用ULN2003作為驅(qū)動(dòng)模塊,電流被放大了。
連接電路圖
要使用搖桿和Arduino控制步進(jìn)電機(jī),請(qǐng)如下圖所示組裝電路。
步數(shù)計(jì)算
在將代碼上傳到Arduino板上之前需要進(jìn)行步數(shù)計(jì)算
在Arduino中,我們將以4步順序操作電機(jī),因此需要計(jì)算步幅角(Stride Angle)。
步幅角= 5.625°
Arduino步驟順序= 4
所需步驟順序= 8
步數(shù)角度= 5.625 * 2 = 11.25
每轉(zhuǎn)的步數(shù)= 360 /步角= 360 / 11.25 =每轉(zhuǎn)32步。
源代碼/程序:
#include 《Stepper.h》
#define STEPS 32
// define stepper motor control pins
#define IN1 7
#define IN2 6
#define IN3 5
#define IN4 4
// initialize stepper library
Stepper stepper(STEPS, IN4, IN2, IN3, IN1);
// joystick pot output is connected to Arduino A0
#define joystick A0
void setup()
{
}
void loop()
{
// read analog value from the potentiometer
int val = analogRead(joystick);
// if the joystic is in the middle ===》 stop the motor
if( (val 》 500) && (val 《 523) )
{
digitalWrite(IN1, LOW);
digitalWrite(IN2, LOW);
digitalWrite(IN3, LOW);
digitalWrite(IN4, LOW);
}
else
{
// move the motor in the first direction
while (val 》= 523)
{
// map the speed between 5 and 500 rpm
int speed_ = map(val, 523, 1023, 5, 500);
// set motor speed
stepper.setSpeed(speed_);
// move the motor (1 step)
stepper.step(1);
val = analogRead(joystick);
}
// move the motor in the other direction
while (val 《= 500)
{
// map the speed between 5 and 500 rpm
int speed_ = map(val, 500, 0, 5, 500);
// set motor speed
stepper.setSpeed(speed_);
// move the motor (1 step)
stepper.step(-1);
val = analogRead(joystick);
}
}
}
編輯:hfy
-
驅(qū)動(dòng)器
+關(guān)注
關(guān)注
54文章
8632瀏覽量
149063 -
電位器
+關(guān)注
關(guān)注
14文章
1017瀏覽量
67662 -
步進(jìn)電機(jī)
+關(guān)注
關(guān)注
152文章
3157瀏覽量
149139 -
步進(jìn)電動(dòng)機(jī)
+關(guān)注
關(guān)注
0文章
60瀏覽量
13008
發(fā)布評(píng)論請(qǐng)先 登錄
行星減速步進(jìn)電機(jī)與步進(jìn)電機(jī)的區(qū)別

步進(jìn)電機(jī)轉(zhuǎn)速怎么控制高低
步進(jìn)電機(jī)的伺服控制方法有哪些
步進(jìn)電機(jī)伺服控制系統(tǒng)的作用
無刷電機(jī)遇到旋轉(zhuǎn)方向相反,應(yīng)如何處理
絲桿步進(jìn)電機(jī)和普通步進(jìn)電機(jī)有什么區(qū)別
基于STM32單片機(jī)的步進(jìn)電機(jī)控制系統(tǒng)設(shè)計(jì)

步進(jìn)電機(jī)控制器電路圖 步進(jìn)電機(jī)控制器的分類及其特點(diǎn)

評(píng)論