اطلاعیه

Collapse
No announcement yet.

کمک در مورد سروو موتور

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

    #91
    پاسخ : کمک در مورد سروو موتور

    در برنامه به سرووها مقدار اولیه ندادید . در ابتدا حتماً مقدار اولیه بدید.
    بله شما باید فرکانس خروجی 555 رو بایک فرکانس متر دقیق چک کنید تا از صحت اندازه گیری مطمئین بشید. در ضمن اگر تونستید با یک منبع پالس حرفه ای مثل فانکشن ژنراتور به میکرو فرکانس بدید و اندازه بگیرید.
    عددی که روی LCD میبینید باید حدود 0.8 فرکانس واقعی باشه چون تعداد پالسهای موجود در هر 0.8 ثانیه شمرده میشه نه هر 1 ثانیه.
    نکته دیگه اینکه بنده با زبان بیسیک و این کامپایلر کار نکردم و با دستوراتش آشنا نیستم . در مورد نحوه Config کردن LCD نمیتونم نظری بدم ، میخواستم بپرسم از درستی کارکرد LCD و پیکره بندی اون مطمئن هستید دیگه؟

    دیدگاه


      #92
      پاسخ : کمک در مورد سروو موتور


      بسیار متشکرم جناب مهندس.

      نوشته اصلی توسط Perfect
      در برنامه به سرووها مقدار اولیه ندادید . در ابتدا حتماً مقدار اولیه بدید.
      ok،چشم.

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

      نوشته اصلی توسط Perfect
      نکته دیگه اینکه بنده با زبان بیسیک و این کامپایلر کار نکردم و با دستوراتش آشنا نیستم . در مورد نحوه Config کردن LCD نمیتونم نظری بدم ، میخواستم بپرسم از درستی کارکرد LCD و پیکره بندی اون مطمئن هستید دیگه؟
      بله جناب مهندس، کانفیگها و کار کرد lcd رو مطمئنّم، قبلا زیاد به کارم اومده، فقط خواستم ببینم محل آوردن دستورات مربوط به خوندن فرکانس روی lcd،در برنامه درست هست؟
      زندگی برگ بودن در مسیر باد نیست
      امتحان ریشه هاست
      ریشه هم هرگز اسیر باد نیست
      زندگی چون پیچک است
      انتهایش میرسد پیش خدا!

      دیدگاه


        #93
        پاسخ : کمک در مورد سروو موتور

        نوشته اصلی توسط pama
        کانفیگها و کار کرد lcd رو مطمئنّم، قبلا زیاد به کارم اومده، فقط خواستم ببینم محل آوردن دستورات مربوط به خوندن فرکانس روی lcd،در برنامه درست هست؟
        محل دستورات LCD مشکلی نداره. فقط اون دستور TRISB=0 در ابتدای برنامه رو حذف کنید بهتره. همچنین مقداردهی به متغیر سرووها رو باید قبل از لوپ اصلی ( قبل از : again ) انجام بدید.

        دیدگاه


          #94
          پاسخ : کمک در مورد سروو موتور

          بله، چشم آقا.
          میگن گل بود به سبزه نیز آراسته شد! حکایت منه!
          از صبح این lcd داره اساسی اذیت میکنه، روشن میشه اما چیزای بی ربط نشون میده حتی با یه برنامه ی ساده برای نشون دادن 2 تا کلمه!
          با همین مدار lcd قبلا هم فرکانس خونده بودم(بارها) و هم خروجی سنسور گاز رو با A/D دیکد کرده بودم و کلا زیاد باهاش کار کرده بودم...

          اما خوب، زودی راش میندازم و فرکانس 555 رو میخونم و میزارم :agree:

          اضافه شده در تاریخ :
          سلام جناب مهندس.
          بعد از یک روز کلنجار کردن با lcd متوجه شدم که اتصال یکی از پایه هاش رد شده بود و بنده متوجه نشدم برای همین چیزی رو نشون نمیداد!
          حالا تا آخر شب که هویه برسه، لحیمش میکنم.
          برنامه رو هم طبق فرمایش شما مبنی بر اینکه مقدار دهی سرووها قبل از لوپ اصلی باشه تغییر دادم و دوباره با همون منبع فرکانس مدار 555 تستش کردم منتها باز هم مثل قبل.
          جناب مهندس به نظر شما بهتر نیست مدار سرووها رو ببرم و با منبع اصلی فرکانسمون که سنسور سرعت خودرو هست و در نهایت سرووها باید خودشون رو با این منبع وفق بدند، تست کنم؟

          برای این کار ملاحظات خاصی رو باید مراعات کنم یا خیر، با همون برنامه ای که شما تو شبیه سازی جواب گرفتید و مدار سروویی که دارم ببرم و تست رو انجام بدم؟

          البته متوجهم که بهتر هست اول ببینم فرکانس خروجی 555 سر میکرو هم میاد یا خیر.
          منتها در حال حاضر خیلی گیجم و نمیدونم با اوصاف پیش اومده بهترین کار چیه؟!
          راستی دنبال فانکشن هم گشتم منتها گیر نیاوردم مگه اینکه برم دانشگاه شهرمون و ازشون بخوام بهم اجازه بدن از آزمایشگاشون استفاده کنم، نظرتون چیه جناب perfect ؟

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

          دیدگاه


            #95
            پاسخ : کمک در مورد سروو موتور

            نوشته اصلی توسط pama
            جناب مهندس به نظر شما بهتر نیست مدار سرووها رو ببرم و با منبع اصلی فرکانسمون که سنسور سرعت خودرو هست و در نهایت سرووها باید خودشون رو با این منبع وفق بدند، تست کنم؟
            برای این کار ملاحظات خاصی رو باید مراعات کنم یا خیر، با همون برنامه ای که شما تو شبیه سازی جواب گرفتید و مدار سروویی که دارم ببرم و تست رو انجام بدم؟
            آیا قبلاً این مدار رو نزدیک اتومبیل تست کردید؟ اگر میخواهید مدار رو در این شرایط تست کنید باید اول از همه با یک Optoisolator سیگنال ورودی رو از مدار میکروکنترلر ایزوله کنید. تا هم احتمال آسیب به میکرو کم بشه و هم نویز ناشی از اتومبیل کمتر روی میکرو اثر بگذاره.

            دیدگاه


              #96
              پاسخ : کمک در مورد سروو موتور

              نوشته اصلی توسط Perfect
              آیا قبلاً این مدار رو نزدیک اتومبیل تست کردید؟ اگر میخواهید مدار رو در این شرایط تست کنید باید اول از همه با یک Optoisolator سیگنال ورودی رو از مدار میکروکنترلر ایزوله کنید. تا هم احتمال آسیب به میکرو کم بشه و هم نویز ناشی از اتومبیل کمتر روی میکرو اثر بگذاره.
              بسیار متشکرم از حوصله و توجهتون جناب مهندس.
              بله قبلا برای منظور فعلی یعنی چرخش سرووها با شرط فرکانس البته با برنامه های قبلی، مدار رو نزدیک اتومبیل تست کرده بودم که جواب نداده بود.
              علاوه بر اون برای خوندن خروجی سنسور سرعت با مدار و برنامه ی فرکانس متر و سنسور گاز با A/D و مدار و برنامه ی مربوط به اون، باز هم این کار رو انجام دادم که در 2 حالت اخیر جواب خوب و منطقی ای بهمون داد، که بازه ی 0 تا 130 هرتز خروجی سنسور سرعت رو هم با همین تست بدست آوردم.

              منظورتون رو از اپتو ایزولاتور دقیقا نمیدونم به چی بر میگرده، بیشترین ملاحظاتی که رعایت کردم همون 1n4007 و خازن 1000 میکروی 25 ولت در ورودی و 0.1 میکروی الکترولیت در خروجی 7805 هست و برای 7806 ها که هر کدوم برای یک سروو در نظر گرفته شده، در ورودی هر رگولاتور، خازن 100 میکروی 16 ولت گذاشتم و در خروجی باید 1 میکروی تانتانیوم میگذاشتم، چون گیر نیاوردم از 1 میکروی الکترولیت موازی با 100 نانوی عدسی استفاده کردم.

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

              به اضافه ی اینکه برای تست چرخش سرووها با شرط، خروجی دیتای سنسور سرعت به عنوان منبع فرکانس به میکروی کنترل سرووها میومد.

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


              اضافه شده در تاریخ :
              یه سوال دیگه جناب مهندس.
              تو اتومبیل هم بخوام تست کنم باید فرکانس رو مستقیم بدم به میکرو یا با ترانزیستور؟
              میدونم سنسور سرعت هم با 5 ولت تغذیه میشه جناب perfect.
              زندگی برگ بودن در مسیر باد نیست
              امتحان ریشه هاست
              ریشه هم هرگز اسیر باد نیست
              زندگی چون پیچک است
              انتهایش میرسد پیش خدا!

              دیدگاه


                #97
                پاسخ : کمک در مورد سروو موتور

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

                اگر توجه کنید میبینید که GND و VCC و هرنوع اتصال الکتریکی دو سیستم کاملاً از هم جدا است ونباید بهم متصل بشن. بنابراین دوسیستم کاملاً از هم ایزوله هستندو تنها ارتباط اونها از طریق سیگنال نوری داخل تراشه است.
                از تراشه های متداول سری 4N25 یا 4N26 رو میتونید استفاده کنید.
                مقاومت ورودی متصل به LED به اندازه ولتاژ ورودی بستگی داره و برای سطح 5V حدود 470 اهم هست.

                دیدگاه


                  #98
                  پاسخ : کمک در مورد سروو موتور

                  یک دنیا سپاسگذار.
                  بسیار عالی بود جناب مهندس، برای بنده که خیلی جالب و زیبا بود، باز هم متشکرم.

                  با این حساب اگر تصور کنیم سنسور سرعت همون system1 باشه، در نتیجه سیم دیتای سنسور رو که همون منبع فرکانس ما هست، باید به R1 بدیم و GND سنسور رو هم به پایه ی 2 تراشه.
                  و راجع به VCC باید برای سمت دوم یا همون میکرو از رگولاتور 7805 تغذیه بشه و سمت اول یا همون سنسور که تغذیه ی 5 ولت خودش رو از باتری اتومبیل میگیره و با این حساب VCC دو سیستم از هم جدا خواهند بود،
                  و از اون سمت هم از پایه ی 5 برای شکل اول یا 4 در شکل دوم به میکرو بریم و GND میکرو رو هم به پایه ی 4 تراشه بزنیم، درست متوجه شدم جناب perfect؟
                  و با این حساب نیازی به ترانزیستور بنده نیست، منتها خازن های ورودی و خروجی رگولاتورها باید به قوت خودشون باقی باشند...

                  2 تا سوال دیگه برام بوجود اومده جناب مهندس، یکی اینکه فرقی نمیکنه که از کدوم یک از این 2 مدار استفاده کنم؟

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

                  واقعا بنده شرمنده ام از این همه سوال و در حیرتم از صبر شما...
                  باز هم متشکرم ازتون.
                  زندگی برگ بودن در مسیر باد نیست
                  امتحان ریشه هاست
                  ریشه هم هرگز اسیر باد نیست
                  زندگی چون پیچک است
                  انتهایش میرسد پیش خدا!

                  دیدگاه


                    #99
                    پاسخ : پاسخ : کمک در مورد سروو موتور

                    نوشته اصلی توسط pama

                    با این حساب اگر تصور کنیم سنسور سرعت همون system1 باشه، در نتیجه سیم دیتای سنسور رو که همون منبع فرکانس ما هست، باید به R1 بدیم و GND سنسور رو هم به پایه ی 2 تراشه.
                    و راجع به VCC باید برای سمت دوم یا همون میکرو از رگولاتور 7805 تغذیه بشه و سمت اول یا همون سنسور که تغذیه ی 5 ولت خودش رو از باتری اتومبیل میگیره و با این حساب VCC دو سیستم از هم جدا خواهند بود،
                    و از اون سمت هم از پایه ی 5 برای شکل اول یا 4 در شکل دوم به میکرو بریم و GND میکرو رو هم به پایه ی 4 تراشه بزنیم، درست متوجه شدم جناب perfect؟
                    و با این حساب نیازی به ترانزیستور بنده نیست، منتها خازن های ورودی و خروجی رگولاتورها باید به قوت خودشون باقی باشند...
                    درست متوجه شدید. منتهی همونطور که گفته شد مقاومت ورودی سر LED به ولتاژ خروجی سنسور بستگی داره که اگر خروجی سنسور 5 ولت باشه حدود 470 اهم و اگر 12 ولت باشه حدود 1 کیلو مناسبه.


                    نوشته اصلی توسط pama
                    2 تا سوال دیگه برام بوجود اومده جناب مهندس، یکی اینکه فرقی نمیکنه که از کدوم یک از این 2 مدار استفاده کنم؟
                    این دو مدار از نظر خروجی باهم اختلاف فاز 180 درجه ای دارند. خروجی مدار بالایی نسبت به ورودی معکوس است. درواقع مدار اول یک امیتر مشترک هست. مدار پائینی یک کلکتور مشترک هست و در نتیجه خروجی با ورودی همفاز است. هر چند که در عمل برای این پروژه تفاوت زیادی نداره ولی بهتره از مدار دوم که اختلاف فاز نداره استفاده کنید.

                    نوشته اصلی توسط pama
                    و دومی هم اینکه در صورتی که بنده بعدا بخوام سنسور سرعت و سنسور گاز رو همزمان به مدار کنترل سروو وصل کنم در این صورت اپتو ایزولاتورمون به چه نحو باید مورد استفاده قرار بگیره، آیا برای هر کدوم باید از یک تراشه استفاده بشه؟
                    بله برای ایزلاسیون باید برای هر ورودی از یک اپتوکوپلر استفاده کنید.

                    دیدگاه


                      پاسخ : کمک در مورد سروو موتور

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

                      واقعا متاسفم از این اشتباه بزرگم جناب perfect ، چون با این کارم نه تنها وقت شما رو سر این که ایراد کار از کجا میتونه باشه گرفتم، کلی هم باعث شدم ذهنتون منحرف بشه از اصل ماجرا...

                      واقعا شرمنده و متاسفم...

                      اما امروز که بعد از این گیج زدن! برنامه رو با کد زیر تست کردم متوجه شدم بدون شرط هم سرووها مشکل دارن و دائم تمایل دارن که در هر پینی از پورتd که هستند، در زوایای + و – تقریبا 30 درجه قرار بگیرن و در اونجا قفل بشن، البته یه خط در میون یک دفعه میبینم که وقتی پینها عوض شدن سرووها یک حرکت کوچیکی رو میکنن، ولی در کل عملکردشون درست نیست.

                      این هم کدی که شما لطف کرده بودید و شرطش رو بنده بر داشتم:

                      کد:
                      '****************************************************************
                      '* Name  : UNTITLED.BAS                   *
                      '* Author : [select VIEW...EDITOR OPTIONS]          *
                      '* Notice : Copyright (c) 2011 [select VIEW...EDITOR OPTIONS] *
                      '*     : All Rights Reserved                *
                      '* Date  : 30/12/2011                    *
                      '* Version : 1.0                        *
                      '* Notes  :                          *
                      '*     :                          *
                      '****************************************************************
                      
                       DEFINE OSC 8
                      @ DEVICE pic16f877a,WDT_OFF ,PWRT_ON ,PROTECT_OFF ,LVP_OFF ,HS_OSC ,BOD_OFF
                      servo1 var byte 
                      servo2 var byte 
                      servo3 var byte 
                      servo4 var byte 
                      servo5 var byte 
                      servo6 var byte 
                      servo7 var byte
                      
                      
                      ON INTERRUPT GOTO _interrupt
                      ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                      
                      
                         TRISD=$00
                         PORTD=$00
                         
                      ;;;;;;;;;
                       PIR1.1=0 ; TMR2IF=0
                       TMR2=0
                       PR2=249
                       PIE1.1=1 ; Enable timer2 interrupt
                       T2CON=$4F
                      ;;;;;;;;;
                      
                        INTCON.6=1  ;PEIE=1
                        INTCON.7=1  ;GIE=1 , enable global interrupt
                        
                      ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;  
                          
                      again:
                       
                       ; servo1=0
                       ; servo2=25
                       ; servo3=50
                       ; servo4=125
                       ; servo5=175
                       ; servo6=200
                       ; servo7=251
                        
                      goto again
                      
                      
                      ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                      
                      
                      _interrupt:            ; interrupt service
                      
                           DISABLE INTERRUPT    ;disable interrapts
                      
                          if PIR1.1=1 then     ; if TMR2IF=1 then
                              
                           OPTION_REG = OPTION_REG & $c0 
                           OPTION_REG = OPTION_REG | $02 
                      
                           PORTD = $01
                           PAUSEUS 990 
                           INTCON.2=0
                           TMR0 = 255-servo1
                           while INTCON.2=0
                           wend   
                           PORTD=$00
                           ;;;;;;;;;;;;;;;;;;;;;;;;;;
                            PORTD=$02;
                            PAUSEUS 990 
                            INTCON.2=0
                            TMR0 = 255-servo2 
                            while INTCON.2=0
                            wend
                             PORTD=$00    
                           ;;;;;;;;;;;;;;;;;;;;;;;;;; 
                            PORTD=$04;
                            PAUSEUS 990 
                            INTCON.2=0
                            TMR0 = 255-servo3
                            while INTCON.2=0
                            wend
                             PORTD=$00
                           ;;;;;;;;;;;;;;;;;;;;;;;;;;  
                            PORTD=$08;
                            PAUSEUS 990  
                            INTCON.2=0
                            TMR0 = 255-servo4 
                            while INTCON.2=0
                            wend
                             PORTD=$00
                           ;;;;;;;;;;;;;;;;;;;;;;;;;;  
                            PORTD=$10
                            PAUSEUS 990  
                            INTCON.2=0
                            TMR0 = 255-servo5
                            while INTCON.2=0
                            wend
                             PORTD=$00
                           ;;;;;;;;;;;;;;;;;;;;;;;;;; 
                            PORTD=$20
                            PAUSEUS 990  
                            INTCON.2=0
                            TMR0 = 255-servo6 
                            while INTCON.2=0
                            wend
                             PORTD=$00
                           ;;;;;;;;;;;;;;;;;;;;;;;;;;  
                            PORTD=$40
                            PAUSEUS 990  
                            INTCON.2=0
                            TMR0 = 255-servo7
                            while INTCON.2=0
                            wend
                            PORTD=$00
                           ;;;;;;;;;;;;;;;;;;;;;;;;;; 
                            PIR1.1=0  ; clear TMR2IF
                            endif 
                            
                            RESUME     ;return from interrapt 
                            ENABLE INTERRUPT 
                      ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                      
                      end
                      زندگی برگ بودن در مسیر باد نیست
                      امتحان ریشه هاست
                      ریشه هم هرگز اسیر باد نیست
                      زندگی چون پیچک است
                      انتهایش میرسد پیش خدا!

                      دیدگاه


                        پاسخ : کمک در مورد سروو موتور

                        برنامه از نظر تئوری و نتیجه در Proteus مشکلی نداره. با این حال برنامه رو به صورت زیر تغییر بدید و نتیجه رو اعلام کنید. در ضمن آیا از کریستال 8MHZ استفاده کردید یا خیر؟



                        کد:
                         DEFINE OSC 8
                         
                        servo1 var byte 
                        servo2 var byte 
                        servo3 var byte 
                        servo4 var byte 
                        servo5 var byte 
                        servo6 var byte 
                        servo7 var byte
                        
                        
                        ON INTERRUPT GOTO _interrupt
                        ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                        
                        
                         
                          TRISD=$00
                          PORTD=$00
                           
                        ;;;;;;;;;
                         PIR1.1=0 ; TMR2IF=0
                         TMR2=0
                         PR2=249
                         PIE1.1=1 ; Enable timer2 interrupt
                         T2CON=$4F
                        ;;;;;;;;;
                        
                          INTCON.6=1  ;PEIE=1
                          INTCON.7=1  ;GIE=1 , enable global interrupt
                          
                        ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;  
                            
                         servo1=0
                         servo2=25
                         servo3=50
                         servo4=125
                         servo5=175
                         servo6=200
                         servo7=251 
                         
                        again:
                              ; main loop
                         
                           
                        goto again
                        
                        
                        
                        
                        ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                        
                        
                        _interrupt:            ; interrupt service
                        
                             DISABLE INTERRUPT    ;disable interrapts
                        
                            if PIR1.1=1 then     ; if TMR2IF=1 then
                             
                             PORTD = $01
                             PAUSEUS 990 
                             INTCON.2=0
                             TMR0 = 255-servo1
                             OPTION_REG = OPTION_REG & $c0 
                             OPTION_REG = OPTION_REG | $02 
                             while INTCON.2=0
                             wend   
                             PORTD=$00
                             ;;;;;;;;;;;;;;;;;;;;;;;;;;
                              PORTD=$02;
                              PAUSEUS 990 
                              INTCON.2=0
                              TMR0 = 255-servo2 
                              OPTION_REG = OPTION_REG & $c0 
                              OPTION_REG = OPTION_REG | $02 
                              while INTCON.2=0
                              wend
                               PORTD=$00    
                             ;;;;;;;;;;;;;;;;;;;;;;;;;; 
                              PORTD=$04;
                              PAUSEUS 990 
                              INTCON.2=0
                              TMR0 = 255-servo3
                              OPTION_REG = OPTION_REG & $c0 
                              OPTION_REG = OPTION_REG | $02
                              while INTCON.2=0
                              wend
                               PORTD=$00
                             ;;;;;;;;;;;;;;;;;;;;;;;;;;  
                              PORTD=$08;
                              PAUSEUS 990  
                              INTCON.2=0
                              TMR0 = 255-servo4 
                              OPTION_REG = OPTION_REG & $c0 
                              OPTION_REG = OPTION_REG | $02
                              while INTCON.2=0
                              wend
                               PORTD=$00
                             ;;;;;;;;;;;;;;;;;;;;;;;;;;  
                              PORTD=$10
                              PAUSEUS 990  
                              INTCON.2=0
                              TMR0 = 255-servo5
                              OPTION_REG = OPTION_REG & $c0 
                              OPTION_REG = OPTION_REG | $02
                              while INTCON.2=0
                              wend
                               PORTD=$00
                             ;;;;;;;;;;;;;;;;;;;;;;;;;; 
                              PORTD=$20
                              PAUSEUS 990  
                              INTCON.2=0
                              TMR0 = 255-servo6 
                              OPTION_REG = OPTION_REG & $c0 
                              OPTION_REG = OPTION_REG | $02
                              while INTCON.2=0
                              wend
                               PORTD=$00
                             ;;;;;;;;;;;;;;;;;;;;;;;;;;  
                              PORTD=$40
                              PAUSEUS 990  
                              INTCON.2=0
                              TMR0 = 255-servo7
                              OPTION_REG = OPTION_REG & $c0 
                              OPTION_REG = OPTION_REG | $02
                              while INTCON.2=0
                              wend
                              PORTD=$00
                             ;;;;;;;;;;;;;;;;;;;;;;;;;; 
                              PIR1.1=0  ; clear TMR2IF
                              endif 
                              
                              RESUME     ;return from interrapt 
                              ENABLE INTERRUPT 
                        ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                        
                        end

                        دیدگاه


                          پاسخ : کمک در مورد سروو موتور

                          بله، درست میفرمائید.
                          چشم همین الان تست میکنم،بله کریستالم هم 8 مگ هست.
                          باز هم متشکرم ازتون.

                          اضافه شده در تاریخ :
                          تست کردم جناب مهندس.
                          درست شد آقا،با برنامه ی اخیر شما که مقدار دهی خارج از لوپ اصلی بود، سرووها دقیقا میرن تو زاویه.
                          بسیار متشکرم.
                          در نتیجه میتونم به این برنامه شرطها رو دوباره اضافه کنم و تو ماشین تستش کنم؟

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

                          دیدگاه


                            پاسخ : کمک در مورد سروو موتور

                            نوشته اصلی توسط pama
                            تست کردم جناب مهندس.
                            درست شد آقا،با برنامه ی اخیر شما که مقدار دهی خارج از لوپ اصلی بود، سرووها دقیقا میرن تو زاویه.
                            بسیار متشکرم.
                            در نتیجه میتونم به این برنامه شرطها رو دوباره اضافه کنم و تو ماشین تستش کنم؟
                            به غیر از خارج کردن مقداردهی سرووها از لوپ اصلی در روتین وقفه هم تغییراتی داده شد. قسمت های دیگه مورد نیاز از جمله شروط رو به همین برنامه اخیر اضافه کنید. با کمی مقایسه با برنامه قبلی به اختلافش پی میبرید.

                            نوشته اصلی توسط pama
                            جناب مهندس یه موضوع دیگه ای که وجود داره اینه که سرووها بعد از اینکه با این برنامه میرن تو زاویه ی مورد نظر، قفل میشن!
                            به عبارتی هر چقدر با دست شافت خروجیشون رو میچرخونم، در مقابل اون مقاومت میکنن و اصلاحرکت نمیکنن، البته این مادامی صادق هست که تغذیه به مدار وصل هست، و وقتی که برق مدار رو قطع میکنم سروو از این حالت بیرون میاد!
                            آیا این موضوع میتونه مساله ساز باشه جناب مهندس؟
                            اصلاً باید همینطور باشه و اگر اینطور نباشه اشتباه هست . سرووها با توجه به پالسی که دریافت میکنند در یک زاویه خاص قرار میگیرند و تا زمانی که تغیری در نوع پالس ایجاد نشده در همون زاویه باقی میمونند.
                            یعنی اینطور نیست که وقتی سرووی در حال کار رو در یک زاویه قرار دادید بتونید با دست اونو منحرف کنید. اگر هم پالس اعمالی قطع بشه سروو در وضعیت نامشخصی قرار خواهد گرفت.

                            دیدگاه


                              پاسخ : کمک در مورد سروو موتور

                              نوشته اصلی توسط Perfect
                              به غیر از خارج کردن مقداردهی سرووها از لوپ اصلی در روتین وقفه هم تغییراتی داده شد. قسمت های دیگه مورد نیاز از جمله شروط رو به همین برنامه اخیر اضافه کنید. با کمی مقایسه با برنامه قبلی به اختلافش پی میبرید.
                              ok، بی دقتی بنده رو ببخشید، چشم اضافه میکنم و تست میکنم.

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

                              در نتیجه کار بعدی بنده اضافه کردن شروط و تست کردن نزدیک اتومبیل با اپتو ایزولاتور شد...

                              اضافه شده در تاریخ :
                              جناب مهندس کد جدید به اضافه ی شرطها باید به این صورت باشه قاعدتا، درست عرض میکنم؟

                              کد:
                                
                               DEFINE OSC 8
                              @ DEVICE pic16f877a,WDT_OFF ,PWRT_ON ,PROTECT_OFF ,LVP_OFF ,HS_OSC ,BOD_OFF 
                               
                              servo1 var byte 
                              servo2 var byte 
                              servo3 var byte 
                              servo4 var byte 
                              servo5 var byte 
                              servo6 var byte 
                              servo7 var byte
                              
                              a var byte
                              F var word
                              
                              ON INTERRUPT GOTO _interrupt
                              ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                              
                              
                               
                                TRISD=$00
                                PORTD=$00
                                TRISB=0
                                TRISC.0=1
                                ;;;;;;;;;
                                
                               TMR1L=0
                               TMR1H=0
                               T1CON=$03 ;turn on timer1 in counter mode
                              ;;;;;;;;;
                               PIR1.1=0 ; TMR2IF=0
                               TMR2=0
                               PR2=249
                               PIE1.1=1 ; Enable timer2 interrupt
                               T2CON=$4F
                              ;;;;;;;;;
                              
                                INTCON.6=1  ;PEIE=1
                                INTCON.7=1  ;GIE=1 , enable global interrupt
                                
                              ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;  
                                  
                               servo1=0
                               servo2=25
                               servo3=50
                               servo4=125
                               servo5=175
                               servo6=200
                               servo7=251 
                               
                              again:
                                    ; main loop
                                    
                               if f <= 25 then
                              servo1 = 0
                              endif
                              
                              if f >= 26 and f <= 40 then
                              servo2 = 25
                              endif
                              
                              if f >= 41 and f <= 60 then
                              servo3 = 75
                              endif
                              
                              if f >= 61 and f <= 80 then
                              servo4 = 125
                              endif
                              
                              if f >= 81 and f <= 100 then
                              servo5 = 175
                              endif
                              
                              if f >= 101 and f <= 115 then
                              servo6 = 200
                              endif
                              
                              if f >= 116 then
                              servo7 = 250
                              endif      
                                 
                              goto again
                              
                              ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                              
                              
                              _interrupt:            ; interrupt service
                              
                                   DISABLE INTERRUPT    ;disable interrapts
                              
                                  if PIR1.1=1 then      ; if TMR2IF=1 then
                                   
                                    a=a+1
                              ;;;;;;;;;;;;;;;;;;;     
                               if a = 40 then
                               F=TMR1H
                               F=F << 8
                               F=F | TMR1L
                               a=0
                               TMR1L=0
                               TMR1H=0
                               PORTB=f
                               endif
                               ;;;;;;;;;;;;;;;;;;; 
                                      
                                   
                                   PORTD = $01
                                   PAUSEUS 990 
                                   INTCON.2=0
                                   TMR0 = 255-servo1
                                    OPTION_REG = OPTION_REG & $c0 
                                   OPTION_REG = OPTION_REG | $02
                                   while INTCON.2=0
                                    wend   
                                   PORTD=$00
                                   ;;;;;;;;;;;;;;;;;;;;;;;;;;
                                    PORTD=$02;
                                    PAUSEUS 990 
                                    INTCON.2=0
                                    TMR0 = 255-servo2 
                                    OPTION_REG = OPTION_REG & $c0 
                                    OPTION_REG = OPTION_REG | $02 
                                    while INTCON.2=0
                                    wend
                                     PORTD=$00    
                                   ;;;;;;;;;;;;;;;;;;;;;;;;;; 
                                    PORTD=$04;
                                    PAUSEUS 990 
                                    INTCON.2=0
                                    TMR0 = 255-servo3
                                    OPTION_REG = OPTION_REG & $c0 
                                    OPTION_REG = OPTION_REG | $02
                                    while INTCON.2=0
                                    wend
                                     PORTD=$00
                                   ;;;;;;;;;;;;;;;;;;;;;;;;;;  
                                    PORTD=$08;
                                    PAUSEUS 990  
                                    INTCON.2=0
                                    TMR0 = 255-servo4 
                                    OPTION_REG = OPTION_REG & $c0 
                                    OPTION_REG = OPTION_REG | $02
                                    while INTCON.2=0
                                    wend
                                     PORTD=$00
                                   ;;;;;;;;;;;;;;;;;;;;;;;;;;  
                                    PORTD=$10
                                    PAUSEUS 990  
                                    INTCON.2=0
                                    TMR0 = 255-servo5
                                    OPTION_REG = OPTION_REG & $c0 
                                    OPTION_REG = OPTION_REG | $02
                                    while INTCON.2=0
                                    wend
                                     PORTD=$00
                                   ;;;;;;;;;;;;;;;;;;;;;;;;;; 
                                    PORTD=$20
                                    PAUSEUS 990  
                                    INTCON.2=0
                                    TMR0 = 255-servo6 
                                    OPTION_REG = OPTION_REG & $c0 
                                    OPTION_REG = OPTION_REG | $02
                                    while INTCON.2=0
                                    wend
                                     PORTD=$00
                                   ;;;;;;;;;;;;;;;;;;;;;;;;;;  
                                    PORTD=$40
                                    PAUSEUS 990  
                                    INTCON.2=0
                                     TMR0 = 255-servo7
                                    OPTION_REG = OPTION_REG & $c0 
                                    OPTION_REG = OPTION_REG | $02
                                    while INTCON.2=0
                                    wend
                                    PORTD=$00
                                   ;;;;;;;;;;;;;;;;;;;;;;;;;; 
                                    PIR1.1=0  ; clear TMR2IF
                                    endif 
                                    
                                    RESUME     ;return from interrapt 
                                    ENABLE INTERRUPT 
                              ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                              
                              end
                              زندگی برگ بودن در مسیر باد نیست
                              امتحان ریشه هاست
                              ریشه هم هرگز اسیر باد نیست
                              زندگی چون پیچک است
                              انتهایش میرسد پیش خدا!

                              دیدگاه


                                پاسخ : کمک در مورد سروو موتور

                                ظاهراً درسته ولی باید تست کنید و ببینید در عمل جواب میده؟

                                دیدگاه

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