دليل · العتاد · المستويات
3.3V ↔ 5V: كيف لا تحرق ESP32
نصف الحسّاسات والوحدات في عالم Arduino يعمل على 5 فولت. أما ESP32 وESP8266 ومعظم الرقائق الحديثة فتعمل على 3.3 فولت. أوصِل خرج 5 فولت مباشرة إلى طرف 3.3 فولت، وقد تتلفه في الحال. نشرح لماذا لا يتوافقان، ومتى يمكنك الاستغناء عن المواءم، وثلاث طرق نظيفة للربط بينهما.
هذا هو سؤال «كيف يُقرأ المستوى؟» من أساسيات النواقل وقد صار عمليًا إلى أقصى حد — وهو الطريقة الأكثر شيوعًا التي يقتل بها المبتدئون طرف ESP32.
لماذا لا يعمل 3.3 فولت و5 فولت معًا ببساطة
مشكلتان منفصلتان، واحدة في كل اتجاه:
- 5 فولت → دخل 3.3 فولت (الخطيرة). طرف ESP32 مصمّم لتحمّل نحو 3.6 فولت كحد أقصى. ادفع فيه 5 فولت فتتجاوز ثنائيات الحماية عند الدخل — أحيانًا ينجو، وغالبًا يتدهور أو يموت. هذا ما يحرق الأطراف.
- 3.3 فولت → دخل 5 فولت (الصامتة). قد يقع «المرتفع» عند 3.3 فولت تحت ما تعدّه رقاقة 5 فولت مستوى منطقيًا مرتفعًا (غالبًا نحو 3.5 فولت)، فلا يقرأ جهاز 5 فولت شيئًا أو يتصرف بشكل عشوائي. لا يحترق شيء، لكنه لا يعمل.
أولًا — هل تحتاج أصلًا إلى مواءم؟
تحقّق قبل إضافة القطع:
- كثير من وحدات 5 فولت سعيدة تمامًا بأن تُقرأ بمنطق 3.3 فولت وأن تُقاد منه — راجع ورقة البيانات بحثًا عن «3.3 V compatible I/O».
- على I²C، إن غذّيت مقاومات الرفع من 3.3 فولت وتحمّلها الحسّاس، فغالبًا يعمل الناقل ببساطة — خطوط open-drain لا تُرفع أبدًا إلا إلى 3.3 فولت.
- الاتجاه 5 فولت → 3.3 فولت وحده هو الخطير فعلًا. إشارة 3.3 فولت على دخل 5 فولت لا تضرّ أبدًا، بل أحيانًا لا تكفي فحسب.
الطريقة 1 — مقسّم مقاومات (اتجاه واحد)
لخرج 5 فولت واحد يدخل إلى دخل 3.3 فولت — أي TX الحسّاس إلى RX الخاص بـ ESP32 — تكفيك مقاومتان:
5V TX ──[ R1 = 1kΩ ]──┬──> 3V3 RX (آمن)
│
[ R2 = 2kΩ ]
│
GND
Vout = 5V × R2 / (R1 + R2) = 5 × 2 / 3 ≈ 3.3 V
// اتجاه واحد فقط (5V -> 3V3). لا تستخدمه على خط I²C SDA.
رخيص وموثوق، لكنه باتجاه واحد فقط وبطيء بعض الشيء (المقاومة إضافةً إلى سعة السلك تُدوّر الحواف السريعة). لا تضعه أبدًا على خط ثنائي الاتجاه مثل I²C SDA.
الطريقة 2 — ترانزستور BSS138 من نوع MOSFET (ثنائي الاتجاه، الخيار المعتاد)
لوحة «logic level converter» الكلاسيكية ذات القنوات الأربع هي حفنة من ترانزستورات BSS138 من نوع MOSFET. تُبدّل كل قناة الاتجاهين معًا تلقائيًا، وهو ما يحتاجه I²C بالضبط (فكلا خطي SDA وSCL ثنائيا الاتجاه). صِل الجانب المرتفع بـ 5 فولت، والجانب المنخفض بـ 3.3 فولت، وشارك الأرضي، ومرّر إشاراتك عبرها. تكلّف بضعة دولارات وتحلّ 90% من الحالات.
الطريقة 3 — دوائر مواءمة مخصّصة (خطوط كثيرة/سريعة)
لناقل متوازٍ بعرض 8 بت أو لـ SPI سريع، استخدم دائرة متكاملة مصمّمة لهذا الغرض: TXS0108E
(اتجاه تلقائي، ودودة مع open-drain) أو TXB0104 (push-pull، أسرع، ليست لـ I²C). تتعامل مع
سرعات أعلى وقنوات أكثر بنظافة أكبر من مقسّم أو ترانزستور MOSFET مفرد.
مطبّات
- المقسّم أحادي الاتجاه. استخدامه على I²C SDA يكسر الناقل — لا يستطيع الحسّاس سحب الخط في الاتجاه الآخر. استخدم BSS138 هناك.
- مرجعا الجهد كلاهما. تحتاج وحدة مواءمة المستويات إلى توصيل كلا تغذيتي HV (5 فولت) وLV (3.3 فولت)، إضافةً إلى أرضي مشترك — إن فاتك أحدهما لم تفعل شيئًا.
- push-pull مقابل open-drain. لا تعمل قطع فئة TXB على نواقل open-drain مثل I²C؛ استخدم فئة TXS أو BSS138 هناك.
- الأرضي المشترك إلزامي — يجب أن يتشارك الجانبان GND وإلا فلن تعني المستويات شيئًا.
قاعدة عامة: إشارة 5 فولت واحدة إلى الداخل ← مقسّم. ناقل ثنائي الاتجاه (I²C) ← لوحة BSS138. خطوط كثيرة أو سريعة ← دائرة مواءمة صحيحة. اضبطها مرة واحدة صحيحةً وتعش أطراف ESP32 لديك عمرًا طويلًا.
تصارع ناقل I²C صامتًا؟ عدم توافق المستويات أحد المشتبه بهم المعتادين.