شارژ کنترلر خورشیدی ۱۰۰۰ وات با ESP32
پنلهای خورشیدی برای تولید انرژی بینظیرن، اما برای اینکه بتونیم بالاترین توان رو ازشون بگیریم و به باتریها برسونیم، به یک سیستم مدیریت هوشمند نیاز داریم. شارژ کنترلرهای معمولی بخش زیادی از این انرژی رو هدر میدن، اما تکنولوژی MPPT دقیقا همون چیزیه که راندمان سیستم رو به اوج میرسونه. تو این آموزش از آیسیمدار، قراره یک شارژ کنترلر خورشیدی فوقالعاده قدرتمند 1000 واتی بسازیم که به شبکه وایفای هم متصل میشه و کلی امکانات حرفهای داره. قلب تپنده این مدار میکروکنترلر سریع و دومنظوره ESP32 هست که در کنار یک مبدل کاهنده (Buck) سنکرون و مبدلهای آنالوگ به دیجیتال دقیق، بهترین عملکرد رو به نمایش میذاره. این دستگاه نه تنها میتونه توانهای بالا رو به راحتی مدیریت کنه، بلکه اطلاعات سیستم رو به صورت زنده روی گوشی موبایلت نشون میده و قابلیت تنظیم برای انواع باتریها رو هم داره. بریم سراغ قطعات و ساخت این شارژ کنترلر بینقص!
- (09/11/21) پشتیبانی از باتری تا 80 ولت — MPPT با mod میتونه باتری تا 80 ولت (12 ولت/24 ولت/36 ولت/48 ولت/60 ولت/72 ولت/80 ولت) رو پشتیبانی کنه. لطفا 'step #38' لینک instructable رو ببین. با دقت بخون!
- (09/11/21) پشتیبانی از پنل خورشیدی بالای 80 ولت — MPPT رو میشه تغییر داد برای ولتاژ بالای 80 ولت. مرحله #39 راهنماییت میکنه. این mod برای همه نیست، شدیدا توصیه نمیکنم!
- (09/11/21) راهنمای کالیبراسیون بهروز شد — ساختت مقادیر کمی نادرست میده؟ فرآیند کالیبراسیون رو به مرحله برنامهنویسی این instructable اضافه کردم.
- (09/12/21) رفع QR Code — QR code توی ویدئو اشتباهه. QR code این instructable برای رفع مشکل بهروز شد. لطفا به QR code همین instructable مراجعه کن.
- (12/04/21) باگ تنظیم ولتاژ ثابت (CV) رفع شد — فایلهای کد GitHub و Gdrive برای رفع باگ CV در کد Arduino بهروز شدن.
- پشتیبانی از انواع باتریها تا ولتاژ 80 ولت (با اعمال تغییرات سختافزاری خاص در مدار)
- امکان ارتقا برای اتصال پنلهای خورشیدی با ولتاژ بالاتر از 80 ولت (نیاز به تغییر قطعات قدرت)
- راهنمای دقیق کالیبراسیون برای خواندن مقادیر بسیار دقیق ولتاژ و جریان
- رفع باگهای اتصال اپلیکیشن موبایل از طریق بارکد هوشمند
- اصلاح و پایداری کامل سیستم تنظیم ولتاژ ثابت (CV) برای محافظت از باتریها
مشخصات فنی دستگاه شارژ کنترلر ۱۰۰۰ وات
هدف از این پروژه طراحی یک دستگاه MPPT دستساز بود که بشه به صورت مداوم تو سیستمهای آفگرید خورشیدی ازش استفاده کرد. به همین دلیل تو طراحی این مدار هیچچیزی کم گذاشته نشده و از قطعات کاملا حرفهای استفاده کردیم.
استفاده از مبدل آنالوگ به دیجیتال 16 بیتی برای اندازهگیری دقیق، میکروکنترلر 32 بیتی دو هستهای برای محاسبات سریع، پیادهسازی رزولوشن بالای PWM و قابلیت انتخاب فرکانس سوئیچینگ متغیر، این دستگاه رو به یک شاهکار مهندسی تبدیل کرده. علاوه بر این، کلی امکانات برای اینترنت اشیا (IoT) و نمایش اطلاعات روی این سیستم پیادهسازی شده. مشخصات فنی اصلی:
- الگوریتم ردیابی نقطه بیشینه توان (MPPT) با قابلیت جریان ثابت و ولتاژ ثابت (CC-CV)
- ورودی تا 80 ولت و 30 آمپر (مناسب برای پنل خورشیدی، توربین بادی و منبع تغذیه)
- خروجی تا 50 ولت و 35 آمپر (مناسب باتریهای لیتیوم یون، لید-اسید، LiFePO4 و غیره)
- راندمان تبدیل انرژی فوقالعاده بالا تا 98 درصد (مبدل باک سنکرون)
- ارسال اطلاعات به اپلیکیشن موبایل Blynk از طریق وایفای و بلوتوث
- امکان استفاده به عنوان منبع تغذیه متغیر (PSU Mode)
- سنجش دقیق اطلاعات با مبدلهای ADS1115/ADS1015
- کالیبراسیون خودکار سنسور جریان 30 آمپری ACS712
- پروتکل محافظت از باتری در برابر قطع ناگهانی و وصل مجدد
- منوی تنظیمات روی نمایشگر LCD با 4 حالت نمایش مختلف
- حافظه فلش برای ذخیره دائمی تنظیمات کاربر
- امکان تنظیم رزولوشن سیگنال PWM از 8 تا 16 بیت
- قابلیت تغییر فرکانس سوئیچینگ PWM بین 1.2 تا 312 کیلوهرتز
ظرفیت توان خروجی بر اساس ولتاژ باتری:
- باتری 12 ولت: 420 وات در 35 آمپر
- باتری 24 ولت: 840 وات در 35 آمپر
- باتری 36 ولت: 1000 وات در 35 آمپر (با باز کردن قفل نرمافزاری تا 1260 وات)
- باتری 48 ولت: 1000 وات در 35 آمپر (با باز کردن قفل نرمافزاری تا 1680 وات)
- باتریهای 60، 72 و 80 ولت: (نیاز به اعمال تغییرات سختافزاری روی مدار دارد)
نکات بسیار مهم:
- ورودی 80 ولت به معنی حداکثر ولتاژ مدار باز (Voc) پنل شماست. حتی کمی عبور از این ولتاژ میتونه به شارژ کنترلر آسیب بزنه.
- جریان نرمافزاری دستگاه در حال حاضر روی 30 آمپر قفل شده است.
- دستگاه به صورت مداوم زیر بار خورشید در تابستان با جریان 23 آمپر برای باتریهای LiFePO4 تست شده و عملکرد پایداری داشته.
- برای جلوگیری از سوختن سلف به دلیل اشباع شدن، سقف توان روی 1000 وات قفل شده است.
- حداکثر رنج اندازهگیری سنسور جریان 30 آمپر است، اما جریان خروجی با استفاده از محاسبات ریاضی و تفاوت ولتاژ ورودی و خروجی با دقت بالایی محاسبه میشود.
نگاهی به ویژگیهای نسخه نهایی دستگاه
اولین مداری که با ثبات کامل کار کرد! این پروژه نتیجه طراحی شش نسخه مختلف از شارژ کنترلرهاست. 5 نمونه قبلی هر کدوم چالشهایی داشتن، اما این نسخه بعد از 6 ماه تست مداوم در یک سیستم آفگرید واقعی، بدون هیچ مشکلی کار کرده و انرژی مورد نیاز کارگاه رو تأمین میکنه. ماهها صبر کردیم تا مطمئن بشیم این طراحی هیچ نقص فنی نداره و حالا میتونی با خیال راحت این دستگاه رو بسازی.
ایده اصلی پروژه از کجا اومد؟ وقتی متوجه میشی شارژ کنترلرهای حرفهای MPPT تو بازار چقدر گرون هستن، دست به هویه شدن منطقیترین کاره! با ساخت این مدار نهتنها یک سیستم به شدت قدرتمند داری، بلکه قطعاتش رو میتونی با قیمت مناسبی تهیه کنی. با بررسی پروژههای متنباز قبلی، متوجه شدیم که خیلی از این مدارات بعد از مدتی دچار سوختگی ماسفت یا ناپایداری میشن.
به همین دلیل نشستیم و تمام باگهای پروژههای قبلی رو پیدا کردیم تا در نهایت به این شماتیک بینقص رسیدیم.
چرا آردوینو نانو برای توان بالا مناسب نیست؟
خیلی از پروژههای اولیه با آردوینو نانو (میکروکنترلر ATmega328P) طراحی میشن. این برد برای سیستمهای توان پایین عالیه، اما وقتی توان مدارت بالا میره، محدودیتهای نانو خودشون رو نشون میدن. تو نسخههای قبلی، برای رسیدن به تعادل بین قیمت و کیفیت خیلی کلنجار رفتیم. حالا چرا آردوینو نانو رو کنار گذاشتیم؟
- آردوینو نانو یک پردازنده 8 بیتیه که برای پردازش حجم سنگین اطلاعات کند عمل میکنه. دستگاه MPPT یه مبدل فوق هوشمنده که باید مدام اعداد رو محاسبه کنه، ولتاژ رو بررسی کنه، پروتکلهای امنیتی رو چک کنه و همزمان اطلاعات رو نمایش بده. سرعت پایین آردوینو نانو تو تغییرات ناگهانی ولتاژ باعث میشه مدار نتونه به سرعت واکنش نشون بده و ممکن بود سیستم مکررا ریست بشه.
- مبدل آنالوگ به دیجیتال (ADC) آردوینو فقط 10 بیتی هست. یعنی ولتاژ 0 تا 5 ولت رو فقط میتونه به 1024 قسمت تقسیم کنه. وقتی بخوای با این رزولوشن ولتاژهای بالا مثل 80 ولت رو اندازه بگیری، دقت به شدت میاد پایین و نمیتونی تغییرات ریز ولتاژ رو حس کنی.
- محدودیت دیگه رزولوشن 8 بیتی برای ساخت سیگنال PWM هست. این یعنی فقط 256 پله برای تغییر پهنای پالس داری. تو توانهای بالا، تغییر یک واحد از این سیگنال باعث تغییرات وحشتناکی تو ولتاژ میشه که کار رو برای پایدار موندن سیستم خیلی سخت میکنه.
- به جای این برد، ما به سراغ یک جایگزین سریعتر، ارزانتر و پیشرفتهتر به نام ESP32 رفتیم.
ماجرای استفاده از یک سنسور جریان:
- تو نمونههای قبلی از دو تا سنسور جریان استفاده میکردیم (یکی برای ورودی، یکی خروجی). تو مبدل باک، جریان ورودی و خروجی متفاوته و خروجی معمولا بالاتره. اما سنسورهای باکیفیت گرون بودن.
- متوجه شدیم فقط با یک سنسور در ورودی هم میشه کار رو جمع کرد! کافیه جریان و ولتاژ ورودی رو بخونی، ضرب کنی تا توان ورودی به دست بیاد، بعد بر ولتاژ خروجی تقسیم کنی تا جریان خروجی با تقریب خیلی خوبی محاسبه بشه. البته تو این روش تلفات حرارتی مدار محاسبه نمیشه، اما دقتش کاملا برای تنظیم جریان شارژ باتری جوابگوئه.
انتخاب سنسور جریان ایدهآل:
- سنسور معروف ACS712 قیمت خوبی داره، اما به شدت نویزپذیره و ولتاژ مرجعش روی 5 ولت مداره (اگه 5 ولت نوسان کنه، جریان هم اشتباه خونده میشه). ضمن اینکه چون اثر هال هست، با نزدیک شدن به سلف مدار دچار اختلال میشه.
- سنسورهای صنعتی مثل HLSR50 فوقالعادهان و نویز ندارن، اما قیمت خیلی بالایی دارن. به همین دلیل ما همون ACS712 رو نگه داشتیم، اما با اصلاح خازنهای فیلتر و جدا کردن خطوط، دقتش رو تا حد سنسورهای گرونقیمت بالا بردیم!
با اعمال این تغییرات، بالاخره به یک معماری ثابت و پایدار برای مدار رسیدیم.
مفاهیم پایه برای درک عملکرد مدار
حالا بریم سراغ بخش تئوری طراحی! اگر فقط میخوای مدار رو مونتاژ کنی و کاری به مفاهیمش نداری، میتونی مستقیم بری سراغ بخشهای مونتاژ.
- در این چند مرحله قصد داریم ساختار اصلی یک شارژ کنترلر MPPT رو خیلی ساده و بدون اصطلاحات سنگین مهندسی کالبدشکافی کنیم.
مفاهیم پیشنیاز: تو این آموزش یک سری از مباحث پایه الکترونیک و برنامهنویسی استفاده شده. اگر در هر کدوم از این موارد نیاز به اطلاعات بیشتری داشتی، کافیه یک جستجوی ساده انجام بدی تا درک بهتری از نحوه کار دستگاه پیدا کنی.
- آشنایی پایه با میکروکنترلر ESP32
- مفاهیم رزولوشن و فرکانس سیگنال PWM در ESP32
- مفهوم الگوریتم MPPT
- منحنی ولتاژ-جریان (IV) در سلولهای خورشیدی
- آشنایی با مبدلهای آنالوگ به دیجیتال (ADC) خارجی
- فیلترهای مقاومت-خازنی (RC) و پهنای باند
- روشهای حذف نویز در مدار
- اندازهگیری ولتاژ با تکنیک مقسم ولتاژ
- اندازهگیری جریان با سنسورهای اثر هال
- مبانی مبدل باک سنکرون (Synchronous Buck)
- جلوگیری از برگشت جریان در مدار باک سنکرون
- مبانی درایورهای ماسفت نیمپل (Half-bridge)
- نحوه عملکرد ماسفتهای کانال N
- مزایای ماسفتهای دارای مقاومت حالت روشن پایین
- استفاده از ماسفتها به عنوان مسدودکننده جریان معکوس
- شبیهسازی عملکرد دیودهای ORing با استفاده از ماسفت
- مبانی کار با سلفها
- طراحی سلف با هسته توروئیدی (حلقوی)
- روشهای افزایش راندمان در منابع تغذیه سوئیچینگ (SMPS)
الگوریتم MPPT چطور کار میکنه؟
اگر تا حالا با منحنی ولتاژ و جریان پنلهای خورشیدی گیج شدی، اصلا نگران نباش. اینجا خیلی ساده بهت میگم که MPPT دقیقا چیکار میکنه.
وقتی برای اولین بار خواستم این دستگاه رو بسازم، درک رابطه بین منحنی پنل خورشیدی و مبدل باک برام سخت بود. کتابهای مهندسی پر از اصطلاحات سنگین بودن که کار رو پیچیده میکردن. پس یک آزمایش عملی ساده انجام دادم.
یک مدار باک ساده ساختم، ورودیش رو به پنل خورشیدی وصل کردم و خروجیش رو به یک المنت گرمایی دادم. برای کنترل مدار یک ولوم گذاشتم تا بتونم پهنای پالس (Duty Cycle) رو با دست تغییر بدم و یک واتمتر هم بین پنل و مدار نصب کردم.
وقتی ولوم رو آروم آروم میچرخوندم، واتمتر نشون میداد که توان دریافتی از صفر داره میره بالا و به حدود 305 وات رسید. وقتی ولوم رو از اون نقطه بیشتر چرخوندم، دیدم به جای اینکه توان بیشتر بشه، شروع کرد به افت کردن!
وقتی ولوم رو تا انتها چرخوندم (100 درصد دیوتیسایکل)، توان صفر شد، ولتاژ به شدت افت کرد اما جریان بالایی کشیده میشد. عجیبه، نه؟ جریان بالا، اما بدون توان مفید!
پس ولوم رو برگردوندم عقب تا دوباره توان به همون 305 وات برگرده. متوجه شدم که فقط تو یک نقطه خاص از چرخش اون ولوم، میتونم بالاترین توان ممکن رو از پنل خورشیدی بیرون بکشم.
با تغییر شدت نور خورشید تو طول روز، این نقطه طلایی هم جابهجا میشد و من مجبور بودم ولوم رو مدام کمی به چپ و راست بچرخونم تا توان روی حالت حداکثر باقی بمونه. دقیقا کار MPPT هم همینه! دستگاه MPPT همون دستی هست که به صورت اتوماتیک اون ولوم رو میچرخونه تا همیشه بهترین توان رو پیدا کنه.
به جای یک انسان، میکروکنترلر با استفاده از سنسورها مدام ولتاژ و جریان رو چک میکنه و پهنای پالس رو تنظیم میکنه تا بیشترین انرژی از پنل دریافت بشه.
به این روش در مهندسی، الگوریتم "آشفتن و مشاهده" (Perturb and Observe) یا صعود از تپه میگن. دستگاه کمی ولتاژ رو تغییر میده، اگر توان بالا رفت به تغییر تو همون مسیر ادامه میده تا جایی که توان شروع به کم شدن بکنه. اون وقت برمیگرده به نقطه اوج. نتیجه این کار، نوسان بسیار ریز سیستم در نقطه بیشینه توان پنل خورشیدی هست.
استفاده از مبدل باک سنکرون برای راندمان بالاتر
یه نوع مبدل باک فوقالعاده راندمان بالا وجود داره که تو شارژ کنترلرهای حرفهای بازار استفاده میشه. به این ساختار "مبدل باک سنکرون" میگن. اسمش شاید پیچیده به نظر برسه، اما طراحیش از نظر قطعات خیلی هم ساده و ارزونه (هرچند راهاندازیش ریزهکاریهای خودش رو داره). خوشبختانه تو این آموزش قراره با هم یاد بگیریم که چطور این تکنولوژی رو پیاده کنیم. دو نوع اصلی مبدل باک داریم:
- مبدل باک آسنکرون (غیرهمگام): خیلی رایجه، راندمانش معمولا بین 75 تا 87 درصده. به خاطر داشتن دیود بخشی از انرژی رو هدر میده، اما ساختش به شدت راحته.
- مبدل باک سنکرون (همگام): کمتر استفاده میشه چون ساختش سخته، اما راندمانش بین 88 تا 98 درصده! دیود رو با یک ماسفت جایگزین میکنه و تلفات رو به حداقل میرسونه.
پیشنیاز: برای درک بهتر این بخش، بهتره یه آشنایی اولیه با نحوه کار مبدل باک و ماسفتهای کانال N داشته باشی. مبدلهای باک در یک نگاه:
مبدل باک ولتاژ بالای ورودی رو به ولتاژ پایین خروجی تبدیل میکنه. برخلاف رگولاتورهای خطی (مثل آیسی 7805)، باک اضافه ولتاژ رو به شکل گرما هدر نمیده.
این رگولاتورها سعی میکنن انرژی رو حفظ کنن (توان خروجی مساوی است با توان ورودی منهای تلفات). البته هیچوقت تو دنیای واقعی به راندمان 100 درصد نمیرسیم. یکی از ویژگیهای عالی مبدل باک اینه که با کاهش ولتاژ در خروجی، جریان خروجی میتونه بیشتر از جریان ورودی باشه. مبدل باک یک رگولاتور سوئیچینگه که با استفاده از سیگنال PWM، ترانزیستور، خازن و سلف ولتاژ رو تنظیم میکنه.
مثالی از مبدل باک آسنکرون: ماژولهای آبیرنگ LM2596 که تو بازار هستن، نمونه بارز مبدل آسنکرونن. این ماژولها از یک دیود و یک سوئیچ داخلی استفاده میکنن.
راندمانشون بد نیست، اما اگر دقت کرده باشی حتی وقتی زیر بار اسمی خودشون کار میکنن، به شدت داغ میشن! این گرما نتیجه همون تلفات انرژی و سوئیچینگ هست. چرا مبدل آسنکرون انرژی هدر میده؟
مشکل اصلی این مبدلها برای رسیدن به راندمان 98 درصد، حضور دیود در مداره. دیود برای جلوگیری از برگشت جریان لازمه، اما وقتی جریان ازش عبور میکنه یک افت ولتاژ (حدود 0.4 تا 1.2 ولت) ایجاد میکنه.
شاید این عدد کوچیک به نظر برسه، اما وقتی مدار داره جریان بالایی میکشه، همین افت ولتاژ ضربدر جریان مدار میشه و تبدیل به گرمای شدیدی میشه که همون توان هدررفته ماست.
مثل این میمونه که لوله آب خونهت نشتی داشته باشه. آبی که بهت میرسه کمتر از چیزیه که کنتور ثبت کرده و باید پول بیشتری بدی! تو سیستم خورشیدی هم یعنی انرژی پنل به جای شارژ باتری، داره مدار رو داغ میکنه. مبدل باک سنکرون: راه حل خیلی سادست! دیود رو بردار و به جاش یک ماسفت قرار بده. اینطوری افت ولتاژ دیود تقریبا حذف میشه.
برخلاف ترانزیستورهای BJT یا دیودها، ماسفت وقتی روشن میشه مثل یک کلید مکانیکی عمل میکنه و افت ولتاژ ثابتی نداره. ماسفتها به شدت سریع هستن و میتونن تو کسری از نانوثانیه خاموش و روشن بشن. نکته مهم اینه که باید از ماسفت کانال N استفاده کنیم. ماسفتها در حالت روشن یک مقاومت داخلی (Rds-on) دارن.
مقاومت داخلی ماسفتهای کانال N خیلی پایینتر از کانال P هست. همین باعث میشه وقتی ماسفت روشن میشه، افت ولتاژ روی اون به مراتب کمتر از یک دیود باشه.
نحوه کارش هم اینطوریه که وقتی ماسفت بالایی (Q2) روشنه، پایینی (Q3) خاموشه و برعکس. البته باید یک زمان مرده (Deadtime) تو برنامهنویسی لحاظ بشه تا این دو تا هیچوقت همزمان روشن نشن، وگرنه منبع تغذیه اتصال کوتاه میشه و مدار میسوزه! خیلی ساده به نظر میرسه؟ راستش نه، چالشهای خودش رو داره! چالش اصلی مبدل سنکرون:
چالش اول تو مبدل سنکرون اینه که باید دو تا ماسفت رو با زمانبندی دقیق روشن و خاموش کنی. تو مبدلهای ارزونتر، دیود خودش کار مسدود کردن جریان معکوس رو بدون نیاز به کدنویسی انجام میداد. اما اینجا ماسفتها باید کاملا هماهنگ (سنکرون) کار کنن.
درایو کردن ماسفت پایینی (Q3) راحته چون پایهش به زمین وصله. اما ماسفت بالایی (Q2) چون پایهش رو هواست (به نقطه بین دو ماسفت وصله)، برای روشن شدنش به یک آیسی درایور نیمپل نیاز داره که مدار پمپ شارژ (Charge Pump) داشته باشه.
پمپ شارژ با استفاده از یک خازن، ولتاژ رو بالاتر از ولتاژ ورودی مدار میبره تا مطمئن بشیم ماسفت بالایی ولتاژ کافی برای باز شدن کامل رو دریافت میکنه. اگر ولتاژ گیت به اندازه کافی بالا نباشه، ماسفت به جای کلید، مثل یک مقاومت متغیر عمل میکنه و به سرعت داغ میشه. درایور تضمین میکنه که ماسفت تو ناحیه اشباع کار کنه و کمترین مقاومت داخلی رو داشته باشه.
چالش دوم، سوختن مکرر ماسفت سمت پایین تو پروژههای دستسازه که خیلی از علاقهمندان رو کلافه کرده. تو قدم بعدی میگیم چطور این مشکل رو حل کردیم. استفاده از مبدل سنکرون در حالت آسنکرون: شاید برات جالب باشه که بدونی داخل همه ماسفتها به طور ذاتی یک دیود موازی (به اسم دیود بدنه) وجود داره.
اگر تو مدار ما، ماسفت پایینی (Q3) رو کلا خاموش نگه داریم، جریان از طریق همون دیود بدنه عبور میکنه و مدارمون تبدیل میشه به یک مبدل آسنکرون با راندمان پایین. اما وقتی اون رو روشن کنیم، جریان از مسیر راحتتری (مقاومت پایین ماسفت) عبور میکنه و مدار سنکرون میشه. پس میشه Q3 رو خاموش کرد اما خب هدف ما بالاترین راندمان بود! واقعا به همین سادگیه؟
بله و خیر! تئوریش سادست اما پیادهسازیش بدون اینکه ماسفتها منفجر بشن، لم خاصی داره. این نکات معمولا تو کتابهای دانشگاهی پیدا نمیشه و بیشتر فوت کوزهگری طراحای صنعتیه. خیلی از طراحها این اطلاعات رو مخفی نگه میدارن، اما تو جامعه متنباز، هدف ما به اشتراکگذاری همون فوت و فنهاست.
در مراحل بعدی بهت میگم که چطور با همکاری و بررسیهای دقیق، این باگهای رایج تو مدارهای باک سنکرون رو برای همیشه حل کردیم.
حل مشکل سوختن ماسفتهای سمت پایین (Low-Side)
یکی از مشکلات رایجی که خیلی از طراحها باهاش درگیر بودن، سوختن مکرر ماسفت پایینی (Q3) بود. با بررسیهای دقیق متوجه شدیم این باگ به خاطر عملکرد سیستم در حالت بدون بار یا شرایط خاص ولتاژی اتفاق میافته. برای حل این مشکل مدتها زمان گذاشتیم. راهحلی که بهش رسیدیم کاملا نرمافزاری بود و نیاز به تغییر مدار نداشت!
این مشکل دقیقا تو تمام مدارهای باک سنکرون دستساز وجود داره و دلیل اصلیش هم رفتار آیسی درایور تو دیوتیسایکلهای (Duty Cycle) خیلی پایینه. بیا اول ببینیم آیسی درایور ماسفت چطور کار میکنه تا مشکل رو بهتر درک کنی. درایور ماسفت چطور کار میکنه؟
آیسیهایی مثل IR2101 نیاز به دو تا سیگنال مجزا برای روشن کردن ماسفت بالا و پایین دارن. کنترل این دو سیگنال با آردوینو کار سختیه چون باید زمانهای مرده (Deadtime) رو دستی محاسبه و اعمال کنی. وقتی HIN یک باشه، ماسفت بالا روشنه و وقتی LIN یک باشه ماسفت پایین. اما ما برای راحتی از آیسی IR2104 استفاده کردیم که کار رو به شدت ساده میکنه.
این آیسی به جای دو تا سیگنال، فقط یک سیگنال PWM از آردوینو میگیره و خودش به طور معکوس اون رو بین دو ماسفت تقسیم میکنه. ضمن اینکه زمان مرده رو هم به صورت سختافزاری روی مدار اعمال میکنه. علاوه بر پین ورودی، یک پین SD (Shut down) هم داره که کنترل همهچیز دستشه. وقتی SD صفر بشه، هر دو ماسفت رو درجا خاموش میکنه، فارغ از اینکه سیگنال ورودی چی باشه.
وقتی SD یک باشه، اگر ورودی PWM روشن باشه ماسفت بالایی کار میکنه و ماسفت پایینی خاموشه. وقتی ورودی PWM خاموش باشه، ماسفت بالایی خاموش و ماسفت پایینی روشن میشه. این یعنی هرچی درصد دیوتیسایکل بالاتر بره، ماسفت بالایی بیشتر روشنه و ماسفت پایینی کمتر. و برعکس! حالا متوجه مشکل شدی؟ مشکل کجاست؟
مشکل اینجاست که در مبدل سنکرون، ماسفت پایینی (Q3) قرار بود نقش دیود رو بازی کنه. اما وقتی دیوتیسایکل بیش از حد پایین بیاد، Q3 زمان بیشتری روشن میمونه.
در این حالت، جریان به جای اینکه از پنل به باتری بره، به صورت معکوس از باتری به سمت مدار سرازیر میشه! تو این شرایط Q3 دیگه نقش دیود رو بازی نمیکنه، بلکه تبدیل به یک اتصال کوتاه میشه و زیر جریان معکوس شدیدا داغ میکنه و میسوزه. پس نباید اجازه بدیم دیوتیسایکل از یک حد مشخصی پایینتر بیاد.
راهحل طلایی:
دو تا راهحل داشتیم. یا یک آیسی درایور خیلی گرونقیمت بخریم که سنسور جریان معکوس داشته باشه، یا اینکه از همون آیسی ارزون IR2104 استفاده کنیم و با یک ترفند نرمافزاری جلوی فاجعه رو بگیریم. ما راهحل نرمافزاری رو انتخاب کردیم. من متوجه شدم که یک "کف مجاز" برای سیگنال PWM وجود داره. فرمولش خیلی سادهست:
- حد پایین PWM = (ولتاژ خروجی / ولتاژ ورودی) * 100
این یعنی سیگنال PWM کنترلر به هیچوجه نباید از این عدد کمتر بشه. این فرمول نشون میده برای حفظ ولتاژ باتری در خروجی، مبدل باک دقیقا به چه نسبتی از ولتاژ پنل نیاز داره.
وقتی سیگنال PWM از این حد پایینتر بیاد، یعنی مبدل داره ولتاژی کمتر از ولتاژ فعلی باتری تولید میکنه و جریان برعکس میشه. باتری تخلیه میشه و ماسفت به فنا میره!
تو کدهای برنامه، ما این فرمول رو نوشتیم. هر وقت سیگنال PWM خواست از این عدد پایینتر بیاد، ESP32 پین SD درایور رو صفر میکنه و مدار رو کلا خاموش میکنه تا ماسفتی نسوزه.
تو این کد، متغیر PPWM همون حد پایینه و متغیر pwmMaxLimited سقف مجازه (چون آیسیهای پمپ شارژ نمیتونن تو دیوتیسایکل 100 درصد کار کنن و باید کمی خاموشی داشته باشن).
- محاسبه حد پایین متناسب با ولتاژ پنل و باتری
- محدود کردن عدد به دست اومده بین صفر و سقف مجاز
- استفاده از تابع constrain برای جلوگیری از خروج PWM از محدوده امن
- ارسال سیگنال امن به پین درایور از طریق تابع ledcWrite
- فعالسازی مجدد درایور مبدل باک
تابع constrain تو آردوینو تضمین میکنه که عدد ما هرگز از اون کف محاسبه شده پایینتر نره. تابع ledcWrite هم مخصوص ESP32 هست و کارش ارسال پالس تنظیمشده به درایوره. با همین چند خط کد ساده، ماسفتها تو سختترین شرایط هم مثل ساعت کار میکنن و نمیسوزن!
جلوگیری از برگشت جریان به پنل خورشیدی
مشکل نشتی جریان در شب: تو تمام مبدلهای باک، ماسفتها یه دیود داخلی (Body Diode) دارن. وقتی شب میشه و ولتاژ پنل خورشیدی افت میکنه و از ولتاژ باتری کمتر میشه، این دیود داخلی تو ماسفت Q2 مسیر رو برای برگشت جریان از باتری به سمت پنل باز میذاره! یعنی تو طول شب، باتریهای عزیزت دارن پنلهای روی پشت بوم رو گرم میکنن و تخلیه میشن.
برای اینکه بالاترین راندمان رو داشته باشیم، نمیتونستیم از یک دیود مسدودکننده معمولی سر راه ورودی استفاده کنیم، چون اونم اتلاف انرژی داشت. پس باید یه فکر اساسی میکردیم. راهحلهای گرون رو بیخیال! میتونستیم از آیسیهای مخصوص ORing استفاده کنیم اما قیمتشون بالا بود و تو بازار سخت پیدا میشدن. راهحل اقتصادی ما:
ما یک ماسفت کانال N دیگه (Q1) رو به صورت برعکس تو مسیر ورودی قرار دادیم. این ساختار رو بهش مسدودکننده معکوس میگن. حالا دیود داخلی Q1 در خلاف جهت دیود داخلی Q2 قرار گرفته و هیچ جریانی نمیتونه از هیچ سمتی نشتی کنه (مگر اینکه هر دو ماسفت همزمان فرمان روشن شدن بگیرن).
چالش این بود که چطور Q1 رو که در سمت ولتاژ بالای مدار قرار داره (High-Side) روشن کنیم؟ پایه گیت این ماسفت با زمین مدار اختلاف پتانسیل زیادی داشت.
برای حل این مشکل از یک ماژول مبدل DC به DC ایزوله (مثل B1212S) استفاده کردیم. این ماژول ارزون، یک ولتاژ 12 ولت کاملا ایزوله به ما میده تا بتونیم خیلی راحت بین پایه گیت و سورس Q1 ولتاژ ایجاد کنیم و ماسفت رو روشن کنیم.
مقاومت R37 برای این گذاشته شده که به محض قطع شدن فرمان، خازن داخلی ماسفت Q1 رو تخلیه کنه تا ماسفت سریعا بسته بشه. فرمان اصلی این بخش از طریق یک ماسفت کوچیکتر (Q4) صادر میشه.
وقتی پین 27 میکروکنترلر روشن میشه، Q4 ولتاژ رو به ماژول ایزوله میرسونه، ماژول ایزوله ولتاژ 12 ولت رو به گیت Q1 میده و مسیر ورود انرژی از پنل خورشیدی باز میشه. و وقتی شب میشه، پین 27 صفر میشه و مسیر کلا قطع میشه.
این ترفند خیلی ساده اما به شدت هوشمندانه و کاربردیه. شاید سرعت واکنشش تو حد میکروثانیه نباشه، اما برای قطع کردن پنل در شب سرعتش کاملا ایدهآله. با این کار، باتریها کاملا ایزوله میشن و هیچ نگرانی بابت خالی شدن شارژ تو شب نخواهی داشت. مگه پنلها خودشون دیود ندارن؟
شاید بپرسی پس دیودهای پشت پنل خورشیدی چیکارهان؟ باید بدونی که پنلها معمولا "دیود بایپس" دارن که فقط برای جلوگیری از داغ شدن سلولها زیر سایهست.
دیود بلاکینگ (مسدودکننده جریان معکوس) در پنلهای جدید وجود نداره، چون تولیدکنندهها فرض میکنن کنترلر شارژ شما خودش باید این سیستم مسدودکننده رو تو دل مدارش داشته باشه! پس گذاشتن این ماسفت ورودی برای مدارت از نون شب هم واجبتره.
اهمیت استفاده از مبدل آنالوگ به دیجیتال (ADC) خارجی
ضعف ADC در آردوینو نانو: پینهای آنالوگ آردوینو فقط 10 بیتی هستن. یعنی ولتاژ بین صفر تا 5 ولت رو فقط به 1024 قسمت تقسیم میکنن. وقتی بخوای ولتاژ و جریانی به بزرگی 80 ولت و 30 آمپر رو با این پینها بخونی، آردوینو هر تغییر کوچیکتر از 78 میلیولت یا 29 میلیآمپر رو اصلا نمیبینه! این یعنی سنجش به شدت پلهپله و نادقیق خواهد بود. ADC داخلی در ESP32:
میکروکنترلر ESP32 یه مبدل 12 بیتی داره که ولتاژ رو به 4096 قسمت تقسیم میکنه (4 برابر دقیقتر از آردوینو!). دقت اندازهگیری ولتاژ میشه 19.5 میلیولت و جریان میشه حدود 7 میلیآمپر. این رزولوشن واقعا خوبه و پردازنده سریع ESP32 هم میتونه سریعا تغییرات رو هندل کنه.
اما یک مشکل بزرگ وجود داره! پینهای آنالوگ ESP32 خطی (Linear) نیستن و تو ولتاژهای نزدیک به صفر و ماکزیمم خطای زیادی دارن. ما تو این پروژه دنبال بالاترین ثبات و دقت بودیم، پس به پینهای داخلی ESP32 هم راضی نشدیم. راهکار: استفاده از ADC فوق دقیق خارجی
برای حل این مشکل، از ماژول ADS1015 یا ADS1115 استفاده کردیم. این تراشهها توسط شرکت تگزاس اینسترومنتس دقیقا برای همین کار ساخته شدن.
وقتی سنسورها رو به این آیسیها وصل میکنی، متوجه میشی که پرشهای ناگهانی اعداد کاملا از بین رفتن! اعداد به شدت ثابت و بدون نویز هستن.
دلیل اصلیش اینه که این ماژول ولتاژ مرجع (Vref) داخلی خودش رو داره. پس اگر نویزی روی خط تغذیه 5 ولت بیفته، هیچ تأثیری روی سنسورهای حساس ما نمیذاره. ضمن اینکه ماژول ADS1115 مبدل 16 بیتی داره! یعنی ولتاژ رو به 65,536 قسمت تقسیم میکنه.
با این دقت وحشتناک بالا، میتونی نوسانات ولتاژ رو تو حد 1.2 میلیولت حس کنی و سیستم به روانترین شکل ممکن نقطه بیشینه توان (MPP) رو ردیابی میکنه. این میزان دقت برای یک شارژ کنترلر حیرتانگیزه! کدومش رو بخرم؟ ADS1115 یا ADS1015؟
هر دو ماژول با یک کتابخونه مشترک تو آردوینو کار میکنن. تفاوتشون اینه که ADS1115 شانزده بیتی هست اما سرعتش 860 نمونه در ثانیهست. از اون طرف ADS1015 دوازده بیتیه اما با سرعت 3300 نمونه در ثانیه کار میکنه.
برای مداری با مشخصات ما (80 ولت و 30 آمپر)، رزولوشن 12 بیتی نسخه ADS1015 کاملا جوابگو و پایداره و من همین نسخه رو روی برد تست کردم. چرا 12 بیت خارجی از 12 بیت داخلی ESP32 بهتره؟
تفاوت اصلی در پایداری (Stability) هست. ما بارها برد رو با ADCهای داخلی آردوینو و ESP تست کردیم، اما ثباتی که این ماژول خارجی بهمون داد بینظیر بود.
از اونجایی که ما با رزولوشن بالای PWM کار میکنیم، نیاز داریم تا سیستم کوچکترین تغییرات رو با ثبات بخونه. نویز روی مقادیر سنسورها باعث اختلال تو الگوریتم MPPT میشه، پس حتما این قطعه رو تو مدارت استفاده کن.
چرا میکروکنترلر ESP32 بهترین انتخاب است؟
میکروکنترلر ESP32 به دو شکل کلی تو بازار پیدا میشه: بردهای توسعه (Dev Board) و ماژولهای خام (WROOM32). از نظر قدرت پردازش و پایهها هر دو کاملا یکسان هستن. برد توسعه روی خودش پورت USB و مبدل سریال داره، اما ماژول خام نیاز به یک تراشه مبدل مثل CH340C برای برنامهریزی داره.
برای این پروژه، من از ماژول خام WROOM32 استفاده کردم چون هم قیمت خیلی مناسبتری داره و هم فضای خیلی کمتری روی برد اشغال میکنه. با اینکه پایههای این ماژول نصب سطحی هستن، اما طراحی برد با این قطعه باعث میشه مدار نهایی حرفهایتر و جمعوجورتر بشه. اگر قسمتهای قبل رو نخوندی، این خلاصه ویژگیهاییه که باعث شد ESP32 رو انتخاب کنم:
- قیمت بسیار مناسب و مقرونبهصرفه
- سازگاری کامل با محیط برنامهنویسی آردوینو (Arduino IDE)
- پردازنده بسیار سریع و قدرتمند 240 مگاهرتزی 32 بیتی دو هستهای
- وایفای و بلوتوث داخلی (نیاز به ماژول جداگانه برای اینترنت اشیا رو حذف میکنه)
- رزولوشن تنظیمشونده PWM تا 16 بیت
- مبدل آنالوگ به دیجیتال 12 بیتی (که البته ما از نوع خارجیش استفاده کردیم)
- هسته کممصرف برای کارهای سبک
- پینهای لمسی خازنی
- مبدل دیجیتال به آنالوگ (DAC) داخلی
مزایای اختصاصی برای سیستم MPPT:
- مهمترین دلیل من رزولوشن 16 بیتی PWM بود! هرچی رزولوشن سیگنال بالاتر باشه، کنترل ولتاژ و جریان تو مدار باک نرمتر و دقیقتر میشه.
- قابلیت اجرای دو برنامه همزمان! تو سیستم MPPT نباید وقفه بیفته. با این پردازنده، هسته اول فقط درگیر مانیتورینگ باتری و اجرای کدهای تنظیم ولتاژه و هسته دوم کار ارسال اطلاعات با وایفای (که کمی زمانبر هست) رو انجام میده. اینطوری مدار کاملا ایمن و فوقسریع عمل میکنه.
- امکانات وایفای و بلوتوث داخلی بدون اینکه فضای اضافهای روی برد گرفته بشه در دسترسه.
- سرعت پردازش خیرهکننده که تو حلقههای کنترلی بسیار حیاتیه.
اهمیت رزولوشن و فرکانس PWM در ESP32:
- تو بردهای آردوینو قدیمی، تنظیم فرکانس PWM کار خیلی پیچیدهای بود و باید با تایمرها سر و کله میزدی.
- اما تو ESP32 با یک دستور ساده فرکانس و رزولوشن رو مشخص میکنی.
- فقط باید به محدودیتهای فیزیکی توجه کنی. هرچی رزولوشن بره بالاتر، سقف فرکانسی که میتونی تولید کنی میاد پایین.
- مثلا برای رزولوشن 16 بیت، حداکثر فرکانس 1.22 کیلوهرتزه.
- برای 12 بیت میتونی تا 19.5 کیلوهرتز فرکانس داشته باشی.
- برای 11 بیت تا 39 کیلوهرتز و برای رزولوشنهای پایینتر حتی به 312 کیلوهرتز هم میرسی!
چرا این تنظیمات برای ما حیاتیه؟
- رزولوشن بالاتر باعث میشه پلههای تغییر ولتاژ ظریفتر باشن.
- فرکانس بالاتر باعث میشه سلف بتونه توان بیشتری رو مدیریت کنه و ولتاژ خروجی ریپل کمتری داشته باشه.
- تو الکترونیک باید همیشه یک نقطه تعادل پیدا کنی. فرکانس رو خیلی بالا ببری، تلفات سوئیچینگ ماسفتها زیاد میشه و داغ میکنن.
- رابطه این دوتا هم سادست: حداکثر فرکانس مساوی است با سرعت کلاک پردازنده (80 مگاهرتز) تقسیم بر تعداد پلههای رزولوشن.
- در نهایت بعد از کلی تست، بهترین حالت پایداری رو تو رزولوشن 11 بیتی و فرکانس 39 کیلوهرتز پیدا کردم که به صورت پیشفرض تو کدهای برنامه هم اعمال شده.
محاسبه مقادیر سلف و خازن
نحوه پیدا کردن ظرفیت سلف و جریان اشباع برای طراحی دقیق سلف و خازن تو مدارهای باک سنکرون، فرمولهای خاصی وجود داره که با دونستن ولتاژ و جریان ماکزیمم پنل و باتری محاسبه میشن.
معمولا فایلهای اکسل آمادهای تو فضای وب هست که با وارد کردن پارامترهایی مثل Vmp (ولتاژ بیشینه پنل)، Imp (جریان بیشینه پنل) و Vbatt (ولتاژ باتری)، دقیقا مقدار ظرفیت سلف و خازنهای مورد نیاز مدارت رو محاسبه میکنن.
- تو این محاسبات فرکانس سوئیچینگ رو روی 39 کیلوهرتز میذارن (مگر اینکه تو کد تغییرش داده باشی).
- خروجی این محاسبات به شما نشان میدهد که چه ظرفیتی برای سلف (L) و خازنهای ورودی/خروجی نیاز دارید.
- همچنین حداقل جریان اشباع (Ipk) سلف هم به شما داده میشه تا هستهای رو انتخاب کنید که زیر بار نسوزه.
مقادیر استاندارد و پیشنهادی ما برای این مدار: اگر نمیخوای درگیر محاسبات بشی، میتونی از مقادیری که تو اکثر دستگاههای MPPT تجاری استفاده میشه کمک بگیری. برای مداری که ما داریم میسازیم، استفاده از یک سلف 64 میکروهانری با جریان قابل تحمل بالای 30 آمپر عالیه. برای خازنهای C7 و C8 هم ظرفیت 470 میکروفاراد جوابگوی نیازت خواهد بود و سیستم رو پایدار نگه میداره.
بررسی شماتیک نهایی شارژ کنترلر
این شماتیک کامل و نهایی بردی هست که طراحی کردیم. اگر قصد داری دقیقا با همین مشخصات مدار رو بسازی، نیازی به هیچ تغییری نداری. بیا یکم روی بخشهای مختلف این شماتیک زوم کنیم تا ببینیم هر قسمت دقیقا چه کاری انجام میده.
بخش ماسفتهای قدرت:
- یکی از دلایل اصلی کوچیک بودن این برد و راندمان بالاش، انتخاب دقیق ماسفتهای کانال N بوده. ماسفت CSD19505 با مقاومت در حالت روشن 2.6 میلیاهم و تحمل ولتاژ 80 ولت، یک هیولای واقعی برای کاهش تلفات حرارتیه.
- توان یک دونه از این ماسفتها معادل سه تا ماسفت معروف IRF3205 موازی شده هست. ضمن اینکه شارژ گیت به مراتب کمتری داره و موقع سوئیچ زدن انرژی کمتری مصرف میکنه.
- اگر خواستی ماسفت دیگهای جایگزین کنی حتما تحمل ولتاژش بالای 80 ولت باشه، جریانش بالای 90 آمپر و مقاومت Rds-on کمتر از 4 میلیاهم باشه.
بخش میکروکنترلر:
- تراشه U8 همون ماژول ESP32 هست.
- مقاومتهای R25 تا R28 برای جلوگیری از نویز روی کلیدهای فشاری استفاده شدن (Pull-down).
- مقاومتهای R29 و R39 خطوط I2C رو استیبل نگه میدارن (Pull-up).
- خازن C19 یک فیکس سختافزاری معروف برای مشکل آپلود کد در ESP32 هست.
- دیود نوری LED1 و مقاومت R36 هم برای نشانگر وضعیت تعبیه شدن.
بخش مبدل USB به سریال:
- تراشه U9 (مدل CH340C) برای برنامهریزی مدار با کابل USB در نظر گرفته شده.
- آیسی U4 ولتاژ 5 ولت USB رو به 3.3 ولت مورد نیاز ESP32 تبدیل میکنه.
- دیود شاتکی D7 (یا 1N4007) مانع از برگشت جریان از مدار به سمت پورت USB کامپیوترت میشه.
بخش مبدل آنالوگ به دیجیتال (ADC):
- تراشه U10 همون آیسی 12 بیتی ADS1015 هست که دقت بینظیری رو به سیستم میده.
- ولتاژ مرجع این آیسی روی 2.048 ولت تنظیم شده تا با خروجی سنسور جریان همخوانی کامل داشته باشه و از حداکثر ظرفیت رزولوشنش استفاده بشه.
بخش سنجش ولتاژ:
- مقاومتهای R1 و R2 ولتاژ 80 ولت پنل رو به نسبتی کم میکنن تا حداکثر به 1.98 ولت برسه (کمتر از ولتاژ مرجع آیسی ADC تا مقادیر کلیپ نشن).
- مقاومتهای R32، R33 و R34 هم برای سنجش ولتاژ باتری (تا 50 ولت) استفاده شدن. خازنهای فیلتر C1 و C13 هم نویزها رو از این خطوط میگیرن.
بخش سنسور جریان:
- آیسی U1 همون سنسور معروف ACS712 در نسخه 30 آمپری هست.
- با یک ترفند در اتصال معکوس پایههای جریان، خروجی این سنسور طوری تنظیم شده که در جریان صفر، ولتاژی نزدیک به صفر تولید کنه. اینطوری از نصف رنج بیاستفاده سنسور چشمپوشی کردیم و دقت خوندن مقادیر رو بالاتر بردیم.
- خازن C2 طبق دیتاشیت، پهنای باند سنسور رو کاهش میده تا نویزهای فرکانس بالا روی اندازهگیری جریان DC تأثیری نذارن. مقاومت R5 و خازن C9 هم یک فیلتر پایینگذر برای نرم کردن سیگنال خروجی هستن.
بخش سنجش دما:
- مقاومت NTC (R35) حرارت هیتسینک رو میخونه. خروجی این بخش مستقیما به یکی از پایههای آنالوگ خود ESP32 وصل شده چون نیازی به دقت وحشتناک بالا برای خواندن دما نداشتیم.
بخش مسدودکننده جریان معکوس (BCCU):
- ماسفت Q1 به صورت معکوس قرار گرفته تا جلوی برگشت جریان به پنل رو در شب بگیره.
- ماژول ایزوله B1212 وظیفه ایجاد ولتاژ مستقل 12 ولت برای روشن کردن این ماسفت رو داره که فرمانش از طریق ماسفت کوچیک Q4 از سمت میکروکنترلر صادر میشه.
بخش تنظیمکنندههای ولتاژ مدار:
- دو عدد رگولاتور XL7005A (U5 و U6) ولتاژ بالای مدار رو کاهش میدن.
- یکی از اونا ولتاژ 3.3 ولت قطعات دیجیتال رو میسازه و اون یکی ولتاژ حدود 10.6 ولت رو برای فن خنککننده، درایور ماسفت و بخش ایزوله تأمین میکنه.
- ولتاژ 5 ولت سنسور جریان هم توسط آیسی رگولاتور خطی U3 از خط 10.6 ولت تأمین میشه تا پایدارترین حالت ممکن رو داشته باشه.
هسته اصلی مبدل باک سنکرون:
- ماسفتهای Q2 و Q3 وظیفه سوئیچینگ اصلی رو دارن.
- سلف L1 ذخیرهساز انرژی مدار هست.
- آیسی درایور IR2104 فرمان PWM رو به گیت ماسفتها اعمال میکنه.
- دیودهای شاتکی D1 و D2 زمان خاموش شدن ماسفتها رو تسریع میکنن تا تلفات حرارتی کمتر بشه.
- مقاومتهای پایینکش (Pull-down) مثل R13 و R20 جلوی روشن شدن تصادفی مدار موقع اتصال کابل USB یا ریست شدن برد رو میگیرن (این یک نکته طلایی برای جلوگیری از سوختن ماسفتهاست).
طراحی برد مدار چاپی (PCB)
طراحی این برد با استفاده از قطعات نصب سطحی (SMD) انجام شده تا مدار در فشردهترین حالت ممکن قرار بگیره. مسیرهای انتقال جریان با ضخامت بالا طراحی شدن تا بتونن جریانهای بالای 30 آمپر رو بدون مشکل هدایت کنن.
به دلیل استفاده زیاد از قطعات SMD و Viaهای فراوان (مسیرهای ارتباطی بین لایهها)، ساخت دستی این مدار تو خونه با اسیدکاری کمی مشکله و بهتره که از شرکتهای چاپ PCB برای تولیدش کمک بگیری.
این پروژه شاید اولین برخورد خیلی از علاقهمندان با قطعات SMD باشه. اما اصلا نگران نباش، چون لحیمکاری این قطعات اگر اصولش رو بدونی، حتی از قطعات پایهدار (DIP) هم لذتبخشتر و سریعتره.
لیست قطعات و ابزارهای مورد نیاز
برای ساخت این شارژ کنترلر فوقحرفهای، باید یک سری قطعات خاص رو تهیه کنی. بهتره قبل از شروع، همه موارد زیر رو روی میز کارت آماده کنی.
- ماژول میکروکنترلر ESP32 WROOM32
- آیسی مبدل آنالوگ به دیجیتال ADS1115 یا ADS1015
- 3 عدد ماسفت قدرت CSD19505 با مقاومت فوقپایین
- سنسور جریان ACS712 مدل 30 آمپری
- آیسی درایور ماسفت IR2104
- مبدل ایزوله B1212
- 2 عدد رگولاتور ولتاژ باک XL7005A (تحمل ولتاژ بالا)
- تراشه مبدل USB به سریال CH340C
- نمایشگر کاراکتری LCD 16x2 با درایور I2C
- رگولاتور خطی AMS1117 نسخه 3.3 ولتی و 5 ولتی
- دیودهای SS310 و M7 (مطابق شماتیک)
- مجموعهای از مقاومتها و خازنهای SMD
- هسته توروئیدی و سیم لاکی برای ساخت سلف
- کانکتورها، کلیدهای فشاری و قطعات مکانیکی جانبی
ابزارهای مورد نیاز برای مونتاژ:
- هویه با نوک مناسب و سیم لحیم با کیفیت
- پنس ضدالکتریسیته ساکن برای برداشتن قطعات کوچیک
- قلعکش
- هیتر هوای گرم (برای قطعات SMD اختیاری اما به شدت توصیه میشه)
- خمیر قلع و روغن لحیم (فلکس)
نکاتی درباره قطعات نصب سطحی (SMD)
اگر تا حالا با قطعات نصب سطحی (SMD) کار نکردی، اصلا جای نگرانی نیست. حتی میتونی بعضی از آیسیها رو از روی بردهای اوراقی قدیمی با هیتر جدا کنی و اینجا استفاده کنی.
روی مقاومتهای SMD کدهایی نوشته شده که مقدارشون رو مشخص میکنه. مثلا کد 103 یعنی 10 کیلواهم، یا کد 222 یعنی 2.2 کیلواهم (عدد آخر تعداد صفرهاست).
اما خازنهای SMD هیچ نوشتهای روشون ندارن! اگر داری از خازنهای بازیافتی استفاده میکنی، حتما باید یک مولتیمتر خازنسنج داشته باشی تا قبل از لحیم کردن، ظرفیت دقیقشون رو بررسی کنی.
مونتاژ برد با هویه معمولی
اگر هیتر نداری، میتونی تمام قطعات SMD رو فقط با یک هویه نوکتیز لحیم کنی. این همون روشیه که خیلی از حرفهایها وقتی ابزار کامل ندارن ازش استفاده میکنن.
- اول فقط یک دونه از پدهای روی برد رو کمی قلعاندود کن.
- قطعه رو با پنس بگیر و دقیقا سر جاش بذار.
- حالا با نوک هویه، اون پدی که قلع زده بودی رو گرم کن تا قطعه بهش بچسبه و ثابت بشه (مثل یک لنگر عمل میکنه).
- وقتی قطعه سر جاش محکم شد، میتونی بقیه پایهها رو به راحتی یکییکی لحیم کنی.
- استفاده از کمی روغن لحیم (فلکس) کار رو فوقالعاده تمیز و راحت میکنه.
- در نهایت اگر روی برد کثیف شد، با یک مسواک قدیمی و کمی الکل یا تینر فوری، برد رو بشور تا براق و تمیز بشه.
مونتاژ برد با خمیر قلع و هیتر
اگر هیتر هوای گرم داری، سرعت کارت دهها برابر میشه و از مونتاژ کردن بینهایت لذت میبری. کافیه این مراحل رو دنبال کنی:
- یک سرنگ خمیر قلع بردار.
- روی هر پد مسی یک مقدار خیلی کم خمیر قلع قرار بده.
- قطعات رو با پنس بردار و روی خمیرها بذار (حتی اگر دقیق هم تراز نبودن نگران نباش).
- با هیتر روی قطعات حرارت بده.
- به محض اینکه خمیر قلع ذوب بشه، نیروی کشش سطحی باعث میشه قطعه دقیقا در مرکز پدها قرار بگیره و خودش رو تراز کنه!
- اگر قطعهای کج موند، همونطور که حرارت میدی با پنس یه تکون کوچیک بهش بده تا سر جاش بشینه.
- به همین سادگی!
نکته مهم در نصب پورت USB
سوکتهای Mini USB معمولا زیر خودشون دو تا زائده پلاستیکی دارن که برای جا رفتن تو سوراخهای برد طراحی شدن. از اونجایی که ما زیر این قطعه مسیرهای مسی رد کردیم، سوراخی برای این زائدهها در نظر گرفته نشده.
پس برای اینکه سوکت کاملا صاف و کیپ روی برد بشینه، باید اون دو تا زائده کوچیک رو با کاتر یا سیمچین ببری تا کف سوکت کاملا تخت بشه.
تفاوت نسخههای تراشه CH340
اگر برای ارتباط USB از تراشه CH340C استفاده میکنی، نیازی به نصب کریستال روی پد X1 نداری، چون این نسخه کریستال داخلی داره. اما اگر تراشه CH340G خریدی، حتما باید یک کریستال 12 مگاهرتزی روی اون پد لحیم کنی تا تراشه بتونه با کامپیوتر ارتباط برقرار کنه. پیشنهاد من استفاده از همون نسخه CH340C هست که کار رو خیلی تمیزتر میکنه.
نصب هیتسینک و عایقبندی ماسفتها
این یکی از مهمترین بخشهای مونتاژه! ترانزیستورهایی که پکیج TO-220 دارن، فلز پشتشون مستقیما به پایه "درین" وصله. اگر اونها رو بدون عایق به یک هیتسینک مشترک پیچ کنی، عملا پایههای درین اونها رو به هم اتصالی دادی.
طبق شماتیکی که داشتیم، درین Q1 و Q2 به هم وصلن و نیازی به عایق بینشون نیست. اما درین Q3 کاملا متفاوته و اگر به هیتسینک بچسبه کل مدارت اتصال کوتاه میشه. پس Q3 حتما باید عایقبندی بشه.
- اول ماسفتها رو روی برد لحیم کن.
- هیتسینک رو پشت ماسفتها قرار بده.
- محل سوراخها رو با ماژیک علامت بزن.
- با دریل و مته مناسب (مثلا 3 میلیمتری) هیتسینک رو سوراخ کن.
- برای ایجاد رزوه، میتونی اول یک پیچ رو با فشار داخل سوراخها بپیچونی تا مسیر باز بشه.
مراحل عایقبندی:
- یک واشر پلاستیکی مخصوص عایق رو داخل سوراخ ماسفت قرار بده (یا دور پیچ بنداز).
- ورق میکا یا پد سیلیکونی انتقال حرارت رو بین ماسفت و هیتسینک قرار بده.
- پیچ رو از داخل واشر پلاستیکی رد کن و محکم ببند تا هیچ تماس فلزی برقرار نشه.
چرا پیشنهاد میکنیم همه ماسفتها رو عایق کنی؟ اگر فقط Q3 رو عایق کنی، فلز هیتسینک ولتاژ بالای پنل خورشیدی رو به خودش میگیره! در این حالت اگر موقع کار یا تست مدار، دستت یا سیم دیگهای به هیتسینک بخوره، فاجعه به بار میاد.
بهترین کار اینه که برای هر 3 تا ماسفت از پد عایق و واشر پلاستیکی استفاده کنی تا هیتسینک کاملا از نظر الکتریکی خنثی و ایمن باشه.
نصب سنسور دمای NTC
برای خواندن دمای هیتسینک از مقاومت حرارتی NTC استفاده کردیم. من از مدل واشردار (حلقوی) استفاده کردم چون به راحتی با همون پیچهای ماسفت روی هیتسینک محکم میشه و نیازی به عایق نداره.
اگر از مدلهای معمولی (شکل قطرهای یا خازنی) استفاده میکنی، میتونی اون رو با چسب حرارتی روی هیتسینک بچسبونی. پایههای سنسور هم به جایگاه R35 روی برد وصل میشن و چون قطبیت ندارن، فرقی نمیکنه کدوم پایه رو به کدوم سوراخ وصل کنی.
انتخاب فیوز مناسب برای ایمنی مدار
درسته که این شارژ کنترلر پر از پروتکلهای امنیتی نرمافزاریه، اما باز هم برای حوادث پیشبینی نشده (مثل هنگ کردن میکروکنترلر) باید از محافظ سختافزاری استفاده کنی. به همین دلیل فیوزهای خودرویی بهترین انتخاب برای این مدار هستن.
تو تصاویر ممکنه ببینی که من فیوزها رو مستقیم روی برد لحیم کردم، اما اگر جا فیوزی مناسب داری، بهتره از اون استفاده کنی تا تعویضشون تو آینده راحتتر باشه. چطور فیوز رو انتخاب کنیم؟ فیوز F1 برای قسمت ورودی پنله و باید تحمل جریانش کمی بیشتر از حداکثر جریان خروجی پنل خورشیدیت (Imp) باشه.
فیوز F2 برای بخش خروجی و باتریه. اگر باتریت با 20 آمپر شارژ میشه، یک فیوز 20 یا 25 آمپری براش مناسبه. استفاده از فیوز 35 آمپری تو سیستمی که جریان کمتری میکشه باعث میشه فیوز تو مواقع خطر به موقع عمل نکنه و مدارت آسیب ببینه.
اتصال کابلهای قدرت به برد
پدهای اتصال پنل خورشیدی و باتری روی برد رو بزرگ طراحی کردم تا دستت برای انتخاب نوع اتصال باز باشه. میتونی کابلهای ضخیم رو مستقیما روی برد لحیم کنی و با کانکتورهای خارجی ارتباط رو برقرار کنی.
اما من ترجیح دادم از ترمینالهای پیچی 50 آمپری روی برد استفاده کنم تا کابلکشی راحتتر بشه. اگر خواستی از این ترمینالها استفاده کنی و قاب سهبعدی رو پرینت بگیری، باید قاب پلاستیکی خود ترمینال رو در بیاری تا جا بشه.
تکمیل مونتاژ قطعات پایه دار (DIP)
نکته طلایی تو مونتاژ بردهای ترکیبی اینه که همیشه اول باید تمام قطعات نصب سطحی (SMD) رو به طور کامل لحیم کنی. اگر اول بری سراغ قطعات بزرگ پایهدار (مثل خازنهای الکترولیتی و ترمینالها)، فضای دستت برای گرفتن هیتر یا هویه روی قطعات کوچیک کاملا بسته میشه. پس اول SMDها رو تموم کن، بعد برو سراغ بقیه.
طراحی و پیچیدن سلف توروئیدی
اگر از طراحی پیشنهادی استفاده میکنی، میتونی مستقیم بری مرحله بعد. اما اگر هسته سلفی که خریدی متفاوته، اینجا برات میگم چطور محاسباتش رو انجام بدی.
- هستهای که من استفاده کردم مدل 0077071A7 هست.
- جنسش از متریال Kool Mμ (سنداست) ساخته شده که تلفات حرارتیش 50 درصد کمتر از پودر آهن معمولیه.
- ابعادش هم حدود 33.5 میلیمتر قطر بیرونی و 11 میلیمتر ضخامت داره.
چطور تعداد دور سیم رو محاسبه کنیم؟
- معمولا از هستههای زرد-سفید (پودر آهن) برای این مدارها استفاده میشه، اما متریال سنداست برای کاهش حرارت بهتره.
- برای محاسبه، میتونی از ماشینحسابهای آنلاین سلف مثل سایت Coil32 کمک بگیری.
- کافیه ضخامت سیمت رو انتخاب کنی (من از سیم نمره 16 AWG استفاده کردم).
- اندوکتانس مورد نیاز رو که 64 میکروهانری هست، در فیلد مربوطه وارد کن.
- ابعاد دقیق هستهای که داری (قطر بیرون، قطر درون و ضخامت) رو بر حسب میلیمتر وارد کن.
- نفوذپذیری مغناطیسی (Relative Permeability) هسته رو که معمولا تو دیتاشیتش نوشته شده رو وارد کن (برای هسته من 60 بود).
- با زدن دکمه محاسبه، دقیقا بهت میگه چند دور سیم باید روی این هسته بپیچی تا به ظرفیت دلخواه برسی.
درک مفهوم جریان اشباع سلف جریان اشباع یعنی اون مقدار جریانی که اگر از سلف عبور کنه، سلف دیگه نمیتونه میدان مغناطیسی بیشتری ذخیره کنه و ظرفیتش (اندوکتانس) به شدت افت میکنه. وقتی یک سلف اشباع بشه، عملا تبدیل به یک تیکه سیم معمولی میشه و مدارت تو کسری از ثانیه اتصال کوتاه شده و میسوزه!
به همین دلیل، محاسبه اینکه سلف ما تو چه جریانی اشباع میشه خیلی حیاتیه تا توان خروجی دستگاه رو بر اساس اون محدود کنیم. پیدا کردن جریان اشباع کار راحتی نیست و یا باید از روی جداول پیچیده دیتاشیت سازنده محاسبه بشه، یا با استفاده از ابزارهای پیشرفته آزمایشگاهی (مثل اسیلوسکوپ) تست بشه. Formula/ Calculator Method:
ساخت عملی سلف قدرت
اگر داری از هستهای مشابه مدل معرفی شده استفاده میکنی، کارت خیلی سادست:
- حدود 1.3 متر سیم لاکی نمره 16 AWG (حدود 1.3 میلیمتر ضخامت) ببر.
- دقیقا 30 دور سیم رو محکم دور هسته بپیچ. جهت پیچیدن اصلا مهم نیست.
- اضافی سیم رو کوتاه کن اما کمی برای پایه لحیمکاری نگه دار.
- نکته فوقمهم: سیمهای لاکی عایق دارن. حتما دو سر سیم رو با کاتر یا سمباده خوب بتراش تا مس زیری مشخص بشه، وگرنه لحیم نمیشه و مدارت کار نمیکنه!
- حالا یک سلف 64 میکروهانری قلدر با تحمل جریان بالا داری!
تست مقدار اندوکتانس سلف
همیشه بهتره سلفی که خودت پیچیدی رو یک بار تست کنی تا مطمئن بشی خطا تو محاسبات یا دور سیمها نداشتی. من برای اطمینان، سلفم رو با دستگاه LCR متر تست کردم. دستگاه مقدار 63.79 میکروهانری رو نشون داد که دقیقا همون چیزی بود که میخواستم. این دقت بالا واقعا بینظیره! البته نیازی به دستگاههای گرونقیمت آزمایشگاهی نداری.
میتونی با یک تستر قطعات الکترونیکی ارزونقیمت هم یک تست بگیری. با اینکه تستر ارزونقیمت رزولوشن پایینی داره و ممکنه به جای 64 عدد 50 میکروهانری رو نشون بده، اما حداقل متوجه میشی که سلف تو رنج درستیه و اتصال کوتاه یا قطعی نداره. فقط توقع دقت میلیمتری از دستگاههای ارزون نداشته باش.
بررسی جریان اشباع سلف
حالا باید ببینیم این سلف واقعا چقدر جریان رو میتونه تحمل کنه قبل از اینکه اشباع بشه و بسوزه. برای همین یک تست عملی با تجهیزات روی اون انجام دادیم. با ساخت یک مدار پالسی شامل بانک خازنی، ماسفت قدرتمند و یک مقاومت شنت، سلف رو تحت استرس شدید جریانی قرار دادیم.
با تزریق پالسهای جریانی خیلی کوتاه و اندازهگیری افت ولتاژ روی مقاومت شنت با اسیلوسکوپ، میشه رفتار سلف رو دقیقا رصد کرد. منحنی جریانی که روی اسیلوسکوپ نشون داده میشه، گویای همهچیزه.
همونطور که انتظار میرفت، این هسته از نوع اشباع نرم (Soft Saturation) هست. نقطه اشباع دقیقا جاییه که خط راست جریان روی اسیلوسکوپ شروع به خم شدن میکنه. با محاسبه ولتاژ روی مقاومت شنت تو اون نقطه، مشخص شد که این سلف میتونه تا 36 آمپر جریان رو تحمل کنه بدون اینکه دچار اشباع بشه!
- این یعنی ظرفیت سلف ما حتی 3 آمپر بیشتر از چیزیه که پیشبینی کرده بودیم.
- بنابراین مدار با خیال راحت میتونه جریان نامی خودش رو مدیریت کنه.
نصب سلف و خازنهای فیلتر
بعد از اینکه ماسفتها رو جا زدی و سلف رو با موفقیت پیچیدی، وقتشه که سلف رو روی برد قرار بدی و خازنهای بزرگ الکترولیتی رو هم در بخش ورودی و خروجی مدار لحیم کنی تا فیلترهای صافکننده تکمیل بشن.
آمادهسازی قاب جعبه محافظ
برای زیباتر شدن کار و محافظت از مدار، میتونی از فایلهای سهبعدی برای پرینت قاب استفاده کنی. دو مدل قاب طراحی شده؛ یکی مدل باریک برای حالتی که فقط میخوای از اپلیکیشن گوشی استفاده کنی (بدون نمایشگر) و مدل کامل که جا برای نمایشگر LCD و دکمههای تنظیمات هم داره.
نصب فن خنککننده
اگر از هیتسینک بزرگ استفاده میکنی شاید نیازی به فن نداشته باشی. برد اصلی ما برای اتصال فنهای 3 سیمه کامپیوتر طراحی شده که با PWM سرعتشون کنترل میشه. اگر میخوای از یک فن معمولی 12 ولتی 2 سیمه استفاده کنی، باید یک مدار راهانداز کوچیک براش بسازی تا بتونه روشن و خاموش بشه.
نکته مهم: برای کنترل فن با میکروکنترلر، حتما از ماسفتهایی با سطح ولتاژ منطقی (Logic Level) مثل IRLZ44 استفاده کن تا با ولتاژ پایین پینهای ESP32 بتونه کامل روشن بشه.
نصب برد داخل قاب
حالا برد اصلی رو داخل قاب قرار بده و با پیچ محکم کن. اگر از قاب سهبعدی پیشنهادی استفاده کرده باشی، پایههای نگهدارنده از قبل تو کف قاب طراحی شدن و نیازی به خرید اسپیسرهای برنجی نداری.
اتصال نمایشگر LCD و دکمهها
برای نمایشگر از همون LCD های کاراکتری 16 در 2 معروف که پشتشون ماژول I2C دارن استفاده کردیم. از اونجایی که قراره بیشتر از اپلیکیشن موبایل استفاده کنیم، یک نمایشگر ساده کاملا جواب میده. برای دکمهها هم میتونی روی یک تکه فیبر سوراخدار، چهار تا کلید فشاری (Tact Switch) رو لحیم کنی. این کلیدها به عنوان واسط تنظیمات دستگاه عمل میکنن.
چهار رشته سیم مربوط به ارتباط I2C نمایشگر رو به پورت روی برد کلیدها وصل کن و از اونجا با هشت رشته سیم (شامل تغذیه و دیتا)، کل پنل رو به پورت رابط روی برد اصلی متصل کن.
مونتاژ پنل جلویی دستگاه
قاب پرینت شده شامل روکشهای پلاستیکی برای دکمهها هم هست. برای اینکه دکمهها لقی نداشته باشن و صدا ندن، میتونی یک تکه چسب یا فوم کوچیک بین کلید روی برد و روکش پلاستیکی بذاری. حالا برد کلیدها و نمایشگر رو پشت پنل جلویی قرار بده و با پیچ سفت کن.
مونتاژ نهایی و اتصالات
در جعبه رو ببند و پیچهاش رو محکم کن. برای اتصال راحتتر پنل و باتری، میتونی دو رشته سیم ضخیم (مثلا نمره 12 AWG) به ترمینالهای برد ببندی و سر سیمها رو به کانکتورهای XT60 لحیم کنی تا موقع وصل کردن دستگاه کارت سریع و راحت باشه.
اتصال به کامپیوتر برای برنامهریزی
کابل Mini USB رو به پورت روی دستگاه و سر دیگهاش رو به کامپیوتر وصل کن. برای اینکه مدار بتونه برنامهریزی بشه و قطعات به درستی بوت بشن، حتما باید یک منبع تغذیه (مثل باتری یا پنل خورشیدی) به پورتهای قدرت دستگاه وصل باشه تا صفحه نمایش و بقیه بخشها روشن بشن.
آپلود کدهای برنامه روی ESP32
این پروژه هم دقیقا مثل بردهای آردوینو برنامهنویسی میشه. کدهای این پروژه بسیار کامل و حرفهای هستن و هزاران خط برنامه دارن که برای پروژههای آینده هم قابل استفاده هستن.
این کدها تو تبهای مختلف دستهبندی شدن تا خوندنشون راحتتر باشه. خبر خوب اینه که نیازی نیست هیچ چیز پیچیدهای رو تو کدها تغییر بدی! فقط کافیه نام مودم وایفای، رمز عبورش و توکن اپلیکیشن Blynk رو وارد کنی تا اتصال به گوشی برقرار بشه. بقیه تنظیمات مثل جریان و ولتاژ باتری به راحتی از طریق منوی روی خود دستگاه قابل تنظیم هستن. نکته بسیار مهم:
- اگر از آیسی ADC مدل ADS1115 استفاده میکنی، باید تو کدهای برنامه خط مربوط به این تراشه رو فعال کنی. در غیر این صورت تنظیمات روی همون ADS1015 باقی میمونه.
مراحل آپلود کد:
- ابتدا نرمافزار Arduino IDE رو نصب و باز کن.
- بردهای مربوط به ESP32 رو به نرمافزار اضافه کن.
آمادهسازی کدها:
- کدهای پروژه رو که به صورت متنباز منتشر شدن، دانلود کن.
- تمام فایلهای با پسوند ino باید داخل یک پوشه با نام مشابه فایل اصلی قرار بگیرن تا نرمافزار بتونه همه رو با هم باز کنه.
- وقتی فایل اصلی رو باز میکنی، باید تبهای مختلف برنامه رو بالای صفحه ببینی.
نصب کتابخانههای پیشنیاز:
- کتابخانه اتصال Blynk به ESP32
- کتابخانه نمایشگر I2C (مثلا نسخه Robojax)
- کتابخانه راه انداز Adafruit ADS1X15
- بدون نصب این کتابخونهها، برنامه خطا میده و آپلود نمیشه.
تنظیمات اتصال وایفای و اینترنت اشیا:
- تو کدها بگرد و عبارت ssid رو پیدا کن و اسم مودم وایفای خونه رو جلوش بنویس.
- مقدار pass هم همون رمز وایفای شماست.
- برای اپلیکیشن Blynk، باید توکنی (Token) که موقع ثبتنام برات ایمیل میشه رو کپی کنی و جلوی عبارت auth قرار بدی تا مدارت بتونه فقط با گوشی خودت ارتباط بگیره.
انتخاب نوع مبدل آنالوگ به دیجیتال:
- اگر قطعه ADS1015 رو خریدی، به هیچ کدی دست نزن.
- اما اگر ADS1115 رو روی برد نصب کردی، باید خط Adafruit_ADS1015 ads; رو حذف کنی و تو خط بعدی دو تا اسلش (//) پشت عبارت ADS1115 رو برداری تا اون فعال بشه.
تنظیم هزینه برق برای محاسبه سودآوری:
- اپلیکیشن میتونه بر اساس توان تولیدی پنلها، بهت بگه تا حالا چقدر تو پول برق صرفهجویی کردی!
- فقط کافیه تو قسمت USER PARAMETERS نرخ قیمت هر کیلووات ساعت برق تو کشورت رو پیدا کنی و جلوی electricalPrice وارد کنی.
تنظیمات پروگرامر در آردوینو:
- از منوی Tools، برد رو روی ESP32 Dev Module تنظیم کن.
- سرعت آپلود (Upload Speed) روی 921600 باشه.
- فرکانس پردازنده روی 240MHz و حافظه روی 4MB با تنظیمات پیشفرض SPIFFS باشه.
- پورت COM مناسب رو انتخاب کن.
آپلود و لذت بردن:
- دکمه تیک رو بزن تا کامپایل بشه.
- بعد از کامپایل موفق، دکمه فلش رو بزن تا برنامه روی برد آپلود بشه.
- تبریک میگم! شارژ کنترلر شما الان نرمافزار حرفهای خودش رو داره.
کالیبراسیون سنسورها:
- سنسور جریان به صورت خودکار خودش رو کالیبره میکنه.
- سنسور دما بر اساس مقاومت NTC تنظیم میشه (اگر مقاومتت 10 کیلواهمیه همون رو تو کد تنظیم کن).
- برای کالیبره کردن ولتاژ ورودی و خروجی، باید از سریال مانیتور (Serial Monitor) استفاده کنی. یک ولتاژ ثابت به ورودی بده و ولتاژش رو با ولتمتر دستی اندازه بگیر. اگر عددی که سریال مانیتور نشون میده تفاوت داره، باید ضریب inVoltageDivRatio رو تو کدهای کالیبراسیون کمی تغییر بدی و دوباره آپلود کنی تا اعداد کاملا منطبق بشن. همین کار رو برای خروجی باتری هم تکرار کن.
نکات تکمیلی برای حرفهایترها:
- تنظیمات از طریق LCD رو حافظه فلش ذخیره میشن و با هر بار روشن شدن مدار بارگزاری میشن. اگر نمایشگر نداری، میتونی تو کدها قابلیت autoload رو غیرفعال کنی و مقادیر باتری رو مستقیما تو خود کدها تنظیم کنی.
- خاموش کردن وایفای از منو باعث ذخیره شدن حدود نیم وات توان میشه.
- میتونی رزولوشن و فرکانس PWM رو برای آزمایشهای بیشتر تغییر بدی.
- با تغییر متغیرهای میانگینگیری (avgCount)، میتونی سرعت ردیابی الگوریتم رو بالاتر ببری یا به جاش مقادیر باثباتتری روی نمایشگر ببینی.
تغییرات برای پشتیبانی از باتریهای ۸۰ ولتی
اگر سیستم خورشیدیت خیلی بزرگه و میخوای از باتریهایی با ولتاژ بالا (تا 80 ولت) استفاده کنی، باید مقسم ولتاژ خروجی رو دستکاری کنی تا برد بتونه این ولتاژ رو با خیال راحت بخونه. تغییرات مقاومتها:
- مقاومت R32 رو به 200 کیلواهم تغییر بده.
- مقاومت R34 رو به 5.1 کیلواهم تغییر بده.
- مقاومت R33 رو کلا از روی مدار بردار و جاش رو خالی بذار.
تغییرات پارامترهای نرمافزاری:
- باید ضرایب ولتاژ رو تو فایل اصلی برنامه عوض کنی.
- متغیر outVoltageDivRatio رو به عدد 40.2156 تغییر بده.
- متغیر vOutSystemMax رو از 50 به 80.0000 ارتقا بده.
هشدار بسیار مهم:
- اگر از آیسی 16 بیتی ADS1115 استفاده میکنی، این ارتقا هیچ مشکلی نداره و دقتت حفظ میشه. اما اگر از نسخه 12 بیتی (ADS1015) استفاده میکنی، بالا بردن دامنه اندازهگیری تا 80 ولت باعث میشه دقت خواندن ولتاژ خروجی به شدت افت کنه! پس لطفا اگر دقیقا نمیدونی داری چیکار میکنی این تغییر رو انجام نده تا مدارت آسیب نبینه.
پشتیبانی از پنلهای خورشیدی با ولتاژ بالا
این مدار پتانسیل این رو داره که حتی ولتاژهای بالاتر از 80 ولت رو از پنل خورشیدی دریافت کنه! اما به شدت توصیه میکنم که فقط در صورتی این تغییرات رو اعمال کنی که تخصص کافی داشته باشی. در ضمن، با این تغییر قابلیت استفاده از دستگاه به عنوان منبع تغذیه (PSU Mode) رو از دست میدی. جزئیات این تغییرات نیاز به دانش مهندسی داره، پس من فقط سرنخها رو بهت میدم تا خودت پیداشون کنی.
فقط اگر به کاری که میکنی کاملا مسلطی این کار رو انجام بده! اصلاح نسبت مقسم ولتاژ ورودی:
- چون ولتاژ پنلها قراره از 80 ولت بالاتر بره، مقاومتهای مقسم ورودی باید طوری تغییر کنن که خروجی اونها روی حداکثر ولتاژ پنل، هرگز از ولتاژ مرجع آیسی ADC (یعنی 2.048 ولت) فراتر نره.
نجات رگولاتورهای مدار از سوختن:
- آیسیهای XL7005A که تغذیه بخش دیجیتال رو تأمین میکنن حداکثر 80 ولت رو تحمل میکنن! اگر ولتاژ بالاتر از 80 بهشون برسه درجا منفجر میشن. برای حل این مشکل، باید دیود D8 رو کلا از روی مدار برداری تا سیستم فقط از سمت باتری تغذیه بشه.
- با این کار، اگر ولتاژ خروجی به دلیل هر گونه خطایی از ولتاژ باتری (و 80 ولت) فراتر بره، سیستم آسیب میبینه، پس باید خیلی مراقب باشی.
اصلاح کدهای برنامه:
- درست مثل ارتقای باتری، اینجا هم باید ضرایب جدید رو تو کدهای برنامه تنظیم کنی تا میکروکنترلر مقادیر رو اشتباه محاسبه نکنه.
انتخاب ماسفتهای قدرتمندتر:
- ماسفتی که انتخاب میکنی باید ولتاژ تحملش (Vds) کمی بیشتر از ولتاژ پنلت باشه. مثلا برای پنل 150 ولتی، باید ماسفتی پیدا کنی که بالای 150 ولت رو ساپورت کنه.
- مقاومت حالت روشن و ظرفیت جریاندهی ماسفت رو هم باید با دقت بررسی کنی.
تغییر خازن ورودی (C7):
- خازن ورودی C7 باید ولتاژ نامی بسیار بالاتری داشته باشه. اگر پنلت قراره 150 ولت به مدار بده، خازن C7 باید حداقل تحمل 160 تا 200 ولت رو داشته باشه، در غیر این صورت منفجر میشه!
مانیتورینگ اطلاعات از طریق سریال مانیتور
این پروژه قابلیت ارسال تمامی دادهها رو به صورت زنده از طریق پورت USB داره. این قابلیت برای عیبیابی، توسعه الگوریتمها و تستهای آزمایشگاهی بینظیره و میتونی از تو کدهای برنامه فعال یا غیرفعالش کنی. کافیه تو محیط آردوینو دکمههای CTRL+SHIFT+M رو بزنی تا سریال مانیتور باز بشه و سیل عظیمی از دادهها رو ببینی.
متغیرهایی که نمایش داده میشن:
- تعداد خطاها (ERR)، افت ولتاژ شدید (FLV)، وصل نبودن باتری (BNC)
- اخطارهای ولتاژ و جریان شامل افت ولتاژ ورودی (IUV)، اضافهولتاژ ورودی (IOV) و اضافهولتاژ خروجی (OOV)
- اخطار اضافهجریان خروجی (OOC) و حرارت بیش از حد (OTE)
- وضعیتهای فعال بودن حالتهای مدار مثل بازگشت از خطا (REC)، فعال بودن الگوریتم (MPPTA) و حالت دستگاه (شارژر یا منبع تغذیه)
- وضعیت روشن بودن ماسفت مسدودکننده (BYP)، فعال بودن مبدل باک (EN) و روشن بودن فن خنککننده
- توان دریافتی از پنل خورشیدی (PI) و انرژی جمعآوری شده (Wh)
- محدوده فعلی سیگنال PWM و حد پایین امن (PPWM)
- ولتاژ لحظهای پنل (VI) و باتری (VO)
- جریان پنل (CI) و جریان شارژ باتری (CO)
- دمای هیتسینک، وضعیت کالیبراسیون جریان و درصد شارژ باتری (SOC)
- زمان هر سیکل پردازشی میکروکنترلر بر حسب میلیثانیه (LoopT)
نکات:
- برای متغیرهای منطقی مثل وضعیت خطاها، عدد 1 یعنی درست (رخ داده) و عدد صفر یعنی وضعیت نرماله.
ارسال زنده دادهها به اپلیکیشن موبایل (IoT)
این شارژ کنترلر میتونه اطلاعات رو با وایفای به اپلیکیشن موبایل اختصاصی بفرسته و روی فضای ابری ذخیره کنه. اپلیکیشن این دستگاه بر بستر نرمافزار معروف Blynk ساخته شده و هم برای اندروید و هم آیفون در دسترسه. برای نصب این اپلیکیشن:
- نرمافزار رو روی گوشیت نصب کن و یک حساب کاربری بساز.
- اسکنر بارکد داخل اپلیکیشن رو باز کن و بارکد هوشمند مربوط به داشبورد پروژه رو اسکن کن.
- با این کار، تمام رابط کاربری دستگاه با گیجها و نمودارها روی گوشیت کپی میشه!
- فقط کافیه دکمه Play رو بزنی تا مانیتورینگ زنده شروع بشه.
ویژگیهای جذاب اپلیکیشن:
- نمایش زنده و لحظهای انرژی دریافت شده از خورشید
- نمایش توان، ولتاژ و جریان ورودی پنل
- نمایش درصد شارژ باتری و ولتاژ و جریان خروجی
- محاسبه کل کیلووات ساعت برق تولید شده
- تبدیل انرژی تولیدی به ارزش پولی! (میتونی ببینی چقدر پول ذخیره کردی)
- نمایش دمای دستگاه و گرافهای لحظهای از روند تغییرات سیستم در طول روز
- تمام این دادهها روی سرورها ذخیره میشه تا بتونی عملکرد یک سال گذشته پنلهات رو هم تحلیل کنی.
حالا با خیال راحت میتونی تو خونه بشینی و عملکرد سیستم خورشیدی روی پشت بوم رو روی گوشیت مانیتور کنی.
تنظیمات شارژ کنترلر از طریق منوی نمایشگر
درست مثل شارژ کنترلرهای گرونقیمت بازار، ما هم یک رابط کاربری ساده روی نمایشگر LCD برای این دستگاه طراحی کردیم. با این رابط میتونی بدون اینکه نیازی باشه دست به کدهای آردوینو بزنی، تنظیمات مهم دستگاه رو با 4 تا دکمه تغییر بدی. دکمهها شامل جهت چپ، جهت راست، بازگشت و دکمه انتخاب هستن.
- دکمه چپ
- دکمه راست
- بازگشت
- انتخاب (Enter)
صفحه اول مانیتورینگ:
- ردیف اول: توان پنل، انرژی تولید شده، تعداد روزهای کارکرد
- ردیف دوم: درصد باتری، ولتاژ باتری و جریان شارژ فعلی
صفحه دوم:
- ردیف اول: توان، ولتاژ و جریان پنل خورشیدی
- ردیف دوم: درصد، ولتاژ و جریان شارژ باتری
صفحه سوم:
- ردیف اول: اطلاعات کلی تولید توان
- ردیف دوم: یک نوار بارگیری بصری 16 بلوکه برای نمایش سریع شارژ باتری
صفحه چهارم:
- نمایش دمای هیتسینک و وضعیت روشن یا خاموش بودن فن
صفحه پنجم (ورود به تنظیمات):
- وقتی دکمه انتخاب رو بزنی، وارد تنظیمات میشی.
- نکته مهم: ورود به تنظیمات برای ایمنی، شارژ باتری رو موقتا قطع میکنه.
گزینههای منوی تنظیمات:
- انتخاب الگوریتم: اگر ورودی تو پنل یا توربینه، روی حالت MPPT قرارش بده تا بهترین انرژی رو بگیره. اگر ورودی آداپتوره روی CC-CV بذار.
- حالت دستگاه: برای شارژ باتری حتما روی Charger Mode باشه تا پروتکلهای ایمنی باتری فعال بشن. حالت PSU Mode مدار رو به یک منبع تغذیه متغیر تبدیل میکنه که بیشتر به درد آزمایشگاه میخوره.
- حداکثر ولتاژ باتری: این ولتاژ بین صفر تا 50 ولت قابل تنظیمه تا باتری بیش از حد شارژ نشه.
- حداقل ولتاژ باتری: برای محاسبه دقیقتر درصد شارژ باقیمانده استفاده میشه.
- حداکثر جریان شارژ: از این قسمت میتونی محدودیت جریان رو تنظیم کنی تا به باتریهای کوچیک فشار نیاد.
- تنظیمات فن: فعال یا غیرفعال کردن دائمی فن.
- دمای روشن شدن فن: دمایی که فن شروع به کار میکنه (پیشفرض 60 درجه).
- دمای خاموشی ایمن: دمایی که اگر مدار بهش برسه، برای جلوگیری از آتشسوزی کلا سیستم رو خاموش میکنه (پیشفرض 90 درجه).
- وایفای: میتونی ارتباط ابری رو خاموش کنی تا دستگاه شارژ کمتری مصرف کنه.
- بارگزاری خودکار: برای لود شدن سریع اطلاعات ذخیره شده تو آیسی فلش.
- خاموش شدن نور پسزمینه: زمانبندی خاموشی صفحه نمایش بعد از فشردن آخرین دکمه.
- بازگشت به تنظیمات کارخانه.
- و نمایش نسخه فرمور دستگاه.
اتصال به پنلهای خورشیدی
برای راهاندازی این سیستم، من از دو پنل خورشیدی 320 واتی استفاده کردم و اونها رو به صورت سری به هم متصل کردم.
چون فاصله پنلها تا کارگاه نسبتا زیاد بود، استفاده از اتصال سری خیلی به نفعم شد. وقتی پنلها رو سری میکنی، ولتاژ دو برابر میشه و جریان ثابت میمونه. جریان کمتر تو کابلکشیهای طولانی به این معنیه که افت ولتاژ و تلفات حرارتی سیمها به شدت کاهش پیدا میکنه و بیشترین انرژی به شارژ کنترلر میرسه.
راهاندازی سیستم آفگرید
این عکسیه که تو اولین روز راهاندازی شارژ کنترلر تو کارگاه گرفتم. دستگاه به یک باتری پک قوی 2.5 کیلووات ساعتی از نوع LiFePO4 و یک اینورتر سینوسی خالص وصل شده تا برق وسایل کارگاه رو تأمین کنه.
عملکرد این سیستم تو چند ماه گذشته به قدری پایدار و بینقص بوده که هیچ نیازی به دخالت دستی نداشته و تا حالا صدها کیلووات ساعت انرژی رایگان و پاک تولید کرده.
دستیابی به راندمان فوقالعاده ۹۸ درصدی
روی یکی از بردهای آزمایشی که وایفای و نمایشگر نداشت، تستهای دقیقی برای اندازهگیری راندمان تبدیل انرژی انجام دادیم. با استفاده از ولتمتر و آمپرمترهای دقیق در ورودی و خروجی و وصل کردن یک بار حرارتی سنگین، مقادیر توان ورودی و توان خروجی رو با هم مقایسه کردیم تا ببینیم چقدر از انرژی خورشید توی مدار به شکل گرما هدر میره. نتایج این تستها به صورت یک گراف راندمان استخراج شد.
در کمال تعجب، دستگاه توانی حدود 270 وات (با ورودی 61.4 ولت و خروجی 27 ولت) رو با راندمان خیرهکننده 98.6 درصد انتقال داد! این یعنی تقریبا تمام انرژی خورشید بدون هیچ اتلافی مستقیم به باتری سرازیر میشه.
این راندمان بالا خودش رو تو حرارت هیتسینک هم نشون داد. حتی بدون روشن بودن فن خنککننده، ماسفتها تو توانهای بالا فقط کمی گرم میشن که نشون میده انتخاب قطعات و طراحی بخش سنکرون کاملا بینقص بوده. این تست نشون داد که ساخت یک تجهیز حرفهای با قطعات در دسترس کاملا ممکنه.
نتیجهگیری و توسعه پروژه در آینده
طراحی و توسعه همچین پروژهای، با تمام پیچیدگیها و چالشهای نرمافزاری و سختافزاریش، یه تجربه مهندسی بینظیره. ما تو آیسیمدار سعی کردیم این دستگاه رو به شکلی تحلیل کنیم که بتونی با کمترین دغدغه، یک شارژ کنترلر فوقالعاده برای سیستم خورشیدیت بسازی.
- تغییر ظرفیت ولتاژ پنل تا 150 ولت با تغییر ماسفتها و خازنها
- پشتیبانی از بانک باتریهای بزرگتر تا 80 ولت
- استفاده از نمایشگرهای جذابتر مثل AMOLED
- یا حتی موازی کردن ماسفتها برای دستیابی به جریانهای غولآسا
ما همیشه منتظر دیدن خلاقیتهای تو هستیم.
- در نسخههای بعدی شاید بریم سراغ استفاده از ماسفتهای IGBT برای ولتاژهای تا 300 ولت و ظرفیتهای جریانی خیلی بالاتر.
فایلهای پیوست
تو میتونی اولین سازنده باشی!
اگه پروژه رو ساختی به اشتراک بزار و اعتبار هدیه بگیر
این آموزش با استانداردهای اختصاصی آیسیمدار بازنویسی و بهینهسازی شده و تمامی حقوق انتشار آن متعلق به این مجموعه است و در صورت کپی یا بازنشر پیگرد قانونی خواهد داشت.












































گفتگوهای کاربران
هنوز نظری ثبت نشده؛ تو شروع کن!
هنوز نظری ثبت نشده؛ تو شروع کن!