اطلاعیه

Collapse
No announcement yet.

کنترل کننده PID برای دمای کوره(نیاز به کمک فوری)

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    کنترل کننده PID برای دمای کوره(نیاز به کمک فوری)

    [size=+2]سلام دوستان
    من قصد دارم یه کنترل کننده PID دما برای کنترل دمای یه کوره بسازم، مشخصات کوره به این شرح هستش:
    *کوره با المنت الکتریکی گرم میشه و من فقط امکان قطع و وصل کردن المنت ها رو دارم
    *المنت های کوره به سه دسته تقسیم شده که هر دسته رو با یه سوئیچ الکترونیکی میتونم روشن و خاموش کنم
    *اندازه گیری دما با ترموکوپل K انجام میشه که فعلا مشکلی تو این بخش ندارم
    فقط دوستان عزیز کمک کنید چطور میتونم با یه ورودی دما و سه خروجی دیجیتال دما رو روی یه مقدار ثابت نگه دارم.
    اگه فقط الگوریتم رو بهم بگید کفایت میکنه و برای برنامه نویسیش مشکلی ندارم.

    #2
    پاسخ : کنترل کننده PID برای دمای کوره(نیاز به کمک فوری)

    سلام
    تویی انجمن چند تا تاپیک در مورد pidهست اما همه ناکام موندن
    کسی انچندان راجبش نمیدونه . من خودم بشدت دنبال کنترل گر های pid میگردم
    یه نمونه برنامه حهی هست به عنوان کنترل هیتر با pid که سرچ کنی زود پیداش میکنی توی سایت یزد کیت
    اما بدرد نمیخوره یه برنامه اجمالی هست که کاربردی نداره
    و خوروجی ما تو بازه مشخصی نیست و نمیشه به به انواع خوروجی تطابقش داد
    و ست پوینتشم برای دمای 68 هست و برای ست پوینتای دیگه کاربردی نداره
    چون اعداد ثابت برای ضرایئب تناسبی و انتگرال و مشتق برای ست پوینت 68 تعیین شده
    و فرامین چگونگی ایجاد این اعداد ثابت رو برای ست پویت دلخواه ما رو نداده
    یه جور برنامه دل خوشکنکه

    اگه کسی که این برنامه نوشته بیاد و فرمول های که اون اعداد برای هر نوع ست پوینتی بدست بیاره کاربردی میشه
    و تا جایی که من میدونم برنامه ش درست کار نمیکنه

    برای pid فرمول های زیادی هست و اینکه از چه نوع کنترگری استفاده کنی
    اینجا تو چون خوروجیت فقط روشن خاموش میشه باید از کنترل گر های دو وضیعتی استفاده کنی
    که ساده ترین کنترل گر ها هستند
    البته خودش چند نوع میشه
    2 وضعیتی بایاس دار
    2 وضعیتی تناسبی زمانی
    و 2 وضعیتی معمولی که شما مورد نیاز دارید

    شما اینجا نیاز به انتگرال و مشتق تناسب ندارید
    فقط باید مقایسه کنید مثلا اگر دما از 500 درجه بیشتر شد خروجی خاموش بشه
    و اگر از 450 کمتر شد روشن کن
    این کنترل گر ها همیشه مقداری خطا پایدار دارند
    یعنی حول ست پوینت تو به نسبت توان خوروجیت بالا پایین میشه
    پس بهتر به جای یک ست پویت از یک بازه بالا و پایین که گفتم استفاده کنی
    لازمه بگم دما زود افزایش پیدا میکنه اما دیر پایین میاد
    اگه ست پویت شما مثلا 500 درجه هست باید بگی بالای 500 خاموش و پایین 500 روشن
    و این مستلزم اینه که تو این مقایسه رو تند تند انجام بدی یعنی باید تو دما رو تند تند بگیری
    هر چه تند تر بهتر . اینجوری دقت برای ست پوینتت بالا میره و به محدوده 500 نزدیک میشه
    مثلا 10 میلی سانیه یک بار عمل مقایسه رو انجام بدی
    یبینی که نیازت براورده میشه

    حالا اشکال این کنترل گر چیه
    این کنترل گر بیشتر مواقع از انواع کنترل گر های دیگه بهتر عمل میکنه
    اشکالش اینه خروجی شما تند تند سوییچ میشه و توی استهلاک خروجی شما اثر میذاره
    و اینکه نمیشه از کنتاکتور استفاده کرد
    چون تاخیر دارند توی فعال شدن معمولا 10 -20 میلی ثانیه
    باید از رله های حالت جامد سریع و بی سر صدا استفاده کرد و توان مورد نظر تو رو فراهم کنه که هست
    به همین سادگی
    من خودم توی کنترل گری که نیاز دارم از سنسور ds18b20استفاده میکنم که هر 1 ثانیه میشه دما رو خوند و نمیتونم از این کنترل گر استفاده کنم
    وگرنه از همه کنترل گر ها بی تجمل تر و ساده تر و دقیق تر هستش
    هر چی میدونستم گفتم
    حالا یکی به داد خودم برسه که تا گردن تو باتلاق pid گرفتارم
    :cry2: :cry2: :cry2: :cry2: :cry2: :cry2: :cry2: :cry2:

    دیدگاه


      #3
      پاسخ : کنترل کننده PID برای دمای کوره(نیاز به کمک فوری)

      چرا اینقدر پیچیده میکنید داستان رو .
      ابتدا یک کنترل کننده نوع تناسبی ببندید خیلی ساده ست پوینت رو دارید .
      مقدار واقعی رو قرائت کنید حالا خطا بدست میاد .
      این خطا رو در ظریب kp ضرب کنید .
      تا این مرحله یک کنترل کننده تناسبی دارید.
      سوال ؟ مقدار Kp چقد باشه ؟
      جواب (رفرنس + تجربی): باید kp اینقدر زیاد کنید تا خروجی سیستم به نوسان
      بیفته این kp رو در 0.45 ~ 0.5 ضرب کنید kp بدست آمده kp نهایی شماست .
      البته روش های دیگر هم هست .
      خوب تا به این مرحله شما یه خطای ثابت دارید حالا با این چی کار کنیم ؟

      اینجا نقش کنترل کننده انتگرالی مشخص میشه اینجا ضریب kiرا تا آنجا زیاد
      میکنیم که خطای حالت ثابت از بین برود .
      کارشم اینه خطای قبلی دریک ضریب ضرب میشه با خطای الان جمع میشه .همین .
      اوکی ؟

      حالا شاید یه دوشواری داشته باشیم به نام over shoot یا نمیدونم بالازدگی یا هر چی
      خوب بیا kd بده تا این هم حل بشه .


      اگر کد میخواهی :
      http://www.eca.ir/forum2/index.php?topic=3850.0

      از جمله ی رفتگان این راه دراز
      باز آمده ای کو که به ما گوید راز
      هان بر سر این دو راهه از روی نیاز
      چیزی نگذاری که نمی آیی باز

      دیدگاه


        #4
        پاسخ : کنترل کننده PID برای دمای کوره(نیاز به کمک فوری)

        سلامی مجدد
        ببینید فرد خوب )موری جان(
        شما گویا با pid اشنایی دارید . اولا باید بگم ایشون خروجیشون 2 وضعیتی هست
        یعنی فقط صفر و یک میشه. روشن و خاموش
        ما اینجا خروجی نداریم که بخوایم کم یا زیادش کنیم
        البته اگه از دیمر دیجیتال استفاده کنن میشه
        اما فکر کنم ایشون فقط فرمودند فقط امکان خاموش و روشن خروجی هست
        من مسئله رو سخت نکردم . راحت ترین راه ممکن پیشنهاد کردم که گویا از همه کنترل گر ها بهتر عمل میکنه
        یک مقایسه ساده که خودشو به تمام اغتشاشات تطابق میده و نگرانی رو به جای نمیذاره
        فقط باید عمل مقایسه رو تند تند انجام بدن تا به کمترین خطای پایدار برسن

        و در خطاب گفته های شما
        من استاد نیستم ( من خودم زخم خورده ی pid هستم ) تشنه یاد گرفتن و پر از سوال
        ببینید دوست محترم من موری خان یا جان:
        من با این اعداد ثابت مشکل دارم
        و میدونم با فرمول های علمی بدست میان شما اگه بتونید به من بگید که این اعداد ثابت چجوری بدست میاین ممنون میشم
        خب ما با میکرو راحت محاسبه میکنیم نسبت به هر ست پوینتی . یا تغییر در ست پوینت

        2- منظورم از اینکه این pid ها خروجی تو بازه مشخصی ندارن اینه که ما چجور خروجی این pid ها رو به خروجی خودمون
        یا همون عنصر نهایی منطبق کنیم
        مثلا خروجی من میتونه یه فرکانس pwm برای دیمر تبدیل بشه
        یا اینکه تبدیل به یه متغیر با بازه مشخصی مثلا 0 تا 32768 برای یک خروجی انالوگ باشه
        مطمینا خروجی pid باید با خروجی اصلی من متابقت داشته باشه و از اون بازه خارج نشه
        ایا متوجه منظور من میشید؟
        مثلا اگه خروجی pid ما یه ضریب بین صفر و یک باشه و ما بیاییم این ضریب به هر عددی که میخوایم بازه خروجی اصلی ما بشه تبدیل میشه
        مثلا خروجی اصلی من یه عدد بین صفر تا100 هست برای دیمر دیجیتال مثلا
        حلا خروجی pid رو در 100 ضرب میکنیم و جواب یه عددی بین 0 تا 100 میشه
        اما گویا اینجور نیست
        من میخوام خروجی pid قابل تبدیل به هر بازه ای باشه
        0 تا 1000
        0 تا 32768 وووووو

        و باز متذکر میشم شما این ضرایب رو که راحت ازش حرف میزنید از کجا میارید
        ایا رابطه ای بین این ضرایب و ست پوینت ما نیست ؟
        الان میشه توضیحات کامل تری رو به من و خیلی ها که با pid مشکل داریم روانه کنید
        پیشاپیش بابت توضیحاتتون ممنون و تشکر برای توضیحات قبلی شما
        :read:

        دیدگاه


          #5
          پاسخ : کنترل کننده PID برای دمای کوره(نیاز به کمک فوری)

          کنترلر pid راحت تر از اونیه که فکر میکنید فقط قسمت مشکلش بدست آوردن ظرایب است که اونهم با روش زیگلر نیکولز است .
          تنها موردي كه همه آدما يقين دارن خدا در حقش زیاد لطف کرده
          داشتن عقله زيادتر از دیگر آدم ها است

          دیدگاه


            #6
            پاسخ : کنترل کننده PID برای دمای کوره(نیاز به کم&am

            با کمال پوزش چیزی از مطالب شما دستگیرم نشد که مشکل شما چیه !

            در کل

            یه جور کنترل کننده هست که به on/off مشهور است یعنی هیسترزیس میدی و ست پوینت .
            مثال : دما کوره باید 450 باشه دما همیشه با این ست پوینت مقایسه میشه
            اگر از 440 کمتر شد المنت روشن میشه و در 460 خاموش میشه .(البته برای کوره فراموش
            نکنید اگر در 460 خاموش کنید تا 500 بالا میره !)

            ابن اصلا ربطی به pid نداره . و تقریبا برای کارای خیلی خیلی معمولی کاربرد داره .
            تا اینجا اوکی ؟

            حالا یه کنترلر داریم که pid هست .
            مثال ماژول میزنم .
            یه ماژول "pid کنترلر هانیانگ " میخری .
            اتخاب میکنی نوع خروجی 4~20 میلی آمپر باشه .
            حالا اینجا باید دستا رو بالا بزنی یه ماژول پاور طراحی کنی .(فرض کن قطعه قدرت دوبل
            تریستور میزاری ) باید یه مدار طراحی کنی که در حالتی که ورودی 4 میلی امپر هست
            المنت ها خاموش باشند ودر حالت 20 میلی آمپر ماکزیمم توان به المنت ها برسه .


            یه مثال دیگه :

            خودت pid کنتلر زدی . اینجا حتما یه limitation دادی .
            خوب از روی همین لیمینیشن خروجی pwm رو میدی .
            یعنی فرض کن کفتی بیشترین عدد خروجی pid عدد 1000000 باشه
            ولی این عدد برای رجیستر pid تعریف نشدس پس حتما
            قبل از اینکه خروجی pid رو به رجیستر pwm بدی باید scale کنی
            بعد اعمال کنی .

            نمیدونم درست متوجه شدم مشکل کجاست یا نه ؟


            اضافه شده در تاریخ :
            نوشته اصلی توسط aliila
            کنترلر pid راحت تر از اونیه که فکر میکنید فقط قسمت مشکلش بدست آوردن ظرایب است که اونهم با روش زیگلر نیکولز است .
            دقیقا همین طور هست .در بیشتر موارد هم زیگلر نیکلس جواب گو هست .

            البته من همون روشی رو که گفتم رفتم و جواب داده گوگل هم کنید هست.
            از جمله ی رفتگان این راه دراز
            باز آمده ای کو که به ما گوید راز
            هان بر سر این دو راهه از روی نیاز
            چیزی نگذاری که نمی آیی باز

            دیدگاه


              #7
              پاسخ : کنترل کننده PID برای دمای کوره(نیاز به کمک فوری)

              با تشکر از همه دوستانی که جواب دادن مخصوصا آقای sahel2013 که توضیحات کامل و مفصل ارائه کردن اما ذکر یکی دو تا نکته در مورد کار من ضروری هست:
              نوشته اصلی توسط sahel2013
              شما اینجا نیاز به انتگرال و مشتق تناسب ندارید
              فقط باید مقایسه کنید مثلا اگر دما از 500 درجه بیشتر شد خروجی خاموش بشه
              و اگر از 450 کمتر شد روشن کن
              درسته که من میتونم از روش ON\OFF استفاده کنم و با توجه به اینکه از ترایاک استفاده میکنم سوئیچ زنی زیاد هم مشکلی ایجاد نمکنه، اما داشتن ست پوینت بدون خطا برام خیلی مهم هست طوری که دما رو بتونم روی یه نقطه دقیق تنظیم کنم، درواقع کنترل کننده PID باید بتونه نوعی پیش بینی رو تو ی سیستم انجام بده و بدونه که مثلا اگه دمای کوره باید روی 500 درجه تنظیم بشه باید سوئیچ رو توی دمای 496 قطع کنه یا به ازای هر دما، مقدار خطا رو پیش بینی کنه و اعمال کنه، در این مورد کسی نمیتونه کمک کنه؟ ضمنا کنترل کننده های PID تجاری رو حتی با خروجی رله ای داریم که بدون خطا دما رو فقط با روش روشن خاموش کردن تنظیم میکنن (دقت کنین منظورم کنترل کننده های ON\OFF نیست بلکه کنترل کننده PID با خروجی رله ای منظورم هست)

              دیدگاه


                #8
                پاسخ : کنترل کننده PID برای دمای کوره(نیاز به کمک فوری)

                نوشته اصلی توسط akamseda
                درسته که من میتونم از روش ON\OFF استفاده کنم و با توجه به اینکه از ترایاک استفاده میکنم سوئیچ زنی زیاد هم مشکلی ایجاد نمکنه
                خوب این دوتا روش که متفاوت از هم نیست هر دوش با روش pwm است .
                نوشته اصلی توسط akamseda
                اما داشتن ست پوینت بدون خطا برام خیلی مهم هست طوری که دما رو بتونم روی یه نقطه دقیق تنظیم کنم، درواقع کنترل کننده PID باید بتونه نوعی پیش بینی رو تو ی سیستم انجام بده و بدونه که مثلا اگه دمای کوره باید روی 500 درجه تنظیم بشه باید سوئیچ رو توی دمای 496 قطع کنه
                خوب اساس کنترلر pid همینه .فکر میکنید چرا از مشتق گیر استفاده میکنن برای پیش بینی آینده.
                در کل با یک حلقه ساده میشه در هر لحظه مجموع مقدار مشتق و انگرال و درصد خطا رو حساب کرد. روشش هم به روش آنالیز عددی است .

                تنها موردي كه همه آدما يقين دارن خدا در حقش زیاد لطف کرده
                داشتن عقله زيادتر از دیگر آدم ها است

                دیدگاه


                  #9
                  پاسخ : کنترل کننده PID برای دمای کوره(نیاز به کمک فوری)

                  نوشته اصلی توسط aliila
                  خوب این دوتا روش که متفاوت از هم نیست هر دوش با روش pwm است .خوب اساس کنترلر pid همینه .فکر میکنید چرا از مشتق گیر استفاده میکنن برای پیش بینی آینده.
                  در کل با یک حلقه ساده میشه در هر لحظه مجموع مقدار مشتق و انگرال و درصد خطا رو حساب کرد. روشش هم به روش آنالیز عددی است .
                  من هم با گفتهای دوستمان موافق هستم
                  شروع کنید عملی کار کنید خودتان هم به نتایج مفیدی خواهید رسید
                  :redface:
                  کمتر سخن گویم
                  بیشتر عمل کنیم

                  دیدگاه


                    #10
                    پاسخ : کنترل کننده PID برای دمای کوره(نیاز به کمک فوری)

                    سلامی مجدد
                    در جواب اقای اکام صدا : دقیقا نفهمیدم منظورتون چی بود/؟؟؟
                    اما میتونید از هیتر توی پروتیوس استفاده کنی و اون پایه وسط رو به a\d بدی
                    و تو قسمت تنظیماتش v\c که خودش پیش فرض 1 درجه به ازای 1 ولت هست بزنی 10 میلی ولت و عین lm 35 باهاش رفتار کنی
                    میتونی اونجا توان المنتتم قید کنی
                    حالا توی برنامه توی یه حلقه بیا دما رو بدست بیار و مقایسه کن
                    و توی پروتیوس جواب ببین
                    میبینی که دقیق رو ست پوینتت میمونه

                    و در خطاب دوستان که گفتند این عمل مقایسه pid محسوب نمیشه . درسته اما خودش یه نوع کنترل هست
                    که معمولا برای خروجی های 2 وضیعتی استفاده میشه
                    اینجا نیازی به پیش بینی نیست
                    چون با سرعت زیاد مقایسه میشه . همیشه دما به ست پوینت میرسه فقط از 100 میلی ثانیه بیشتر نشه این حلقه
                    (اقای موری اجباری که نیست همش لطف اما خیلی سطحی اموزش میدید)

                    و دوباره در خطاب دوستان:
                    بذارید گلایه کنم . شمایی که میگید pid خیلی راحت تر از اونی که فکر کنی
                    دیگه چیزی نمیگی . اگه واسه من راحت بود که تاپیک درست نمیشد . لطفا ما رو هم درک کنید و کسی که سوال میپرسه
                    اگه میدونست که نمیپرسید . جدا از روشی که من پیشنهاد دادم
                    اما هدف اصلی این تاپیک بحث و کمک کردن به اموزش pid هست که خیلی ها باهاش مشکل دارند
                    خواهش میکنم از دوستان.
                    لطفا خارجی حرف نزنید همه که دانشمند و پرفسور نیستند حرف های شما را متوجه بشن
                    بهترین معلم کسیه که ساده حرف بزنه و مخاطبشو درک کنه تا بتئونه باهاش ارتباط برقرار کنه

                    آهای آهای یکی بیاد یه شعر تازه تر بگه
                    دیروز توی انجمن سرچ میکردم راجب pid و اینتکه چجور این اعداد ثابت بدست میارن
                    ولا تا جایی که یاد دادم همه ناکام بودند و کسی کمک شایانی نکرده بود
                    اقا و خانم محترمی که میگی ساده ست
                    شروع کن با زبانی ساده و ابتدایی یاد بده بذار کمک کرده باشی بذار لبخند رو لبام بشینه که اینجا مشکل ادم رفع میشه
                    بذار افریننده اون لبخند تو باشی

                    دیدگاه


                      #11
                      پاسخ : کنترل کننده PID برای دمای کوره(نیاز به کمک فوری)

                      این نوع تاپیک ها بیشتر برای رفع اشکال یا راهنمایی یا درک مطلب است . مثلا اگه کسی بخواد راجب pid مطلب بنویسه باید 10 الی 20 صفحه تایپ کنه .؟ :nerd: oo:
                      درضمن موضوع این تاپیک راه اندازی کنترلر pid نه آموزش pid

                      مثلا آقای کی نژاد یا آقای کوهستانی قبلا یک توضیحاتی داده بودند
                      که من در زیر کپیشون کردم

                      یکی از موارد پرکاربرد کنترل کننده های PID، سیستم هایی با رفتار یک تابع تبدیل مرتبه اول و یک تاخیر ذاتی در پاسخ سیستم است. به عنوان مثال، یک فرایند کنترل حرارت را در یک فضای بسته نظر می گیریم که از طریق یک مولد حرارتی، دمای پروسه کنترل می شود و محل مورد نظر برای کنترل دما و سنسور تشخیص دما هم با یک فاصله نسبت به مولد حرارتی قرار دارند. چنین سیستمی در عمل دارای یک تاخیر ذاتی است، به این معنی که اگر بصورت ناگهانی میزان تولید حرارت توسط عامل گرمایشی را در حداکثر خود هم که قرار دهیم، در یک لحظه تغییر و تفاوتی در نقطه سنجش دما بوجود نمی آید و مدتی طول می کشد تا تاثیر تغییرات ورودی به خروجی برسد. به همین ترتیب اگر حرارت مولد در یک لحظه قطع شود، تاثیر آن با یک تاخیر و فاصله زمانی به نقطه سنجش دما می رسد. همچنین طبیعت عملکرد سیستم دارای رفتار مرتبه اول است،به این معنی که مانند خازنی که از طریق یک منبع و مقاومت شارژ می شود،با شکل موج شبه نمایی از مقدار اولیه تغییر می کند و به حالت دائمی می رسد.
                      در کنترل PID :

                      عامل حاصلضرب در مورد خطاهای لحظه فعلی قضاوت می کند
                      عامل انتگرال تاثیر خطاهای گذشته را اعمال می کند
                      و بخش مشتق هم به عنوان یک عامل پیش بینی خطا در زمان های آینده عمل می کند.

                      برای سیستم های پر اینرسی و با تاخیر، عامل مشتق می تواند تاخیرهای ذاتی سیستم را جبران سازی کند و با تنظیم درست ضرایب PID، می تواند رفتار یک پروسه با طبیعت مذکور را به خوبی تحت کنترل بگیرد. اما برای سیستم های سریع و بدون تاخیر معمولا از کنترلر PI استفاده می شود. برای تنظیم درست ضرایب PID می توانید به جزئیات روش زیگلر نیکولز در تنظیم ضرایب مراجعه کنید.



                      اما اگر از مطالب بالا چیزی سر در نیاوردید من با شکل و نمودار توضیح میدم



                      بهترین مثال برای کنترلر pid همین دمای کوره است . فرض کنید هدف ما دمای 500 ذرجه سانتی گراد است . فرض کنید برای اینکه دمای کوره در تعادل باشه سنسور دما رو در فاصله 5 متری مشعل نصب کرده ایم . فرض کنید شما وقتی سنسور عدد 500 درجه را نشان داد مشعل رو خاموش کنید چون جریان هوا بصورت همرفتی جابجا میشه و کمی طول میکشه تا به سنسور برسه
                      وقتی که دمای نزدیک مشعل 800 درجه است تازه دمای سنسور 500 رو نشون میده یعنی یک دقیقه بعد دمای کوره به سنسور میرسه
                      بنابراین وقتی شما مشعل رو خاموش کردید دمای کوره یه 650 درجه میشه نه 500 درجه . این نوع کنترل میشه کنترلر خاموش روشن On-Off Control
                      حالا شما باید یکم زرنگ باشید میگید خوب که کاری نداره ما دمای کوره رو در 420 درجه خاموش میکنیم تا وقتی به سنسور برسه دما همون 500 درجه بشه ؟ این روش جواب میده اگر کوره با محیط برونش کاملا ایزوله باشه . یعنی مثلا زمستان و تابستانو شب و روز و مثلا در سالن باز باشه یا پنجره سالن بسته باشه حتی یک درصد هم دمای داخل کوره فرقی نکنه ؟ که این امکان پدیر نیست
                      این نوع کنترل میشه کنترلر تناسبی Proportional Control

                      ادامه دارد ..




                      اضافه شده در تاریخ :
                      نمودار شکل زیر یک کنترلر On-Off_Control را نشان میدهد
                      خط قرمز اون چیزیه که ما دوست داریم باشه خط سبز اون چیزی که در عمل اتفاق میافته و خط آبی هم سیستم فرمان است

                      نمودار خوب بررسی کنید





                      http://aliila1359.persiangig.com/image/On-Off%20Control.png
                      تنها موردي كه همه آدما يقين دارن خدا در حقش زیاد لطف کرده
                      داشتن عقله زيادتر از دیگر آدم ها است

                      دیدگاه


                        #12
                        پاسخ : کنترل کننده PID برای دمای کوره(نیاز به کمک فوری)

                        جا داره تشکر کنم از شما دوست گرامی
                        اما همین توضیحات میتونه خیلی موثر تر باشه از اینکه یکنفر بیاد بگه pid خیلی راحته وسلام
                        من چند تا جزوه از pid دارم اما ولا سر از فرمولاش درنمیارم و اینکه حتی یه مثال عملی هم نزده
                        از عنصر های تو ی فرمول استفاده میکنن که نمیدونم از کجا میارن
                        ما اگه بیاییم واسه یکبارم یه مثال جامع بزنیم که اشنا بشیم به اینکه این ضرایب چگونه بدست میاد
                        ایا چه ربطی به ست پویت دارند؟ ایا میشه کاری کرد این ضرایب اتومات توسط برنامه و اون ست پوینت و مقدار اندازه گیری بدست بیاد تا ما مجبور نشیم از ازمون خطا استفاده کنیم؟
                        ایا میتونیم pid داشته باشیم که بتونه در حد دهم درجه دقیق باشه؟
                        ایا ما وقتی ست پوینت تغییر میدیم تغییری باید تو اعداد ثابت یا همون ضرایب بکار ببریم
                        ایا واسه تعیین ضرایب ربطی به محیط ما داره که مطمئنا داره . دستی باید تغییرات ایجاد کنیم؟
                        اگه توی pid مشاهده شد که چند درجه مثلا تفاوت داریم تا ست پوینت باید چیکار کنیم؟

                        بازم تشکر: شما به توضیحاتتون ادامه بدید و هر جا لازم بود سوال های منو اگه امکانش هست جواب بدید
                        و اگه بتونید در پایان یه مثال عملی با avr و زبان c بزنید که میتونه خیلی ابهامات براورده کنه واقعا ممنون میشم

                        خواهش دارم بیشتر در مورد چگونگی تعیین ضرایب که مشکل اصلی هست توضیح بدید
                        من به نماینده گی تمام کسانی که با این pid مشکل دارند از شما تشکر میکنم
                        :nerd:

                        دیدگاه


                          #13
                          پاسخ : کنترل کننده PID برای دمای کوره(نیاز به کمک فوری)

                          نوشته اصلی توسط aliila
                          نمودار شکل زیر یک کنترلر On-Off_Control را نشان میدهد ...
                          آقا دم شما گرم تا اینجا توضیحات شما واقعا مفید بود البته درک کنترل ON\off نسبت به PID خیلی ساده تر هست. همه ما که توی رشته برق درس خوندیم کم و بیش با تئوری کنترل PID آشنایی داریم اما در عمل قضیه تفاوت داره. من حتی درس کنترل صنعتی رو هم پاس کردم ولی مطالب جزوه اش رو الان نگاه میکنم چیزه زیادی دستگیرم نمیشه. همین توضیح شما که هر کدوم از عوامل Pو I وD چه نقشی توی کنترل دارن خیلی مطلب رو روشن تر کرد، حالا اگه میشه لطف کنید و توضیحات رو به زبان ساده ادامه بدید، تا همین مثال دمای کوره رو به صورت گام به گام جلو بریم. مثلا اینکه ما دقیقا از چه چیزی یا چه بازه ای از اطلاعاتمون باید مشتق یا انتگرال بگیریم، ضرایب زمانی و غیر زمانی توی کنترل و ...
                          انشالا بتونیم به یه جمع بندی درست برسیم که همه ازش استفاده کنند. بنده هم قول میدم درصورت نتیجه گیری مطلب نهایی رو به صورت PDF در اختیار بقیه قرار بدم.

                          دیدگاه


                            #14
                            پاسخ : کنترل کننده PID برای دمای کوره(نیاز به کمک فوری)

                            اما فرمول pid که معرف حضورتون است


                            http://www.seattlerobotics.org/encoder/200108/Image70.gif



                            این فرمول میگه مقدار سوختی که در لحظه t باید به مشعل بره r c (t) r است
                            در این لحظه t تفاضل دمای سنسور از دمای مطلوب میشه r e (t) r که مثلا دمای سنسور 450 است از 500 کم میشه و e میشه -50

                            خوب پس برای بدست آورد c که تابعی از زمان است ما به یک حلقه for یا while بینهایت نیاز داریم در هر لحظه t مجموع مشتق و درصد و انتگرال e را حساب کنیم

                            درضمن از آنالیز عددی میدانیم که


                            http://aliila1359.persiangig.com/image/26-06-2013%2002-33-47%20%D8%A8.png



                            دیگه فکر کنم نوشتن تابع pid خیلی ساده است
                            انشااللاه منتظر عکس های سیستم ساخته شدتون هستیم


                            اضافه شده در تاریخ :
                            نوشته اصلی توسط sahel2013
                            1- ایا میتونیم pid داشته باشیم که بتونه در حد دهم درجه دقیق باشه؟
                            2- ایا ما وقتی ست پوینت تغییر میدیم تغییری باید تو اعداد ثابت یا همون ضرایب بکار ببریم
                            3- ایا واسه تعیین ضرایب ربطی به محیط ما داره که مطمئنا داره . دستی باید تغییرات ایجاد کنیم؟
                            4- اگه توی pid مشاهده شد که چند درجه مثلا تفاوت داریم تا ست پوینت باید چیکار کنیم؟
                            1-بهتره انواع خطا ها رو برسی کنید ( یادم رفته 6 تا بود : برش - محاسبه - قراعت ) بنا بر این بستگی داره به دقت سنسور و دقت والو - شیر سوخت مشعل بعلاوه خطای محاسبات
                            2- اینو من دارم روش کار میکنم . مشکل من تغییر دور موتور است بهتر بحث رو بیشتر باز کنیم
                            3-آره روش زیگلر نیکولز دقیقا به همین صورت است بیشتر در ریاضیات بهش میگن ضربه و پاسخ ضربه
                            4- خوب مشکل این میتونه از غیر خطی بودن سیستم باشه یا از ضرایب اشتباه باشه
                            تنها موردي كه همه آدما يقين دارن خدا در حقش زیاد لطف کرده
                            داشتن عقله زيادتر از دیگر آدم ها است

                            دیدگاه


                              #15
                              پاسخ : کنترل کننده PID برای دمای کوره(نیاز به کمک فوری)

                              سلامی دوباره
                              بازم تشکر: مطمئنا لطفی که هر ادمی از خودش روانه میکنه دنیا به همون شخص برمیگردونه
                              فرمول pid که مشخص یعنی توی برنامه ای که مثال زدم (یزد کیت) موجوده
                              و فکر کنم ثابته > چیزی که خیلی ها رو ازار میده این ضرایب هستند
                              که فلان شخص این ضرایب بکار برد و متذکر شد و گفت یادتون نره این ضرایب برای این ست پوینت حساب شده
                              از کجا اورده بود و چجور محاسبه شده بودند؟
                              ما که بغیر شما کسی رو نداریم و همش چشم انتظار کامنت های پر مهر شما هستیم
                              اما اگه اینو هم بگید که واقعی و در عمل این ضرایب چگونه محاسبه میشن ؟
                              و مثل کد نویسی avr با c بنویسید و کمی توضیح بدید که ما یاد بگیریم و همیشه این موضوع رو درک کنیم
                              خیلی عالی میشه ... یادتون نره این کار شما یه لطف و محبت و قابل ستایش
                              اخه خیلی ها با pid اشنایی دارند اما کمکی روانه نمیکنند (خیالی نیست) بلاخره یکی مثل شما پیدا میشه
                              درضمن من نه رشته ام برق نه کنترل نه الکترونیک زبانمم افتضاست avr اتفاقی یاد گرفتم



                              اضافه شده در تاریخ :


                              امروز یک پروژه جالب به نام کنترل کننده PID طراحی کردم، که هدف من از این پروژه پیاده سازی کنترلر PID با استفاده از میکروکنترلر AVR می باشد. من این پروژه را تا آنجایی که بتوانم به زبان ساده توضیح خواهم داد که افراد مبتدی هم متوجه قضایای این کنترلر PID شوند. و اما اول اینکه کنترل کننده PID چیست؟

                              PID مخفف Proportional Integral Derivative می باشد. کنترل PID یعنی عمل کردن بر روی متغییر مورد کنترل از طریق ترکیب مناسب سه عمل کنترلی تناسبی، انتگرالی، مشتق گیر، که به شرح زیر میباشد:

                              1.تناسبی: که در آن عمل کنترل با سیگنال خطای محرک که برابر تفاضل میان سیگنال ورودی و سیگنال پس خور است متناسب می باشد.
                              2.انتگرالی: که در آن عمل کنترل با انتگرال سیگنال خطای محرک متناسب است.
                              3.مشتق گیر: که در آن عمل کنترل با مشتق سیگنال خطای محرک متناسب است.

                              از بخش سفارش طراحی همکنون درخواست خود را ثبت کنید
                              حل و تشریح کلیه تمرینات درس میکروکنترلر AVR
                              طراحی و ساخت مدارات دلخواه شما با میکروکنترلر AVR


                              چه موقع باید از کنترلر PID استفاده کنیم؟

                              بهترین مثال برای روشن شدن این قضیه کنترل دمای یک هیتر می باشد که در پروتیوس هم این هیتر برای شبیه سازی وجود دارد. همانطور که می دانیم وقتی که ما هیتر را روشن می کنیم عوامل زیادی در دمای آن نقش دارند مثلا هیتر در فضای باز قرار دارد یا در فضای بسته و یا اینکه اندازه ابعاد اتاق چقدر است و ... خلاصه وقتی ما سیگنالی به هیتر اعمال می کنیم دما کم کم شروع به بالا رفتن می کند بعد از مدتی دیگه با اعمال تعدادی پالس مشخص دما به صورت تناسبی بالا نمی رود و می بینیم که دما به طور چشمگیری خود به خود بالا می رود و کنترل آن از دست ما خارج می شود. این مسئله را می توانید در پروتیوس به صورت عملی اجرا کنید که من آن را به صورت فایل جداگانه در پوشه Test_heter گذاشتم. می بینیم که کلیک کردن بر روی Button دمای هیتر بالا می رود شما چند کلیک که انجام بدهید دما سریع بالا می رود و دیگه قابل کنترل نیست و خود به خود بالا می رود. (حتما اجرا کنید تا به نقش مهم کنترلر PID پی ببرید)

                              حالا نقش کنترل کننده PID چیست؟

                              کنترل PID از حاصل جمع سه کنترل کننده تناسبی، انتگرالی، مشتق گیر، تشکیل شده است به عنوان مثال ما می خواهیم دمای هیتر را روی 50 درجه سانتیگراد تثبیت کنیم پس مقدار مطلوب ما یا همان Set Point برابر با SP=50 می باشد.

                              اگر ما سیگنالی به هیتر اعمال کنیم و دمای هیتر 50 درجه شود یعنی اینکه سیگنال خطا برابر با صفر شده پس فقط کنترل کننده تناسبی وارد عمل می شود و پروسه را کنترل می کند و قسمت انتگرالی و مشتق گیری ما مقدار صفر را خواهند داشت. OUT=P+0+0

                              اگر دمای اندازه گیری شده بیشتر یا کمتر از مقدار SP شود آنگاه کنترل کننده انتگرالی و مشتق گیر وارد عمل خواهند شد تا پروسه را به مقدار مطلوب برسانند. OUT=P+I+D وقتی این دو کنترل کننده وارد عمل خواهند شد که ما سیگنال خطا داشته باشیم (صفر نباشد) آنگاه قسمت انتگرالی از سیگنال خطا انتگرال می گیرد و قسمت مشتق گیر هم از سیگنال خطا مشتق می گیرد که حاصل جمع این سه خروجی PID ما می باشد.

                              تا اینجا مسئله روشن شده که کنترل PID چه کاربرد مهمی در پروسه ها مخصوصا پروسه های غیر قابل پیش بینی دارد. PID با استفاده خطا های قبلی و خطا های حال، آینده را پیش بینی کرده و تدابیری برای کنترل هر چه بهتر سیستم ایجاد می کند.

                              پس معاله خروجی ما برابر است با:

                              Kp+Ki(Integral (e(t)))+Kd(dif(e(t)))که در این معادله Kp, Ki, Kd ضرایب تناسبی و انتگرالی و مشتق گیر ما می باشد که با انتخاب درست این ضرایب که اکثرا به صورت عملی و تجربی بدست می آیند می توان کنترلر PID را به نحوی تنظیم کرد که نه اورشوت و نه فراجهش بیش از حدی داشته باشیم و سیستم در وضعیت پایداری قرار گیرد.

                              اما پروژه و قسمت های مختلف آن:

                              1.LCD 4*16
                              2.Micro ATMEGA32
                              3.Keypad 3*4
                              4.Heater (OVEN)
                              برنامه از قسمت های مختلفی که به صورت روتین نوشته شده است تشکیل شده که به شرح زیر می باشد:

                              1. روتین کیبورد که وظیفه اسکن کیبور را دارد و با آن مقدرا دمای مطلوب SP را وارد می کنیم.
                              2.روتین وقفه INT0 که در آن برنامه اسکن کیبور نوشته شده.
                              3.روتین مبدل آنالوگ به دیجیتال ADC که دمای هیتر را تبدیل و برای میکرو آماده می کند.
                              4.روتین LCD و حلقه بی نهایت که وظیفه نمایش اطلاعات و محاسبات مربوط به PID را انجام می دهد.
                              جهت جلوگیری از شلوغی برنامه برنامه اسکن کیبورد را در یک فایل هدر جداگانه نوشتم و این فایل را با استفاده از دستور #include <keypad.h> معرفی می کنیم و در برنامه با استفاده از دستور key = keypad(); کیبورد اسکن و عدد مربوطه قرائت می شود.

                              در روتین ext_int0_isr ابتدا وقفه سراسری غیر فعال شده و وارد حلقه شرطی می شود که شرط آنkey!=11 می باشد عدد 11 یعنی همان کد کلید # که به در اینجا به عنوان کلید ثبت تعریف شده و وقتی شرط برقرار شود یعنی ما کلید ثبت را فشار دادیم میکرو اعداد وارد شده را با یک ضرب و تقسیم ساده به هم می چسباند و به متغییر SP اختصاص داده می شود. از کلید * با کد 10 هم به عنوان کلید DEL استفاده شده.

                              در روتین adc_isr هم با استفاده از وقفه ADC عمل آنالوگ به دیجیتال انجام شده و دمای قرائت شده در متغییر temp قرار می گیرد.

                              در روتین main هم دستورات مربوط به پیکره بندی LCD و وقفه INT0 و ADC که همگی با Code Wizard انجام شد قرار گرفته است. در آخر هم عملیات مربوط به محاسبات کنترلر PID نوشته شده که به شرح زیر می باشد:

                              error=SP-temp; //H1
                              pterm=kp*error; //H2
                              iterm=(ki*error)+last_iterm;//H3
                              dterm=(error-last_error)*kd;//H4
                              D=(pterm+iterm+dterm)*100; //H5
                              if(D<1) D=1; //H6
                              if(D>1020) D=1020; //H7
                              last_iterm=iterm; //H8
                              last_error=error; //H9
                              D2=D; //H10
                              HD=D2/256; //change to int val [xx xx] //H11
                              LD=D2%256; //H12

                              1.خطای فعلی برابر است با مقدار مطلوب منهای دمای اندازه گیری شده.
                              2.مقدار خطای فعلی در ضریب تناسبی Kp ضرب می شود و جمله اول معادله یعنی قسمت تناسبی را ایجاد می کند.
                              3.مقدار خطای فعلی در ضریب انتگرالی Ki ضرب می شود و با مقدار خطای قبلی جمع می شود و جمله دوم معادله یعنی قسمت انتگرالی را ایجاد می کند. (همانطور که می دانید انتگرال حاصل جمع می باشد)
                              4.مقدار خطای فعلی از خطای قبلی کم می شود و در ضریب مشتق گیر Kd ضرب می شود و جمله سوم معادله یعنی قسمت مشتق گیر را ایجاد می کند.
                              5.حاصل جمع سه قسمت در عدد 100 ضرب شده و در متغییر D قرار می گیرد.
                              6.شرطی جهت جلوگیری از کوچکتر شدن D
                              7.شرطی جهت جلوگیری از بزرگتر شدن D از 1020 (ماکزیمم OCR0 تایمر)
                              8.برای مرحله بعدی خطای فعلی انتگرالی در درون متغییر خطای قبلی انتگرالی قرار می گیرد.
                              9.برای مرحله بعدی خطای فعلی مشتق گیر در درون متغییر خطای قبلی مشتق گیر قرار می گیرد.
                              10.کپی مقدار D
                              11.عدد درون D2 یک عدد در حوزه شانزده بیتی می باشد که با یک عمل ضرب و تقسیم ساده به اجزای هشت بیتی سبک و سنگین تجزیه می کنیم
                              بعد از اجرای دستورات مرحله 10 و 11 ORC1BL و ORC1BH که حاصل نتیجه عملیات PID می باشد بارگذاری شده و موج PWM کنترل شده را ایجاد و به استفاده از یک تقویت ترانزیستوری به هیتر اعمال می شود و بنابراین دمای هیتر همواره روی مقدار SP باقی خواهد ماند.

                              دیدگاه

                              لطفا صبر کنید...
                              X