اطلاعیه

Collapse
No announcement yet.

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

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

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

    نوشته اصلی توسط امیر حسنی کاخکی
    خوب اگه منظورم از حالت اول و دوم رو فهمیده باشید تمومه .حالت سه استفاده از هردوی این راهها با همه یعنی از حافظه خارجی استفاده کنید و تعداد نوشتن در خونه های حافظه رو محدود کنید .اینطوری تقریبا بینهایت بار قابلیت نوشتن در حافظه رو پیدا میکنید.
    درضمن دلیلی نداره که به eeprom اعتماد نکنید.مثلا برای ذخیره کانالهای تلویزیون و دستگاههای رسیور ،بایوس کامپیوتر و حتی کیلومترهای دیجیتال خودرو از حافظه های EEPROM استفاده میکنن.چند بار دیدید که برای این سیستمها مشکلی بوجود بیاد؟
    سلام.
    متشکرم جناب کاخکی.
    اتفاقا آقا منظورم همون حالت 2 بود که اشتباها 3 رو نوشتم!
    منظورتون رو از روش اول کاملا متوجه شدم، تا یه حدی هم با این روش آشنایی دارم، اگر اشتباه نکنم، فکر میکنم که ارتباط بین میکرو و این حافظه از طریق پروتکل ارتباطی I2C باید باشه، و این حافظه از طریق 2 خط SCL و SDA به میکرو وصل میشه....
    یه کم هم راجع به برنامه نویسیش خوندم، فکر میکنم بتونم راش بندازم.
    بسیار ممنونم از راهنمائیهاتون، قسمت آخر صحبتهاتون خیلی بهم دلگرمی و امیدواری داد :agree:
    زندگی برگ بودن در مسیر باد نیست
    امتحان ریشه هاست
    ریشه هم هرگز اسیر باد نیست
    زندگی چون پیچک است
    انتهایش میرسد پیش خدا!

    دیدگاه


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

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

      دیدگاه


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

        نوشته اصلی توسط امیر حسنی کاخکی
        خوب حالت دوم هم اینکه شما یک شمارنده قرار میدید تا تعداد دفعات نوشته شدن در حافظه رو بشماره.خوب در این صورت وقتی میبینید که مثلا شماره به 1000 رسید برای ذخیره دیگه از اون خونه استفاده نمیکنید و خونه دیگه ای از حافظه رو انتخاب میکنید.برای خود شمارنده هم همین کار رو میکنید یعنی وقتی شمارنده مثلا به هزار رسید از خونه دیگه ای برای ذخیره مقدار شمارش استفاده میکنید.همین
        متشکرم ازتون.
        در نتیجه ادامه ی کار با eeprom های جانبی باید دنبال بشه، و در حال حاضر اولین کاری که در ادامه باید انجام بدم این هست که دیتا شیت مربوط به چند تا از Eeprom های جانبی میکرو، از سری 24cxx رو بخونم،تا بتونم بفهمم تعداد دفعات خوندن و نوشتن در اونها چقدر هست، تا مناسبترین رو برای ادامه ی کار انتخاب کنم، درست عرض میکنم؟

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


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

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

        دیدگاه


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




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

          به شکل نگاه کنید موتور رو میبینید کافیه عین مدار های دبستان یه سوییچ براش قرار بدید . این خیلی راه ساده ایه به نظرم .

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



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



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


          دیدگاه


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

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

            معذرت میخوام از این همه سوال....

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


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

            دیدگاه


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

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

              دیدگاه


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

                عرض سلام و احترام جناب کاخکی.
                متشکرم از حضور و پاسختون.

                نوشته اصلی توسط امیر حسنی کاخکی
                تمام سرووها داخلشون اون ولوم رو دارند فقط شکلشون فرق میکنه
                به برد سروو شما احتمالا 8 سیم وصل شده.سه تا مال تغذیه و کنترل دو تا به موتور وصل میشه و اون سه تای دیگه به ولوم.
                اما باور کنید مال من نداره، تو اون عکسی هم که گذاشتم نگاه کنید میبینید که فقط 5 تا سیم اومده به برد، 2 تاش مال موتور dcی و 3 تاش هم به قول شما واسه تغذیه و کنترل سروو هستش، همین، دیگه سیم دیگه ای وجود نداره، البته نمیدونم اون مدلی که جناب معین گذاشتند چی هست، و اینکه تو 9805 این ولوم هست یا نه؟

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

                نوشته اصلی توسط pama
                سلام.
                دوستان متاسفانه هیچ کدوم از 2 برنامه ای( با if و با وقفه ی خارجی) که برای ذخیره کردن وضعیت سرووها در eeprom نوشته شده بود، جواب نداد :angry:
                سرووها دم دستم نبود، امروز طبق فرمایش جناب کاخکی سخت افزار مربوط به رگلاتور رو تغییر دادم، وقتی تغذیه رو وصل کردم، سرووها یه حرکت کاملا غیر منطقی داشتند، علاوه بر اون چون همزمان مدار فرکانس متر هم به مدار سرووها وصله تا بدونم چه فرکانسی داره به سر میکرو میره، دیده میشد که lcd ی این مدار هم همواره مقدار 0hz رو نشون میداد!
                حالا به نظرتون چه کاری رو انجام بدم بهتره؟
                باور کنید عن قریبه که سکته کنم!!!
                از یه راه نمتونم جواب بگیرم...
                بنده منتظر یاری مجدد دوستان هستم.

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

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

                نوشته اصلی توسط pama
                کد:
                 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
                  trisa.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
                 T2CON=$4F
                   ;;;;;;;;;
                   
                  intcon = %11010000  'external interrupt
                 
                  option_reg.6 = 0
                  
                  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 
                 
                 
                 again:
                 
                 high porta.0
                
                if flag=1 then 
                 
                 if f <= 25 then
                 servo3 = 250
                 endif
                
                  if f >= 26 and f <= 40 then
                 servo3 = 50
                 if b>=50 then
                 servo4 = 100
                 endif
                 endif
                
                  if f >= 41 and f <= 60 then
                 servo3 = 200
                 endif
                
                 if f >= 61 and f <= 80 then
                   servo3 = 100
                 if b>=50 then
                 servo4 = 200
                 endif
                 endif
                 
                 if f >= 81 and f <= 100 then
                 servo4 =150
                 endif
                
                 if f >= 101 and f <= 116 then
                 servo4 = 250
                 endif
                
                 if f >= 117 then
                 servo4 = 100
                 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 
                   
                   ;;;;;;;;;;;;;;
                   
                   if intcon.1 = 1 then
                   
                   intcon.7 = 0
                   
                   write 0, servo1
                   write 1, servo2
                   write 2, servo3
                   write 3, servo4
                   write 4, servo5
                   write 5, servo6
                   write 6, servo7
                   
                   intcon.1 = 0
                   endif
                     
                  RESUME     ;return from interrapt 
                  ENABLE 
                
                end
                بنده همین برنامه رو (یعنی ذخیره کردن آخرین مقدار سرووها در eeprom) با if هم نوشتم که برای شلوغ نشدن این پست اونو نیاوردم، منتها در پست 273ی همین تایپیک این برنامه قرار داره.

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

                اساتید بزرگوارم بنده همچنان منتظر راهنمائیهای مثل همیشتونم.
                زندگی برگ بودن در مسیر باد نیست
                امتحان ریشه هاست
                ریشه هم هرگز اسیر باد نیست
                زندگی چون پیچک است
                انتهایش میرسد پیش خدا!

                دیدگاه


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

                  یک سوال
                  سروو ها چند وات هستند - قیمتشون چقدره- نسبت تقسیم گیربکسش چنده و این سیستم یا بازو که میخواهید بسازید قراره چیکار کنه

                  تنها موردی که همه آدما یقین دارن خدا در حقش زیاد لطف کرده
                  داشتن عقله زیادتر از دیگر آدم ها است

                  دیدگاه


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

                    با سلام

                    1- یک بایت علامت (یک متغییر یک بایتی) ، به نام new_servo_positions_ready2save_flag در اول برنامه تعریف کنید.
                    2- مقدار آنرا در اول برنامه و قبل از حلقه اصلی برنامه = صفر قرار دهید.
                    3- هر موقع وضعیت سروو ها را تغییر دادید، آن بایت علامت را =1 کنید.
                    4- در حلقه برنامه اصلی ( نه در اینتراپت ) آن بایت علامت را چک کنید، اگر 1 بود، زیربرنامه مربوط به نوشتن وضعیتها در eeprom را صدا کنید.( در آن زیربرنامه، پس از نوشتن در eeprom ، بایت علامت را = صفر کنید. )

                    با سپاس

                    نکته :
                    نوشتن هر بایت در eeprom معمولا 10 میلی ثانیه زمان نیاز دارد، لذا در اینتراپت نباید به کار گرفته شود.

                    پ.ن:
                    سر شفت سروو موتور خود را ملاحظه فرمایید، باید یک قطعه سنسور زاویه ( مثلا پتانسیومتر یا اینکودر ...) را در آن سمت ببینید.
                    گشتی در لاله زار
                    http://www.eca.ir/forum2/index.php?topic=76138.0

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

                    دیدگاه


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

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

                      نسبت تقسیم گیربکس رو هم تا به حال کاری بهش نداشتم چون کار بچه های مکانیک گروه بوده.
                      منتها سوال کردم به محض اینکه پاسخم رو بدن حتما خدمتتون عرض میکنم.
                      راستش حدود 9 ماه پیش ما این سروو رو 19 تومن خریدیم و الان شده 30 تومن!
                      مساله اینجاست که با این موتور نمیخوایم در نهایت تو دستگامون کار کنیم و قرار بر استفاده از mg9805 هست، البته در صورتی که بنده با این سواد ناقصم بتونم مشکلات اون رو با راهنمائی اساتید و با eeprom حل کنم.
                      9805 همون 9 ماه پیش بود 32 تومن و الان شده 90 تومن!!!

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

                      حالا با وجود این 2 مشکل با 995 ها آیا این مشکلات برای 9805 هم به قوت خودشون باقی میمونند؟ و ان شاا... این مشکلات رو اگر انجا برطرف کنم در سرووهای اصلی هم میتونم با مشکلاتش با روشی شبیه اینجا کنار بیام؟

                      ما تو کار اصلیمون به حدود تقریبا 10 تا از سرووهای mg9805 نیاز داریم، آیا نظر اساتید بر این هست که الان بنده 2 تا از این سرووها رو بگیرم و باهاشون کار کنم؟ یا اینکه خیر به دلیل صرفه جویی اقتصادی!! با همین 995 های که دارم کار رو ادامه بدم و انشاا... به نتیجه که رسید به دلیل شباهتی که با 9805 داره، اون موقع با خیال راحت برم و به تعداد سرووهای اصلی رو بخرم؟
                      و یا این که اصلا ماجرا دگرگون میشه و مجبور میشم از نوع دیگه ای استفاده کنم و بهتره فعلا با همین 995 کار کنم؟؟!!
                      میدونم خیلی دارم گیج میزنم.....

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

                      ببخشید سرتون رو درد آوردم،امیدوارم تونسته باشم خوب توضیح بدم....



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

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

                      1- یک بایت علامت (یک متغییر یک بایتی) ، به نام new_servo_positions_ready2save_flag در اول برنامه تعریف کنید.
                      2- مقدار آنرا در اول برنامه و قبل از حلقه اصلی برنامه = صفر قرار دهید.
                      3- هر موقع وضعیت سروو ها را تغییر دادید، آن بایت علامت را =1 کنید.
                      4- در حلقه برنامه اصلی ( نه در اینتراپت ) آن بایت علامت را چک کنید، اگر 1 بود، زیربرنامه مربوط به نوشتن وضعیتها در eeprom را صدا کنید.( در آن زیربرنامه، پس از نوشتن در eeprom ، بایت علامت را = صفر کنید. )

                      با سپاس
                      ok، بسیار متشکرم،چشم به همین نحو برنامه رو تغییر میدم.

                      نوشته اصلی توسط Solsal
                      نکته :
                      نوشتن هر بایت در eeprom معمولا 10 میلی ثانیه زمان نیاز دارد، لذا در اینتراپت نباید به کار گرفته شود.
                      ok، پس جناب مهندس با توجه به اینکه در برنامه ای که نوشته شده و چک کردن قطع تغذیه جهت ذخیره کردن مقدار سرووها در eeprom با وقفه ی خارجی صورت گرفته، و از طرفی در برنامه از یک منبع وقفه ی دیگه که وقفه ی سر ریز تایمر 2 هست و برای کنترل سرووها ازش استفاده شده، و ما باید وقفه ها رو اولویت بندی کنیم و اولویت اول مربوط به وقفه ی تایمر 2 و اولویت بعدی مربوط به وقفه ی خارجی هست، در نتیجه طبق فرمایشات شما که نباید در اینتراپت کار نوشتن انجام بشه، در نتیجه سوالی که پیش میاد اینه که اگر ما بعد از تموم شدن کار کنترل سرووها در اینتراپت به کمک وقفه ی سر ریز تایمر 2 ، و در خارج از روتین اینتراپت پرچم وقفه ی خارجی رو چک بکنیم و با 1 شدن اون که به عبارتی معادل قطع بودن تغذیه هست، نوشتن در eeprom رو انجام بدیم، آیا کار درستی انجام دادیم؟

                      و یک سوال دیگه اون هم اینکه آیا در این صورت غیر فعال کردن وقفه ها در روتین نوشتن در eeprom ضرورتی داره یا خیر؟

                      و یا اینکه اصلا بهتره برای چک کردن قطع تغذیه از وقفه ی خارجی استفاده نشه و از if برای این کار استفاده کنیم؟
                      البته نظر دوستان بر استفاده از وقفه ی خارجی هست، ولی بنده به دلیل درد سرهای ایجاد شده عرض میکنم...
                      در هر صورت بنده تابع اوامر اساتید هستم.

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

                      دیدگاه


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

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

                        دیدگاه


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

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

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

                          دیدگاه


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

                            نوشته اصلی توسط pama
                            ok، پس جناب مهندس با توجه به اینکه در برنامه ای که نوشته شده و چک کردن قطع تغذیه جهت ذخیره کردن مقدار سرووها در eeprom با وقفه ی خارجی صورت گرفته، و از طرفی در برنامه از یک منبع وقفه ی دیگه که وقفه ی سر ریز تایمر 2 هست و برای کنترل سرووها ازش استفاده شده، و ما باید وقفه ها رو اولویت بندی کنیم و اولویت اول مربوط به وقفه ی تایمر 2 و اولویت بعدی مربوط به وقفه ی خارجی هست، در نتیجه طبق فرمایشات شما که نباید در اینتراپت کار نوشتن انجام بشه، در نتیجه سوالی که پیش میاد اینه که اگر ما بعد از تموم شدن کار کنترل سرووها در اینتراپت به کمک وقفه ی سر ریز تایمر 2 ، و در خارج از روتین اینتراپت پرچم وقفه ی خارجی رو چک بکنیم و با 1 شدن اون که به عبارتی معادل قطع بودن تغذیه هست، نوشتن در eeprom رو انجام بدیم، آیا کار درستی انجام دادیم؟

                            بله درست است.

                            و یک سوال دیگه اون هم اینکه آیا در این صورت غیر فعال کردن وقفه ها در روتین نوشتن در eeprom ضرورتی داره یا خیر؟

                            برای کارکرد 10 ساله دستگاه، بهتر است که وقفه ها در طول نوشتن در eeprom قطع شوند ( عملکرد دستگاه راکد شود )
                            چون فرآیند نوشتن در ایییپیرام، در محیط صنعتی، قابلیت اعتماد 0.999 را دارد،یعنی از هر 1000 بار ، یکبار احتمال خطا هست.
                            حتی بهتر است پس از هر ربار نوشتن ، بخوانید و مقایسه کنید و اگر یکسان نبود ، اعلام خرابی اییپیرام کنید.


                            و یا اینکه اصلا بهتره برای چک کردن قطع تغذیه از وقفه ی خارجی استفاده نشه و از if برای این کار استفاده کنیم؟
                            البته نظر دوستان بر استفاده از وقفه ی خارجی هست، ولی بنده به دلیل درد سرهای ایجاد شده عرض میکنم...

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


                            در هر صورت بنده تابع اوامر اساتید هستم.
                            جناب مهندس یک قطعه ی دایره شکل هست که سه تا سیم کنترل سروو از اون سرش به این قطعه لحیم شده و این قطعه ی دایره ای شکل به قول فرمایش شما به سر شفت خروجی سروو وصله، منتها اصلا به راحتی قابل دسترسی و مشاهده نیست.... خودشه !
                            گشتی در لاله زار
                            http://www.eca.ir/forum2/index.php?topic=76138.0

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

                            دیدگاه


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

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

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

                              کد:
                               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
                              nsp var byte
                              
                              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
                                trisa.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
                               T2CON=$4F
                                 ;;;;;;;;;
                                 
                                intcon = %11010000  'external interrupt
                               
                                option_reg.6 = 0
                                
                                ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 
                               nsp = 0
                               
                               again:
                               
                               high porta.0
                               
                               if nsp = 1 then save
                              
                              if flag=1 then 
                               
                               if f <= 25 then
                               servo3 = 250
                               nsp = 1
                               endif
                              
                                if f >= 26 and f <= 40 then
                               servo3 = 50
                                 nsp = 1
                               if b>=50 then
                               servo4 = 100
                                nsp = 1
                               endif
                               endif
                              
                                if f >= 41 and f <= 60 then
                               servo3 = 200
                                nsp = 1
                               endif
                              
                               if f >= 61 and f <= 80 then
                                 servo3 = 100
                                  nsp = 1
                               if b>=50 then
                               servo4 = 200
                                nsp = 1
                               endif
                               endif
                               
                               if f >= 81 and f <= 100 then
                               servo4 =150
                                nsp = 1
                               endif
                              
                               if f >= 101 and f <= 116 then
                               servo4 = 250
                                nsp = 1
                               endif
                              
                               if f >= 117 then
                               servo4 = 100
                                nsp = 1
                               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
                                
                                
                                save:
                                 if intcon.1 = 1 then
                                 
                                 intcon.7 = 0
                                 
                                 write 0, servo1
                                 write 1, servo2
                                 write 2, servo3
                                 write 3, servo4
                                 write 4, servo5
                                 write 5, servo6
                                 write 6, servo7
                                 
                                 nsp = 0 
                                 intcon.1 = 0
                                 endif
                                   
                              end
                              قسمتهای اضافه شده و تغییر داده شده به ترتیب زیر هست:
                              .
                              .
                              nsp var byte ( همون new_servo_positions_ready2save_flag هست که جسارتا به اختصار نوشتم)

                              read 0, servo1
                              read 1, servo2
                              read 2, servo3
                              read 3, servo4
                              read 4, servo5
                              read 5, servo6
                              read 6, servo7
                              .
                              .
                              .
                              nsp = 0
                              again:
                              high porta.0

                              if nsp = 1 then save

                              if flag=1 then

                              if f <= 25 then
                              servo3 = 250
                              nsp = 1
                              endif

                              if f >= 26 and f <= 40 then
                              servo3 = 50
                              nsp = 1
                              if b>=50 then
                              servo4 = 100
                              nsp = 1
                              endif
                              endif
                              .
                              .
                              .
                              RESUME
                              ENABLE

                              save:
                              if intcon.1 = 1 then

                              intcon.7 = 0

                              write 0, servo1
                              write 1, servo2
                              write 2, servo3
                              write 3, servo4
                              write 4, servo5
                              write 5, servo6
                              write 6, servo7

                              nsp = 0
                              intcon.1 = 0
                              endif


                              end

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


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

                              و باز هم همون نگرانیه دائمی که وضعیت قیمت سرووها خیلی ناجور داره رو به وخامت میره! آیا بنده mg9805 ها رو به تعداد خریداری کنم، و قبل از اون اگر به لطف خدا و کمک اساتید مشکلاتم با این mg995 هایی که دارم، برطرف بشه، برای 9805 ها هم میشه راه کار مشابهی رو به کار بست و بنده با توجه به اینکه با موتورهایی که فعلا دارم هم هنوز به جواب نرسیدم، میتونم با خیال راحت تا بیشتر از این ضرر نکردیم، سرووهام رو خریداری کنم؟؟

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

                              اضافه شده در تاریخ :
                              با سلام و عرض ادب خدمت جناب solsal و سایر اساتید.

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

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

                              دیدگاه


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

                                یک ایده جدید دارم که دیگه کاملا از هر چی دردسره خلاصت میکنه :

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

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

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

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

                                دیدگاه

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