خروجی دیجیتال میکروکنترلرهای stm32 و یا سایر میکروکنترلر ها میتونه در حالت Push-Pull یا Open-drain تنظیم بشه. در مقاله با این دو نوع خروجی دیجیتال آشنا میشید و کاربرد هر کدوم رو هم بررسی میکنیم.
فهرست
– درایور خروجی دیجیتال میکروکنترلر های STM32
– Push-pull و Open-drain برای روشن کردن led
– کاربرد Push-pull و Open-drain
درایور خروجی دیجیتال میکروکنترلرهای STM32
در تصویر زیر ساختاری رو میبینید که پشت پین های میکروکنترلر وجود داره. پین خروجی دیجیتال میکروکنترلر میتونه در حالت Push-pull یا Open-drain تنظیم بشه، در ادامه این دو حالت رو بررسی میکنیم.
خروجی Open-drain
در حالت کاری Open-drain ( مشابه Open collector ) برای درایو کردن خروجی فقط از یک NMOS استفاده میشه که Drain این ماسفت که همون پین خروجی میکروکنترلر هست به جایی وصل نیست. با استفاده از NMOS فقط میشه پین خروجی رو به زمین وصل کرد و میکروکنترلر فقط میتونه جریان رو sink کنه. این حالت کاری مشابه یک سوئیچ ساده است که فقط میتونه پین میکروکنترلر رو به زمین متصل کنه.
خروجی Push-pull
برای درایو کردن خروجی Push-pull از یک NMOS و یک PMOS استفاده میشه، مثل یک سوئیچ SPDT عمل میکنه و میتونه پین میکروکنترلر رو هم به زمین و هم به VDD متصل کنه.
در حالت Pull phase ماسفت NMOS فعاله ، پین خروجی میکروکنترلر به زمین متصله و جریان رو Sink میکنه. Pull یعنی کشیدن ، در حالت Pull phase جریان به سمت پین میکرو کشیده میشه و جهت جریان به سمت پین میکروکنترلر هست.
در حالت Push phase ماسفت PMOS فعاله، پین خروجی میکروکنترلر به VDD متصله و پین میکرو جریان رو Source میکنه. Push یعنی هول دادن، در حالت Push phase جریان از پین میکرو به بیرون هول داده میشه و جهت جریان به سمت خارج میکروکنترلر هست.
مثال استفاده از Push-pull و Open-drain برای روشن کردن led
فرض کنید قصد داریم یک led رو روشن کنیم. برای روشن کردن led باید در دو طرف این مصرف کننده اختلاف پتانسیل ایجاد کنیم، تا جریان الکتریکی از مصرف کننده عبور کنه و led روشن بشه. البته جهت جریان هم مهم هست و در led ها جهت جریان باید از آند به سمت کاتد باشه. پس ولتاژ بالا یا VCC رو با یک مقاومت به آند متصل میکنیم تا جریان رو کنترل کنیم و کاتد رو به زمین متصل میکنیم.
در ادامه میخواهیم این led رو با یکی از پین های میکروکنترلر روشن و خاموش کنیم. دو انتخاب داریم ، میتونیم پایه ی میکروکنترلر رو جای GND یا VCC بذاریم.
اگر پین میکروکنترلر رو جایگزین VCC کنیم ، وقتی قراره led روشن بشه ، پین میکروکنترلر باید VCC باشه و وقتی led باید خاموش بشه ، پین میکروکنترلر باید زمین بشه. چون open-drain نمیتونه پین میکروکنترلر رو به VCC وصل کنه در این حالت حتما باید از Push-pull استفاده کنیم.
در حالت Push phase پین میکروکنترلر به VCC وصل میشه ، میکروکنترلر جریان رو سورس میکنه ، جهت جریان به سمت خارج میکروکنترلر هست و led روشن میشه.
در حالت Pull phase پین میکروکنترلر به زمین وصل میشه و با توجه به اینکه دو طرف مصرف کننده به زمین متصل هست ، در دو طرف مصرف کننده اختلاف پتانسیلی وجود نداره و در نبود اختلاف پتانسیل جریان الکتریکی هم وجود نداره و led هم خاموشه.
اگر پین میکروکنترلر رو جایگزین GND کنیم ، خروجی Push-pull و Open-drain هر دو قابل استفاده هستند. ابتدا Push-pull رو بررسی میکنیم. در حالت Pull phase پین میکروکنترلر زمین میشه ، یک طرف led به vcc و طرف دیگه با استفاده از پین میکروکنترلر به زمین متصل میشه. در نتیجه جریان در مصرف کننده جاری میشه و led روشن میشه. در این حالت جهت جریان به سمت داخل میکرو هست و میکروکنترلر جریان رو سینک میکنه.
در حالت Push phase پین میکرو به VCC متصل میشه، در نتیجه اختلاف پتانسیل در دو طرف مصرف کننده وجود نداره و led خاموشه.
اگر پین میکروکنترلر رو با GND جایگزین کنیم از Open-drain هم میشه استفاده کرد. در حالت Open-drain پین میکرو فقط میتونه به زمین متصل بشه. وقتی پین میکرو زمین بشه در دو سر مصرف کننده اختلاف پتانسیل ایجاد میشه و جریان عبوری از led باعث روشن شدن led میشه. وقتی NMOS غیر فعاله میخواهیم که led خاموش باشه. برای خاموش بودن led نباید اختلاف پتانسیلی دو سر led وجود داشته باشه برای این منظور پین میکرو باید VCC باشه ولی قرار نیست جریانی رو تامین کنه. با توجه به اینکه در حالت Open-drain پین میکرو نمیتونه VCC بشه و با غیر فعال بودن NMOS پین میکرو به هیچ جایی وصل نیست ، با استفاده از یک مقاومت پین میکرو رو Pull-up میکنیم .
کاربرد Push-pull و Open-drain
از خروجی push-pull زمانی استفاده میکنیم که لازم باشه پین میکروکنترلر به VCC وصل بشه و جریان مورد نیاز برای فعال شدن مصرف کننده رو تامین کنه.
خروجی Open-drain زمانی استفاده میشه که لازم نباشه و یا نباید پین میکروکنترلر به VCC وصل بشه. مثلا برای ارتباط با سنسور دما و رطوبت AM2302 یا سنسور دمای DS18B20 یک پین نیاز هست که این پین Pull up میشه و میکروکنترلر و سنسور هر دو فقط میتونن این پین رو زمین کنند و پین نباید مستقیما به VCC متصل بشه.
در مورد باس های SCL و SDA ارتباط I2C هم ، این باس ها Pull up میشن و تمام دیوایس های روی باس فقط میتونند این باس ها رو زمین کنند و باس نباید مستقیما به VCC متصل بشه ، در این مورد هم از Open drain استفاده میشه.