步進(jìn)電機(jī)廣泛用??于控制我們每天看到的眾多常見(jiàn)設(shè)備。從百葉窗、3D打印機(jī)和DVD播放器到安全攝像頭和CNC機(jī)器,步進(jìn)電機(jī)比您想象的更接近我們的生活。
探索步進(jìn)電機(jī)的第一步是使用28BYJ-48步進(jìn)電機(jī)。它們通常附帶有基于ULN2003的驅(qū)動(dòng)電路板,這使得它們非常易于使用。
你知道這些步進(jìn)電機(jī)是如何工作的嗎?
這些步進(jìn)電機(jī)使用一個(gè)帶齒的輪子(有32個(gè)齒)和四個(gè)在輪子周圍形成一個(gè)環(huán)的電磁鐵。
發(fā)送的每個(gè)高脈沖都會(huì)使線圈通電,吸引最靠近齒輪的齒,并以精確且固定的角度增量(稱為步進(jìn))旋轉(zhuǎn)電機(jī)。
?
?
向這些線圈發(fā)送脈沖的方式會(huì)極大地影響電機(jī)的行為。
●? ? 脈沖序列決定了電機(jī)的旋轉(zhuǎn)方向。
●? ? 脈沖的頻率決定了電機(jī)的速度。
●? ? 脈沖數(shù)決定了電機(jī)將轉(zhuǎn)動(dòng)多遠(yuǎn)。
28BYJ-48步進(jìn)電機(jī)
28BYJ-48是一款5線單極步進(jìn)電機(jī),運(yùn)行電壓為5V。
這種電機(jī)最大的優(yōu)勢(shì)是它可以一次精確地定位一次步進(jìn)。在需要精確定位的項(xiàng)目中它表現(xiàn)良好,例如打開和關(guān)閉通風(fēng)口。
?
?
另一個(gè)優(yōu)點(diǎn)是它的運(yùn)動(dòng)相對(duì)精確,并且由于電機(jī)不使用接觸刷而非常可靠。
考慮到它的尺寸,電機(jī)在大約15RPM的速度下可提供34.3mN.m的不錯(cuò)扭矩。它即使在靜止?fàn)顟B(tài)下也能提供良好的扭矩,只要向電機(jī)供電就??可以保持這種扭矩。唯一的缺點(diǎn)是它有點(diǎn)耗電,即使它不移動(dòng)也會(huì)消耗電力。
引腳排列
28BYJ-48是5線步進(jìn)電機(jī)。引腳排列如下:
?
28BYJ-48由兩個(gè)線圈組成,每個(gè)線圈都有一個(gè)中心抽頭。兩個(gè)中心抽頭在內(nèi)部連接并作為第5根線(紅線)引出。
線圈的一端和中心抽頭一起形成一個(gè)相位。因此28BYJ-48共有4個(gè)相位。
?
紅線一直是高電平。當(dāng)另一條引線拉低時(shí),該相通電。
只有當(dāng)相位以稱為步進(jìn)時(shí)序的邏輯順序通電時(shí),步進(jìn)電機(jī)才會(huì)旋轉(zhuǎn)。
齒輪減速比
根據(jù)數(shù)據(jù)表,當(dāng)28BYJ-48電機(jī)在全步模式下運(yùn)行時(shí),每步對(duì)應(yīng)于11.25°的旋轉(zhuǎn)。這意味著每轉(zhuǎn)有32步 (360°/11.25° = 32)。
?
除此之外,電機(jī)還有1/64減速齒輪組。 (實(shí)際上它是1/63.68395,但對(duì)于大多數(shù)用途來(lái)說(shuō),1/64是一個(gè)足夠好的近似值)
這意味著實(shí)際上有2038步(每轉(zhuǎn) 32*63.68395 步 = 2037.8864 大約2038步)。
功耗
28BYJ-48通常消耗大約 240mA。
由于電機(jī)消耗大量電流,因此最好直接從外部5V電源為其供電,而不是從Arduino獲取電量。
請(qǐng)注意,即使在靜止?fàn)顟B(tài)下,電機(jī)也會(huì)消耗電量以保持其位置。
技術(shù)規(guī)格
以下是完整的規(guī)格:
工作電壓 | 5VDC |
工作電流 | 240mA(典型) |
相數(shù) | 4 |
齒輪減速比 | 64:1 |
步距角 | 5.625°/64 |
頻率 | 100Hz |
牽引扭矩 | >34.3mN.m(120Hz) |
自定位扭矩 | >34.3mN.m |
摩擦力矩 | 600-1200 gf.cm |
拉入扭矩 | 300 gf.cm |
該電機(jī)的有關(guān)詳細(xì)信息,請(qǐng)參閱下面的數(shù)據(jù)手冊(cè):28BYJ-48數(shù)據(jù)手冊(cè)。
ULN2003驅(qū)動(dòng)板
由于28BYJ-48步進(jìn)電機(jī)消耗大電流,像Arduino這樣的微控制器無(wú)法直接控制電機(jī)。它需要一個(gè)像ULN2003這樣的驅(qū)動(dòng)器IC來(lái)控制電機(jī),所以這個(gè)電機(jī)通常帶有一個(gè)基于ULN2003的驅(qū)動(dòng)板。
ULN2003以其大電流和高電壓能力而聞名,它提供比單個(gè)晶體管更高的電流增益,并使微控制器的低電壓低電流輸出能夠驅(qū)動(dòng)高電流步進(jìn)電機(jī)。
ULN2003由一組七個(gè)達(dá)林頓晶體管對(duì)組成,每對(duì)能夠驅(qū)動(dòng)高達(dá)500mA和50V的負(fù)載。該驅(qū)動(dòng)板上使用了七對(duì)中的四對(duì)。
?
電路板有一個(gè)molex連接器,可以完美地連接電機(jī)線,從而非常容易地將電機(jī)連接到電路板。有四個(gè)控制輸入和一個(gè)電源連接。
該驅(qū)動(dòng)板有四個(gè)LED,顯示四個(gè)控制輸入線上的活動(dòng)(以指示步進(jìn)狀態(tài))。它們?cè)诓贿M(jìn)時(shí)提供了良好的指示。該板還帶有一個(gè)開/關(guān)跳線,用于隔離步進(jìn)電機(jī)的電源。
ULN2003步進(jìn)驅(qū)動(dòng)板引腳排列
ULN2003步進(jìn)驅(qū)動(dòng)板的管腳如下:
?
IN1 – IN4?引腳用于驅(qū)動(dòng)電機(jī)。將它們連接到Arduino上的數(shù)字輸出引腳。
GND?是公共接地引腳。
VDD?引腳為電機(jī)供電。將其連接到外部5V電源。因?yàn)殡姍C(jī)會(huì)消耗大量電流,所以切勿使用Arduino的5V電源來(lái)驅(qū)動(dòng)此步進(jìn)電機(jī)。
Motor Connector(電機(jī)連接器) 這是電機(jī)插入的地方。連接器是鍵控的,所以它只有這一種連接方式。
將28BYJ-48步進(jìn)電機(jī)和ULN2003驅(qū)動(dòng)器連接到Arduino開發(fā)板
現(xiàn)在了解了有關(guān)電機(jī)的所有信息,我們可以開始將它連接到Arduino。
首先將電源連接到ULN2003驅(qū)動(dòng)器。使用獨(dú)立的5V電源為步進(jìn)電機(jī)供電。
之后,將該電源的接地連接到Arduino的接地。這非常重要,這樣我們就可以在兩者之間建立相同的電壓基準(zhǔn)。
現(xiàn)在將驅(qū)動(dòng)板的IN1、IN2、IN3、IN4分別連接到Arduino數(shù)字引腳8、9、10和11。最后將電機(jī)電纜從步進(jìn)電機(jī)連接到驅(qū)動(dòng)板。
按照如下所示連接所有組件。
?
Arduino代碼 - 使用內(nèi)置的Stepper庫(kù)
對(duì)于第一個(gè)實(shí)驗(yàn),我們將使用與隨Arduino IDE一起安裝的Arduino Stepper庫(kù)。
Stepper庫(kù)負(fù)責(zé)處理步進(jìn)時(shí)序,并可以輕松控制各種步進(jìn)電機(jī),包括單極和雙極。
以下是使步進(jìn)電機(jī)順時(shí)針緩慢旋轉(zhuǎn)然后逆時(shí)針快速旋轉(zhuǎn)的簡(jiǎn)單草圖。
- //Includes the Arduino Stepper Library
- #include
- ?
- // Defines the number of steps per rotation
- const int stepsPerRevolution = 2038;
- ?
- // Creates an instance of stepper class
- // Pins entered in sequence IN1-IN3-IN2-IN4 for proper step sequence
- Stepper myStepper = Stepper(stepsPerRevolution, 8, 10, 9, 11);
- ?
- void setup() {
- // Nothing to do (Stepper Library sets pins as outputs)
- }
- ?
- void loop() {
- // Rotate CW slowly at 5 RPM
- myStepper.setSpeed(5);
- myStepper.step(stepsPerRevolution);
- delay(1000);
- ?
- // Rotate CCW quickly at 10 RPM
- myStepper.setSpeed(10);
- myStepper.step(-stepsPerRevolution);
- delay(1000);
- }
代碼說(shuō)明
首先在草圖代碼中包含內(nèi)置的Stepper庫(kù)。
- #include
接下來(lái),我們定義一個(gè)常量stepsPerRevolution,它保存電機(jī)完成一圈所需的步數(shù)。在例子中,它的值是2038。
- const int stepsPerRevolution = 2038;
28BYJ-48單極步進(jìn)電機(jī)步進(jìn)順序?yàn)镮N1-IN3-IN2-IN4。我們將使用這些信息來(lái)驅(qū)動(dòng)電機(jī),方法是創(chuàng)建一個(gè)名為myStepper實(shí)例,其引腳順序?yàn)?、10、9、11。
確保你做對(duì)了,否則電機(jī)將無(wú)法正常工作。
- Stepper myStepper = Stepper(stepsPerRevolution, 8, 10, 9, 11);
在setup()函數(shù)中無(wú)需設(shè)置任何內(nèi)容,因?yàn)镾tepper庫(kù)在內(nèi)部將四個(gè)I/O引腳設(shè)置為輸出。
- void setup() {
- }
在loop()函數(shù)中,我們使用setSpeed()函數(shù)來(lái)設(shè)置希望步進(jìn)電機(jī)移動(dòng)的速度,然后使用step()函數(shù)告訴它要旋轉(zhuǎn)多少步。將負(fù)數(shù)傳遞給step()函數(shù)會(huì)反轉(zhuǎn)電機(jī)的旋轉(zhuǎn)方向。
第一個(gè)代碼片段使電機(jī)順時(shí)針旋轉(zhuǎn)非常緩慢。另一個(gè)使電機(jī)以非常高的速度逆時(shí)針旋轉(zhuǎn)。
- void loop() {
- // Rotate CW slowly at 5 RPM
- myStepper.setSpeed(5);
- myStepper.step(stepsPerRevolution);
- delay(1000);
- ?
- // Rotate CCW quickly at 10 RPM
- myStepper.setSpeed(10);
- myStepper.step(-stepsPerRevolution);
- delay(1000);
- }
?
評(píng)論
查看更多