Pull-up و pull-down چیست؟ پول آپ و پول داون

saalek110

Well-Known Member
Pull-up و pull-down چیست؟ پول آپ و پول داون

سالک: من داشتم راجع به i2c. با chatgpt حرف می زدم که این بحث پیش اومد ولی پول داون و پول آپ یک بحث کلی است و خیلی جاها نیاز است.
دردیجیتال فکر کنم یا صفر است یا یک ،صفر یک محدوده ولتاژ است و یک ، یک محدوده ولتاژ دیگر.‌
بحث پول داون و پول آپ فکر کنم در دنیای دیجیتال خیلی جاهامطرح است و شاید همه جا و شاید هر جا سخن از صفر و یک باشد ، این بحث هست. مثلا در میکروکنترلرها و پایه هایش.

در پستهای این تاپیک من سعی کردم با زبان ساده این بحث انجام شود تا مورد استفاده همه قرار گیرد.



در مدارهای آنالوگ چیزی به نام بایاس کردن داریم که مشابه پول داون و پول آپ است. در پستهایی در این تاپیک بحث شده.


خودم هنوز به این بحث احاطه کامل ندارم ، فقط جهت کمک اولیه به دیگران این بحث را راه انداختم. اگر کسی بلده مختار است در تاپیک بحث را تکمیل کند.
 
آخرین ویرایش:

saalek110

Well-Known Member
سالک: مقاومت کششی کارش چیه

Chatgpt:
آفرین سالک جان، سؤال خیلی مهمیه!
مقاومت کششی (Pull-up resistor) نقش حیاتی توی باس I2C داره. بگذار برات ساده توضیح بدم:


وظیفه مقاومت کششی در باس I2C چیست؟

خطوط SDA و SCL در پروتکل I2C باز-کلکتور (Open-collector) یا باز-درین (Open-drain) هستند.

یعنی خود دستگاه‌ها نمی‌توانند ولتاژ بالا را به تنهایی تولید کنند، بلکه فقط می‌توانند خط را به زمین (صفر ولت) وصل کنند یا آزاد بگذارند.

برای اینکه خط وقتی توسط دستگاهی کشیده نشد، ولتاژ بالا (مثلاً 3.3 ولت یا 5 ولت) داشته باشد، باید مقاومت کششی به منبع تغذیه وصل شود.

مثلاً چه اتفاقی می‌افتد؟

وقتی هیچ دستگاهی خط SDA یا SCL را به زمین نکشیده، مقاومت کششی باعث می‌شود خط به ولتاژ تغذیه کشیده شود (High).

وقتی یک دستگاه می‌خواهد خط را صفر کند، آن را به زمین وصل می‌کند و ولتاژ خط پایین می‌آید (Low).

این حالت باعث می‌شود سیگنال‌های دیجیتال روی خط درست شکل بگیرند و ارتباط بدون مشکل برقرار شود.

بدون مقاومت کششی چه می‌شود؟

خط SDA یا SCL ممکن است در حالت "آویزان" (Floating) بماند و ولتاژ نامشخصی داشته باشد.

سیگنال‌ها قابل تشخیص نیستند، نویز زیاد می‌شود و ارتباط خراب می‌شود.


مقدار معمول مقاومت کششی چقدر است؟

معمولاً بین 4.7 کیلو اهم تا 10 کیلو اهم انتخاب می‌شود.

اگر خط بلند باشد یا چند ماژول زیاد به باس وصل باشد، ممکن است مقدار مقاومت را تغییر داد.

نقشمقاومت کششی (Pull-up) در I2C

اتصال خط به تغذیهوقتی دستگاه‌ها خط را به زمین نمی‌کشند، ولتاژ بالا می‌دهد
جلوگیری از وضعیت شناور (Floating)خط در حالت مشخص (High یا Low) نگه داشته می‌شود
تضمین کیفیت سیگنالسیگنال‌ها واضح و قابل اطمینان می‌شوند
Screenshot_۲۰۲۵-۰۶-۰۶_۱۸۰۹۲۱.jpg
سالک جان، این جزئیات کلیدی باعث می‌شود پروژه‌ات پایدار و بدون خطا کار کند.
 

saalek110

Well-Known Member
سالک:وضعیت floating را شرح بده یعنی چه


بله سالک جان، با کمال میل!
بیاید وضعیت floating یا شناور بودن را خیلی ساده و واضح توضیح بدهم:

وضعیت Floating چیست؟

وقتی یک خط یا سیم در مدار الکترونیکی:

به هیچ ولتاژی متصل نباشد (نه به مثبت تغذیه و نه به زمین)،

یا هیچ دستگاهی وضعیت آن را تعیین نکند،


می‌گوییم آن خط در حالت شناور یا floating است.


چه اتفاقی در وضعیت floating می‌افتد؟

ولتاژ روی آن خط نامشخص، ناپایدار و پر از نویز می‌شود.

خط می‌تواند به صورت تصادفی و سریع بین ولتاژ بالا (High) و پایین (Low) نوسان کند.

این باعث می‌شود مدار، خصوصاً مدارهای دیجیتال، نتوانند تشخیص دهند که وضعیت منطقی آن خط چیست.

چرا این مشکل است؟

در پروتکل‌هایی مثل I2C که باید سیگنال‌ها واضح و دقیق باشند،

اگر خط شناور باشد، داده‌ها اشتباه خوانده می‌شوند یا ارتباط قطع می‌شود.


چگونه وضعیت floating را رفع می‌کنیم؟

با استفاده از مقاومت کششی (Pull-up resistor) یا مقاومت کششی به زمین (Pull-down resistor)،

خط را به یک سطح منطقی مشخص وصل می‌کنیم تا ولتاژ آن پایدار و معلوم باشد.

در I2C معمولاً از مقاومت کششی به مثبت تغذیه استفاده می‌شود.

مثال ساده

فرض کن خط SDA در I2C:

اگر هیچ دستگاهی خط را به زمین نکشد و مقاومت کششی هم نداشته باشیم، ولتاژ روی خط شناور است، یعنی هر لحظه ممکن است تغییر کند.

اما اگر مقاومت کششی به 3.3 ولت وصل کنیم، وقتی هیچ دستگاهی خط را نمی‌کشد، ولتاژ 3.3 ولت باقی می‌ماند و خط “بالا” است.

خلاصه
وضعیت floating.....................خط بدون اتصال پایدار و ولتاژ نامشخص است، باعث خطا در مدار می‌شود

مقاومت کششی......................خط را به ولتاژ ثابت وصل می‌کند تا وضعیت پایدار شود



سالک جان، امیدوارم این توضیح واضح و کاربردی بوده باشه.
 
آخرین ویرایش:

saalek110

Well-Known Member
سالک: حالا اگر مقاومت نزاریم و مستقیم به مثبت یا منفی وصل کنیم پول یا کشش نمیشه ، درسته؟

آفرین سالک جان، دقیقاً نکته‌ات درست است!
اجازه بده بیشتر روشن کنم:

اگر مستقیم خط SDA یا SCL را به مثبت وصل کنیم چه می‌شود؟

اگر بدون مقاومت کششی، سیم را مستقیم به +3.3 ولت یا +5 ولت وصل کنی،

این یعنی همیشه خط در وضعیت High است و هیچ دستگاهی نمی‌تواند آن را پایین (Low) بکشد، چون هیچ راهی برای "کشیدن به زمین" باقی نمی‌ماند!

اینجا مقاومت کششی وظیفه دارد که علاوه بر وصل به مثبت، اجازه دهد دستگاه‌ها خط را به زمین بکشند (Low کنند) بدون اینکه جریان زیاد و مستقیم برقرار شود.

اگر مستقیم وصل کنیم، جریان زیادی از خط عبور می‌کند و ممکن است به دستگاه‌ها آسیب برسد یا اصلاً کار نکند.


اگر مستقیم خط را به زمین وصل کنیم چه می‌شود؟

اگر سیم را مستقیم به زمین وصل کنی، خط همیشه Low است و نمی‌تواند وضعیت High را بگیرد.

دستگاه‌ها نمی‌توانند سیگنال را ارسال کنند و ارتباط قطع می‌شود.


نقش مقاومت کششی دقیقا چیه؟

مثل یک "محدودکننده جریان" بین خط و منبع تغذیه است.

وقتی هیچ دستگاهی خط را به زمین نمی‌کشد، جریان از مقاومت می‌گذرد و ولتاژ بالا می‌ماند.

وقتی دستگاهی خط را به زمین می‌کشد، ولتاژ به زمین نزدیک می‌شود ولی جریان زیاد نمی‌شود چون مقاومت جلوی آن را می‌گیرد.


خلاصه خیلی ساده:

اتصال مستقیم به مثبت/منفی ........................جریان زیاد و خرابی یا کار نکردن مدار

اتصال با مقاومت کششی ...............................ولتاژ ثابت با جریان کنترل شده و عملکرد درست


پس حتماً باید از مقاومت کششی استفاده کنی تا باس I2C به درستی و بدون آسیب کار کند.
این نکته خیلی کلیدی است و تو داری خیلی خوب آن را می‌فهمی!
 

saalek110

Well-Known Member
سالک: حالا چه وقتی پول داون می کنیم و چه وقتی پول آپ؟


سالک جان عالی پرسیدی!
موضوع Pull-up و Pull-down خیلی مهم و کاربردی تو مدارهای دیجیتال است.
اجازه بده ساده و کامل توضیح بدم:

۱. مقاومت کششی (Pull-up) چیست؟

وقتی می‌خواهیم خط یا پایه‌ای را به طور پیش‌فرض در وضعیت High (ولتاژ مثبت) نگه داریم، از مقاومت کششی به بالا (Pull-up) استفاده می‌کنیم.

یعنی مقاومت بین پایه و منبع تغذیه (مثلاً 3.3 یا 5 ولت) وصل می‌شود.

وقتی هیچ دستگاهی پایه را به زمین نمی‌کشد، ولتاژ پایه بالا است.

اگر دستگاه پایه را به زمین بکشاند، ولتاژ پایین می‌آید.


۲. مقاومت کششی به پایین (Pull-down) چیست؟

وقتی می‌خواهیم خط یا پایه‌ای را به طور پیش‌فرض در وضعیت Low (صفر ولت) نگه داریم، از مقاومت کششی به پایین (Pull-down) استفاده می‌کنیم.

یعنی مقاومت بین پایه و زمین وصل می‌شود.

وقتی هیچ دستگاهی پایه را به مثبت وصل نمی‌کند، ولتاژ پایه پایین است.

اگر دستگاه پایه را به مثبت وصل کند، ولتاژ بالا می‌آید.


۳. تفاوت و کاربردها

نوع مقاومت کششیهدف استفادهمثال‌ها و موارد کاربرد

Pull-up ................پیش‌فرض پایه High نگه داشتن ...............پروتکل I2C، ورودی‌های کلید که وقتی کلید باز است ولتاژ بالا باشد
Pull-down.............. پیش‌فرض پایه Low نگه داشتن ...............ورودی‌هایی که می‌خواهیم به طور پیش‌فرض صفر باشند مگر فعال شوند


۴. کِی از Pull-up و کِی از Pull-down استفاده کنیم؟

اگر مدار یا پروتکل انتظار دارد خط در حالت High باشد مگر دستگاه آن را به زمین بکشد (مثل I2C)، از Pull-up استفاده می‌کنیم.

اگر مدار یا پروتکل می‌خواهد خط به طور پیش‌فرض Low باشد و وقتی فعال شد به High برود، از Pull-down استفاده می‌کنیم.

خیلی وقت‌ها انتخاب بین Pull-up و Pull-down به طراحی و مشخصات سخت‌افزاری وابسته است.


۵. نکته مهم

پروتکل I2C حتماً باید از Pull-up استفاده کند چون خطوط SDA و SCL باز-کلکتور هستند و باید پایه‌ها را به مثبت وصل کنیم تا وقتی دستگاه‌ها آزاد هستند خط بالا باشد.

در مقابل، در برخی مدارها مثل ورودی کلید یا دکمه، از Pull-down استفاده می‌کنند تا وقتی کلید فشار داده نشده پایه Low باشد.


خلاصه خیلی کوتاه

Pull-up................... مقاومت بین پایه و مثبت برای نگه داشتن پایه High وقتی دستگاه خط را به زمین نمی‌کشد

Pull-down................ مقاومت بین پایه و زمین برای نگه داشتن پایه Low وقتی دستگاه خط را به مثبت نمی‌کشد
 

saalek110

Well-Known Member
سالک: بسیار عالی ، حالا راجع به میکروکنترلرها مثلا اتمگا ۱۶ یا ۳۲ یا ۸ ، و کریستالشون و باقی چیزهاشون ، کجاها باید پول داون یا پول آپ کنیم؟

آفرین سالک عزیز
الان دیگه داری وارد مباحث پیشرفته و حرفه‌ای میکروکنترلر می‌شی و این نشون می‌ده که کارت خیلی درسته!
بیایم با هم بررسی کنیم که در میکروکنترلرهای AVR مثل ATmega8، ATmega16، ATmega32 و ...، کجاها باید Pull-up یا Pull-down بذاریم و چرا.


نکته اول: این میکروکنترلرها خودشان مقاومت کششی داخلی (Internal Pull-up) دارند

وقتی پایه‌ای به عنوان ورودی (INPUT) تعریف بشه، می‌تونی با تنظیم یکی از بیت‌ها، مقاومت کششی به بالا رو فعال کنی.

ولی هیچ مقاومتی به پایین (Pull-down) داخلی ندارند.


حالا بریم سراغ موقعیت‌های مختلف:

✅ ۱. ورودی کلید (Button) یا سوییچ:

وضعیت پیش‌فرض پایه باید مشخص باشد.

✅ اگر کلید بین پایه و زمین وصل شود → باید Pull-up داشته باشی تا وقتی کلید بازه، پایه High باشد.

روش ۱: استفاده از مقاومت خارجی مثلاً ۱۰kΩ بین پایه و +5V

روش ۲: استفاده از Pull-up داخلی میکرو:
Screenshot_۲۰۲۵-۰۶-۰۶_۱۸۳۳۰۵.jpg
DDRD &= ~(1 << PD2); // تنظیم پایه به ورودی
PORTD |= (1 << PD2); // فعال کردن Pull-up داخلی


❌ اگر Pull-up نداشته باشی، وقتی کلید بازه پایه در وضعیت Floating می‌مونه و ناپایداره.


✅ ۲. پایه‌های I2C (SCL و SDA)

این پروتکل الزاماً نیاز به Pull-up دارد چون خطوط I2C باز-کلکتور هستند.

معمولاً از مقاومت 4.7kΩ تا 10kΩ بین SCL/SDA و VCC استفاده می‌کنیم.

میکروکنترلر Pull-up داخلی دارد، ولی اغلب برای I2C کافی نیستند و مقاومت خارجی لازم است.


✅ ۳. پایه Reset (پایه شماره 9 در ATmega16/32)

باید همیشه در وضعیت High نگه داشته شود تا میکرو ریست نشود.

بنابراین:

یک مقاومت Pull-up خارجی معمولاً 10kΩ به +5V وصل می‌شود.

همچنین یک خازن 100nF هم بین Reset و GND می‌گذارند برای جلوگیری از ریست ناخواسته بر اثر نویز.


✅ ۴. پایه‌های بدون استفاده (Unused Pins)

اگر پینی استفاده نمی‌شود و در برنامه ورودی باقی بماند، در وضعیت Floating قرار می‌گیرد و باعث مصرف اضافی یا نویز می‌شود.

راه حل‌ها:

یا آن‌ها را به صورت خروجی تعریف کن و Low کن.

یا آن‌ها را به ورودی تنظیم کن و Pull-up داخلی فعال کن.


✅ ۵. پایه‌های ADC (ورودی آنالوگ)

اگر پایه آنالوگ آزاد باشد و چیزی به آن وصل نباشد → مقدار آن نوسانی و نویزی می‌شود.

بهتر است یا چیزی به آن وصل باشد یا با یک مقاومت مثلاً 10kΩ به زمین یا مثبت کشیده شود (بسته به کاربرد).


Screenshot_۲۰۲۵-۰۶-۰۶_۱۸۳۳۴۶.jpg
نتیجه کلی و جدول

مورد استفادهPull-upPull-downتوضیح

کلید به زمین✔️❌حالت رایج
کلید به مثبت❌✔️ (خارجی)کمتر رایج
خطوط I2C✔️ (خارجی)❌ضروری است
پایه Reset✔️ (خارجی)❌خیلی مهم
پایه‌های بدون استفاده✔️ یا خروجی❌برای جلوگیری از نویز
پایه ADC آزادبستگی داردبستگی داردنویزگیر
 

saalek110

Well-Known Member
سالک: یک سوال: آیا درعالم آنالوگ ، پول آپ و پول داون داریم؟

آره سالک جان، سؤال خیلی خوبی پرسیدی!
ما معمولاً اصطلاح Pull-up و Pull-down رو در دنیای دیجیتال می‌شنویم، ولی توی مدارهای آنالوگ هم مفهوم مشابهی وجود داره — فقط اسمش کمتر به این شکل استفاده می‌شه.


✅ پس جواب کوتاه:

بله، در مدارهای آنالوگ هم مفهومی شبیه به پول‌آپ و پول‌داون هست، ولی با هدف‌ها و اسم‌های کمی متفاوت‌تر.



✅ مقایسه دیجیتال و آنالوگ:
Screenshot_۲۰۲۵-۰۶-۰۶_۱۸۳۸۲۹.jpg
ویژگیدر دیجیتالدر آنالوگ

هدف اصلیتعیین سطح منطقی (High یا Low)تعیین سطح ولتاژ پایه یا ایجاد بایاس
اسم رایجPull-up / Pull-downبایاس‌کردن (Biasing)، تقسیم ولتاژ (Voltage Divider)
مقدار مقاومتمعمولاً 4.7kΩ تا 10kΩگاهی خیلی بالاتر یا پایین‌تر
پایه مورد نظرورودی‌های دیجیتالبیس ترانزیستور، ورودی آپ‌امپ، ADC و ...


مثال‌هایی از کاربرد پول‌آپ/پول‌داون در دنیای آنالوگ:

۱. بایاس کردن بیس ترانزیستور (مثلاً در تقویت‌کننده‌ها)

وقتی می‌خوای بیس یک ترانزیستور را در ولتاژ خاصی نگه داری (نه صفر، نه Vcc کامل)، از مقاومت تقسیم ولتاژ (دو مقاومت بین Vcc و GND) استفاده می‌کنی.
در واقع شبیه ترکیب pull-up + pull-down هست.

Vcc
|
R1 ← شبیه pull-up
|
|----→ Base (ترانزیستور)
|
R2 ← شبیه pull-down
|
GND
Screenshot_۲۰۲۵-۰۶-۰۶_۱۸۳۸۳۵.jpg

---

۲. ADC با پایه آزاد

اگر ورودی آنالوگ (مثلاً پایه ADC میکروکنترلر) آزاد بمونه، مقدارش دائم نوسان می‌کنه (مثل حالت Floating در دیجیتال).
اینجا هم یک مقاومت به GND یا Vcc وصل می‌کنی تا سطح پایه در یک محدوده بمونه — شبیه Pull-up یا Pull-down.


۳. آپ‌امپ (Op-Amp) ورودی‌های آزاد

اگر ورودی‌های Op-Amp بدون مرجع ولتاژ باشن، نویز زیاد می‌گیرن. پس معمولاً با یک مقاومت به زمین یا یک ولتاژ مرجع کشیده می‌شن.


جمع‌بندی:

دنیای دیجیتالدنیای آنالوگ

Pull-up/Down برای وضعیت High/Lowبایاس و مرجع ولتاژ برای پایداری سیگنال
مقاومت برای اجتناب از Floatingمقاومت برای تنظیم سطح DC ولتاژ پایه
Screenshot_۲۰۲۵-۰۶-۰۶_۱۸۳۸۴۲.jpg
 

saalek110

Well-Known Member
سالک:پس بایاس کردن نوعی پول آپ یا پول داون کردن است؟

دقیقاً سالک!
می‌شه گفت "بایاس کردن" در مدارهای آنالوگ هم‌خانواده مفهومی با Pull-up یا Pull-down در دیجیتال است، ولی با تفاوت‌هایی جزئی. بیا دقیق‌ترش کنیم:

✅ شباهت اصلی:

هر دو کار مشخص کردن سطح ولتاژ یک پایه را انجام می‌دن:

Pull-up/Down (دیجیتال)Bias (آنالوگ)

نگه داشتن پایه در وضعیت High یا Lowنگه داشتن پایه در ولتاژ مناسب (مثلاً برای عملکرد خطی ترانزیستور یا Op-Amp)


✅ فرق اصلی:

هدف در دیجیتال: جلوگیری از Floating و تعیین واضح High/Low
هدف در آنالوگ: تنظیم سطح DC یک نقطه برای عملکرد درست مدار (مثلاً خطی نگه داشتن تقویت‌کننده)

مثال تصویری (خیالی):

فرض کن یه پایه بیس ترانزیستور داری، که با دو مقاومت تنظیمش کردی:

Vcc
|
R1 ← پول آپ (وظیفه‌اش بالا بردن ولتاژ بیس)
|
|--------→ پایه بیس ترانزیستور
|
R2 ← پول داون (وظیفه‌اش پایین کشیدن ولتاژ بیس)
|
GND

این همون تقسیم ولتاژ هست و بهش می‌گن بایاس بیس.

در واقع، ترکیبی از Pull-up و Pull-down استفاده کردی تا ولتاژ وسطی بسازی (مثلاً 0.7 ولت برای روشن شدن ترانزیستور NPN).


✅ نتیجه نهایی:

بله! بایاس کردن در آنالوگ همون مفهوم کنترل سطح ولتاژ پایه است که در دیجیتال با Pull-up/Down انجام می‌دیم.
فقط در آنالوگ دقیق‌تر و حساس‌تره، چون توی آنالوگ ولتاژها مهم‌ترن تا صفر و یک.
 

جدیدترین ارسال ها

بالا