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