پاسخ : راه اندازی موتور براشلس (BLDC)
با سلام،
پاسخ شما در پست زیر داده شده :
البته بعدها تغییراتی در کل برنامه اعمال شده که با توجه به فانکشن ها و انتظارات جدید، عملکرد برنامه از نظر سرعت در حد مطلوبی قرار بگیره ولی کلیات قضیه همونه و تغییری نکرده.
( دستورات راه اندازی اولیه که توضیحاتش رو در بالا مشاهده میکنید از روتین ذکر شده خارج شده و به روتین startup_commutate_state منتقل گردیده )
یک توضیح اجمالی :
وقفه سرریز تایمر یک که با ISR_BEMF_WDT نامگذاری شده، در اصل نقش واچ داگ Back-EMF رو داره، یعنی اینکه اگر Back-EMF تا سرریز این تایمر اتفاق نیافته، یعنی اینکه یک مشکلی در چرخش موتور وجود داره!
در زمان استارت اولیه موتور، بدلیل اینکه موتور ثابته، این تایمر سرریز میشه و روتین startup_commutate_state که وظیفه راه اندازی اولیه موتور رو داره اجرا میشه.
روتین startup_commutate_state هم با توجه به توضیحات پست قبلی اشاره شده، موتور رو بدون در نظر گرفتن Back-EMF و بی هدف به گردش وا میداره.
پس از اینکه وقفه مقایسه کننده آنالوگ یا همون گذر از صفر ( یا در واقعیت ما نصف Back-EMF ! ) که ISR_BEMF_ZC نامگذاری شده برای 200 بار متوالی ( قبل از سرریز شدن ISR_BEMF_WDT ) اتفاق بیافته، یعنی اینکه موتور شروع به حرکت کرده و با فراخوانی روتین next_commutate_state در روتین ISR_BEMF_ZC ( با هر بار وقوع گذر از صفر ) ادامه حرکت موتور با توالی کوموتاسیون ها انجام خواهد شد .....
اگر راه اندازی اولیه موتور با مشکل مواجه هست، بهتره که مقدار rotor_RUN که در حال حاضر عدد 200 هست و یا مقادیر اولیه راه اندازی PWM در روتین ISR_BEMF_WDT رو بررسی و بازنگری کنید.
بدلیل اینکه گردش موتور به هر دو جهت چپ و راست پیش بینی شده، روتین های startup_commutate_state و next_commutate_state دارای دو قسمت برای گردش به چپ و یا راست هستند که با متغییر RotStatus انتخاب میشن.
با سلام،
نوشته اصلی توسط roboreza
نوشته اصلی توسط aivhl
( دستورات راه اندازی اولیه که توضیحاتش رو در بالا مشاهده میکنید از روتین ذکر شده خارج شده و به روتین startup_commutate_state منتقل گردیده )
یک توضیح اجمالی :
وقفه سرریز تایمر یک که با ISR_BEMF_WDT نامگذاری شده، در اصل نقش واچ داگ Back-EMF رو داره، یعنی اینکه اگر Back-EMF تا سرریز این تایمر اتفاق نیافته، یعنی اینکه یک مشکلی در چرخش موتور وجود داره!
در زمان استارت اولیه موتور، بدلیل اینکه موتور ثابته، این تایمر سرریز میشه و روتین startup_commutate_state که وظیفه راه اندازی اولیه موتور رو داره اجرا میشه.
روتین startup_commutate_state هم با توجه به توضیحات پست قبلی اشاره شده، موتور رو بدون در نظر گرفتن Back-EMF و بی هدف به گردش وا میداره.
پس از اینکه وقفه مقایسه کننده آنالوگ یا همون گذر از صفر ( یا در واقعیت ما نصف Back-EMF ! ) که ISR_BEMF_ZC نامگذاری شده برای 200 بار متوالی ( قبل از سرریز شدن ISR_BEMF_WDT ) اتفاق بیافته، یعنی اینکه موتور شروع به حرکت کرده و با فراخوانی روتین next_commutate_state در روتین ISR_BEMF_ZC ( با هر بار وقوع گذر از صفر ) ادامه حرکت موتور با توالی کوموتاسیون ها انجام خواهد شد .....
اگر راه اندازی اولیه موتور با مشکل مواجه هست، بهتره که مقدار rotor_RUN که در حال حاضر عدد 200 هست و یا مقادیر اولیه راه اندازی PWM در روتین ISR_BEMF_WDT رو بررسی و بازنگری کنید.
بدلیل اینکه گردش موتور به هر دو جهت چپ و راست پیش بینی شده، روتین های startup_commutate_state و next_commutate_state دارای دو قسمت برای گردش به چپ و یا راست هستند که با متغییر RotStatus انتخاب میشن.
دیدگاه