تحلیل پروژه‌های الکترونیک

تحلیل پروژهٔ MCP9600؛ از سیم ترموکوپل تا دمای قابل اعتماد

برد متن‌باز MCP9600 از SparkFun ولتاژ ترموکوپل و دمای محل اتصال را به داده تبدیل می‌کند. مدار، چیدمان حرارتی، تغذیه و مسیر خطا در کتابخانه نشان می‌دهند برای اندازه‌گیری قابل اعتماد چه باید بررسی و بهتر شود.

تحلیل پروژهٔ MCP9600؛ از سیم ترموکوپل تا دمای قابل اعتماد
فهرست مطالب

این پروژه مسئله‌ای فراتر از خواندن یک عدد دما را حل می‌کند: ولتاژ بسیار کوچک ترموکوپل را می‌خواند، دمای محل اتصال سیم‌ها روی برد را در محاسبه دخالت می‌دهد و نتیجه را از یک ارتباط دوخطی به نام I²C تحویل می‌دهد. در برد متن‌باز SparkFun مبتنی بر MCP9600، مدار کم‌قطعه است؛ اما کیفیت اندازه‌گیری به جای برد، سیم‌کشی و تشخیص خطای ارتباط هم وابسته است. این تحلیل نشان می‌دهد هر بخش چه کاری می‌کند و برای ساخت یک ابزار قابل اعتماد چه چیزهایی باید بررسی شود.

موضوع بررسی، مدل پیچ‌ترمینالی SEN-16295 است، نه مدل کانکتور PCC با شناسهٔ SEN-16294. طراحی متعلق به SparkFun Electronics است. فایل‌های سخت‌افزار در نسخهٔ ثابت مخزن و کتابخانهٔ Arduino در نسخهٔ مستقل 1.0.6 خوانده شده‌اند. بررسی حاضر تحلیل فایل است؛ بردی ساخته یا روی سخت‌افزار آزمایش نشده است.

خرید برد و تشخیص مدل

برای تهیهٔ همان برد، صفحهٔ مستقیم SparkFun برای SEN-16295 مرجع است. در بررسی ۲۷ اکتبر ۲۰۲۶، صفحه عبارت In stock را نشان می‌داد؛ این وضعیت لحظه‌ای فروشنده است و تضمین موجودی هنگام سفارش نیست. تراشهٔ اصلی MCP9600 در پکیج ۲۰پایهٔ MQFN به‌کار رفته است؛ صفحهٔ سازنده مشخصات خانواده و گزینه‌های سفارش را جدا معرفی می‌کند. از نام کتابخانه، کد سفارش کامل قطعهٔ مونتاژشده را نتیجه نگیرید.

خرید ایران: لینک مستقیم با موجودی قابل تأیید برای همین برد SparkFun پیدا نشد. بردهای عمومی با نام MCP9600 یا CJMCU الزاماً همین مدار، کانکتور یا حفاظت را ندارند. تطابق مدل و موجودی ایران در این بررسی اثبات نشده است؛ لینک جست‌وجو جای لینک خرید محصول قرار نگرفته و قیمتی نقل نمی‌شود.

ترموکوپل چه چیزی را اندازه می‌گیرد؟

ترموکوپل از دو سیم با جنس متفاوت ساخته می‌شود که در نوک حسگر به هم وصل‌اند. اختلاف دمای نوک با محل اتصال سیم‌ها به دستگاه، ولتاژی بسیار کوچک ایجاد می‌کند. میکروولت، یک‌میلیونیم ولت است؛ بنابراین این ورودی را نمی‌توان مانند خروجی یک کلید روشن و خاموش خواند. برد، قطعات و مسیرهای مسی را نگه می‌دارد؛ تراشهٔ MCP9600 قطعهٔ کوچکی روی آن است که این ولتاژ را به دادهٔ دما تبدیل می‌کند.

«اتصال سرد» نام رایج محل مرجع است؛ لازم نیست واقعاً سرد باشد. تراشه دمای محلی خودش را می‌سنجد تا اثر دمای اتصال مرجع را جبران کند. اگر ترمینال در دمایی متفاوت از تراشه باشد، این فرض ضعیف می‌شود. برای آشنایی با تفاوت دادهٔ دیجیتال و کمیت فیزیکی، درس حسگر آنالوگ و دیجیتال را ببینید.

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

چرا این معماری انتخاب شده است؟

MCP9600 تقویت و تبدیل ورودی، محاسبهٔ دما، جبران اتصال مرجع و چهار خروجی هشدار قابل تنظیم را یکجا فراهم می‌کند. میزبان، یعنی بردی مثل یک کنترل‌کنندهٔ Arduino که برنامه را اجرا می‌کند، لازم نیست خودش ولتاژ میکروولتی را با مبدل عمومی بخواند و جدول ترموکوپل را پیاده کند. I²C رابط دوخطی SDA و SCL برای تبادل داده است؛ انرژی مدار از دو سیم دیگر، تغذیه و زمین، می‌آید.

این سادگی، محدودیت‌ها را حذف نمی‌کند. نوع سیم باید با تنظیم تراشه یکسان باشد؛ نوع K با J قابل جایگزینی بی‌تنظیم نیست. محدودهٔ قابل محاسبهٔ یک نوع ترموکوپل، تضمین تحمل گرمای پروب، عایق سیم، کانکتور یا خود برد نیست. خود برد و تراشه نزدیک نقطهٔ داغ قرار نمی‌گیرند. همچنین این مدار عایق الکتریکی ایجاد نمی‌کند؛ تماس پروب با مدار برق‌دار به طراحی ایزولاسیون جدا نیاز دارد.

شماتیک: ورودی، تغذیه و رابط

در شماتیک همین نسخه، پایهٔ اول J5 مستقیم به V+ تراشه، پایهٔ ۲ پکیج، و پایهٔ دوم به V−، پایهٔ ۴، وصل است. جهت مثبت و منفی سیم را از مشخصات همان پروب پیدا کنید؛ رنگ سیم در استانداردهای مختلف یکسان نیست. عوض‌شدن جهت سیم‌ها می‌تواند با گرم‌کردن نوک، روند دمای نامنتظر ایجاد کند.

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

جزءشاهد در فایلنقش عملی
U1، MCP9600، MQFN-20VDD پایهٔ ۸، SDA پایهٔ ۲۰، SCL پایهٔ ۱۹؛ زمین شامل پد نمایان استتبدیل ورودی و تحویل داده؛ برای طراحی PCB، تمام پایه‌های زمین و پد پکیج باید طبق فایل بررسی شوند.
C1، 0.1 µFبین شبکهٔ 3.3V و GNDمسیر کوتاه برای تغییرات سریع جریان؛ جایگزین طراحی درست تغذیه نیست.
R4 و R5، هرکدام 2.2 kΩکشش SDA و SCL از طریق JP2 به تغذیهبالابردن سطح خطوط I²C؛ با بردهای دیگر موازی می‌شوند.
R3، 10 kΩ و JP1شبکهٔ ADDR؛ جامپر پیش‌فرض به زمینآدرس پیش‌فرض 0x60؛ تغییر آدرس نیازمند بررسی جامپر و تقسیم مقاومتی است.
D1، R1 و JP3LED قرمز با مقاومت 1 kΩ و جامپر تغذیهنمایش روشن‌بودن و امکان قطع مسیر LED.
J4چهار خط ALERT1 تا ALERT4اعلان عبور از آستانه؛ جایگزین مستقل و تأییدشدهٔ حفاظت حرارتی نیست.

این جدول اجزای کلیدی استخراج‌شده از شماتیک است، نه BOM خرید با کد سفارش کامل همهٔ قطعات. جای R2 برای تنظیم آدرس نیز در طراحی وجود دارد؛ صرف وجود footprint، یعنی جای لحیم قطعه روی برد، ثابت نمی‌کند آن قطعه در همهٔ بردهای فروخته‌شده نصب است.

اتصال‌های J5 به ورودی تراشه و مسیر تغذیه و مقاومت‌های کشش I2C در SEN-16295
اتصال‌های ساده‌شده از شماتیک SparkFun، با شمارهٔ پایه‌های U1؛ بازطراحی تحت CC BY-SA 4.0. جای سیم‌کشی کامل یا نقشهٔ ساخت را نمی‌گیرد.

تغذیه و مصرف: برد، رگولاتور ندارد

رگولاتور مداری است که ولتاژ تغذیه را در محدودهٔ طراحی‌شده نگه می‌دارد. مبدل سطح منطقی، سطح ولتاژ پیام‌های دیجیتال را میان دو مدار سازگار می‌کند؛ این دو کار متفاوت‌اند.

شبکهٔ 3.3V کانکتورهای Qwiic در این شماتیک مستقیم به U1 و LED می‌رود؛ رگولاتور یا مبدل سطح منطقی در این مسیر دیده نمی‌شود. محدودهٔ تغذیهٔ خود MCP9600 در دیتاشیت 2.7 تا 5.5 ولت است، ولی این به معنی مجازبودن ۵ ولت روی شبکهٔ مشترک Qwiic و سایر بردهای ۳٫۳ولتی نیست. برای این اتصال، تغذیه و منطق میزبان را ۳٫۳ ولت در نظر بگیرید و مشخصات همان میزبان را کنترل کنید.

یک محاسبهٔ فرضی: اگر افت LED برابر 1.8 V باشد، جریان آن با تغذیهٔ 3.3 V و R1=1 kΩ حدود (3.3−1.8)/1000 = 1.5 mA است. توان مصرفی این شاخه از منبع حدود 3.3 × 1.5 = 4.95 mW می‌شود. مقدار واقعی با LED و دما تغییر می‌کند؛ این اندازه‌گیری برد نیست. برای دستگاه باتری‌خور، قطع JP3 می‌تواند مصرف این شاخه را حذف کند، اما مصرف تراشه و میزبان همچنان باقی است.

دو مجموعه کشش 2.2 kΩ روی یک باس، معادل 1.1 kΩ می‌شوند. جریان تقریبی یک خط در حالت پایین، با صرف‌نظر از ولتاژ باقیماندهٔ خروجی، 3.3/1100 ≈ 3 mA است. پیش از بریدن جامپرها، تعداد کشش‌ها و توان پایین‌کشیدن خروجی تمام دستگاه‌ها را بررسی کنید؛ مقاومت کمتر همیشه ارتباط بهتر نمی‌سازد.

PCB: دمای محل قطعات بخشی از اندازه‌گیری است

فایل PCB مرز 25.4 × 25.4 میلی‌متر و پلیگون زمین در هر دو لایهٔ مسی دارد. در مختصات فایل، مرکز U1 در (12.7,12.7) و مرکز J5 در (14.478,22.606) میلی‌متر است؛ فاصلهٔ مرکزها تقریباً 10.06 میلی‌متر می‌شود. این فاصله، مقدار خطای حرارتی را تعیین نمی‌کند؛ دمای اتصال‌ها، مس، جریان هوا و محفظه نیز مؤثرند.

بخش 6.1 دیتاشیت همراه پروژه بر رسانش حرارتی میان اتصال ترموکوپل و پد زیر تراشه تأکید دارد. هدف، نزدیک‌بودن دمای این دو محل است؛ بنابراین قاعدهٔ عمومی «مس آنالوگ را همیشه جدا کن» در اینجا کافی نیست. از طرف دیگر، گرمای رگولاتور، پردازنده یا بدنهٔ داغ نباید یک سمت برد را بیشتر گرم کند. نقشهٔ زیر فقط محل قطعات را نشان می‌دهد؛ وجود پلیگون در فایل را معادل کیفیت تأییدشدهٔ زمین یا نتیجهٔ اندازه‌گیری ندانید.

جای U1، ترمینال J5، خازن و LED از مختصات فایل PCB برد MCP9600
جای‌گذاری از فایل SparkFun بازطراحی شده است؛ مسیرها و سطوح مسی حذف شده‌اند. بازطراحی و انتساب به SparkFun تحت CC BY-SA 4.0.

مثال حل‌شده: رقم بیشتر با دقت بیشتر فرق دارد

کتابخانه، مقدار ۱۶بیتی علامت‌دار دما را با ضریب 0.0625 °C می‌خواند. در یک مثال فرضی، کلمهٔ 0x0640 برابر 1600 است؛ پس 1600 × 0.0625 = 100 °C. کلمهٔ 0xFF60 در نمایش علامت‌دار برابر −160 و نتیجه −10 °C است. این ضریب مربوط به دادهٔ رجیستر دماست، نه تبدیل مستقیم هر ولتاژ ترموکوپل به دما.

گام نمایش 0.0625 درجه، تضمین خطای کمتر از آن نیست. مثلاً اگر برای توضیح محلی و خطی، حساسیت را 40 µV/°C فرض کنیم، اختلاف 10 °C میان ترمینال و تراشه معادل حدود 400 µV مرجع نامتناسب است. این مدل ساده فقط اهمیت تعادل حرارتی را نشان می‌دهد؛ محاسبهٔ واقعی تراشه از رابطهٔ غیرخطی نوع ترموکوپل استفاده می‌کند. خطای پروب، سیم و نصب هم به خطای خود مبدل اضافه می‌شود. جزئیات این تفاوت در درس دقت و تفکیک‌پذیری آمده است.

کد چه می‌کند و چه چیزی را تضمین نمی‌کند؟

در Example1_BasicReadings همین commit، ارتباط سریال 115200 و I²C با سرعت 100000 هرتز تنظیم می‌شود. برنامه حضور دستگاه و شناسهٔ آن را کنترل می‌کند؛ سپس در صورت آماده‌بودن داده، دمای ترموکوپل، دمای محلی و اختلاف دما را چاپ می‌کند. توقف ۲۰میلی‌ثانیه‌ای انتهای خواندن، به‌تنهایی نرخ تبدیل حسگر را ۵۰ نمونه در ثانیه نمی‌کند؛ تنظیم تبدیل و بیت آماده‌بودن تعیین‌کننده‌اند.

در readDoubleRegister، درخواست دو بایت با شرط «تعداد دریافتی ناصفر باشد» پذیرفته می‌شود؛ پس دریافت دقیق دو بایت جدا کنترل نشده است. پس از پایان تلاش‌ها هم مقدار صفر برمی‌گردد. در نتیجه رابط این تابع، صفرِ معتبر رجیستر را از شکست خواندن جدا نمی‌کند. این مشاهدهٔ کد است، نه ادعای رخ‌دادن خطا در همهٔ بردها.

پیشنهاد مشخص، بازگرداندن نتیجه‌ای شامل وضعیت و مقدار است: موفقیت فقط با تأیید مرحلهٔ ارسال و دریافت دقیق دو بایت؛ در شکست، مقدار قبلی با برچسب «قدیمی» نمایش داده شود و به‌عنوان دمای تازه وارد تصمیم کنترلی نشود. آزمون نرم‌افزاری باید دریافت صفر، یک و دو بایت و شکست پی‌درپی را تزریق کند. این تغییر به اصلاح کتابخانه و برنامه نیاز دارد؛ صرف بررسی available() جای آن را نمی‌گیرد.

سه بهبود سخت‌افزاری و روش سنجش آن‌ها

  1. تعادل حرارتی: برد را از منابع گرمای موضعی دور کنید. در طراحی جدید، مسیر حرارتی ترمینال تا پد تراشه را طبق راهنمای سازنده بررسی کنید. با پروب مرجع ثابت، گرم‌شدن محفظه و جریان هوا را جدا تغییر دهید و تغییر خطا را ثبت کنید؛ صرف کم‌شدن فاصله تضمین نتیجه نیست.
  2. حفاظت ورودی برای کابل بیرونی: در شماتیک این نسخه، J5 مستقیم به V+ و V− می‌رود و شبکهٔ اختصاصی فیلتر و مهار تخلیه روی این دو خط دیده نمی‌شود. برای محیط پرنویز، بخش‌های 6.3.4 و 6.3.5 دیتاشیت نقطهٔ شروع طراحی فیلتر، فریت و دیود حفاظتی‌اند. نشتی، عدم تقارن و افت ورودی می‌توانند اندازه‌گیری را خراب کنند؛ یک TVS دلخواه راه‌حل تضمینی نیست. قبل و بعد، خطا و رفتار گذرا باید اندازه‌گیری شوند.
  3. تشخیص سیم قطع‌شده: داشتن بیت Input Range به‌تنهایی تشخیص قطعی قطع هر پروب نیست. بخش 6.3.3.1 دیتاشیت برای این کار شبکهٔ بایاس خارجی معرفی می‌کند؛ در ورودی مستقیم این شماتیک چنین شبکه‌ای دیده نمی‌شود. افزودن آن باید با محدودهٔ ورودی و بارگذاری تطبیق داده شود و حالت‌های پروب متصل، قطع، اتصال کوتاه و بیرون‌بودن از محدوده جدا آزموده شوند.

راه‌اندازی و عیب‌یابی به ترتیب

  1. بی‌برق، مدل برد، جهت اتصال پروب، اتصال کوتاه تغذیه و وضعیت جامپرها را بررسی کنید. ابتدا از یک منبع دمای کم‌خطر و در محدودهٔ پروب استفاده کنید.
  2. ۳٫۳ ولت و زمین مشترک میزبان را وصل کنید؛ SDA و SCL طبق نام پایه، نه رنگ کابل. برد پنج‌ولتی را بدون بررسی سطح منطقی متصل نکنید.
  3. در Arduino IDE کتابخانهٔ SparkFun MCP9600 نسخهٔ 1.0.6 و مثال پایه را انتخاب کنید. نوع برد و درگاه واقعی خودتان را تعیین کنید؛ این مقاله ادعای compilation یا فلش موفق روی دستگاه مشخصی ندارد.
  4. آدرس پیش‌فرض 0x60 را با وضعیت ADDR تطبیق دهید. اگر شناسایی نشد، تغذیه، سیم و کشش‌ها را پیش از تغییر نرم‌افزار بررسی کنید؛ مسیر عیب‌یابی I²C کمک می‌کند.
  5. نوع ترموکوپل و تنظیمات را صریح تعیین و دمای محلی و دمای نوک را کنار هم ثبت کنید. با گرم‌شدن ملایم نوک، جهت تغییر را ببینید؛ دقت را با مرجع معتبر و چند نقطه بررسی کنید.
  6. قطع پروب و قطع ارتباط را جدا بررسی کنید. تا وقتی رفتار خطا و بازیابی مشخص نشده، خروجی را فرمان مستقیم یک گرم‌کن یا تنها حفاظت حرارتی قرار ندهید.

منابع و ادامهٔ مسیر

مزیت این پروژه، جداکردن خواندن سیگنال ضعیف از کار میزبان است. درس اصلی آن این است که «داده رسید» با «دمای معتبر رسید» یکی نیست: هم دمای محل اتصال، هم سلامت ورودی و هم نتیجهٔ انتقال باید معلوم باشند. برای ثبت بلندمدت این داده، تحلیل Qwiic OpenLog مسئلهٔ بعدی، یعنی ذخیرهٔ قابل اتکا، را بررسی می‌کند.

پرسش و پاسخ مقاله

سوال فنی خود را مطرح کنید

پرسش‌ها و پاسخ‌ها پس از بررسی مدیر منتشر می‌شوند. نویسنده، پیش‌نویس در انتظار بررسی را می‌بیند.

هنوز پرسش تاییدشده‌ای برای این مقاله ثبت نشده است.