ورود به حساب ثبت نام جدید فراموشی کلمه عبور
برای ورود به حساب کاربری خود، نام کاربری و کلمه عبورتان را در زیر وارد کرده و روی «ورود به سایت» کلیک کنید.





اگر فرم ورود برای شما نمایش داده نمیشود، اینجا را کلیک کنید.









اگر فرم ثبت نام برای شما نمایش داده نمی‌شود، اینجا را کلیک کنید.









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





کاربران برچسب زده شده

صفحه 1 از 2 12 آخرین
نمایش نتایج: از 1 به 10 از 19
  1. #1
    2016/12/19
    26
    12

    مشکل کار با PID

    سلام من یه مدار طراحی کردم که ورودی 4 تا 20 میلی امپری داره و یه ورودی 0 تا 10 ولتی داره
    4 الی 20 میلی امپر رو میخونه و تبدیل به 0 تا 1023 میکنه
    0 تا 10 ولت رو میخونه و تبدیل به 0 تا 1023 میکنه
    در قسمت بعدی طراحی یه خروجی 0 تا 10 ولت با OCR1A درست کردم که با مقدار 0 به من صفر ولت میده و با مقدار 1023 به من 10 ولت میده
    تا اینجا همه چی اوکی و بدون مشکله
    ورودی 4 الی 20 میلی امپر وصله به سنسور فشار
    ورودی 0 تا 10 ولت وصله به یه ولوم

    رفرنس من ولوم هست که روی یه مقدار تنظیم میشه و من مقدار سنسور رو میخونم و میخام با محاسبه PID یه خروجی 0 الی 10 ولت بدم به یک الکتروموتور که فشار رو به حد مطلوبی که با ولوم تنظیم شده برسونه تا حالا PID کار نکردم برنامه یه چیزایی برای بخش PID نوشتم اما درست جواب نمیگیرم میشه راهنماییم کنین؟

    دلیل: ادغام دو پست برای جلوگیری از اسپم

    تکه کد مربوط به PID


    #define Tsample 100
    #define TP 1
    #define TI 1
    #define TD 1
    if( Sec >= Tsample)
    {
    Error = SP - Sens ;

    Pterm = TP * Error;
    Iterm = (TP/TI)* Last_Error;
    Dterm = TD * (Last_Process - Processvalue);

    Processvalue = ( Pterm + Iterm + Dterm );

    Last_Error = Last_Error + Error;
    Last_Process = Processvalue;

    if (Processvalue >= 1023)
    Processvalue= 1023;
    else
    if (Processvalue <=0)
    Processvalue= 0;

    Sec=0;

    }

    ویرایش توسط saeid.fzly : 2017/12/22 در ساعت 15:26
  2. #2
    2016/12/19
    26
    12

    پاسخ : مشکل کار با PID

    کسی نمیتونه راهنماییم کنه؟
  3. #3
    2010/10/04
    تهران
    1,816
    771

    پاسخ : مشکل کار با PID

    با سلام
    چند نکته: اول اینکه بنظر میاد حاصل Dterm شما همیشه صفر میشه.
    بعد اینکه اینتروال زمانی لوپ کنترلی چقدره و پروسس قرار با چه سرعتی کنترل بشه؟ سرعت لوپ باید بیش از 10 برابر سرعت پروسس (ثابت زمانی پاسخ پله) باشه.
    بعد هم نوسانات adc در هنگام خوندن ورودیهاست که باید چک و به روشهای نرم افزاری و سخت افزاری حذف بشه.
  4. #4
    2016/12/19
    26
    12

    پاسخ : مشکل کار با PID

    نقل قول نوشته اصلی توسط نو رسیده

    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت

    با سلام
    چند نکته: اول اینکه بنظر میاد حاصل Dterm شما همیشه صفر میشه.
    بعد اینکه اینتروال زمانی لوپ کنترلی چقدره و پروسس قرار با چه سرعتی کنترل بشه؟ سرعت لوپ باید بیش از 10 برابر سرعت پروسس (ثابت زمانی پاسخ پله) باشه.
    بعد هم نوسانات adc در هنگام خوندن ورودیهاست که باید چک و به روشهای نرم افزاری و سخت افزاری حذف بشه.
    در مورد نوسانات ADC هیچ مشکلی نیست نوسانی وجود نداره
    در مورد dterm نظر شما چیه باید برنامه به چه شکلی تغییر کنه؟
    سرعت کنترل برای من خیلی از اهمیت خاصی برخوردار نیست یه کانتر گذاشتم که بوسیله اینتراپت اضافه میشه ( وقفه من هر 2 میلی ثانیه اجرا میشه ) و وقتی به اندازه مقدار ثابت tsample برسه صفر میشه و دستورات انجام میشه طبق چیزی که گذاشتم.

    اگه یه لطف بکنین و شما که تجربه دار توی این مدکنترلی هستین یه کمک به بنده بکنین ممنون میشم.
  5. #5
    2010/10/04
    تهران
    1,816
    771

    پاسخ : مشکل کار با PID

    نوسان حتما وجود داره. بهترین ADC ها هم به اندازه ی 1 LSB نوسان مجاز دارن. حتما مقدارش رو چک کنین و تا حد ممکن کمش کنین.
    بعد از حذف ریپلهای احتمالی تغذیه ها و سیگنال ورودی و ولتاژ رفرنس ADC، مقدار خونده شده و هم بوسیله ی یه فیلتر کالمن با سرعت مناسب فیلتر کنین تا مقدار و فرکانس تکرارش حداقل بشه.
    در مورد Dterm شما به مقدار خروجی که از SENS میخونید باید توجه کنید و تغییراتش در واحد زمان رو باید در نظر بگیرید. فرض کنید فشار به حد مطلوب رسیده و سیستم پایداره، ناگهان یه شیر باز میشه و فشار افت ناگهانی پیدا میکنه، در اینجا تغییر ناخواسته ی خروجی سنس میشه و Dterm با مقدار بیشتری به کمک لوپ کنترل میادو البته دقت کنین که علامتش نسبت به خروجی باید منفی باشه یعنی کاهش خروجی سبب زیاد شدن مقدارش بشه.
    در حلقه های کنترلی سرعت لوپ پارامتر مهمیه.
    اگه سرعت حلقه نسبت به سرعت تغییرات پروسس بالا باشه، تغییرات خروجی تقریبا دیده نمیشن و بالتبع خروجی مناسبی هم تولید نمیشه و اگه خیلی پائین باشه باز هم سبب ناپایداری سیستم میشه. در هر دوی این حالات تنظیم ضرایب کنترلی بسیار سخت و یا غیر ممکن میشه.
    در اصل قدم اول برای داشتن یه سیستم کارا، تنظیم سرعت مناسب برای حلقه و بعد تنظیم ضرائب کنترلی هست.
    بنظرم 2 میلی ثانیه برای کار شما سرعت خیلی زیادیه. بهتره با 2 دهم ثانیه امتحان کنین.
    همونطور که عرض کردم ملاک تعیین تایم حلقه، سرعت پاسخ پله ی سیستم هست.
  6. #6
    2008/10/24
    528
    147

    پاسخ : مشکل کار با PID

    وقت بخیر

    مهمترین نکته اینکه متغییرهای حلقه pid باید علامت دار باشند !!! والا درست عمل نمیکنن !! از مقایسه نهایی که مقدارتون حداکثر و صفر هست میشه حدس زد مه علامت دار نیستند !! بازه تغییرات مثلا باید بین 1024 و -1024 باشه یا 512 و -512 باشه !!
  7. #7
    2016/12/19
    26
    12

    پاسخ : مشکل کار با PID

    نقل قول نوشته اصلی توسط نو رسیده

    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت

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

    در حال حاظر در مورد زمان اجرای لوپ
    2 میکو ثانیه وقفه من اجرا میشه که متغیر SEC هی اضافه میشه تا بشه 100 یعنی زمان اجرا لوپ 200 میلی ثانیه هست اگه دقت کنین داخل برنامه نوشتم ( شرط اول ) که اگه برابر 100 شد لوپ اجرا بشه
    درمورد dterm حتی وقتی حذفش میکنم با اسکوپ خروجی 0 تا 10 ولتو چک میکنم تغییرات درست نیست
    اون قسمت که مربوط به اینکه اگه 4 میلی امپر بود خروجی زیاد و 20 میلی امپر شد خروجی کم هم اوکی هست.

    هم خودم توی لوپم هم برنامه
    ایا نمونه کد مناسبی وجود نداره از روی اون بشه الگو مناسب برداشت؟

    دلیل: ادغام دو پست برای جلوگیری از اسپم

    نقل قول نوشته اصلی توسط taktrashe

    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت

    وقت بخیر

    مهمترین نکته اینکه متغییرهای حلقه pid باید علامت دار باشند !!! والا درست عمل نمیکنن !! از مقایسه نهایی که مقدارتون حداکثر و صفر هست میشه حدس زد مه علامت دار نیستند !! بازه تغییرات مثلا باید بین 1024 و -1024 باشه یا 512 و -512 باشه !!
    مقدار نهایی برنامه من داخل متغیری قرار میگیره از نوع اینتیجر و بدون علامت
    بحث اینه اصلا درست جواب نمیده که بخوام تنظیم کنم ضرایب رو
    الان برای تست ازمایشگاهی خودم ضرایب مثلا روی چند باید قرار بگیره به نظر شما؟ چی پیشنهاد میکنین؟
  8. #8
    2010/10/04
    تهران
    1,816
    771

    پاسخ : مشکل کار با PID

    پیشنهاد میکنم کار رو قدم به قدم پیش ببرید.
    اول از P شروع کنین و بعد I و D رو هم بهش اضافه کنین.
    اینکه شما همه رو 1 گذاشتید درست نیست. معمولا ضریب تناسبی زیاد و ضریب انتگرالی کمتر از 0.1 در میاد.
    ترم P باید بتونه فشار رو تا نزدیکی ست پوینت ببره. اگه نشد ضریبش رو افزایش بدین تا به نزدیکی ست پوینت برسین.
    ضریب I رو بعد از اون اضافه کنین و طوری تنظیمش کنین که مقدار خروجی به ست پوینت برسه. دقت کنین که بالا بودن ضریب I سبب نوسانی شدن سیستم میشه.
    و بعدشم D رو اضافه کنین که تغییرات ناگهانی خروجی رو مدیریت میکنه.
    ضمن اینکه متغیرهای مورد استفاده داخلی باید علامت دار باشند.
    در کل اگه فقط از P هم استفاده کنین باید بتونین تا نزدیکی ست پوینت برید بالا. اگه نمیشه مشکل جای دیگه ای هست.
  9. #9
    2016/12/19
    26
    12

    پاسخ : مشکل کار با PID

    نقل قول نوشته اصلی توسط نو رسیده

    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت

    پیشنهاد میکنم کار رو قدم به قدم پیش ببرید.
    اول از P شروع کنین و بعد I و D رو هم بهش اضافه کنین.
    اینکه شما همه رو 1 گذاشتید درست نیست. معمولا ضریب تناسبی زیاد و ضریب انتگرالی کمتر از 0.1 در میاد.
    ترم P باید بتونه فشار رو تا نزدیکی ست پوینت ببره. اگه نشد ضریبش رو افزایش بدین تا به نزدیکی ست پوینت برسین.
    ضریب I رو بعد از اون اضافه کنین و طوری تنظیمش کنین که مقدار خروجی به ست پوینت برسه. دقت کنین که بالا بودن ضریب I سبب نوسانی شدن سیستم میشه.
    و بعدشم D رو اضافه کنین که تغییرات ناگهانی خروجی رو مدیریت میکنه.
    ضمن اینکه متغیرهای مورد استفاده داخلی باید علامت دار باشند.
    در کل اگه فقط از P هم استفاده کنین باید بتونین تا نزدیکی ست پوینت برید بالا. اگه نمیشه مشکل جای دیگه ای هست.
    متوجه شدم تست میکنم پله به پله و میبرمش جلو
    قبلا با ضریب تناسبی تست کردم و تا نزدیکی مقدار ست پوینت بالا بردش اما دیگه همه رو به هم اضافه کردم و پله به پله اضافه نکردم
    در مورد اینکه متغیر های داخلی علامت دار باشه من اینطور تعریف کردم
    volatile signed int
    Error,
    Last_Error,
    Pterm,
    Dterm;
    volatile signed long int
    Last_Process,
    Iterm;


    دلیل: ادغام دو پست برای جلوگیری از اسپم

    فقط به نظر شما ضریب ها رو به طور پیش فرض روی چه مقداری بزارم به جز مقدار p چون میدونم روی 3 باید باشه
    در ضمن از لطفی که در حق بنده میکنین و منو راهنمایی میکنین خیلی ممنون هستم

    یه سوال دیگه کد نویسی PID که در پست شماره 1 هست به نظر شما ایراد خاصی که نداره؟

    دلیل: ادغام دو پست برای جلوگیری از اسپم

    عکس برد طراحی شده

    ویرایش توسط saeid.fzly : 2017/12/24 در ساعت 19:17
  10. #10
    2010/10/04
    تهران
    1,816
    771

    پاسخ : مشکل کار با PID

    خواهش میکنم. کاری نیست.
    عرض کنم خدمتتون که توی حلقه ی PID ، برای کنترل مناسب ضرائب باید علاوه بر علامتدار بودن، از نوع اعشاری هم تعریف بشن تا بتونن مقادیر دقیق بگیرن و سیستم نوسانی نشه.
    گرچه خروجیتون اینتجر هست، اما اجازه بدین محاسبات حلقه درست و با مقادیر حقیقی انجام بشه و تقریبی که برای اینتجر شدن بهش میخوره فقط در همون مرحله ی خروجی باشه.
    تقریب زدن در محاسبات سبب ضرب چند خطا در هم و ایجاد خطاهای بزرگتر میشه و در نهایت سیستم رو واگرا میکنه.
    ضرایب I و D معمولا زیر 1 و حتی در حد چند صدم ممکنه در بیان و اعمال اونها با متغیرهای صحیح امکان پذیر نیست.
    در کد شما غیر از اون داستان صفر بودن ترم دیفرنشیتور ظاهرا ایرادی دیده نمیشه که البته اونهم خیلی مهم نیست. در بسیاری از سیستمهایی که با موتور سر و کار دارن فقط از PI استفاده میشه.
    اما در نهایت باید بتونه از پس کار بر بیاد.
صفحه 1 از 2 12 آخرین
نمایش نتایج: از 1 به 10 از 19

موضوعات مشابه

  1. مشکل - مشکل - مشکل ( حروف نا مفهوم برروی LCD)
    توسط ssaeid2000 در انجمن سایر مطالب مرتبط با ميکرو ها و پروسسورها
    پاسخ: 11
    آخرين نوشته: 2008/10/07, 18:00

کلمات کلیدی این موضوع

علاقه مندي ها (Bookmarks)

علاقه مندي ها (Bookmarks)

مجوز های ارسال و ویرایش

  • شما نمیتوانید موضوع جدیدی ارسال کنید
  • شما امکان ارسال پاسخ را ندارید
  • شما نمیتوانید فایل پیوست کنید.
  • شما نمیتوانید پست های خود را ویرایش کنید
  •