میکرو لایب

آموزش راه اندازی ترمیستور NTC

با ترمیستورها و نحوه راه اندازی آنها برای اندازه گیری دما آشنا شوید

پیش نیاز

آیا تا به حال به این موضوع فکر کرده اید که چگونه برخی از دستگاه ها مانند ترموستات ، هیت بد پرینتر سه بعدی ، موتور خودرو یا فرها دما را اندازه گیری می کنند؟ با این آموزش ، می توانید متوجه شوید!

دانستن درجه حرارت یک قطعه در یک پروژه می تواند بسیار مفید باشد. آگاهی از دما می تواند دمای اتاق را برای یک محیط کاملا راحت تنظیم کند ، اطمینان حاصل کند که هیت بد پرینتر سه بعدی به اندازه کافی داغ است تا موادی مانند ABS به سطح آن بچسبد ، از گرم شدن بیش از حد موتور جلوگیری کرده و از سوختن غذا در فر جلوگیری کند.

در این مقاله ، ما فقط به یک نوع سنسور که می تواند دما را اندازه گیری کند ، توجه داریم. این سنسور ترمیستور نامیده می شود.

ترمیستور مقاومتی را نشان می دهد که نسبت به سایر انواع مقاومت ها نسبت به دما بسیار حساس تر است.

در زیر تصویری از ترمیستور مورد استفاده از نوع ntc مهره ای در این مقاله نشان داده شده است:

تئوری

در کاربرد های عادی یک مقوامت معمولی ، شما نمی خواهید مقاومت با تغییر دما تغییر کند. این در عمل واقعاً امکان پذیر نیست اما می توان با تغییر زیاد دما فقط یک تغییر کوچک در مقاومت را تضمین کرد. اگر اینطور نبود ، مقاومت ها اتفاقات عجیبی را در مدارها ایجاد می کردند ، مانند LED که با تغییر دمای محیط بسیار روشن تر و کم نورتر می شود.

اما ، اگر واقعاً می خواهید روشنایی LED تابعی از دما باشد؟ این همان جایی است که ترمیستور وارد می شود. همانطور که احتمالاً حدس زده اید ، یک ترمیستور با تغییر جزئی دما ، تغییر زیادی در مقاومت دارد. برای نشان دادن این مفهوم ، نمودرا منحنی مشخصه معمولی ترمیستور را بررسی کنید:

منحنی مشخصه ترمیستور

در نمودار بالا تنها واحدهای اندازه گیری نشان داده می شوند و مقادیر در نمودار حذف شده اند زیرا یک ترمیستور بسته به نوع خرید شما می تواند در محدوده های مختلف تنظیم شود. همانطور که می بینید ، هرچه دما بالا می رود ، مقاومت کمتر است. این یک ویژگی مقاومت ضریب دما منفی (به اختصار NTC) است.

همچنین ترمیستورهایی وجود دارند که دارای ضریب دمای مثبت (به طور خلاصه PTC) هستند ، بدین معنا که با افزایش دما ، مقاومت افزایش می یابد. با این حال ، ترمیستورهای PTC دارای نوعی نقطه عطف هستند و مقاومت را در برخی از دماها بسیار تغییر می دهند. این امر باعث می شود تا راه اندازی ترمیستور PTC کمی سخت تر شود. به همین دلیل ، برای اکثر اندازه گیری دما که هزینه زیادی نمی طلبد ، ترمیستورهای NTC ترجیح داده می شوند.

از این به بعد در طول مقاله ، با دیدن عبارت ترمیستور در ذهن داشته باشید که به ترمیستور های ntc اشاره می شود.

چهار روش مناسب برای راه اندازی ترمیستور کدامند؟

اکنون که ما  با رفتار کلی ترمیستورها آشنا شده ایم، ممکن است تعجب کنید که چگونه می توانیم از میکروکنترلر برای اندازه گیری دما استفاده کنیم در حالی که نمودار ترمیستور خطی نمی باشد. منحنی در نمودار بالا غیر خطی است و بنابراین ، یک معادله خطی ساده به نظر نمی رسد. (در حقیقت ، ما می توانیم یک معادله بنویسیم ، اما بعداً در این مورد بیشتر توضیح داده می شود.)

پس چه باید کرد؟

قبل از خواندن ، به این فکر کنید که چگونه می توانید این کار را در میکروکنترلر یا حتی در مدار بدون ریزپردازنده انجام دهید.

چند راه برای حل این مشکل وجود دارد که در زیر ذکر شده است. این به هیچ وجه لیستی از همه تکنیک های موجود نیست ، اما برخی از روش های رایج را به شما نشان می دهد.

روش یک:

برخی از تولیدکنندگان به اندازه کافی خوبند که یک نمودار کامل از اطلاعات آن را در اختیار شما قرار می دهند این اطلاعات دارای طیف وسیعی از دیتای دما و مقاومت است (مقادیر معمولی). اطلاعات مربوط به ترمیستورها را می توانید در وب سایت شرکت Vishay بیابید.

اما بعدا می نشینید و فکر می کنید که چگونه می توانید این کار را با میکروکنترلر انجام دهید. شما باید همه این مقادیر را به صورت دیتا در یک آرایه ذخیره کنید

اما اگر تولید کننده اطلاعات کامل از قطعه ساخته شده را ارائه ندهد ،برای ایجاد نمودار پیوسته ی هر نقطه از دما ، باید خودتان برای اندازه گیری و ثبت داده ها اقدام کنید. مطمئنا این برای یک برنامه نویس اصلا خوشایند نیست. اما این روش اگر مجبور باشید زیاد بد نیست و جای خود را دارد. اگر پروژه مورد نظر فقط چند نقطه یا حتی چند محدوده جزئی دما را بررسی می کند ، ممکن است این راه ترجیحی باشد. به عنوان مثال ، یکی از این شرایط این است که فقط می خواهید اندازه گیری کنید که مقادیر در محدوده دمایی انتخاب شده قرار دارند یا خیر و در نهایت یک LED را برای روشن کردن این وضعیت تنظیم می کنید.

اما برای پروژه خود ، ما می خواهیم یک محدوده تقریباً پیوسته را اندازه گیری کرده و آن را بر روی ال سی دی ۱۶x2 نمایش دهیم ، بنابراین از این روش استفاده نخواهد شد.

روش دوم:

شما می توانید  نمودار پاسخ ترمیستور را با افزودن قطعات خارجی به آن “خطی” کنید.

یک روش رایج برای انجام این کار اتصال یک مقاومت به موازات ترمیستور است. برخی از IC ها هم هستند که اینکار را برای شما انجام می دهند.

تعیین چگونگی انتخاب و خطی سازی یک نمودار غیر خطی با انتخاب مقدار مناسب مقاومت خارجی ، به تنهایی یک مقاله است. اگر ریزپدازنده (مانند PICAXE) از متغیر اعشاری پشتیبانی نکند ، به نظر می رسد این روش بسیار عالی است ، زیرا تغییرات دما به صورت خطی پاسخ داده می شود و اندازه گیری آن توسط ریزپردازنده بسیار ساده می باشد همچنین طراحی مدار بدون ریزپردازنده برای اندازه گیری دما را آسان تر می کند.

اما ما در این مقاله یک ریزپردازنده کامل داریم و می خواهیم که رنج کاملی از دما را داشته باشیم بنابراین از این روش استفاده نمی کنیم.

روش سوم:

شما می توانید اطلاعات یا داده های نمودار قطعه را از دیتاشیت یا (اگر از وقت کافی برخوردار باشید) می توانید داده ها را برای نقاط اندازه گیری کرده و تهیه کنید سپس نمودار را در نرم افزار هایی مانند Excel با داده هایی که برای نقاط بدست آورده اید ایجاد کنید. و پس از آن ، می توانید از ویژگی curve fitting برای ایجاد یک فرمول برای منحنی مشخصه استفاده کنید. این ایده بدی نیست و در نهایت  می تواند فورمول خروجی را ارائه دهد – اما این کار به زمان و پردازش اولیه اطالاعات نیاز دارد.

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

روش چهارم:

به نظر می رسد یک فرمول یا معادله مناسب برای منحنی مشخصه المانهایی مانند ترمیستورها وجود دارد. این معادله ، معادله اشتاین هارت نامیده می شود. یک نمونه از آن در زیر نشان داده شده است (نمونه های دیگر معادله از عبارت مربع و همچنین عبارت مکعبی استفاده می کنند):

که R مقاومت ترمیستور در دمای T (در کلوین) است.

این یک معادله متناسب با منحنی مشخصه کلی است تا همه مقاومتهای نوع NTC را در خود جای دهد. تقریب یا تخمین رابطه دما و مقاومت برای بیشتر کاربردها “به اندازه کافی خوب” است.

توجه داشته باشید که این معادله به ثابت های A ، B و C نیاز دارد. که این برای هر ترمیستور متفاوت است و باید توسط دیتاشیت داده شود یا توسط خودتان محاسبه شود. از آنجا که سه مجهول وجود دارد ، شما نیاز به سه اندازه گیری مقاومت در دمای مشخص دارید که می تواند برای ایجاد سه معادله برای حل این ثابت ها مورد استفاده قرار گیرد.

حتی برای ما که نابغه های جبری هستیم ، این معدله اشتاین هارت هنوز کلی کار دارد.

در عوض ، یک معادله ساده تر وجود دارد که دقت کمتری نسبت به معادله اشتاین هارت دارد و فقط یک ثابت دارد. ثابت با β نشان داده می شود و بنابراین معادله را معادله β می نامند.

که Ro مقومت قرائت شده در دمای مرجع مانند دمای اتاق است. β معمولاً در برگه اطلاعات یا دیتاشیت قطعه داده می شود – و در غیر این صورت ، به یک اندازه گیری برای محاسبه آن (معادله) نیاز دارید. این معادله ای است که من برای خواندن دمای ترمیستور خود از آن استفاده خواهم کرد زیرا کد نویسی آن بسیار ساده است و ساده ترین معادله ای است که بدون نیاز به خطی سازی ، ترمیستور پاسخ قابل قبولی را میدهد.

اندازه گیری مقاومت با میکروکنترلر:

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

این مدار ترمیستور ما خواهد بود. هنگامی که ترمیستور تغییر دما را حس می کند ، ولتاژ خروجی Vout نیز تغییر خواهد یافت.

معمولاً از تقسیم ولتاژ با معادله زیر استفاده می کنیم:

اما ما Vout را به عنوان پاسخ نمی خواهیم – ما Rthermistor را می خواهیم. بنابراین از معادله بالا به معادله زیر می رسیم:

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

این معادله از نظر ریاضی درست است زیرا مهم نیست که چگونه ولتاژ را نشان می دهیم (به صورت آنالوگ یا دیجیتال) ، این مقادیر اندازه گیری شده ولتاژ در صورتی که مجهول نباشند باعث از بین رفتن کسر می شوند و در واقع  عددی بدون کسر باقی می گذارد. سپس یک واحد از آن کاسته شده  ، و نهایتا در مقاومت بالانس ضرب می شود تا پاسخی به واحد اهم را دریافت کنیم.

Dmax برای ما ۱۰۲۳ خواهد بود زیرا این بالاترین عددی است که توسط ADC ده بیتی ما ایجاد می شود. مقدار adc ده بیتی اندازه گیری شده می تواند بین ۰ تا ۱۰۲۳ متغیر باشد

یادآوری:
بیشترین عدد اندازه گیری شده توسط adc از رابطه ۲n-1 بدست میاد  اگر ADC شما ده بیتی باشد با جاگذاری تعداد بیت در رابطه بیشترین مقدار اندازه گیری شده توسط ADC    بدست خواهد آمد در اینجا با جاگذاری مقدار بیت ۱-۲۱۰  به عدد ۱۰۲۳ می رسیم.

پیش به سوی ساخت!

توضیحات شماتیک:

من از ترمیستور TH10K استفاده کردم.

همچنین از یک مقاومت ۱۰k اهم برای Rbalance در تقسیم ولتاژ استفاده کردم. مقدار β در دیتاشیت ذکر نشده بود ، بنابراین من خودم باید آن را محاسبه کنم.(می توانید مقدار β را از اینجا بدست آورید)

در زیر یک شماتیک کامل از مدار نشان داده شده است.

:Basic Code (Bascom-AVR)

توضیحات ضروری کد

تعریف ثابت ها برای آماده سازی و استفاده در فورمول:

خط ۳:

تعریف ثابت SAMPLE_NUMBER  برای تعداد نمونه برداری از adc

خط ۴:

تعریف ثابت BALANCE_RESISTOR  برای ذخیره کردن مقدار مقاومت بالانس که در این مثال ۱۰ کیلو انتخاب شده و حتما باید به واحد اهم وارد شود

خط ۵:

تعریف ثابت MAX_ADC که بیشترین مقدار adc را ذخیره می کند

خط ۶:

تعریف ثابت BETA که این ثابت یا در دیتاشیت معمولا داده می شود یا خودتان از این  لینک آن را بدست می آورید.

خط ۷:

تعریف ثابت ROOM_TEMP که دمای ۲۵ درجه سانتی گراد به واحد کلوین در این ثابت برای استفاده در فورمول ذخیره می شود

خط ۸:

در این ثابت مقدار مقاومت ترمیستور را به واحد اهم وارد می کنید اگر ntc خریده شده ده کیلو باشد مقدار ۱۰۰۰۰ و اگر ntc  پنج کیلو باشد مقدار ۵۰۰۰ را در این ثابت ذخیره می کنید

خط ۹:

این ثابت شماره کانال adc را در خود ذخیره می کند که در اینجا ما به پورت A.0 و کانال ADC0 وصل کرده ایم

تعریف متغیرها

خط ۱۳:

دمای نهایی خوانده شده از فورمول در این متغیر ذخیره می شود

خط ۱۴:

بعد از خواندن کانال adc باید مقدار adc تبدیل به مقدار مقاومت ترمیستور شود که بعد از تبدیل در این متغیر ذخیره میشود که نهایتا از این متغیر در فورمول استفاده خواهد شد

خط ۱۵:

خروجی فورمول به واحد کلوین می باشد پس مقدار نهایی فورمول به واحد کلوین در این متغیر ذخیره خواهد شد

خط ۱۶:

بعد از تبدیل واحد کلوین به سیلسیوس مقدار به واحد سلسیوس یا درجه سانتگراد در این متغیر ذخیره می شود

خط ۱۷:

میانگین نمونه برداری از کانال adc در این متغیر  ذخیره می شود نمونه برداری چند باره و گرفتن میانگین میزان دقت کانال adc را افزایش می دهد و عدد میانگین از اعتبار بلالایی برخوردار است

خط ۱۸:

نمونه های گرفته شده از کانال adc در این آرایه ذخیره می شود

خط ۱۹:

متغیر معمولی و از نوع ۸ بیتی یا بایت برای ایجاد حلقه for و گرفتن نمونه برداری ها

خط ۲۸:

تعیین و کانفیگ پایه های ال سی دی

خط ۲۹:

تعیین تعداد سطر و ستون ال سی دی

خط ۳۰:

خاموش کردن مکان نمای ال سی دی

خط ۳۱:

تنظیم کانال adc و استفاده از پایه AREF به عنوان ولتاژ مرجع

خط ۳۲:

تنظیم حداکثر تعداد رقم اعشار

خط ۳۷:

تعریف نام تابع readThermistor با مقدار برگشتی از نوع اعشار و شناساندن تابع قبل از استفاده برای کامپایلر

خط ۴۵:

صدا زدن تابع و اجرای آن و ذخیره مقدار برگشتی از تابع در متغیر currentTemperature

توضیحات مربوط به تابع

خطوط ۷۳ تا ۷۶:

ایجاد حلقه for برای نمونه برداری از کانال adc

حلقه به تعداد ۱ تا SAMPLE_NUMBER بار اجرا می گردد

در داخل حلقه هر بار نمونه برداری انجام شده و در ارایه adcSamples ذخیره می شود

مقدار تاخیر فاصله نمونه برداری در این حلقه ده میلی ثانیه در نظر گرفته شده است

خطوط ۷۸ تا ۸۰:

میانگین نمونه برداری محاسبه شده و در متغیر adcAverage ذخیره می شود

خطوط ۸۱ تا ۹۰:

ثابت ها و متغیر های مورد نیاز را در فورمول جایگذاری می کنیم و فورمول را حل می کنیم

خط ۹۱:
تبدیل واحد کلوین به سلسیوس و ذخیره در متغیر tCelsius
خط ۹۲:

و در نهایت برگشت دادن مقدار متغیر tCelsius

سپس این مقدار در ال سی دی نمایش داده شده است

:C++ CODE(CodeVision-AVR)

نیازی به توضیح کد ها نیست کد دقیقا ترجمه شده کد بیسیک بوده و در صورت لزوم توضیحات مربوط به کد بیسیک را بخوانید

و در نهایت عملکرد پروژه در گیف زیر قابل مشاهده است

در گیف زیر هر چه بتا دقیقتر تنظیم شود و در عمل هم از ترمیستور های یک درصد استفاده شود دقت عالی خواهد بود(می توانید مقدار β را از اینجا بدست آورید)

 

دانلود سورس کد و پروتیوس Bascom-avr
  • ورژن مورد نیاز پروتیوس برای اجرا: 8.10 به بالا
  • ورژن بسکام 2.0.8.2 به بالا
  • رمز فایل:www.mculibrary.ir
دانلود سورس کد و پروتیوس CodeVision-avr
  • ورژن مورد نیاز پروتیوس برای اجرا: 8.10 به بالا
  • ورژن کامپایلر کدویژن 3.12 به بالا
  • رمز فایل:www.mculibrary.ir

دیدگاه‌ها (6)

*
*

    مهدی مهمان دسامبر 4, 2022 پاسخ

    سلام واقعا از کارتون لذت بردم. نه بخاطر انجام این پروژه. چون پروژه به نسبت ساده ایه، بلکه بخاطر توضیحات شفاف و دقیقی که در مورد بخش به بخش این پروژه و قطعه NTC دادید. به هر حال بسیار سپاسگذارم.

      mast3r مدیر کل دسامبر 5, 2022 پاسخ

      سلام و تشکر از لطفی که دارید
      از اینکه مطلب برای شما مفید واقع شده خوشحالیم
      موفق و موید باشید.

    سعید مهمان فوریه 24, 2023 پاسخ

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

      mast3r مدیر کل فوریه 25, 2023 پاسخ

      سلام و تشکر از لطفی که دارید
      از اینکه مطلب برای شما مفید واقع شده خوشحالیم
      موفق و موید باشید دوست عزیز.

    Farshid مهمان مارس 5, 2023 پاسخ

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

      mast3r مدیر کل مارس 5, 2023 پاسخ

      سلام و درود از یران برای شما دوست عزیز
      خوشحالیم که مطلب مفید واقع شده
      موفق و موید باشید...

question