Beli servo bila bahagian itu mesti sampai ke sudut yang diketahui dan menahannya di situ β palang pagar, sendi robot, kepala pan-tilt. Beli motor stepper bila ia mesti berpusing ke kedudukan yang dikira, terus berpusing melepasi satu pusingan penuh, atau menahan beban β dail, slider, penyuap. Beli motor gear DC biasa bila hanya kelajuan dan arah yang penting β roda, kipas, pump.
Harga bukan penentunya β ketiga-tiga keluarga ini menjawab soalan yang berlainan, dan cara paling cepat untuk merasai bezanya ialah menolak perlahan-lahan pada shaft output setiap satu.
Apa sebenarnya yang membezakan motor stepper, servo dan motor DC?
Servo RC seperti SG90 ialah empat benda dalam satu kotak: sebuah motor DC kecil, satu set gear, sebuah potentiometer yang bergear ke shaft output, dan sekeping cip yang membanding. Anda hantar satu pulse setiap 20 ms, dan lebar pulse itu β lebih kurang 1.0 ms hingga 2.0 ms β mewakili satu sudut. Cip itu membandingkan lebar tersebut dengan voltan potentiometer dan memacu motor sehingga kedua-duanya bersetuju. Tolak horn keluar daripada sudutnya dan voltan potentiometer bergerak sama, perbandingan itu jadi tak seimbang, dan servo memacu dirinya balik ke tempat asal. Gelung itu jugalah hadnya: potentiometer hanya boleh berpusing setakat itu sahaja, jadi servo 180Β° tidak boleh berpusing berterusan, dan tiada apa-apa di luar kotak itu yang boleh membaca di mana shaft berakhir. Satu amaran sebelum anda mencuba tolakan itu: kuis lengan itu sedikit, jangan lawan ia. Set gear SG90 diperbuat daripada nylon, dan memaksanya melawan motor yang sedang bertenaga akan mematahkan gigi gear β dan itulah sebenarnya gear besi MG996R dijual untuk bertahan. Kalau tiada horn pada boss shaft, sekeping masking tape yang dilipat sudah memadai jadi tuas.
Motor stepper 28BYJ-48 pula langsung tiada sensor. Rotornya ialah magnet kekal yang dikelilingi gegelung; tenagakan gegelung itu mengikut turutan dan rotor akan melekat ke setiap penjajaran magnet yang baharu, satu step setiap kali bertukar. Torknya datang daripada gegelung bertenaga yang menahan rotor di dalam detent magnet, bukan daripada gelung pembetulan β sebab itulah motor stepper ada holding torque yang tulen selagi ia bertenaga, dan sebab itulah menolak-uji sebuah stepper terasa macam menolak dail yang bertakuk. Bebankan ia berlebihan dan rotor akan tergelincir satu detent: kiraan step di dalam sketch anda terus naik, tiada apa-apa yang melaporkan gelinciran itu, dan ralatnya kekal di dalam mesin sehingga anda buat homing semula.
Motor gear GA12-N20 melepaskan kedudukan sepenuhnya. Voltan merentasi dua terminal memusingkan shaft, terminal yang ditukar arah memusingkannya arah bertentangan, dan memotong voltan dengan PWM memperlahankannya. Tolak shaftnya dan ia berpusing sahaja β tiada apa-apa di dalamnya yang ada pendapat tentang sudut. Sebagai pertukaran, ia ialah putaran berterusan paling murah yang boleh anda beli, dan gearboxnya menukar motor laju yang lemah menjadi motor perlahan yang kuat.
| Keluarga | Apa yang anda arahkan | Putaran | Holding torque | Tahu kedudukan sendiri? | Beli untuk |
|---|---|---|---|---|---|
| Stepper 28BYJ-48 + ULN2003 | Kiraan step | Tanpa had, dua-dua arah | Ya, selagi bertenaga | Tidak β open loop, tergelincir senyap | Dail, slider, penyuap, apa-apa yang mesti berpusing lebih daripada satu pusingan ke tempat yang ditetapkan |
| Servo mikro SG90 | Sudut mutlak | Lebih kurang 180Β°, tidak lebih | Ya, dibetulkan secara aktif | Di dalam ya, dari luar tidak | Lengan ringan, flap, selak, kepala pan-tilt β lebih kurang 1.3 kgΒ·cm pada 4.8 V |
| Servo gear besi MG996R | Sudut mutlak | Lebih kurang 180Β°, tidak lebih | Ya, dan jauh lebih banyak | Di dalam ya, dari luar tidak | Kerja yang sama tetapi di bawah beban sebenar β kira-kira 11 kgΒ·cm pada 6 V, gear besi |
| Motor gear DC GA12-N20 | Kelajuan dan arah | Tanpa had, dua-dua arah | Tiada | Tidak, dan ia memang tak boleh | Roda, kipas, pump, conveyor β apa-apa yang soalannya bukan “berapa jauh” |
Empat motor yang dibandingkan β ini pilihan ganti satu sama lain, beli SATU yang padan dengan kerja anda
Apa yang diperlukan untuk mencuba semuanya di atas meja
Satu Uno boleh memacu keempat-empat motor. Stepper bawa board ULN2003nya sendiri, jadi pemacu yang perlu ditambah cuma satu L298N untuk motor DC β terminal skru dan header yang sudah terpasang, tiada apa-apa nak disolder. Ambil kedua-dua gender jumper: male-to-female untuk pin male board pemacu, male-to-male untuk soket female servo. Kabel Type-B pula ialah kabel yang Uno guna.
Memilih julat sudut yang salah ialah kesilapan seterusnya selepas memilih keluarga yang salah, dan panduan servo 180Β° vs 270Β° vs 360Β° kami menyelesaikan yang itu. Mula-mula, apa yang sebenarnya ada di dalam kotak sebuah servo:

Berapa banyak motor yang satu Arduino Uno sebenarnya boleh pacu?
Arduino Uno ada dua bajet β pin dan amp β dan yang lebih kecil itulah yang menentukan. Pin ialah kiraan yang mudah: 14 digital campur 6 analog yang boleh diguna sebagai digital menjadikan 20, tolak D0 dan D1 untuk serial USB, tinggal 18. Satu board stepper ULN2003 mengambil empat, jadi empat stepper muat dengan dua pin berbaki. Satu servo mengambil satu pin, tetapi library Servo Arduino mengehadkan Uno kepada 12 dan, bermula daripada panggilan attach() yang pertama, melumpuhkan analogWrite() pada pin 9 dan 10 β sama ada ada servo pada dua pin itu ataupun tidak. Motor DC mengambil dua pin arah campur satu pin PWM melalui pemacu β jangan sesekali terus ke pin, kerana pin Uno ditaraf 20 mA sedangkan N20 yang kecil pun menarik beratus miliamp ketika stall.
Amp ialah bajet yang sebenarnya menghentikan anda, dan angka stepper itu berbaloi dikira sendiri. Setiap gegelung 28BYJ-48 berukuran kira-kira 50 Ξ©, jadi pada 5 V satu gegelung menarik lebih kurang 100 mA dan library Stepper yang disertakan mengekalkan dua gegelung bertenaga pada setiap step β anggap lebih kurang 200 mA setiap motor, ditarik sama ada ia berpusing ataupun sekadar menahan. Arus MG996R di dalam jadual itu daripada TowerPro sendiri; helaian data SG90 pula ditulis mengelilingi tork dan kelajuan, jadi barisnya menggunakan tarikan tipikal yang diukur. USB memberi keseluruhan board 500 mA, ditetapkan oleh port dan oleh fius boleh-set-semula di belakang soket Uno. Barrel jack pun bukan bajet 5 V yang lebih besar: di belakangnya ada regulator linear kecil yang membakar bezanya sebagai haba β kira-kira 0.4 W bagi setiap 100 mA pada input 9 V β dan pada input 5 V ia langsung tiada headroom lalu menyebabkan board itu brownout.
Jadi penyelesaiannya bukan board yang lebih besar, tetapi bekalan kedua β motor pada rel 5β6 V sendiri, wayar isyarat ke Uno, ground dicantum supaya pulse berkongsi rujukan yang sama. Board ULN2003 dan L298N kedua-duanya membawa terminal kuasa untuk tujuan inilah. Kekalkan rel stepper pada 5 V: cip ULN2003 memang boleh mensuis jauh lebih tinggi, tetapi 28BYJ-48 ialah belitan 5 V dan lebihannya jadi haba, bukan tork. Lepas beberapa servo, alihkan penjanaan pulse keluar daripada Uno sepenuhnya dengan pemacu servo 16 channel PCA9685, yang ada input kuasa servonya sendiri.
| Keluarga | Pin setiap satu | Arus setiap satu | Siling pin pada Uno | Siling realistik atas kuasa USB |
|---|---|---|---|---|
| Stepper atas board ULN2003 | 4 digital | ~200 mA, bergerak atau menahan | 4 | 1 |
| Servo mikro SG90 | 1 (maksimum library 12) | 100β250 mA bergerak, ~360 mA ketika stall | 12 | 1 bergerak pada satu-satu masa |
| Servo gear besi MG996R | 1 (maksimum library 12) | 500β900 mA pada 6 V, 2.5 A ketika stall | 12 | 0 β perlukan bekalan sendiri |
| Motor DC melalui L298N | 2β3 | Beratus mA, lebih lagi ketika stall | 6, pada 2 motor setiap L298N | 0 β bekalan motor memang berasingan sejak reka bentuknya |

Macam mana sebenarnya anda mengarahkan setiap keluarga?
Satu Arduino Uno boleh bertutur ketiga-tiga bahasa ini dalam satu sketch, dan sketch di bawah memang melakukannya: sudut mutlak kepada servo, kiraan step kepada stepper, arah dan duty cycle kepada motor DC. Ada tiga perincian yang selalu memakan masa petang orang. Pertama, library Stepper yang disertakan ditulis untuk motor bipolar: ia membaca empat pin anda sebagai A+, Aβ, B+, Bβ dan menyalakannya dalam pasangan ke-1+ke-3, ke-2+ke-3, ke-2+ke-4, ke-1+ke-4. 28BYJ-48 yang unipolar pula perlukan pasangan bersebelahan yang bertindih β IN1+IN2, IN2+IN3, IN3+IN4, IN4+IN1 β jadi wayarkan IN1βIN4 ke D4βD7 tetapi senaraikannya sebagai 4, 6, 5, 7, yang memetakan satu corak kepada satu lagi. Dalam susunan nombor biasa, library itu akan menenagakan gegelung yang menarik rotor ke arah bertentangan, dan motor cuma berdengung di tempat.
Kedua, pin PWM motor DC ialah D3, bukan D9 atau D10, kerana memasang servo menyerahkan Timer1 β timer di sebalik dua pin itu β kepada library Servo. Ketiga, cabut jumper cap daripada header ENA pada L298N sebelum anda mengharapkan analogWrite() bermakna apa-apa: cap itu mengikat ENA kekal pada 5 V board itu sendiri, jadi motor berjalan penuh pada mana-mana duty cycle β kawalan kelajuan yang gagal secara senyap, tanpa sebarang ralat untuk dibaca.
Perhatikan pula apa yang baris stepper itu tidak mampu beritahu anda. stepper.step(512) bermaksud “suis gegelung 512 kali”, bukan “sampai ke suku pusingan” β dan gearbox 28BYJ-48 lebih hampir kepada 63.7:1 berbanding 64:1 yang bulat, jadi satu pusingan output ialah kira-kira 2038 step, bukan 2048; arahkan nombor bulat itu dan anda mendarat lebih kurang dua darjah melepasi tempat yang anda maksudkan, walaupun tiada apa-apa yang tergelincir. Stepper itu dikira, bukan diukur; tambah endstop dan buat homing semula di tempat yang itu penting. Ambil perhatian juga bahawa stepper.step() menyekat sehingga step terakhir dikeluarkan, jadi tiada apa-apa lagi di dalam loop yang berjalan sementara itu β satu Uno mengarahkan ketiga-tiga keluarga dengan bergilir-gilir, bukan serentak.
// Tiga keluarga, tiga gaya arahan - Arduino UNO.
//
// Servo : anda hantar SUDUT MUTLAK. Servo cari sudut itu dan menahannya.
// Stepper : anda hantar KIRAAN STEP. Tiada apa-apa melapor sama ada ia sampai.
// DC : anda hantar KELAJUAN dan ARAH. Kedudukan bukan sebahagian bahasanya.
//
// KUASA: jalankan ketiga-tiga motor daripada bekalan 5V luaran, BUKAN daripada pin 5V Uno,
// dan cantumkan ground bekalan itu ke GND Uno supaya isyarat kawalan berkongsi rujukan.
#include <Servo.h>
#include <Stepper.h>
// --- Stepper: 28BYJ-48 atas board ULN2003 -----------------------------------
// 32 step penuh setiap pusingan dalaman x gearbox. Gearbox sebenarnya
// 63.68:1, bukan 64:1 yang bulat, jadi satu pusingan output lebih kurang 2038
// step - angka lazim 2048 yang dikekalkan di sini terlebih kira-kira dua darjah.
const int STEPS_PER_REV = 2048;
// Perhatikan susunannya: library Stepper mahukan IN1, IN3, IN2, IN4.
// Wayarkan IN1..IN4 ke D4..D7 dan senaraikannya 4, 6, 5, 7 atau motor hanya berdengung.
Stepper stepper(STEPS_PER_REV, 4, 6, 5, 7);
// --- Servo ------------------------------------------------------------------
const int PIN_SERVO = 9; // attach() serahkan Timer1 kepada Servo, jadi analogWrite()
Servo arm; // pada pin 9 dan 10 berhenti berfungsi seluruh sketch.
// --- Motor DC melalui L298N -------------------------------------------------
const int PIN_DC_EN = 3; // ENA - PWM, atas Timer2, tidak disentuh oleh Servo.h.
// Cabut jumper cap ENA L298N atau pin ini tak buat apa-apa.
const int PIN_DC_A = 2; // IN1
const int PIN_DC_B = 8; // IN2
void setup() {
Serial.begin(9600);
stepper.setSpeed(10); // pusingan seminit pada shaft output
arm.attach(PIN_SERVO);
arm.write(90); // park di tengah-tengah julat sudut
pinMode(PIN_DC_EN, OUTPUT);
pinMode(PIN_DC_A, OUTPUT);
pinMode(PIN_DC_B, OUTPUT);
Serial.println(F("Servo = angle, stepper = steps, DC = speed"));
}
void loop() {
// 1. SERVO - kedudukan mutlak di dalam julat sudut yang tetap.
Serial.println(F("servo -> 0 deg"));
arm.write(0);
delay(700);
Serial.println(F("servo -> 180 deg"));
arm.write(180);
delay(700);
arm.write(90);
delay(700);
// 2. STEPPER - step yang dikira, tiada had jumlah putaran, tiada maklum balas.
Serial.println(F("stepper -> +512 steps (a quarter turn, if nothing slipped)"));
stepper.step(512);
delay(400);
Serial.println(F("stepper -> -512 steps back"));
stepper.step(-512);
delay(400);
// 3. MOTOR DC - pin arah pilih arah mana, PWM pilih berapa kuat.
Serial.println(F("dc -> forward, about 60% duty"));
digitalWrite(PIN_DC_A, HIGH);
digitalWrite(PIN_DC_B, LOW);
analogWrite(PIN_DC_EN, 160); // 160/255 daripada bekalan, bukan "60% kelajuan"
delay(1500);
Serial.println(F("dc -> coast"));
analogWrite(PIN_DC_EN, 0);
delay(1200);
}
Melihat 28BYJ-48 benar-benar melangkah, dan mendengar bunyi susunan pin yang salah, menjimatkan banyak tekaan:
Lima wayar 28BYJ-48 berakhir dengan plug berkunci yang terus masuk ke board ULN2003nya, jadi pasangan itu tak perlukan apa-apa lagi. Servo pula berakhir dengan soket female dan mengambil wayar male-to-male; ULN2003 dan L298N menampilkan pin male dan mahukan male-to-female. N20 ialah yang perlu dirancang awal: ia sampai dalam keadaan kosong, dua tab solder tembaga tanpa sebarang wayar, jadi peruntukkan beberapa minit dengan soldering iron β panduan soldering iron dan flux kami merangkumi tekniknya. Pemacu dual DRV8833 lebih sesuai untuk motor 3β6 V berbanding L298N, kerana peringkat output bipolar L298N menjatuhkan 1.8 V hingga 3.2 V pada 1 A sebelum motor nampak apa-apa β pada rel 5 V, satu pertiga hingga dua pertiga voltan hilang jadi haba sebelum shaft sempat bergerak. Strip header DRV8833 sendiri pula dihantar terpisah, jadi ia memakan masa soldering yang sama seperti N20.

Gegelung motor stepper patut diwayar secara siri atau selari?
Pendawaian gegelung siri-lawan-selari pada motor stepper memang satu pilihan yang nyata, tetapi hanya pada motor yang mengeluarkan kedua-dua separuh setiap belitan fasa secara berasingan β motor bipolar lapan wayar, biasanya berbingkai NEMA. Wayarkan dua separuh itu secara siri dan rintangan fasa itu berganda sementara induktansnya naik kira-kira empat kali ganda, kerana induktans mengikut kuasa dua bilangan lilitan: pemacu membekalkan separuh arus untuk tarikan magnet yang sama, tetapi arus terbina jauh lebih perlahan daripada voltan pemacu yang sama, jadi tork luput lebih awal apabila kadar step meningkat. Wayarkan secara selari dan induktans jatuh ke kira-kira satu perempat angka siri sementara pemacu terpaksa menolak kira-kira dua kali ganda arus β tork yang sama ketika diam, lengkung tork yang jauh lebih rata pada kelajuan tinggi. Jadi: siri untuk tarikan kelajuan rendah daripada pemacu yang sederhana, selari untuk kelajuan.
28BYJ-48 berada di luar pilihan itu. Ia motor unipolar lima wayar β satu wayar merah common yang diikat ke bekalan, empat hujung gegelung yang disuis ke ground oleh ULN2003 β tanpa separuh belitan kedua untuk diwayar semula ke mana-mana bentuk. Kalau projek anda benar-benar perlukan keputusan siri-atau-selari itu, ia perlukan motor stepper bipolar lapan wayar dan pemacu current-chopping; kalau tidak, guna sahaja board ULN2003 yang datang bersama 28BYJ-48 β panduan 28BYJ-48 langkah demi langkah kami membawa pendawaian itu daripada plug sehingga pusingan pertama.
Kesilapan biasa yang kami lihat daripada pelanggan sebenar
Membeli servo 180Β° untuk memutarkan roda. Servo berkedudukan ada penahan mekanikal dan potentiometer yang ada penghujungnya; ia tak boleh berpusing berterusan walau apa pun pulse yang anda hantar. Roda mahukan motor gear DC atau servo putaran berterusan yang memang dibina untuk itu.
Menyuap motor daripada pin 5 V Uno. Inilah punca paling kerap board yang reset separuh jalan, atau servo yang menggigil: arus permulaan dan arus stall meruntuhkan rel 5 V itu ke bawah ambang brownout mikropengawal.
Mengharapkan stepper tahu di mana ia berada. Selepas satu sangkutan, atau kadar step yang motor tak mampu ikut, kiraan di dalam sketch dan kedudukan shaft yang sebenar sudah tak lagi sepadan, dan tiada apa-apa yang menandakannya. Reka suis home dari awal, atau terima sahaja hanyutan itu.
Memesan motor kosong tanpa cara nak menyambungnya. N20 sampai dengan dua tab solder dan langsung tiada wayar β peruntukkan masa soldering itu, atau pilih motor yang datang siap berwayar.
FAQ
Motor stepper vs servo untuk Arduino β mana satu patut saya guna?
Guna servo untuk “pergi ke sudut ini dan tahan di situ” dalam lingkungan 180Β°, dan stepper untuk “pusing sebanyak kiraan ini” atau apa-apa yang melepasi satu pusingan. Servo membetulkan dirinya sendiri kerana ia mengukur shaftnya sendiri; stepper tidak mengukur apa-apa, jadi ia boleh berpusing selama-lamanya tetapi kehilangan step tanpa bunyi.
Berapa banyak motor stepper yang satu Arduino boleh kawal?
Empat board ULN2003 muat pada pin Uno β empat pin setiap satu daripada 18 yang boleh diguna β tetapi hanya satu yang berjalan selesa atas kuasa USB. Setiap 28BYJ-48 menarik lebih kurang 200 mA berterusan, jadi empat memerlukan bekalan 5 V luaran kira-kira satu ampere, dengan groundnya dicantum ke ground Uno.
Gegelung motor stepper patut disambung siri atau selari?
Siri memberi lebih tork pada kelajuan rendah dengan arus pemacu yang lebih sedikit; selari perlukan kira-kira dua kali ganda arus tetapi mengekalkan tork lebih baik pada kadar step yang tinggi. Pilihan itu hanya wujud pada stepper bipolar lapan wayar. 28BYJ-48 ialah unipolar lima wayar dan tak boleh diwayar dalam mana-mana bentuk itu.
Motor stepper digunakan untuk apa?
Apa-apa yang mesti sampai ke kedudukan yang boleh diulang sambil berpusing lebih jauh daripada julat sudut sebuah servo: mekanisme printer dan scanner, paksi printer 3D, camera slider, paparan berputar, injap, dispenser dan penunjuk dail. Holding torque ketika berhenti selalunya itulah sebab sebenar ia dipilih.
Apa kelebihan motor stepper berbanding motor DC?
Kedudukan tanpa sebarang sensor, kerana setiap pulse ialah satu kenaikan yang diketahui; holding torque yang tulen ketika berhenti, yang motor DC langsung tiada; dan putaran kelajuan rendah yang halus tanpa perlukan gearbox. Kosnya ialah pemacu empat wayar, arus yang berterusan walaupun ketika diam, dan tiada sebarang amaran bila ia tergelincir.
Kemas kini terakhir Ogos 2026. Tersangkut? Chat dengan kami di WhatsApp.



28BYJ-48 Stepper Motor + ULN2003 Motor Driver 5V DC Motor For Arduino Robotic
SG90 MG90 Tower Pro Micro Servo Motor 9g 180 360 Servo Motor for Arduino Robotic - SG90- 180Β°
SG90 MG90 Tower Pro Micro Servo Motor 9g 180 360 Servo Motor for Arduino Robotic - MG996R- 180Β°
GA12-N20 DC Geared Motor 3V 5V 6V 9V 12V Gear Motor For Arduino Smart Car Application
Arduino Uno Compatible SMD UNO R3 with Type B Cable - ATMEGA328P with CH340G-Microcontroller Project
L298N Motor Driver Module Arduino Compatible Dual H Bridge Dual DC Motor Control Arduino Robotic Car
40pcs Dupont Wire 10cm 20cm 30cm for Breadboard DIY Experiment Jumper Wire Breadboard wire - DUPONT WIRE M-M 20CM
40pcs Dupont Wire 10cm 20cm 30cm for Breadboard DIY Experiment Jumper Wire Breadboard wire - DUPONT WIRE M-F 20CM
Data Cable Type-A Type-C MicroUSB Type-B 0.5m 1m 30cm 0.3m 100cm Data Transfer Upload Code - TYPE-A TO TYPE-B (1.0M)