اطلاعیه

Collapse
No announcement yet.

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

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

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

    سلام......شرکت STMICROELECTRONIC یک ای سی برای کنترل سرو موتور زده...من باهاش کار نکردم ولی چون ای سی L297 همین شرکت راه اندازی استپ موتور را خیلی راحت تر میکرد گفتم حتما این ای سی هم مثل همون کار را خیلی راحت میکنه...= L6243D
    یا L6243 که هر دو SMD هستند.
    الکترونیک فقط ترانزیستور نیست...موفقیت فقط الکترونیک نیست...زندگی فقط موفقیت نیست.

    دیدگاه


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

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

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

      پس طبق فرمایشات شما الان باید بعد از تعریف متغیرها در ابتدای برنامه این قسمت خوندن از حافظه با دستور read رو (این دستور همونطوری هست که تو کتاب دکتر میرزا کوچکی نوشته شده بود) بیارم، و بعد از اون ادامه ی برنامه و در حال حاضر کاری به high و low کردن پین مربوط به تغذیه و نوشتن آخرین مقدار سرووها در خانه های حافظه نداشته باشم و فقط همین قسمت رو چک کنم.
      بزرگواری میفرمائید اگر که بنده ی بیسواد رو جهت چک کردن این قسمت ماجرا مثل دفعات قبل یاری بفرمائید.
      زندگی برگ بودن در مسیر باد نیست
      امتحان ریشه هاست
      ریشه هم هرگز اسیر باد نیست
      زندگی چون پیچک است
      انتهایش میرسد پیش خدا!

      دیدگاه


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

        نوشته اصلی توسط pama
        بسیار متشکرم از لطفتون جناب مهندس کاخکی.
        واقعا ازتون بینهایت متشکرم که وقت میذارید....

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

        پس طبق فرمایشات شما الان باید بعد از تعریف متغیرها در ابتدای برنامه این قسمت خوندن از حافظه با دستور read رو (این دستور همونطوری هست که تو کتاب دکتر میرزا کوچکی نوشته شده بود) بیارم، و بعد از اون ادامه ی برنامه و در حال حاضر کاری به high و low کردن پین مربوط به تغذیه و نوشتن آخرین مقدار سرووها در خانه های حافظه نداشته باشم و فقط همین قسمت رو چک کنم.
        بزرگواری میفرمائید اگر که بنده ی بیسواد رو جهت چک کردن این قسمت ماجرا مثل دفعات قبل یاری بفرمائید.
        خوب من هم برای همین گفتم گه اگر نمیدونید چطور تست کنید بگید تا راهنمایی کنم
        اول لازم نیست مقادیر رو روی eeprom ذخیره کنید
        مقادیر رو دستی دید مثلا مثل این
        servo1=212
        اگر درست کار کرد بعد برین سراغ خوندن از Eeprom (البته باید قبلش دستی ذخیره کنید)
        اگر موفق شدید و جواب داد بعد میرید سراغ ذخیره اتومات
        پس مرحله مرجله پیش برید
        پروردگارا: به من زیستنی عطا کن که در لحظه مرگ بر بی ثمری لحظه ای که برای زیستن گذشته است حسرت نخورم، و مردنی عطا کن که بر بیهودگیش سوگوار نباشم. بگذار تا آن را خود انتخاب کنم، اما آنچنان که تو دوست میداری

        دیدگاه


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

          نوشته اصلی توسط امیر حسنی کاخکی
          خوب من هم برای همین گفتم گه اگر نمیدونید چطور تست کنید بگید تا راهنمایی کنم
          اول لازم نیست مقادیر رو روی eeprom ذخیره کنید
          مقادیر رو دستی دید مثلا مثل این
          servo1=212
          اگر درست کار کرد بعد برین سراغ خوندن از Eeprom (البته باید قبلش دستی ذخیره کنید)
          اگر موفق شدید و جواب داد بعد میرید سراغ ذخیره اتومات
          پس مرحله مرجله پیش برید
          بسیار ممنونم از توجهتون.
          در نتیجه ابتدا باید از servo1 تا servo7 رو در ابتدای برنامه و بعد از تعریف متغیرها به صورت دستی مقدار دهی کنم، به این صورت:

          servo1=100
          servo2=125
          servo3=150
          servo4=200
          servo5=225
          servo6=250
          servo7=125

          منتها واقعا شرمنده ام جناب مهندس! نمیتونم ربط مقدار دهی دستی رو با خوندن از eeprom بفهمم!!!
          شما میفرمائید ابتدا مقادیر رو دستی ذخیره کنم و بعد از eeprom بخونم...

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

          کد:
           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
          b var byte
          f var word
          flag var bit
          
          
          READ 0, servo1
          READ 1, servo2
          READ 2, servo3
          READ 3, servo4
          READ 4, servo5
          READ 5, servo6
          READ 6, servo7
          
          
          ON INTERRUPT GOTO _interrupt
          ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
          
          
            TRISD=$00
            PORTD=$00
            TRISc.0=1
            TRISB=0
          
            
           ;;;;;;;;;       
           TMR1L=0
           TMR1H=0
           T1CON=$03 ;turn on timer1 in counter mode
           ;;;;;;;;;
           
           PIR1.1=0 ; TMR2IF=0
           TMR2=0
           PR2=249
           PIE1.1=1
           T2CON=$4F
             ;;;;;;;;;
            INTCON.6=1  
            INTCON.7=1  
            
            ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 
           again:
           
           if flag=1 then 
          
           if f <= 25 then
           servo3 = 50
           endif
           
            if f >= 26 and f <= 40 then
           servo3 = 250 
           if b>=50 then
            servo4 = 200
            endif
            endif
            
              
           
           if f >= 41 and f <= 60 then
           servo3 = 100 
           endif
           
           
           if f >= 61 and f <= 80 then
           servo3 = 250
           if b >=50 then
            servo4 = 100
            endif
            endif
           
            if f >= 81 and f <= 100 then
           servo4 = 250
           endif
          
           if f >= 101 and f <= 115 then
           servo4 =150
           endif
                
              
           if f >= 116 then
           servo4 =50
           endif
           
          flag=0 
          endif 
             
          goto again
          
          ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
          
            DISABLE 
          _interrupt:            ; interrupt service
          
          if PIR1.1=1 then     ; if TMR2IF=1 then
           
           
           b=b+1
           a=a+1
           
           if a>=40 then 
           F.byte1=TMR1H
           F.byte0=TMR1L      
           TMR1L=0
           TMR1H=0
           T1CON=$03
           a=0 
           flag=1
           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 
          ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
          
          end
          منتها نه تنها سرووها بلکه همه ی قسمتهای پروژم سخت به هم ریخته است و همین هم باعث شده تا بنده هم اساسی به هم بریزم.

          متاسفم ! اما الان مشکل سر این هست که دستور read وظیفش این هست که اطلاعات رو از آدرس مشخص شده در حافظه ی eeprom میخونه، منتها الان ما در این حافظه چیزی نداریم و طبق فرمایش شما باید مقادیری رو که دستی ذخیره کردیم رو بخونیم و همین باعث گیج شدن بنده شده....

          ممنونتون میشم اگه براتون امکان داره بفرمائید بنده باید دقیقا چه کار کنم؟
          زندگی برگ بودن در مسیر باد نیست
          امتحان ریشه هاست
          ریشه هم هرگز اسیر باد نیست
          زندگی چون پیچک است
          انتهایش میرسد پیش خدا!

          دیدگاه


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

            با سلام

            جناب PAMA ،

            یک متغیر تعریف کنید به نام eep_programmed که از آدرس مثلا 15 eeprom خوانده یا نوشته می شود.
            سپس در اول برنامه آنرا از آدرس 15 بخوانید.
            اگر برابر بود با مثلا 5A ، می فهمیم که اطلاعات درستی در eeprom قرار دارد.( این 5A یک عدد دلخواه و قرار دادی است.)

            در غیر اینصورت، هنوز اطلاعات در eeprom برنامه ریزی نشده(ضبط نشده) و دفعه اول است که دستگاه راه افتاده ( یا به دلیل نویز، اطلاعات ایییپیرام پاک شده)
            و باید مثلا اطلاعات اولیه و پیش فرضی(به انتخاب و تشخیص خودتان ، مثلا معادل 0%) در متغیر های pwm قرار گیرد.

            حالا بعد از هر دفعه ضبط اطلاعات pwm در eeprom ، آن محل 15 ایییپیرام را با عدد 5A پر می کنید تا دفعه بعد که دستگاه
            روشن می شود با خواندن محل 15 از اییپیرام ، بدانیم که اعداد درست در آن قرار دارد.


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

            با سپاس

            پ.ن:
            ضمنا کار شما ، شدنی است و جای نگرانی از اتمام آن نیست.
            مقداری به خود استراحت بدهید، و دوباره شروع کنید.

            امروزه کدهایی در رده 50000 و 100000 و 200000 خط با زبان سی برای میکرو ها می نویسند
            و 10 ها برابر کار مورد نظر شما را انجام می دهند،(در مدت مناسب)
            لذا کار شما جای نگرانی برای اجرا ، ندارد، مگر اینکه محدودیت زمانی داشته باشید.
            نمونه آن برنامه ها و محصولات جناب طراح
            و کد جناب هادی اسدی polestar در بخش mp3 player و آسانسور.
            و تابلوهای روان دوستان فعال مانند جناب کاخکی و مهری و ....


            گشتی در لاله زار
            http://www.eca.ir/forum2/index.php?topic=76138.0

            http://www.eca.ir/forum2/index.php?topic=76141

            دیدگاه


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

              نوشته اصلی توسط pama
              نمیتونم ربط مقدار دهی دستی رو با خوندن از eeprom بفهمم!!!
              شما میفرمائید ابتدا مقادیر رو دستی ذخیره کنم و بعد از eeprom بخونم...
              شما به همه چی توجه کردید بجز همون قسمتی که گفتم مرحله مرحله پیش برید
              چون من سخت افزار شما رو ندارم و البته برنامه نویسی PIC بلد نیستم این کار رو به خودتون محول کردم که ببینید اگر این روش (مقدار دهی اولیه به سرووها)درست جواب داد و با قطع و وصل مجدد تغذیه سرووها حرکات اضافه ندارند آنگاه به سراغ ذخیره و برداشت از حافظه بروید ولی اگر در همون مرحله اول دیدیم که رفتار سرروها مطابق انتظار ما نبود به فکر یک راه دیگر باشیم.
              پس فعلا به هیچ عنوان به حافظه EEPROM کاری نداریم.و فقط میخواهیم رفتار سرووها رو به هنگام وصل تغذیه چک کنیم

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

              دیدگاه


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

                نوشته اصلی توسط Solsal
                با سلام

                جناب PAMA ،

                یک متغیر تعریف کنید به نام eep_programmed که از آدرس مثلا 15 eeprom خوانده یا نوشته می شود.
                سپس در اول برنامه آنرا از آدرس 15 بخوانید.
                اگر برابر بود با مثلا 5A ، می فهمیم که اطلاعات درستی در eeprom قرار دارد.( این 5A یک عدد دلخواه و قرار دادی است.)

                در غیر اینصورت، هنوز اطلاعات در eeprom برنامه ریزی نشده(ضبط نشده) و دفعه اول است که دستگاه راه افتاده ( یا به دلیل نویز، اطلاعات ایییپیرام پاک شده)
                و باید مثلا اطلاعات اولیه و پیش فرضی(به انتخاب و تشخیص خودتان ، مثلا معادل 0%) در متغیر های pwm قرار گیرد.

                حالا بعد از هر دفعه ضبط اطلاعات pwm در eeprom ، آن محل 15 ایییپیرام را با عدد 5A پر می کنید تا دفعه بعد که دستگاه
                روشن می شود با خواندن محل 15 از اییپیرام ، بدانیم که اعداد درست در آن قرار دارد.


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

                با سپاس

                پ.ن:
                ضمنا کار شما ، شدنی است و جای نگرانی از اتمام آن نیست.
                مقداری به خود استراحت بدهید، و دوباره شروع کنید.

                امروزه کدهایی در رده 50000 و 100000 و 200000 خط با زبان سی برای میکرو ها می نویسند
                و 10 ها برابر کار مورد نظر شما را انجام می دهند،(در مدت مناسب)
                لذا کار شما جای نگرانی برای اجرا ، ندارد، مگر اینکه محدودیت زمانی داشته باشید.
                نمونه آن برنامه ها و محصولات جناب طراح
                و کد جناب هادی اسدی polestar در بخش mp3 player و آسانسور.
                و تابلوهای روان دوستان فعال مانند جناب کاخکی و مهری و ....
                نوشته اصلی توسط امیر حسنی کاخکی
                شما به همه چی توجه کردید بجز همون قسمتی که گفتم مرحله مرحله پیش برید
                چون من سخت افزار شما رو ندارم و البته برنامه نویسی PIC بلد نیستم این کار رو به خودتون محول کردم که ببینید اگر این روش (مقدار دهی اولیه به سرووها)درست جواب داد و با قطع و وصل مجدد تغذیه سرووها حرکات اضافه ندارند آنگاه به سراغ ذخیره و برداشت از حافظه بروید ولی اگر در همون مرحله اول دیدیم که رفتار سرروها مطابق انتظار ما نبود به فکر یک راه دیگر باشیم.
                پس فعلا به هیچ عنوان به حافظه EEPROM کاری نداریم.و فقط میخواهیم رفتار سرووها رو به هنگام وصل تغذیه چک کنیم

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

                بعد از اون بنده به معنای واقعی کلمه از اساتید بزرگوارم سپاسگذارم، که نه تنها درس میکرو رو خط به خط و کلمه به کلمه به بنده تفهیم میکنند، بلکه هیچگاه امید بخشیدن رو، در کنار اون فراموش نمیکنند، ( که به نظر بنده میتونه در لحظه ای که انسان داره دشارژمیشه، مثل حالای بنده، واقعا دوباره شخص رو، رو پا کنه و همون انرژی اولیه رو به انسان برگردونه)
                بسیار سپاسگذارم که اینگونه اید...
                واقعا برای امشب حتی رمق فکر کردن هم ندارم، حتما فردا به یک یک اوامر دوستان بزرگوارم عمل خواهم کرد.
                باز هم از همه ی دوستان که خالصانه در حق همه لطف دارند، بینهایت سپاسگذارم.

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

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

                کد:
                 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
                 T2CON=$4F
                   ;;;;;;;;;
                  INTCON.6=1  
                  INTCON.7=1  
                  
                  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 
                  
                 servo1=251
                 servo2=200
                 servo3=175
                 servo4=125
                 servo5=50
                 servo6=25
                 servo7=0 
                 
                  
                 again:
                 
                
                goto again
                
                ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                
                  DISABLE 
                _interrupt:            ; interrupt service
                
                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 
                ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                
                end
                نتیجه ی تست این شد که سرووها در هر پینی که قرار داشتند، به قول فرمایش شما در ابتدا با زدن تغذیه در زاویه های تعریف شدش قرار گرفتند، وقتی برق مدار رو قطع کردم و دوباره وصلش کردم سرووها سر همون زوایای قبلی بودند و شاید یه تکونی میخوردند، منتها تغییر پوزیشن نداشتند، این وضعیت تا 3 یا 4 بار قطع و وصل تغذیه صادق بود، منتها گاهی اوقات(نه همیشه) و در بعضی از پینها، برای بار چهارم یا پنجم، ناگهان با وصل مجدد تغذیه زاویشون تغییر میکرد و در یک محل نا معلومی قرار میگرفت اون هم نه به این صورت که در اون زاویه کاملا ترمز کنه یا قفل بشه، و یه حرکت غیر طبیعی به یه جای نامعلوم داشت.
                البته عرض کردم این اتفاق برای بار اولی که تغذیه قطع و سپس وصل میشد، نمی افتاد، بلکه برای بار چهارم و پنجم، اون هم برای بعضی از سرووها اتفاق می افتاد.
                بنده بی صبرانه منتظر نظر و دستور شمام...
                زندگی برگ بودن در مسیر باد نیست
                امتحان ریشه هاست
                ریشه هم هرگز اسیر باد نیست
                زندگی چون پیچک است
                انتهایش میرسد پیش خدا!

                دیدگاه


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

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

                  دیدگاه


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

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

                    بنده متوجه هستم(البته اگر اشتباه نکنم) منظور شما از این تست این بود که ببینیم آیا سرووها میتونند با وصل مجدد تغذیه آخرین مقدار خودشون رو حفظ کنند یا خیر(البته بدون eeprom)

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

                    دیدگاه


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

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

                      بنده متوجه هستم(البته اگر اشتباه نکنم) منظور شما از این تست این بود که ببینیم آیا سرووها میتونند با وصل مجدد تغذیه آخرین مقدار خودشون رو حفظ کنند یا خیر(البته بدون eeprom)

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

                      دیدگاه


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

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

                        اصل کار به این صورت هست که ما میخوایم این طور برنامه رو بنویسیم که:
                        در برناممون 15 تا شرط داریم که هر گاه هر کدوم از این 15 شرط محقق شد، باید کاری بازای اون انجام بشه، به این صورت که ما بازای این 15 شرط 15 تا lable داریم که حرکت 7 سرووی ما در غالب این 15 lable گنجونده شده،و 3 تا از سرووهای ما پای ثابت همه ی lableهان، و بقیه ی سرووها هم به ترتیبی در این lableها گنجونده شدند.

                        حالا هر کدوم از شرطها که محقق شد به lable مربوط به خودش پرش میکند و در اونجا تعدادی از سرووها مثلا 4 تا از اونها ، باید به ترتیب و پشت سر هم در زاویه های تعریف شدش قرار بگیرند، و به همین ترتیب وقتی دستگاه در حال کار هست، ممکنه از این شرط خارج شده و شرط بعدی محقق بشه، در نتیجه باید از این lable خارج شده و به lable مربوط به شرط جدید پرش انجام بشه و باز در اون تعداد سرووهایی که قرار دارند، هر کدوم به ترتیب در زاویه های مربوط به خودشون که براشون تعریف کردیم، قرار بگیرند.
                        و به همین ترتیب تا آخر....

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

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

                        حالا در این شرایط وقتی دستگاه خاموش میشه، سرووهای اون در یک زاویه ای قرار میگیرند،که این زاویه ها مربوط به زوایای تعریف شده برای سروو در lable 3 هست...
                        ما به حالت دستی میریم، وقتی در حالت دستی هستیم، سرووها مسلما زاویه هاشون تغییر نمیکنه، اما شرطهایی که داریم و با توجه به اون شرطها به lable های مختلف میرفتیم، این شرطها با انجام اون عمل به صورت دستی تغییر میکنه

                        حالا فرض کنید باز میخوایم از حالت دستی به حالت اتومات بریم، دفعه ی قبل که دستگاه رو خاموش کرده بودیم، شرط ما در حالت شرط 3 بود و به تبع اون سرووها در حالت زوایای مربوط به سرووها در lable 3 بود،

                        اما الان که دوباره دستگاه روشن شده، سرووها ثابت هستند، به عبارتی زوایای مربوط به lable3 رو دارند ، اما شرط ما تغییر کرده، فرضا الان در حالت شرط 6 قرار گرفتیم، پس طبیعتا با احقاق شرط 6 به lable 6 پرش میکنیم و سرووها میخوان در حالتهای تعریف شده در اون حالت قرار بگیرند، در صورتی که این سرووهای ما به محض دریافت تغذیه یک حرکتی رو میکنند و علاوه بر اون آخرین مقدار سرووها رو هم نمیتونیم به سرووها اعمال کنیم چون مربوط به حالت 3 هست و الان در حالت 6 قرار داریم.
                        و ایده آل برای ما این هست که وقتی از حالت دستی به حالت اتومات اومدیم، میکروی ما تشخیص بده که کدوم یک از 15 شرط ما محقق شده و بعد از اون به هر کدوم از 15 تا lableهای مربوط به خودش پرش کنه و سرووها رو در زاویه ها قرار بده.

                        بنده فکر میکنم بهتر باشه برای تحقق این امر که هر گاه شرطها محقق شد، سرووها با عکس العمل درست در زاویه های درست قرار بگیرند، و علاوه بر اون مشکل حرکت اولیه ی سرووها به محض زدن تغذیه، و همچنین مشکل حرکت همزمان سرووها با احقاق یک شرط، و در یک lable، حل بشه،( که ما میخوایم سرووها در ابتدا ساکن باشند و در lable هم به ترتیب و نه همزمان، حرکت کنند)

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

                        هر وقتش هم به این صورت باشه، که ما از ابتدا اصلا تغذیه ی سرووها رو وصل نکنیم و در درون lableها قبل از حرکت اولین سروو ، به کمک ترانزیستور تغذیه ی سروو رو وصل کنیم، بعد از حرکت اون قطع کنیم، بعد قبل از حرکت سرووی دوم تغذیه ی اون رو که با یک ترانزیستور دیگه، کنترل میشه، وصل و بعد از حرکت قطع کنیم، به همین ترتیب تا انتها و در همه ی lable ها....

                        در این صورت بنده گمون میکنم، نه حرکت اولیه ی سرووها رو خواهیم داشت ونه مشکل حرکت همزمانیه سرووها رو .....

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

                        دیدگاه


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

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

                          هم میتونید از همین روشی که خودتون گفتید(کنترل تغذیه سرووها) استفاده کنید(اگر تعداد دفعات تغییرشرط زیاد نیست {بطور مثال در هر 10 دقیقه یک بار} این روش ممکنه ساده تر و کار آمد تر باشه ولی اگر تعداد دفعات زیاده و ممکنه شرطها مرتبا تغییر کنه بنده این روش رو اصلا توصیه نمیکنم به هنگ کردن سرووها در قطع و وصل مکرر تغذیه توجه کنید*منتظر پاسخ دیگر دوستان هم هستم*)

                          و هم میتونید از روشی که باهم در حال انجامش بودیم استفاده کنید(این روش ممکنه کار برنامه نویسی رو سختر کنه ولی به هیچ عنوان تعداد تغییر شرط مشکلی بوجود نمیاره و حسن دیگرش نیز قفل شدن سرووها در زوایای مورد نظر است در صورتی که روش اول چون تغذیه سرووها قطع است سرووها در زاویه قفل نمیشوند)

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

                          دیدگاه


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

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

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

                            منتها طبق فرمایش شما، تعداد دفعات تغییر شرطمون خیلی زیاد هست، روتین دقیق و خاصی رو در حال حاضر در ذهن ندارم، منتها حدودا به این صورت هست که تغییر وضعیت از شرط 1 به 2، 5 ثانیه طول میکشه، از شرط دوم به سوم 10 ثانیه تا 3 دقیقه، طول میکشه و از سوم به چهارم و تا شرط آخر، حدودا تغییر شرط، هر 5 تا 15 دقیقه یک بار هست...

                            و این در حالی هست که این روال در حین روشن بودن دستگاه ، برای هر 15 شرطمون، مرتبا تکرار میشه.
                            در نتیجه، بله، تعداد دفعات تغییر شرطمون زیاد هست...

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

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

                            دیدگاه


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

                              نوشته اصلی توسط امیر حسنی کاخکی


                              هم میتونید از همین روشی که خودتون گفتید(کنترل تغذیه سرووها) استفاده کنید(اگر تعداد دفعات تغییرشرط زیاد نیست {بطور مثال در هر 10 دقیقه یک بار} این روش ممکنه ساده تر و کار آمد تر باشه ولی اگر تعداد دفعات زیاده و ممکنه شرطها مرتبا تغییر کنه بنده این روش رو اصلا توصیه نمیکنم به هنگ کردن سرووها در قطع و وصل مکرر تغذیه توجه کنید*منتظر پاسخ دیگر دوستان هم هستم*)

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

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

                              دیدگاه


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

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

                                دیدگاه

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