اندازه گیری دما با ترمیستور NTC: راهنمای کامل و عملی
اندازه گیری دما با ترمیستور NTC فرآیندی هست که در آن از یک مقاومت حساس به دما با ضریب دمایی منفی (NTC) برای سنجش دما استفاده می شود. چالش اصلی، تبدیل مقاومت غیر خطی این سنسور به یک عدد دقیق دما با استفاده از یک میکروکنترلر است. مهم ترین روش های محاسبه دما عبارتند از:
- استفاده از جدول جستجو (Look-up Table)
- تقریب با توابع چند جمله ای (Polynomial Approximation)
- محاسبه با معادله ضریب بتا (B Equation)
- محاسبه با معادله استاین هارت-هارت (Steinhart-Hart)
در ادامه، من تمام این روش ها رو با جزئیات کامل بررسی می کنم و به شما نشان می دهم که کدام یک از این روش ها از نظر دقت و سرعت اجرا برای پروژه شما بهترین گزینه است. 👇
ترمیستور NTC چیست و چرا از آن استفاده می کنیم؟
ترمیستور NTC یک نوع سنسور دمای بسیار رایج در دنیای الکترونیک هست. NTC مخفف “Negative Temperature Coefficient” یا “ضریب دمایی منفی” است. این یعنی چه؟ یعنی با افزایش دمای محیط، مقاومت الکتریکی این قطعه کاهش پیدا می کند و برعکس، با کاهش دما، مقاومتش بیشتر می شود.
این قطعات به دو دلیل اصلی فوق العاده محبوب هستند: اول اینکه قیمت مناسبی دارند و دوم اینکه به تغییرات دما خیلی سریع واکنش نشان می دهند. به همین دلیل شما آنها رو در همه جا، از لوازم خانگی گرفته تا تجهیزات صنعتی و حتی مبدل های DC/DC پیشرفته در صنعت خودرو پیدا می کنید. اما یک چالش بزرگ هم دارند، و آن هم رابطه غیر خطی بین مقاومت و دما هست که کار محاسبه دقیق دما رو کمی پیچیده می کند.
رابطه غیر خطی مقاومت و دما: چالش اصلی در ترمیستورهای NTC
همانطور که گفتم، بزرگترین چالش در کار با ترمیستورهای NTC، غیر خطی بودن رفتار آنهاست. این رابطه شبیه به یک تابع نمایی معکوس هست. یعنی در دماهای پایین، با یک تغییر دمای کوچک، مقاومت به شدت تغییر می کند، اما در دماهای بالا، همان تغییر دما، تأثیر کمتری روی مقاومت دارد.
این رفتار غیر خطی باعث می شود نتوانیم از یک فرمول ساده خطی برای تبدیل مقاومت به دما استفاده کنیم. برای حل این مشکل، مهندسان از مدل های ریاضی مختلفی استفاده می کنند که دو تا از معروف ترین آنها معادله ضریب بتا (B Equation) و معادله استاین هارت-هارت (Steinhart-Hart Equation) هستند. این معادلات سعی می کنند رفتار واقعی ترمیستور رو با دقت خوبی شبیه سازی کنند.

مدار راه انداز ترمیستور NTC: ساده ترین راه برای خواندن مقاومت
خب، چطور می توانیم این تغییر مقاومت رو اندازه بگیریم؟ میکروکنترلرها مستقیماً مقاومت را نمی خوانند؛ آنها ولتاژ را می خوانند. پس باید یک مدار ساده طراحی کنیم که تغییر مقاومت ترمیستور رو به تغییر ولتاژ تبدیل کند. ساده ترین و به صرفه ترین راه حل، استفاده از یک مدار تقسیم ولتاژ (Voltage Divider) است.
این مدار فقط از دو قطعه تشکیل شده: ترمیستور NTC (که مقاومتش با دما تغییر می کند) و یک مقاومت ثابت و دقیق (که ما آن را RS می نامیم). این دو مقاومت به صورت سری به یک ولتاژ مرجع (مثلاً 3.3 ولت یا 5 ولت) وصل می شوند. ولتاژ خروجی (UT) از نقطه میانی این دو مقاومت گرفته می شود و به ورودی آنالوگ به دیجیتال (ADC) میکروکنترلر داده می شود. فرمول محاسبه این ولتاژ این است:
UT = US+ * (RS / (RNTC + RS))
انتخاب مقدار مقاومت RS خیلی مهم هست. معمولاً بهترین کار این هست که مقدار RS برابر با مقاومت ترمیستور در دمای کاری اصلی شما باشد. مثلاً اگر ترمیستور شما در دمای 25 درجه سانتیگراد مقاومت 10 کیلو اهم دارد، انتخاب یک مقاومت RS با مقدار 10 کیلو اهم، بیشترین حساسیت و دقت را در حوالی همان دما به شما می دهد.

تبدیل ولتاژ به دما: 4 روش کلیدی با تمام جزئیات
حالا که ولتاژ متناسب با دما رو داریم، مرحله اصلی شروع می شود. ما باید در نرم افزار میکروکنترلر (MCU) یک الگوریتم پیاده سازی کنیم که این ولتاژ ورودی رو به یک عدد دقیق دما تبدیل کند. همانطور که در ابتدا اشاره کردم، چهار روش اصلی برای این کار وجود دارد که هر کدام مزایا و معایب خودشان را دارند. در ادامه، هر چهار روش رو به صورت کامل بررسی و مقایسه می کنیم تا ببینیم کدام یک برای شما مناسب تر هست.
روش اول: استفاده از جدول جستجو (Look-up Table) و درون یابی خطی
این روش یکی از دقیق ترین راه حل هاست، اما کمی کار اولیه نیاز دارد. در این روش، شما ابتدا یک جدول در حافظه میکروکنترلر خودتان ایجاد می کنید. این جدول شامل دو ستون اصلی هست: مقادیر ولتاژ و مقادیر دمای متناظر با آنها. این داده ها معمولاً از دیتاشیت سازنده ترمیستور استخراج می شوند.
اما یک مشکل وجود دارد. دیتاشیت معمولاً دما رو در فواصل 5 یا 10 درجه ای می دهد. اگر دمای واقعی بین دو نقطه از جدول ما باشد چه؟ راه حل چیست؟ اینجا هست که درون یابی خطی (Linear Interpolation) وارد عمل می شود. الگوریتم ابتدا ولتاژ خوانده شده از ADC را با مقادیر ولتاژ در جدول مقایسه می کند تا بفهمد بین کدام دو ردیف از جدول قرار گرفته است. سپس با استفاده از یک فرمول خطی ساده، دمای دقیق را بین آن دو نقطه تخمین می زند.

مزایا: اگر جدول شما به اندازه کافی بزرگ باشد (مثلاً فواصل دمایی 1 درجه)، این روش می تواند دقت فوق العاده بالایی داشته باشد.
معایب: اولاً به حافظه نسبتاً زیادی در میکروکنترلر نیاز دارد. دوماً، جستجو در یک جدول بزرگ می تواند زمان اجرای الگوریتم را به شدت افزایش بدهد، که این موضوع در کاربردهای سریع و حساس (Time-Critical) یک نقطه ضعف بزرگ محسوب می شود.
روش دوم: تقریب چند جمله ای (Polynomial Approximation)
یک راه حل دیگر این هست که به جای ذخیره کردن یک جدول بزرگ، سعی کنیم رابطه بین ولتاژ و دما رو با یک تابع ریاضی مدل کنیم. توابع چند جمله ای برای این کار عالی هستند. شما می توانید داده های ولتاژ و دمای دیتاشیت رو به یک نرم افزار مثل اکسل یا متلب بدهید و از آن بخواهید یک تابع چند جمله ای (مثلاً از درجه 3، 4 یا حتی 6) روی این داده ها برازش (Fit) کند.
بعد از این کار، شما فقط باید ضرایب این چند جمله ای رو در کد خودتان ذخیره کنید. حالا برای محاسبه دما، کافی هست ولتاژ خوانده شده از ADC رو در این فرمول قرار بدهید.
یک نکته مهم: هر چه درجه چند جمله ای بالاتر باشد، معمولاً دقت تقریب هم بیشتر می شود، اما تعداد محاسبات (ضرب و جمع) هم افزایش پیدا می کند. برای بهینه سازی سرعت، می توانید از روش هورنر (Horner's method) برای محاسبه چند جمله ای استفاده کنید که تعداد عملیات ضرب را به حداقل می رساند.

مزایا: این روش معمولاً بسیار سریع هست، به خصوص اگر از روش هورنر استفاده کنید. همچنین به حافظه خیلی کمی نیاز دارد (فقط چند ضریب).
معایب: دقت آن به شدت به بازه دمایی که تابع را روی آن فیت کرده اید، بستگی دارد. یک چند جمله ای که در بازه 20 تا 80 درجه عالی کار می کند، ممکن هست در دماهای منفی خطای زیادی داشته باشد.
روش سوم: محاسبه با معادله ضریب بتا (B Equation)
این روش یک راه حل تحلیلی و ساده شده برای مدل کردن رفتار NTC هست. فرمول آن بر اساس یک پارامتر به نام ضریب بتا (B یا Beta) و مقاومت ترمیستور در یک دمای مرجع (معمولاً 25 درجه سانتیگراد) کار می کند. این پارامترها معمولاً در دیتاشیت ترمیستور ذکر می شوند.
برای محاسبه دما، ابتدا باید با استفاده از ولتاژ خوانده شده و فرمول تقسیم ولتاژ، مقاومت لحظه ای ترمیستور (RNTC) رو محاسبه کنید. سپس این مقاومت رو در فرمول نهایی قرار می دهید تا دما (معمولاً بر حسب کلوین) به دست بیاید.
فرمول نهایی برای محاسبه دما (T) به شکل زیر هست:
1/T = (1/T0) + (1/B) * ln(RNTC / R0)
مزایا: پیاده سازی این روش بسیار ساده است و به کار اولیه کمی نیاز دارد. فقط به چند ثابت (B، T0، R0) نیاز دارید.
معایب: دقت این معادله محدود است. ضریب B معمولاً برای یک بازه دمایی خاص (مثلاً 25 تا 100 درجه) تعریف می شود و خارج از این بازه، خطای اندازه گیری به سرعت زیاد می شود. برای دقت بیشتر، می توان از دو ضریب B متفاوت برای دو بازه دمایی مختلف (مثلاً یکی برای دماهای پایین و یکی برای دماهای بالا) استفاده کرد.

روش چهارم: بالاترین دقت با معادله استاین هارت-هارت (Steinhart-Hart)
اگر به دنبال دقیق ترین مدل ریاضی برای ترمیستور NTC در یک بازه دمایی وسیع هستید، معادله استاین هارت-هارت بهترین گزینه شماست. این معادله یک تقریب درجه سوم هست که از سه ضریب ثابت (a, b, c) برای توصیف دقیق رابطه مقاومت و دما استفاده می کند.
فرمول اصلی به این شکل است:
1/T = a + b * ln(R) + c * (ln(R))3
برای استفاده از این روش، شما باید ابتدا ضرایب a، b و c را برای ترمیستور خودتان پیدا کنید. بعضی از تولید کننده ها این ضرایب رو در دیتاشیت ارائه می دهند. اگر نه، شما می توانید با داشتن سه نقطه مقاومت-دما (مثلاً در دماهای پایین، متوسط و بالا) و حل یک دستگاه سه معادله سه مجهول، این ضرایب رو خودتان محاسبه کنید.
مزایا: این روش در کل بازه دمایی کاری ترمیستور (مثلاً از 55- تا 150+ درجه سانتیگراد) دقت فوق العاده بالایی دارد و معمولاً خطای آن کمتر از 0.01 درجه است.
معایب: محاسبات آن شامل تابع لگاریتم طبیعی (ln) و توان سوم هست که می تواند بار پردازشی بیشتری روی میکروکنترلرهای ضعیف تر ایجاد کند. همچنین پیدا کردن ضرایب نیاز به کار اولیه دارد.

مقایسه نهایی: کدام روش برای کاربرد شما بهترین است؟
خب، حالا که با هر چهار روش آشنا شدیم، سوال اصلی این هست: کدام یک را باید انتخاب کنیم؟ جواب قطعی وجود ندارد؛ انتخاب بهترین روش به نیازهای پروژه شما بستگی دارد. در جدول زیر، من این چهار روش را بر اساس چند معیار کلیدی مقایسه کردم.
| معیار | جدول جستجو (LUT) | تقریب چند جمله ای | معادله ضریب بتا (B) | معادله استاین هارت-هارت |
|---|---|---|---|---|
| دقت (در بازه وسیع) | بسیار بالا | متوسط تا پایین | پایین | بسیار بالا |
| زمان اجرا در MCU | زیاد (به دلیل جستجو) | بسیار کم (به خصوص با هورنر) | متوسط | متوسط |
| نیاز به حافظه | زیاد | بسیار کم | بسیار کم | بسیار کم |
| پیچیدگی پیاده سازی | متوسط | کم | کم | متوسط |
| کار اولیه مورد نیاز | زیاد (ساخت جدول) | متوسط (پیدا کردن ضرایب) | کم | متوسط (پیدا کردن ضرایب) |
تحلیل زمان اجرا: چرا سرعت محاسبه در میکروکنترلرها حیاتی است؟
شاید بپرسید چرا اینقدر روی زمان اجرا (Execution Time) تأکید می کنیم؟ مگر چند میکروثانیه چقدر اهمیت دارد؟ در بسیاری از کاربردهای الکترونیک قدرت، مثل کنترل یک مبدل DC/DC، میکروکنترلر باید در یک حلقه (loop) بسیار سریع، مثلاً هر 33 میکروثانیه (فرکانس 30 کیلوهرتز)، کارهای زیادی انجام دهد. این کارها شامل خواندن جریان، ولتاژ، و اجرای الگوریتم کنترلی اصلی هست.
حالا اگر الگوریتم محاسبه دما بیش از حد طولانی باشد، ممکن است کل زمان اختصاص داده شده به حلقه کنترلی را اشغال کند و باعث اختلال در عملکرد اصلی دستگاه شود. آزمایش های عملی نشان می دهد که روش های مختلف، زمان های اجرای متفاوتی دارند.

همانطور که در نمودار بالا مشخص هست، روش چند جمله ای با متد هورنر سریع ترین عملکرد را دارد. در مقابل، روش جدول جستجو به دلیل نیاز به الگوریتم جستجو، کندترین روش هست. دو روش تحلیلی ضریب بتا و استاین هارت-هارت نیز به دلیل داشتن تابع لگاریتم، زمان اجرای تقریباً یکسانی دارند که از روش چند جمله ای بیشتر است.
راه حل چیست؟ راهنمای چند مرحله ای برای انتخاب هوشمندانه
برای اینکه بهترین روش را برای پروژه خودتان انتخاب کنید، این چک لیست را دنبال کنید:
- آیا به بالاترین دقت ممکن در کل بازه دمایی نیاز دارید؟
اگر جواب بله است، دو گزینه اصلی شما معادله استاین هارت-هارت و جدول جستجو هستند. اگر پردازنده شما به اندازه کافی قوی هست و می خواهید از حافظه کمتری استفاده کنید، استاین هارت-هارت بهترین گزینه است. - آیا سرعت اجرا مهم ترین اولویت شماست و بازه دمایی محدود است؟
اگر اینطور هست، بدون شک به سراغ تقریب چند جمله ای (حتماً با روش هورنر) بروید. شما می توانید یک چند جمله ای درجه بالا را روی بازه دمایی مورد نظر خودتان فیت کنید تا هم سرعت بالا و هم دقت قابل قبولی داشته باشید. - آیا به دنبال ساده ترین راه حل با دقت متوسط هستید؟
در این صورت، معادله ضریب بتا (B Equation) کار شما را راه می اندازد. پیاده سازی آن بسیار ساده هست و برای کاربردهایی که دقت یک یا دو درجه ای کافی است، کاملاً مناسب هست. - آیا حافظه میکروکنترلر شما زیاد است و دقت برایتان حیاتی است؟
اگر محدودیتی از نظر حافظه ندارید، می توانید یک جدول جستجو بسیار دقیق با فواصل دمایی 1 درجه ایجاد کنید. این روش دقت فوق العاده ای را تضمین می کند، اما به قیمت زمان اجرای بیشتر.
نتیجه گیری: یک جمع بندی کوتاه و کاربردی
در نهایت، انتخاب روش مناسب برای اندازه گیری دما با ترمیستور NTC همیشه یک مصالحه بین دقت، سرعت اجرا، و منابع سخت افزاری (حافظه و قدرت پردازش) است. هیچ روشی وجود ندارد که در همه زمینه ها بهترین باشد.
معادله استاین هارت-هارت و جدول جستجو بالاترین دقت را در بازه های دمایی وسیع ارائه می دهند، اما هزینه پردازشی یا حافظه بیشتری دارند. در طرف مقابل، تقریب چند جمله ای سریع ترین روش است اما دقت آن به بازه دمایی محدود می شود. معادله ضریب بتا نیز یک راه حل میانه است که سادگی را فدای مقداری از دقت می کند. با در نظر گرفتن نیازهای خاص پروژه خودتان، می توانید بهترین و بهینه ترین راه حل را انتخاب کنید.










