NOTICE توجه: این یک موضوع قدیمی است که آخرین پست ارسالی آن مربوط به 3753 روز قبل است . لطفا فقط پاسخ ها ، سوالات و درخواست های 100 درصد مرتبط را به آن ارسال کنید و برای درخواست ها و سوالات جدید موضوع جدیدی را ایجاد کنید
نمایش نتایج: از 1 به 11 از 11

موضوع: طراحی کنترلر موتور حلقه بسته با pid

  1. #1
    عضو جدید
    تاریخ عضویت
    Nov 2012
    نوشته ها
    6
    تشکر
    0
    تشکر شده 3 بار در 1 پست

    پیش فرض طراحی کنترلر موتور حلقه بسته با pid

    دوستان سلام
    من میخواستم برای کنترل حلقه بسته موتور dc با برنامه کدویژن یک کدی براش شروع کنم به نوشتن و آخر هم در همین جا کد رو بذترم تا همه استفاده کنن و یک تاپیک جامع باشه برای همه مراجعه کنندگان... اولا از آی سی L298 استفاده شده که تا 4 امپر و 40 ولت به خوبی کار میکنه البته نیاز به هیت سینک هم داره.
    برای شروع چند تا سوال وجود داره:
    1- چرا پایه enable به کجا باید وصل باشه
    2- پالس های اینکودر به پایه B.1 ترانزیستور که همون تایمر خارجی وصل شده استفاده از تایمر خارجی به چه نحوه؟
    ویرایش توسط alimf931 : 06-01-2013 در ساعت 12:30

  2. # ADS
    Circuit advertisement
    تاریخ عضویت
    Always
    نوشته ها
    Many
     

  3. #2
    مدیرکل انجمنها
    تاریخ عضویت
    May 2011
    نام
    احسان صفامنش
    نوشته ها
    1,763
    تشکر
    919
    تشکر شده 2,261 بار در 1,056 پست

    پیش فرض

    این مدار برای کنترل سرعت موتور هست یا هدف دیگه ای داره مثل درجه و ...؟
    پایه en به اینتراپت وصل هست ولی به عنوان یک خروجی io وصل شده
    با استفاده از تایمر کانتر تعداد پالسهای اینکدر رو میشمارن و سرعت موتور رو تشخیص میدن.
    بعد از فهمیدن سرعت موتور و داشتن سرعت مرجع و با یک کنترلر pid میشه سیگنال pwm رو ایجاد کرد و سرعت موتور رو با سرعت مرجع تنظیم کرد.
    البته تا حدودی به محاسبات کنترلی هم نیاز داره ولی با آزمایش و خطا هم میشه تا حدودی تنظیم کرد

  4. #3
    عضو جدید
    تاریخ عضویت
    Nov 2012
    نوشته ها
    6
    تشکر
    0
    تشکر شده 3 بار در 1 پست

    پیش فرض

    سلام ممنون از پاسخ شما
    این کنترلر، یک کنترلر PID هست که ضرایب P، I و D توسط یک ولوم به صورت دستی قابل تغییرند.
    پایه en به اینتراپت وصل هست ولی به عنوان یک خروجی io وصل شده
    طبق فرمایش شما پایه EN به عنوان یک خروجی io وصل شده پس احتمالا کنترل PWM مثل کد زیر اعمال شده باشه درست میگم:
    کد:
    if(Direct==1){ OCR1A=pwm_sig OCR1B=0 } if(Direct==0){ OCR1B=pwm_sig OCR1A=0 }

    که اگر DIRECTION راست گرد بود اولی و اگر چپ گرد بود دومی عمل میکنه.
    با استفاده از تایمر کانتر تعداد پالسهای اینکدر رو میشمارن و سرعت موتور رو تشخیص میدن.
    یک سوال این تایمر یک رو میشه با خواندن رجیستر TCNT0 مقدار تعداد پالسهای اینکودر رو به دست آورد؟

  5. #4
    مدیرکل انجمنها
    تاریخ عضویت
    May 2011
    نام
    احسان صفامنش
    نوشته ها
    1,763
    تشکر
    919
    تشکر شده 2,261 بار در 1,056 پست

    پیش فرض

    بله . برای شمارش پالس باید در یک زمان مشخص تعداد پالس رو بشمارین.
    چپ گرد و راست گرد هم درسته ولی من خودم pwm رو به en میدم و چپ و راست با io کنترل میکنم.

    اگه میتونید لطفا همون برنامه ی قسمت pid رو قرار بدین که چطور تقسیم و مشتق و انتگرال رو با توجه به ضرایبشون حساب میکنید. ممنون میشم.

  6. #5
    عضو جدید
    تاریخ عضویت
    Nov 2012
    نوشته ها
    6
    تشکر
    0
    تشکر شده 3 بار در 1 پست

    پیش فرض

    سلام
    من یک L298 را با ENA یک و تغذیه VS 12 ولت مدارشو بستم ولی خروجی OUT1 و OUT2 بیشتر از 2.5 ولت نیست درصورتی که DROP-OUT
    برای L298 نهایت سه ولته پس من در خروجی پس از اعمال PWM باید 9 ولت داشته باشم درسته؟

    اگه میتونید لطفا همون برنامه ی قسمت pid رو قرار بدین که چطور تقسیم و مشتق و انتگرال رو با توجه به ضرایبشون حساب میکنید. ممنون میشم.
    بله حتما تنظیم ضرایب pid به این صورته که شما اول فقط kp را تغییر میدهید و بقیه ضرایبو صفر میکنید , بعد یک سیگنال رمپ میدین و اگه خوب دنبال کرد این عدد kp شماست و برای به دست اوردن ki هم یک سیگنال سینوسی میدین به همراه KP قبلی که به دست اوردین باز اونو بدست میارین و...

  7. #6
    مدیرکل انجمنها
    تاریخ عضویت
    May 2011
    نام
    احسان صفامنش
    نوشته ها
    1,763
    تشکر
    919
    تشکر شده 2,261 بار در 1,056 پست

    پیش فرض

    خروجی های آیسی باید یا نزدیک صفر باشن یا نزدیک ولتاژ تغذیه. عدد 2.5 درست نیست. البته بدون pwm.
    اگه pwm بدین که قطعا ولتاژ باید بین دو مقدار باشه و ممکنه 2.5 درست باشه. 9 ولت بستگی به دیوتی سایکل شما داره و قرار نیست همیشه 9 باشه. در ضمن حتما با یک بار ولتاژ خروجی رو آزمایش کنید و باز نباشه.
    از گفتن نحوه ی تنظیم ممنون ولی منظورم اگه ممکنه برنامه ی قسمت pid رو قرار بدین. من خودم یک برنامه قرار میدم ولی میخوام با الگوریتم های دیگه هم آشنا بشیم. ( هدف کل انجمن هست )
    [PHP] previous_error = 0
    integral = 0
    start:
    error = setpoint - measured_value
    integral = integral + error*dt
    derivative = (error - previous_error)/dt
    output = Kp*error + Ki*integral + Kd*derivative
    previous_error = error
    wait(dt)
    goto start
    [/PHP]
    منبع: فکر کنم ویکی پدیا

  8. تشکرها از این نوشته :

    KHM

  9. #7
    عضو جدید
    تاریخ عضویت
    Nov 2012
    نوشته ها
    6
    تشکر
    0
    تشکر شده 3 بار در 1 پست

    پیش فرض

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

    فقط یه سوالی من دو تا کانال انکودر رو دادم به پایه T1 و T2 میکرو Atmega32 حالا مشکل من روی خواندن پالسهاست آیا پایه T1 همون تایمر صفر و پایه T2 همون تایمر یک هستش؟
    فايل هاي پيوست شده فايل هاي پيوست شده
    ویرایش توسط alimf931 : 01-01-2013 در ساعت 21:55

  10. کاربران : 3 تشکر کرده اند از شما alimf931 برای ارسال این پست سودمند:


  11. #8
    مدیرکل انجمنها
    تاریخ عضویت
    May 2011
    نام
    احسان صفامنش
    نوشته ها
    1,763
    تشکر
    919
    تشکر شده 2,261 بار در 1,056 پست

    پیش فرض

    مشخصه دیگه. T0 ورودی کانتر صفر و بقیه هم همینطور. شماره ها با هم ارتباط دارن. البته توجه کنید که به تایمر 2 میتونه که کریستال ساعت هم وصل بشه و اسیلاتور داره ولی کانتر هم میشه.
    در ضمن شما به فرکانس دکودر و تایمر هم دقت کنید که سرریز نداشته باشه
    در pdf هم از همون الگوریتم استفاده شده ولی خوب توضیح داده که چطور تنظیم کنیم
    ویرایش توسط esisafa : 01-01-2013 در ساعت 23:37

  12. #9
    عضو جدید
    تاریخ عضویت
    Nov 2012
    نوشته ها
    6
    تشکر
    0
    تشکر شده 3 بار در 1 پست

    پیش فرض

    در ضمن شما به فرکانس دکودر و تایمر هم دقت کنید که سرریز نداشته باشه
    سلام به فرض یک موتور3000rpm با انکودر 400cpr داریم که 400 پالس در هر دور میده، خوب اینجا در واقع در هر دقیقه 3000*400=1200000 پالس در دقیقه داریم پس در هر ثانیه 1200000/60=20000 پالس دارم خوب حالا اگه کریستال میکرو هم 8 مگاهرتز باشه فرکانس pwm چند باشه خوبه تا سرریز نداشته باشم

  13. #10
    کاربر علاقه مند
    تاریخ عضویت
    Nov 2012
    نوشته ها
    56
    تشکر
    91
    تشکر شده 59 بار در 10 پست

    پیش فرض

    سلام دوستان آيا مي شه زمين l293 که با 12 ولت کار مي کنه، رو به يه ولتاژ 6 ولت وصل کرد؟ که حروجي بين 6 و 12 سوئيچ کنه؟

  14. #11
    کاربر علاقه مند avr_rva آواتار ها
    تاریخ عضویت
    May 2011
    نام
    مجتبی بحرینی
    نوشته ها
    86
    تشکر
    8
    تشکر شده 6 بار در 5 پست

    پیش فرض

    سلام
    یکی برا ما pid رو توضیح میده که اصلا چیه؟
    خواهش میکنم به این متن های بی در و پیکر من رو ارجا ندید
    یه جور ساده بگید تا بفهمم

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

  1. کمک برای ریورس کردن موتور با استفاده از دیود
    توسط meyosem در انجمن الکترونیک
    پاسخ: 1
    آخرين نوشته: 17-04-2018, 20:36
  2. پاسخ: 14
    آخرين نوشته: 06-03-2014, 19:56
  3. انواع موتور های مورد استفاده در رباتیک
    توسط 1nafar در انجمن موتورها و درایوها
    پاسخ: 10
    آخرين نوشته: 21-04-2013, 15:12
  4. پاسخ: 3
    آخرين نوشته: 24-03-2013, 18:38

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

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