🌉 مدار پل H (H-Bridge): چپ‌گرد و راست‌گرد کردن موتور

ماشین رباتیکی که فقط جلو برود، به اولین دیوار گیر می‌کند. برای عقب رفتن و دور زدن، موتور DC باید چپ‌گرد و راست‌گرد بچرخد؛ یعنی جهت چرخشش با فرمان عوض شود. جابه‌جا کردن دستی دو سیم موتور جواب می‌دهد، ولی ربات که دست ندارد! مداری که این کار را با چهار کلید انجام می‌دهد مدار پل H (H Bridge Circuit) نام دارد و خیلی‌ها به آن مدار چپگرد راستگرد هم می‌گویند. در این راهنما ایده‌ی چهار کلید و خطر اتصال کوتاهش (Shoot-Through) را می‌بینی، نسخه‌ی دستی با کلید DPDT را می‌بندی، پایه‌های آی‌سی L293D را یکی‌یکی می‌شناسی و با آردوینو موتور را جلو، عقب، ترمز و با سرعت دلخواه می‌چرخانی.

چرا جهت جریان، جهت چرخش را تعیین می‌کند؟

داخل موتور DC، جریانی که از سیم‌پیچ می‌گذرد آن را آهنربا می‌کند و آهنرباهای ثابت هلش می‌دهند. جهت این هل به جهت جریان بستگی دارد؛ پس تغییر جهت موتور DC یعنی برعکس کردن جریان: جریان را برعکس کن، موتور برعکس می‌چرخد. در شبیه‌ساز دو نمونه‌ی موتور ساده (A plain motor) و موتور برعکس (Motor reversed) را کنار هم ببین: همان موتور و همان باتری، فقط دو سیم جابه‌جا. درس جهت چرخش موتور در دوره‌ی برق هم با همین آزمایش شروع می‌شود. این‌که کدام جهت را «راست‌گرد» (Clockwise) و کدام را «چپ‌گرد» (Counter-Clockwise) بنامی، به سیم‌کشی و طرفی که از آن به محور نگاه می‌کنی بستگی دارد؛ در ربات معمولاً می‌گوییم «جلو» و «عقب».

قطعه‌های مدار پل H

#قطعهEnglishکار در مدار
۱موتور DC یا موتور گیربکسDC / Gear Motorباری که جهتش را عوض می‌کنیم
۲پک ۴ تایی باتری قلمی4×AA Battery Pack (6V)تغذیه‌ی موتور
۳کلید راکر × ۴Rocker Switch (SPST)چهار کلید پل H دستی
۴کلید DPDTDPDT Reversing Switchپل H دستی با یک دسته
۵درایور موتور L293DL293D Dual H-Bridge ICدو پل H کامل در یک آی‌سی
۶آردوینو اونوArduino Unoفرمان جهت و سرعت
۷کلید کشویی × ۲Slide Switchفرمان دستی IN1 و IN2 در نسخه‌ی بدون کد
۸خازن ۱۰۰ نانوفارادCeramic Capacitorکم کردن نویز موتور
۹بردبورد نیمهHalf-size Breadboardجای آی‌سی و سیم‌ها

ایده‌ی چهار کلید

چهار کلید را دور موتور بچین: دو تا بالا (S1 و S3) به + باتری و دو تا پایین (S2 و S4) به −. موتور مثل خط افقی وسط حرف H بین دو ستون قرار می‌گیرد؛ اسم مدار هم از همین شکل آمده.

+V ----------+-----------+
             |           |
            S1          S3
             |           |
             A---(M)-----B
             |           |
            S2          S4
             |           |
GND ---------+-----------+
کلیدهای بستهمسیر جریان در موتورنتیجه
S1 و S4از A به Bجلو
S3 و S2از B به Aعقب
S2 و S4 (یا S1 و S3)دو سر موتور به هم وصل‌اندترمز (Brake)
هیچ‌کدام—رها (Coast)
S1 و S2، یا S3 و S4از + مستقیم به −⚠️ اتصال کوتاه (Shoot-Through)

دو حالت ترمز و رها با هم فرق دارند. در ترمز، دو سر موتور به هم وصل می‌شوند؛ موتوری که هنوز می‌چرخد مثل یک ژنراتور ولتاژ می‌سازد و این ولتاژ از مسیر کوتاه، جریانی می‌سازد که خودِ چرخش را کند می‌کند. در رها، مسیر باز است و موتور فقط با اصطکاک آرام می‌ایستد.

فرمول کلیدی: خطر Shoot-Through با عدد

اگر دو کلید یک ستون (مثلاً S1 و S2) هم‌زمان بسته شوند، مسیری از + باتری مستقیم به − ساخته می‌شود که هیچ باری در آن نیست. جریان فقط با مقاومت داخلی باتری و کلیدها محدود می‌شود:

I = V ÷ (Rداخلی + Rکلیدها)

برای یک پک ۴ قلمی ۶ ولتی با مقاومت داخلی حدود ۰.۷۵ اهم: ۶ ÷ ۰.۷۵ ≈ ۸ آمپر؛ بیش از ده برابر جریان یک موتور کوچک. ترانزیستورها در کسری از ثانیه می‌سوزند، سیم‌ها داغ می‌شوند و باتری لیتیومی ممکن است آتش بگیرد. در پل‌های ترانزیستوری یک خطر پنهان‌تر هم هست: ترانزیستور برای خاموش شدن کمی وقت لازم دارد؛ اگر هم‌زمان با خاموش کردن S1، کلید S2 را روشن کنی، لحظه‌ای هر دو روشن‌اند. برای همین درایورها یک «زمان مرده» (Dead Time) بین این دو می‌گذارند و آی‌سی‌های آماده‌ای مثل L293D با منطق داخلی‌شان اجازه نمی‌دهند دو کلید یک ستون با هم روشن شوند.

این خطر را بی‌خطر در شبیه‌ساز ببین: چهار کلید راکر را مثل شکل بالا دور یک موتور ببند و پک ۴ قلمی را وصل کن. با روشن کردن S1 و S4 موتور یک طرف می‌چرخد و با S3 و S2 طرف دیگر. حالا S1 و S2 را با هم روشن کن: شبیه‌ساز حدود ۸ آمپر جریان و هشدار اتصال کوتاه باتری نشان می‌دهد؛ دقیقاً همان عدد فرمول. (هشدار «بار زیاد باتری» در حالت عادی هم ممکن است بیاید؛ موتور حدود نیم آمپر می‌کشد که برای پک قلمی زیاد است.)

پل H دستی با کلید DPDT

ساده‌ترین پل H واقعی یک کلید DPDT است: دو کلید تبدیل کنار هم که با یک دسته جابه‌جا می‌شوند. اگر پایه‌های کناری را ضربدری به باتری ببندی، هر دو سر موتور با یک حرکت جابه‌جا می‌شوند. در شبیه‌ساز پایه‌های DPDT با برچسب L1، C1، R1 و L2، C2، R2 مشخص‌اند (C پایه‌ی مشترک هر قطب است):

#ازبه
۱+ باتریL1 و R2
۲− باتریR1 و L2
۳C1پایه‌ی + موتور
۴C2پایه‌ی − موتور

دسته روی L: C1 به + و C2 به − می‌رسد، موتور جلو. دسته روی R: C1 به − و C2 به + می‌رسد، موتور عقب. چون هر قطب در هر لحظه فقط به یکی از دو سر باتری وصل است، اتصال کوتاه پیش نمی‌آید، به شرطی که سیم‌های ضربدری را درست ببندی. این دقیقاً نمونه‌ی جهت با کلید (Direction by switch) است. یک کلید SPDT برای این کار کافی نیست، چون باید هر دو سیم موتور هم‌زمان عوض شوند. همین سیم‌کشی ضربدری را در مدار راه‌پله (Two-Way Switch) هم دیده‌ای، جایی که DPDT نقش کلید صلیبی را بازی می‌کند. نسخه‌ی برقیِ همین ایده یک رله‌ی DPDT است که آردوینو آن را فرمان می‌دهد (مدار راه‌انداز رله (Relay Driver)).

پل H ترانزیستوری: ایده‌ی پشت L293D

اگر چهار کلید را با ترانزیستور عوض کنی، پل H برقی و سریع داری. معمولاً دو کلید بالا PNP (یا ماسفت P) و دو کلید پایین NPN (یا ماسفت N) هستند، با چهار دیود هرزگرد که ضربه‌ی ولتاژ سیم‌پیچ را می‌گیرند (همان دیودی که در مدار کنترل دور موتور (Motor Speed Control) دیدیم). ساختن این پل با قطعه‌های جدا کار دقیقی است: باید منطق ضد Shoot-Through، زمان مرده و دیودها را خودت درست کنی. در شبیه‌ساز ترانزیستور PNP و ماسفت P نداریم، پس این نسخه را فقط در تئوری بررسی می‌کنیم و برای ساختن سراغ L293D می‌رویم که همه‌ی این‌ها را داخل خودش دارد.

آی‌سی L293D: دو پل H در یک تراشه

L293D یک آی‌سی ۱۶ پایه است با دو پل H کامل، یعنی می‌تواند دو موتور DC را جداگانه در دو جهت بچرخاند. حرف D یعنی دیودهای هرزگرد داخلش هستند. موتور تا ۳۶ ولت، جریان هر کانال تا ۶۰۰ میلی‌آمپر (لحظه‌ای ۱.۲ آمپر). شماره‌گذاری پایه‌ها از کنار فرورفتگی (Notch) بالای آی‌سی شروع می‌شود: پایه‌ی ۱ سمت چپ فرورفتگی است و شماره‌ها خلاف عقربه‌های ساعت دور آی‌سی می‌چرخند.

پایهاسمکارپایهاسمکار
۱EN1 (1,2EN)فعال‌ساز موتور ۱، با PWM سرعت۱۶VCC1۵ ولت منطق از آردوینو
۲IN1 (1A)جهت موتور ۱۱۵IN4 (4A)جهت موتور ۲
۳OUT1 (1Y)سیم اول موتور ۱۱۴OUT4 (4Y)سیم دوم موتور ۲
۴GNDزمین و دفع گرما۱۳GNDزمین و دفع گرما
۵GNDزمین و دفع گرما۱۲GNDزمین و دفع گرما
۶OUT2 (2Y)سیم دوم موتور ۱۱۱OUT3 (3Y)سیم اول موتور ۲
۷IN2 (2A)جهت موتور ۱۱۰IN3 (3A)جهت موتور ۲
۸VCC2ولتاژ موتور از باتری۹EN2 (3,4EN)فعال‌ساز موتور ۲
ENIN1IN2موتور
HIGH (یا PWM)HIGHLOWجلو
HIGH (یا PWM)LOWHIGHعقب
HIGHیکسان (هر دو LOW یا هر دو HIGH)یکسانترمز
LOWهر چیزیهر چیزیرها (Coast)

حساب ولتاژ و گرمای L293D

L293D کلید ایده‌آل نیست؛ ترانزیستورهای داخلی‌اش در مجموع چند ولت افت دارند (معمولاً حدود ۱.۵ تا ۲ ولت یا بیشتر با جریان بالا). پس ولتاژ میانگین موتور تقریباً این است:

Vموتور ≈ D × (Vباتری − Vافت)

مثال: باتری ۹ ولت، افت حدود ۱.۵ ولت و analogWrite(EN, 180): D = ۱۸۰ ÷ ۲۵۵ ≈ ۷۱٪ و V ≈ ۰.۷۱ × ۷.۵ ≈ ۵.۳ ولت. گرمای آی‌سی هم تقریباً افت ضرب در جریان است: با ۲ ولت افت و ۴۰۰ میلی‌آمپر، ۲ × ۰.۴ = ۰.۸ وات. برای همین چهار پایه‌ی GND وسط آی‌سی به مس برد لحیم می‌شوند تا گرما را پخش کنند. اگر جریان قفل موتورت از ۶۰۰ میلی‌آمپر بیشتر است، درایور قوی‌تری لازم داری.

کد L293D آردوینو: جلو، عقب، ترمز و سرعت

راه‌اندازی L293D با آردوینو فقط سه پین می‌خواهد. سیم‌کشی برای یک موتور (همان پین‌های نمونه‌ی آماده‌ی شبیه‌ساز):

پایه‌ی L293Dوصل به
۱ (EN1)پین ۹ آردوینو (PWM)
۲ (IN1)پین ۴ آردوینو
۷ (IN2)پین ۵ آردوینو
۳ (OUT1)پایه‌ی + موتور
۶ (OUT2)پایه‌ی − موتور
۱۶ (VCC1)5V آردوینو
۸ (VCC2)+ باتری موتور (۶ تا ۹ ولت)
۴، ۵، ۱۲، ۱۳ (GND)GND آردوینو و − باتری (زمین مشترک)
// مدار پل H با L293D — جلو، عقب، ترمز، رها و سرعت
const int EN = 9;    // L293D پایه‌ی 1 (EN1) — PWM
const int IN1 = 4;   // L293D پایه‌ی 2
const int IN2 = 5;   // L293D پایه‌ی 7

void forward(int speed) {
  digitalWrite(IN1, HIGH);
  digitalWrite(IN2, LOW);
  analogWrite(EN, speed);      // 0 تا 255
}

void backward(int speed) {
  digitalWrite(IN1, LOW);
  digitalWrite(IN2, HIGH);
  analogWrite(EN, speed);
}

void brake() {
  digitalWrite(IN1, LOW);      // هر دو سر موتور به GND
  digitalWrite(IN2, LOW);
  digitalWrite(EN, HIGH);      // کانال روشن، پس ترمز فعال است
}

void coast() {
  digitalWrite(EN, LOW);       // خروجی‌ها رها؛ موتور آزاد می‌چرخد تا بایستد
}

void rampForward(int target) {
  for (int s = 0; s <= target; s += 5) {   // شروع نرم
    forward(s);
    delay(20);
  }
}

void setup() {
  pinMode(EN, OUTPUT);
  pinMode(IN1, OUTPUT);
  pinMode(IN2, OUTPUT);
  Serial.begin(9600);
  coast();
}

void loop() {
  Serial.println("forward, soft start");
  rampForward(200);
  delay(2000);

  Serial.println("brake");
  brake();
  delay(500);                  // قبل از عوض کردن جهت، اول بایست

  Serial.println("backward, half speed");
  backward(128);
  delay(2000);

  Serial.println("coast");
  coast();
  delay(1500);
}

چند نکته:

ساختن در شبیه‌ساز تینکرکد فارسی

سه مسیر داری، از ساده به پیشرفته:

  1. پل H دستی (بدون کد، از حدود ۷ سالگی): نمونه‌ی جهت با کلید (Direction by switch) را باز کن و دسته‌ی DPDT را جابه‌جا کن. بعد خودت نسخه‌ی چهار کلید راکر را از روی شکل بالا بساز و حالت اتصال کوتاه را امتحان کن.
  2. L293D بدون کد: در مود ساده، L293D یک کانال ساده‌شده با پایه‌های V+، GND، EN، IN1، IN2، O1 و O2 دارد. پک ۴ قلمی را به V+ و GND بده، EN را به + وصل کن، موتور را بین O1 و O2 ببند و دو کلید کشویی بگذار که هر کدام پایه‌ی وسطشان (M) را به IN1 یا IN2 بدهد و دو پایه‌ی کناری‌شان به + و − باتری باشد. IN1 روی + و IN2 روی − یعنی جلو، برعکسش عقب و هر دو یکسان یعنی ایست. سیم EN را به − بزن و ببین موتور در هر حالتی می‌ایستد. این همان جدول درستی L293D است، بدون یک خط کد.
  3. با آردوینو (از حدود ۱۰ سالگی): نمونه‌ی پل اچ (H-bridge) همین سیم‌کشی (پین‌های ۴، ۵ و ۹) و یک کد جلو/عقب را آماده دارد؛ کد این مقاله را جایش بچسبان. درس موتور جلو و عقب هم قدم‌به‌قدم L293D را توضیح می‌دهد و بعدش درس ماشین رباتیک دو موتور را با هم می‌چرخاند.
پل H را در شبیه‌ساز بساز 🌉

انواع مدار پل H و درایور موتور (فارسی / انگلیسی)

#اسم فارسیEnglishجریان تقریبینکته
۱کلید معکوس‌کننده‌ی DPDTDPDT Reversing Switchبه اندازه‌ی کلیددستی، بدون PWM
۲پل H با رلهRelay H-Bridgeزیادکند، کنتاکت فرسوده می‌شود
۳پل H ترانزیستوریDiscrete BJT H-Bridgeبه ترانزیستورها بستگی داردآموزشی؛ مراقب Shoot-Through
۴پل H ماسفتیMOSFET H-Bridgeزیادبازده بالا، طراحی دقیق
۵نیم‌پلHalf-Bridge—نصف پل H؛ دو تایش یک پل کامل
۶درایور L293DL293D Dual H-Bridge۰.۶ آمپر در هر کانالدیود داخلی، مناسب بردبورد
۷درایور L298NL298N Dual H-Bridgeحدود ۲ آمپرافت ولتاژ و گرمای زیاد
۸درایور TB6612FNGTB6612FNG MOSFET Driverحدود ۱.۲ آمپرافت ولتاژ کم، مناسب ربات باتری‌خور
۹درایور DRV8833DRV8833 Dual H-Bridgeحدود ۱.۵ آمپرولتاژ کم، کوچک
۱۰درایور BTS7960BTS7960 High-Current Half-Bridgeده‌ها آمپربرای موتورهای بزرگ

یک نکته‌ی جالب: موتور پله‌ای دوقطبی مثل استپر NEMA 17 دو سیم‌پیچ دارد و برای هر کدام یک پل H لازم است؛ درایورهای استپر در واقع دو پل H هستند (NEMA 17 در شبیه‌ساز جزو Plus است). ولی استپر کوچک 28BYJ-48 تک‌قطبی است و با درایور ULN2003 کار می‌کند که پل H نیست.

اشتباه‌های رایج

نکته‌های ایمنی

کاربرد واقعی همه‌ی این‌ها را در ربات مسیریاب (Line Follower) و ربات مانع‌گریز (Obstacle Avoider) می‌بینی؛ هر دو با یک L293D و دو موتور ساخته می‌شوند. ماشین رباتیک با پل H یکی از بهترین موضوع‌های پروژه مدرسه با آردوینو هم هست.

سؤال‌های رایج

مدار پل H چیست؟

مداری با چهار کلید (رله، ترانزیستور یا ماسفت) که دور موتور مثل حرف H چیده شده‌اند. با بستن دو کلید قطری، جریان از یک طرف از موتور رد می‌شود و با دو کلید قطری دیگر از طرف مخالف؛ پس بدون جابه‌جا کردن سیم، جهت چرخش موتور DC عوض می‌شود.

چرا نباید دو کلید یک طرف پل H هم‌زمان بسته شوند؟

چون مثبت و منفی باتری از راه همان دو کلید مستقیم به هم وصل می‌شوند؛ به این حالت Shoot-Through می‌گویند. جریان خیلی زیادی جاری می‌شود، ترانزیستورها می‌سوزند و باتری داغ می‌شود. آی‌سی‌های آماده مثل L293D جلوی این حالت را می‌گیرند.

فرق ترمز و رها کردن موتور در L293D چیست؟

اگر پایه‌ی EN روشن باشد و IN1 و IN2 هر دو یکسان باشند، دو سر موتور به یک ولتاژ وصل می‌شوند و موتور سریع می‌ایستد؛ این ترمز است. اگر EN خاموش شود، خروجی‌ها رها می‌شوند و موتور با اینرسی خودش آرام می‌ایستد؛ این حالت رها یا Coast است.

L293D بهتر است یا L298N؟

L293D برای موتورهای کوچک تا حدود ۶۰۰ میلی‌آمپر در هر کانال مناسب است، روی بردبورد جا می‌شود و دیود محافظ داخلی دارد. L298N تا حدود ۲ آمپر در هر کانال می‌دهد ولی گرمای بیشتری دارد و افت ولتاژش زیاد است. برای ربات‌های باتری‌خور، درایورهای ماسفتی مثل TB6612FNG افت ولتاژ کمتری دارند.

آیا با رله هم می‌شود جهت موتور را عوض کرد؟

بله. یک رله‌ی DPDT یا دو رله‌ی SPDT با همان سیم‌کشی ضربدری کلید DPDT، یک پل H مکانیکی می‌سازند. این روش برای موتورهای پرجریان ساده است، ولی سرعت را با PWM نمی‌شود از راه رله کنترل کرد و کنتاکت‌ها هم با زمان فرسوده می‌شوند.

مقاله‌های دیگر

🌀

مدار کنترل دور موتور DC (Motor Speed Control): با پتانسیومتر، ترانزیستور و PWM

🤖

ربات مسیریاب — چطور خط سیاه را دنبال می‌کند

⚙️

فرق سروو با موتور DC چیست؟ کدام برای پروژه‌ی تو مناسب است؟