اطلاعیه

Collapse
No announcement yet.

کنترل position یک موتور dc توسط xmega

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

    کنترل position یک موتور dc توسط xmega

    با سلام
    بنده یک موتور dc کوچک به همراه یک انکودر افزایشی جهت کنترل موقعیت زاویه ای شفت به همراه مدارات واسط به یک میکرو xmega متصل کرده ام. در حال حاضر موتور در هر دو جهت کاملا قابل چرخش و مقدار خروجی انکودر هم از طریق فعالسازی وقفه خارجی پورت مربوطه متصل به انکودر قابل شمارش می باشد. سوال بنده از دوستان بخصوص استاد محترم جناب کی نژاد این است که جهت حرکت شفت موتور به اندازه زاویه دلخواه با دقت حدود نیم درجه چه روشی را باید در پیش بگیرم ؟
    چرا که در حال حاضر وقتی که مقدار کانتر بنده در سرویس روتین وقفه خارجی مربوط به انکودر به مقدار مطلوب ( زاوبه مطلوب ) می رسد
    (( if(++counter == set point) و فرمان stop به موتور میدهم موتور مفداری چرخش اضافی ( اجتناب ناپذیر ) را دارد . برای رفع این چرخش اضافی یک مقدار ثابت ( تجربی ) را از عدد مقدار مطلوب ( set point ) کم نمودم ولی در زوایای مختلف باز دچار عقب رفتگی یا جلو رفتگی از زاویه مطلوب را دارم
    با تشکر از راهنمایی شما
    مشخصات من در لینک زیر
    http://www.eca.ir/forum2/index.php?topic=1721.msg698645#msg698645

    www.********

    #2
    پاسخ : کنترل position یک موتور dc توسط xmega

    وقت بخیر

    البته با اجازه اساتید و آقای کی نژاد !

    شما باید از موتور گیربکس دار استفاده کنید ! چون دقت نیم درجه می خواهید .!
    البته موتورهاش تو بازار آماده هست حتی 1:10000 هم دیدم موجود بوده که میتونید حتی دقت بیشتری بگیرید.
    اگرم فقط دقت نیم درجه مهمه و نه نوع موتور و مکانیک !! بهتره از استپ موتور استفاده کنید .

    دیدگاه


      #3
      پاسخ : کنترل position یک موتور dc توسط xmega

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

      البته با اجازه اساتید و آقای کی نژاد !

      شما باید از موتور گیربکس دار استفاده کنید ! چون دقت نیم درجه می خواهید .!
      البته موتورهاش تو بازار آماده هست حتی 1:10000 هم دیدم موجود بوده که میتونید حتی دقت بیشتری بگیرید.
      اگرم فقط دقت نیم درجه مهمه و نه نوع موتور و مکانیک !! بهتره از استپ موتور استفاده کنید .
      سلام
      موتور مفروض دارای گیربکس می باشد بطوری که دور شفت آن 60 rpm می باشد که بصورت داخلی دارای یک انکودر افزایشی با دقت 460 پالس بر دور می باشد و دارای یک خروجی دیگر با اختلاف فاز 90 درجه نسبت به خروجی دیگر انکودر می باشد. در ضمن امکان استفاده از استپ موتور نیست
      سوال بنده نوع روش و الگوریتم نرم افزار اجرایی می باشد
      مشخصات من در لینک زیر
      http://www.eca.ir/forum2/index.php?topic=1721.msg698645#msg698645

      www.********

      دیدگاه


        #4
        پاسخ : کنترل position یک موتور dc توسط xmega

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

        دیدگاه


          #5
          پاسخ : کنترل position یک موتور dc توسط xmega

          با سلام و ممنون از راهنمایی استاد کی نژاد
          بنده با استفاده از توضیحاتی که شما در یکی از پستها در خصوص روش بدست آوردن عوامل p و I و D داده بودید آنرا توانستم از طریق نرم افزار پیاده سازی کنم بدین صورت که : در وقفه یک تایمر 1ms مقدار انکودر را از طریق واحد QDEC قرائت میکنم و تفاضل آنرا با مقدار setpoint که ضریبی از میزان درجه محور موتور می باشد بدست می آورم و داخل متغیر error میریزم و مقادیر P و I و D را محاسبه میکنم.
          برای اینکه ضرایب مربوطه را از طریق روش زیگر-نیکولز بدست آورم ظاهرا می بایست پاسخ پله سیستم را بدست آورم . حال سوال بنده این است که روش عملی اندازه گیری این ضرایب برای سیستم مذکور به چه شکلی است و پس از اینکه ضرایب بدست آمد و داخل معادله قرار دادم نتیجه را به چه شکلی می بایست تبدیل به مقدار pwm هشت بیتی کرد؟
          با تشکر
          مشخصات من در لینک زیر
          http://www.eca.ir/forum2/index.php?topic=1721.msg698645#msg698645

          www.********

          دیدگاه


            #6
            پاسخ : کنترل position یک موتور dc توسط xmega

            یکی از روش های محاسبه ضرایب استفاده از متد دوم زیگلر-نیکولز است که کنترلر در ابتدا فقط با عملکرد proportional و غیر صفر بودن ضریب Kp عمل می کند. در این شرایط باید مقدار Kp تا حدی افزایش داده شود که در سیستم نوسان ایجاد شود و با اندازه گیری پریود نوسان و استفاده از فرمول های مربوطه، ضرایب PID محاسبه می شود. در این مورد مطالب زیادی با جستجو قابل دسترسی است، از جمله در فایل زیر:

            http://me.yeditepe.edu.tr/courses/me352/me352_lab4.pdf

            برای استفاده از روش pwm هم با فرض کنترل دو طرفه موتور با استفاده از Full bridge، باید خروجی کنترلر به گونه ای scale شود که به ازای خروجی صفر مقدار compare value در وسط منحنی دندان اره ای یا مثلثی واقع شود. مثلا در pwm با دقت 8 بیت، مقدار متناظر ولتاژ صفر عدد 127.5 می شود (که البته در دقت 8 بیتی باید 127 یا 128 قرار داده شود که ولتاژ کوچکی را ایجاد می کند). برای ولتاژ های مثبت و چرخش موتور در یک جهت هم عدد قرار داده شده برای compare value به سمت 255 افزایش می یابد و برای جهت مخالف هم به سمت صفر کاهش می یابد.
            اوژن: به معنای افکننده و شکست دهنده است
            دانایی، توانایی است-Knowledge is POWER
            برای حرفه ای شدن در الکترونیک باید با آن زندگی کرد
            وضعمان بهتر می شود، اگر همه نسبت به جامعه و اطراف خود مسوول باشیم و نگوئیم به ما چه
            قوی شدن و خوب ماندن - خوبی کردن به دیگران یک لذت ماندگار است
            اگر قرار باشد نفت و منابع خام را بدهیم و چرخ بگیریم، بهتر است چرخ را از نو اختراع کنیم
            ساعت کار بدن اکثر انسان ها کمتر از 800000 ساعت است و بعد از آن از کار می افتد

            دیدگاه


              #7
              پاسخ : کنترل position یک موتور dc توسط xmega

              با تشکر از راهنمایی شما استاد گرامی
              در صورتی که بنده نخواهم از گیت not در مدار خود جهت اعمال not سیگنال اصلی pwm به بازوی دیگر پل استفاده کنم, آیا toggle کردن پایه متصل به
              بازوی دیگر پل ( مثلا PC.4) در روتین وقفه compare match سیگنال pwm (مثلا PC.0) به طریق نرم افزاری معقول و مناسب می باشد؟
              مشخصات من در لینک زیر
              http://www.eca.ir/forum2/index.php?topic=1721.msg698645#msg698645

              www.********

              دیدگاه


                #8
                پاسخ : کنترل position یک موتور dc توسط xmega

                نیازی به قرار دادن گیت بصورت خارجی وجود ندارد و با استفاده از بخش AWeX عملیات Not (و اضافه کردن Dead time) توسط این بخش انجام می شود.
                اوژن: به معنای افکننده و شکست دهنده است
                دانایی، توانایی است-Knowledge is POWER
                برای حرفه ای شدن در الکترونیک باید با آن زندگی کرد
                وضعمان بهتر می شود، اگر همه نسبت به جامعه و اطراف خود مسوول باشیم و نگوئیم به ما چه
                قوی شدن و خوب ماندن - خوبی کردن به دیگران یک لذت ماندگار است
                اگر قرار باشد نفت و منابع خام را بدهیم و چرخ بگیریم، بهتر است چرخ را از نو اختراع کنیم
                ساعت کار بدن اکثر انسان ها کمتر از 800000 ساعت است و بعد از آن از کار می افتد

                دیدگاه


                  #9
                  پاسخ : کنترل position یک موتور dc توسط xmega

                  با سلام و تشکر
                  با وجود اینکه در pcb برد مورد استفاده, سیگنال pwm اصلی و not را به ترتیب بر روی پین PC.0 و PC.4 قرار داده ام آیا امکان قرار دادن not آن بر روی پین PC.4 توسط واحد AWEX وجود دارد ؟ یا اینکه فقط روی پینهای PC.0 و PC.1 می توانم سیگنالهای pwm و not آنرا داشته باشم؟
                  مشخصات من در لینک زیر
                  http://www.eca.ir/forum2/index.php?topic=1721.msg698645#msg698645

                  www.********

                  دیدگاه


                    #10
                    پاسخ : کنترل position یک موتور dc توسط xmega

                    موضوع دیگه اینه که ظاهرا روی همه تایمرها امکان بکارگیری از واحد AWEX نمی باشد و فقط روی برخی از تایمرها بسته به نوع شماره موجود می باشد در اینصورت در صورتی که از تایمری بدون امکان AWEX استفاده شود به نظر بنده بهترین راه استفاده از گیت not می باشد اگه راه حل مناسبتری وجود دارد ممنون میشم منو راهنمایی کنید
                    مشخصات من در لینک زیر
                    http://www.eca.ir/forum2/index.php?topic=1721.msg698645#msg698645

                    www.********

                    دیدگاه


                      #11
                      پاسخ : کنترل position یک موتور dc توسط xmega

                      اگر در صورت مسئله اضافه کردن Dead time وجود نداشته باشد و فقط Not بودن مورد نظر باشد، نیازی به استفاده از واحد AWeX نیست. در این شرایط برای PC0 و PC4 می توان از کانال A در TCC0 و TCC1 در مدها و مقدار compare match مشابه و توام استفاده کرد و گیت Not داخلی در مسیر پورت را از طریق رجیستر PINxCTRL برای یکی از آنها فعال نمود. در این روش از آنجایی که هر دو تایمر بصورت همزمان نمی توانند با هم راه اندازی شوند و تاخیر بسیار کمی در مقدار دهی به رجیستر CTRLA آنها ایجاد می شود، باید تاخیر ناشی از تفاوت در زمان اعمال کلاک به دو تایمر، در مقدار اولیه آن ها اعمال شود.
                      اوژن: به معنای افکننده و شکست دهنده است
                      دانایی، توانایی است-Knowledge is POWER
                      برای حرفه ای شدن در الکترونیک باید با آن زندگی کرد
                      وضعمان بهتر می شود، اگر همه نسبت به جامعه و اطراف خود مسوول باشیم و نگوئیم به ما چه
                      قوی شدن و خوب ماندن - خوبی کردن به دیگران یک لذت ماندگار است
                      اگر قرار باشد نفت و منابع خام را بدهیم و چرخ بگیریم، بهتر است چرخ را از نو اختراع کنیم
                      ساعت کار بدن اکثر انسان ها کمتر از 800000 ساعت است و بعد از آن از کار می افتد

                      دیدگاه


                        #12
                        پاسخ : کنترل position یک موتور dc توسط xmega

                        با تشکر از راهنمایی های شما استاد گرامی
                        با توجه به اینکه در صورت مساله مذکور از آی سی L293 برای راه اندازی استفاده شده و پایه IN1 درایور به PC.0 و پایه IN2 به PC.4 متصل شده و با توجه به ساختار درایور مذکوز نیازی به اعمال dead time نبود و روش پیشنهادی هوشمندانه شما استاد گرامی کاملا راه گشا برای صورت مساله من بود و آن تاخیر بسیار ناچیز در راه اندازی دو تایمر در این صورت مساله هیچگونه مشکلی بوجود نیاورد البته چیزی که به ذهن بنده میرسه اینه که همین تاخیر مذکور شاید بتواند بعنوان نوعی dead time رفتار کند ( البته حدس می زنم ).
                        ممنون
                        مشخصات من در لینک زیر
                        http://www.eca.ir/forum2/index.php?topic=1721.msg698645#msg698645

                        www.********

                        دیدگاه


                          #13
                          پاسخ : پاسخ : کنترل position یک موتور dc توسط xmega

                          نوشته اصلی توسط طراح
                          برای استفاده از روش pwm هم با فرض کنترل دو طرفه موتور با استفاده از Full bridge، باید خروجی کنترلر به گونه ای scale شود که به ازای خروجی صفر مقدار compare value در وسط منحنی دندان اره ای یا مثلثی واقع شود. مثلا در pwm با دقت 8 بیت، مقدار متناظر ولتاژ صفر عدد 127.5 می شود (که البته در دقت 8 بیتی باید 127 یا 128 قرار داده شود که ولتاژ کوچکی را ایجاد می کند). برای ولتاژ های مثبت و چرخش موتور در یک جهت هم عدد قرار داده شده برای compare value به سمت 255 افزایش می یابد و برای جهت مخالف هم به سمت صفر کاهش می یابد.
                          من موتور مذکور را با روشی که شما فرمودید راه اندازی کردم . البته من بجای PID از PI استفاده کردم و شبه کد من جهت اعمال مقدار pwm به شکل زیر است:
                          pwm_value=127+(Kp*P)+(Ki*I);//pwm_value is signed int
                          if (pwm_value>255)
                          pwm_value = 255;
                          if(pwm_value<0)
                          pwm_value = 0;
                          حال میخواستم ببینم آیا این روش من اصولیه یا خیر؟
                          ممنون از راهنمایی شما
                          مشخصات من در لینک زیر
                          http://www.eca.ir/forum2/index.php?topic=1721.msg698645#msg698645

                          www.********

                          دیدگاه


                            #14
                            پاسخ : کنترل position یک موتور dc توسط xmega

                            با فرض محاسبه صحیح P و I شبه کد شما تقریبا صحیح است. اما مرکز تقارن 127 بجای 127.5 به دلیل صحیح بودن محاسبات، یک dc جزئی ایجاد می کند که ممکن است مسئله ای را در عمل ایجاد نکند.
                            اوژن: به معنای افکننده و شکست دهنده است
                            دانایی، توانایی است-Knowledge is POWER
                            برای حرفه ای شدن در الکترونیک باید با آن زندگی کرد
                            وضعمان بهتر می شود، اگر همه نسبت به جامعه و اطراف خود مسوول باشیم و نگوئیم به ما چه
                            قوی شدن و خوب ماندن - خوبی کردن به دیگران یک لذت ماندگار است
                            اگر قرار باشد نفت و منابع خام را بدهیم و چرخ بگیریم، بهتر است چرخ را از نو اختراع کنیم
                            ساعت کار بدن اکثر انسان ها کمتر از 800000 ساعت است و بعد از آن از کار می افتد

                            دیدگاه


                              #15
                              پاسخ : کنترل position یک موتور dc توسط xmega

                              چیزی که من در عمل موجه شدم اینه که آستانه شروع حرکت لزوما بعد از مقدار pwm 127 نیست چرا که در این موتوری که من باهاش کار میکنم تقریبا با مقدار 150 و در جهت دیگر با مقدار 90 شروع به حرکت میکنه و عملا یک بازه زیادی برای شروع حرکت داره . آیا این مساله طبیعیه یا روش درایو من اشتباهه ؟ اگه طبیعی باشه برای مقابله با این بازه بی حرکتی چیکار باید کنم؟
                              ممنون از راهنماییتون
                              مشخصات من در لینک زیر
                              http://www.eca.ir/forum2/index.php?topic=1721.msg698645#msg698645

                              www.********

                              دیدگاه

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