طراحی درایور موتور براشلس

اصفهان درایو در شبکه های اجتماعی

آموزش جامع برنامه‌نویسی اینورتر سه‌فاز (SPWM) با میکروکنترلرهای STM32: از معماری شی‌گرا تا حفاظت سخت‌افزاری

طراحی و راه‌اندازی اینورترهای سه‌فاز برای کنترل موتورهای الکتریکی (مانند موتورهای BLDC، PMSM و القایی AC) تنها به طراحی مدار قدرت و انتخاب سوئیچینگ مناسب محدود نمی‌شود. در سیستم‌های الکترونیک قدرت مدرن، «مغز متفکر» سیستم، یعنی فریم‌ور (Firmware) و معماری نرم‌افزاری میکروکنترلر است که پایداری، راندمان و طول عمر سخت‌افزار را تضمین می‌کند.

 

برنامه‌نویسی اینورتر سه‌فاز (SPWM) با میکروکنترلرهای STM32

 

در این مقاله تخصصی از مجموعه اصفهان درایو، قصد داریم کدهای سطح پایین و معماری نرم‌افزار برای یک اینورتر سه‌فاز سینوسی (SPWM) را بر روی میکروکنترلرهای خانواده STM32 بررسی کنیم. این معماری بر پایه زبان C شی‌گرا (Object-Oriented C)، بدون توابع مسدودکننده (Blocking) و با تکیه بر محاسبات نقطه ثابت (Fixed-Point DSP) توسعه یافته است.

 

۱. مبانی اینورتر سه‌فاز و چالش‌های کنترل نرم‌افزاری

یک اینورتر سه‌فاز از ۶ سوییچ قدرت (مانند IGBTهای تعبیه شده در یک ماژول IPM) تشکیل شده است که در قالب ۳ بازو (Leg) به نام‌های U, V و W مداربندی شده‌اند. کنترل روشن و خاموش شدن این سوییچ‌ها نیازمند تولید سیگنال‌های PWM دقیق است.

 

در روش SPWM (مدولاسیون پهنای پالس سینوسی)، یک موج سینوسی مرجع با یک موج مثلثی با فرکانس بالا (فرکانس سوئیچینگ) مقایسه می‌شود. در میکروکنترلرهای STM32، موج مثلثی به صورت سخت‌افزاری توسط تایمر پیشرفته (مانند TIM1 یا TIM8) در حالت Center-Aligned تولید می‌شود. وظیفه نرم‌افزار، تزریق بی‌درنگ (Real-Time) مقادیر موج سینوسی به رجیسترهای مقایسه تایمر (CCR) برای تغییر مداوم عرض پالس‌ها (Duty Cycle) است.

 

برنامه‌نویسی اینورتر سه‌فاز (SPWM) با میکروکنترلرهای STM32

 

۲. بهینه‌سازی حافظه: تولید جدول سینوسی (Look-up Table)

اولین قدم در این معماری، پرهیز از محاسبات سنگین مثلثاتی (مانند تابع sin) درون روتین وقفه است. ما از یک جدول از پیش محاسبه‌شده با ۲۵۶ نمونه استفاده می‌کنیم که یک سیکل کامل ۳۶۰ درجه الکتریکی را پوشش می‌دهد.

دامنه این مقادیر در بازه اعداد صحیح علامت‌دار ۱۶ بیتی (از 32767- تا 32767+) تنظیم شده است.

 

برنامه‌نویسی اینورتر سه‌فاز (SPWM) با میکروکنترلرهای STM32

 

 استفاده از مادیفایر static const در تعریف این آرایه، یک الزام حیاتی در سیستم‌های نهفته است. این کار باعث می‌شود کامپایلر این آرایه حجیم را مستقیماً در حافظه غیرفرار Flash (ROM) قرار دهد و از اشغال بی‌مورد حافظه ارزشمند RAM جلوگیری کند.


 

۳. کپسوله‌سازی سخت‌افزار (معماری OOP در زبان C)

در کدنویسی صنعتی، استفاده از متغیرهای سراسری (Global Variables) ریسک بروز تداخل در حافظه را افزایش می‌دهد. ما تمام متغیرهای وضعیت، فلگ‌ها و پوینترهای سخت‌افزاری را درون یک ساختار (Struct) کپسوله کرده‌ایم.


 

برنامه‌نویسی اینورتر سه‌فاز (SPWM) با میکروکنترلرهای STM32

 

مزیت دور زدن توابع HAL: در این ساختار، آدرس رجیسترهای CCR مستقیماً به پوینترها پاس داده می‌شود. در وقفه‌های سریع (مثلاً ۲۰ کیلوهرتز)، فراخوانی توابع کتابخانه HAL زمان پردازنده را تلف می‌کند. با این معماری، نوشتن در رجیسترها در یک سیکل کلاک و با تأخیر صفر (Zero Latency) انجام می‌شود. ضمن اینکه می‌توان به صورت همزمان چندین اینورتر مستقل را روی یک میکروکنترلر مدیریت کرد.

 

۴. مقداردهی اولیه و حفاظت سخت‌افزاری (Bootstrap Clamping)

تضمین ایمنی ماژول قدرت (IPM) بر عهده نرم‌افزار است. تابع SPWM_Init علاوه بر مقداردهی اولیه، وظیفه محاسبه محدوده‌های ایمن پالس‌ها را بر عهده دارد.

 

برنامه‌نویسی اینورتر سه‌فاز (SPWM) با میکروکنترلرهای STM32

 

تحلیل مکانیزم‌های حفاظتی در این تابع:

  1. محافظت ناحیه خطی IGBT (ccr_min_limit): پالس خروجی تایمر در سخت‌افزار میکروکنترلر، دچار برش زمان مرده (Dead-Time) می‌شود. متغیر safe_pulse_ticks مجموع حداقل پالس روشن ماندن IGBT و زمان مرده است. اگر پالس از این مقدار کمتر شود، IGBT کامل روشن نمی‌شود و در ناحیه خطی با تلفات حرارتی شدید می‌سوزد. در حالت Center-Aligned چون پالس فیزیکی دو برابر رجیستر است، حد پایین دقیقاً نصف این زمان در نظر گرفته شده است (safe_pulse_ticks >> 1).

 

  1. محافظت خازن بوت‌استرپ (ccr_max_limit): در مدار درایور گیت سوییچ بالا (High-Side)، خازن Bootstrap تنها در زمانی که سوییچ پایین روشن است شارژ می‌شود. اگر نرم‌افزار دیوتی‌سایکل را به ۱۰۰٪ برساند، خازن تخلیه شده و ماژول با خطای UVLO متوقف می‌شود. مقدار سقف مجاز رجیستر (ccr_max_limit) برابر با تفاضل سقف تایمر (arr_val) از حد پایین (hspwm->ccr_min_limit) تعیین شده است تا حداقل زمان لازم برای هدایت سوییچ پایین و شارژ خازن در هر سیکل تضمین گردد.

 

  1. شیفت فاز دقیق: فازهای V و W با مقادیر 1431655765 و 2863311530 مقداردهی شده‌اند که معادل دقیق ۱۲۰ و ۲۴۰ درجه در یک فضای متغیر ۳۲ بیتی (0xFFFFFFFF) است.

 

۵. کنترل دقیق فرکانس و دامنه با محاسبات نقطه ثابت (DDS)

برای تنظیم فرکانس خروجی و ولتاژ موتور، از تکنیک DDS (Direct Digital Synthesis) و ریاضیات نقطه ثابت استفاده می‌کنیم.

 

برنامه‌نویسی اینورتر سه‌فاز (SPWM) با میکروکنترلرهای STM32


 

 

در تابع SPWM_Set_Amplitude، به استفاده از کستینگ ۶۴ بیتی (uint64_t) برای متغیر center دقت کنید. چون درصد دامنه، مقدار تایمر مرکزی و عدد ثابت ۶۵۵۳۶ در هم ضرب می‌شوند، حاصل به سادگی از مرز رجیسترهای ۳۲ بیتی فراتر می‌رود. استفاده از متغیر ۶۴ بیتی (ULL) پیش از انجام تقسیم نهایی، یک تکنیک حرفه‌ای برای جلوگیری از باگ سرریز ریاضی (Math Overflow) میان‌مرحله‌ای است. این محاسبات بیرون از روتین وقفه انجام می‌شوند تا بار پردازشی به سیستم تحمیل نکنند.


 

۶. قلب تپنده نرم‌افزار: روتین وقفه (ISR)

بخش نهایی، روتین وقفه‌ای است که با فرکانس ۲۰ کیلوهرتز (یا بسته به تنظیمات سوئیچینگ) اجرا می‌شود. این تابع باید بی‌نهایت سریع، ایمن و مستقل از توابع کتابخانه‌ای باشد.

 

برنامه‌نویسی اینورتر سه‌فاز (SPWM) با میکروکنترلرهای STM32

 

نکات فنی روتین وقفه:

  • تولید موج پیوسته (Wrapping): انباشتگرهای ۳۲ بیتی (phase_acc) با مقدار phase_step جمع می‌شوند. سرریز طبیعی (Rollover) در محدوده ۳۲ بیتی سخت‌افزار، معادل عبور از ۳۶۰ درجه و آغاز مجدد موج سینوسی است. برای یافتن ایندکس جدول نیز، صرفاً ۸ بیت باارزش (MSB) با یک شیفت ساده ۲۴ بیتی) استخراج می‌شود.

 

  • کلمپینگ (Clamping): در بخش پنجم کد، اگر دیوتی‌سایکل از ccr_min_limit کمتر شود، مقدار آن کاملاً صفر می‌شود تا از داغ شدن IGBT جلوگیری شود (Pulse Dropping). و اگر از مرز بالایی تجاوز کند، بر روی ccr_max_limit قفل می‌شود تا شارژ خازن بوت‌استرپ آسیب نبیند.

 

نتیجه اجرای برنامه و محاسبه دیوتی سایکل کانال های تایمر با پایتون

 

برنامه‌نویسی اینورتر سه‌فاز (SPWM) با میکروکنترلرهای STM32

 

نویسنده و توسعه‌دهنده: محمد حسینی

مهندس نرم‌افزار سیستم‌های نهفته و متخصص درایورهای موتور الکتریکی و Edge AI.

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

دانلود کتابخانه اینورتر سه فاز با STM32

 

با اصفهان درایو همراه باشید!

 

۵
از ۵
۱ مشارکت کننده

نوشته های اخیر

دسته بندی ها

بلاگ تخصصی اصفهان درایو

  • ​جدیدترین محصولات اصفهان درایو

  • پنل و درایور کولرهای آبی براشلس BLDC

  • استپر موتور استوک

  • دوره آموزشی کاربردی TinyML: پردازش صوت و تشخیص کلمه کلیدی با STM32​​​​​​​