اطلاعیه

Collapse
No announcement yet.

کنترل سروو موتور.

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

    #16
    پاسخ : کنترل سروو موتور.

    ماشاا.. مختون خیلی زود تغییر وضعیت میده . سرعت سوئیچش بالاست :applause: :biggrin: :icon_razz: :cry: .
    [glow=blue,2,300]آنقدر به تاريكي لعنت نفرستيد ، يك شمع روشن كنيد. [/glow]

    دیدگاه


      #17
      پاسخ : کنترل سروو موتور.

      با کمی تغییر در برنامه ی شما تونستم سرو رو چپ و راست کنم البته در یک زاویه ی خاص. حالا دو تا مسئله هست. چطور می تونم تو برنامه تعریف کنم که با هر بار فشردن کلید، چند درجه چرخش داشته باش. مثلا اگه موتور 160 درجه می چرخه، با هربار فشردن کلید، 10 درجه چرخش داشته باشه. ضمناً؛ با این برنامه در ذیل به اون اشاره می کنم، موتور از چرخش کامل برخوردار نیست و یه چیزی حدود 45 درجه چرخش داره.


      این برنامه ای که عرض کردم. لطفاً راهنمایی بفرمائید


      $regfile = "m32def.dat"
      $crystal = 1000000

      Config Portb = Output
      Config Portc = Input
      Config Timer0 = Timer , Prescale = 1024
      Config Timer1 = Timer , Prescale = 8
      Config Debounce = 20

      Dim Motor_time As Word
      Dim A As Word

      Motor_time = 0

      Motor1 Alias Portb.0 : Motor2 Alias Portb.1 : Motor3 Alias Portb.2 : Motor4 Alias Portb.3
      Stop Timer1

      Enable Ovf0
      Enable Interrupts

      Enable Timer0
      On Ovf0 Make_pwm

      Timer0 = 178

      First:

      Do
      Debounce Pinc.0 , 1 , Incc
      Debounce Pinc.1 , 1 , Decc
      Loop

      Incc:
      If Motor_time > 1 Then Motor_time = Motor_time - 1
      Motor_time = Motor_time + 1
      Set Motor1
      Waitms Motor_time
      Reset Motor1

      Stop Timer1

      Goto First

      Decc:
      If Motor_time < 1 Then Motor_time = Motor_time + 1
      Motor_time = Motor_time - 1
      Set Motor1
      Waitms Motor_time
      Reset Motor1
      Stop Timer1

      Goto First

      End

      Make_pwm:

      Timer0 = 178
      Timer1 = 0
      Start Timer1

      Do
      Loop Until Timer1 >= Motor_time

      Return
      تنها خود را باور داشته باش که تو مرکز محور تمام عالمی ...

      دیدگاه


        #18
        پاسخ : کنترل سروو موتور.

        شما نباید فرکانس کریستال رو از 8 مگ تغییر بدید . چون تایمر ها دچار مشکل میشه و این برنامه برای فرکانس 8 مگ نوشته شده . در ضمن اگه منظورتون رو درست فهمیده باشم ، با تغییرات زیر میتونین درجه چرخش رو بیشتر کنید ( بجای 10+ و 10- یک عددی که متناسب با 10 درجه است را اضافه یا کم کنید مثلا 30) .

        $regfile = "m16def.dat"
        $crystal = 8000000

        Config Portb = Output
        Config Portc = Input
        Config Timer0 = Timer , Prescale = 1024
        Config Timer1 = Timer , Prescale = 8
        Config Debounce = 20

        Dim Motor_time As Word

        Motor_time = 1500

        Motor1 Alias Portb.0 : Motor2 Alias Portb.1 : Motor3 Alias Portb.2 : Motor4 Alias Portb.3
        Stop Timer1

        Enable Ovf0
        Enable Interrupts

        Enable Timer0
        On Ovf0 Make_pwm

        Timer0 = 178

        First:
        Do
        Debounce Pinc.0 , 1 , Incc
        Debounce Pinc.1 , 1 , Decc
        Loop

        Incc:
        If Motor_time < 2000 Then
        Motor_time = Motor_time + 30
        End If
        Goto First

        Decc:
        If Motor_time > 1000 Then
        Motor_time = Motor_time - 30
        End If
        Goto First

        End

        Make_pwm:

        Timer0 = 178
        Timer1 = 0
        Start Timer1

        set motor1
        Do
        Loop Until Timer1 >= Motor_time
        Reset Motor1

        Return
        [glow=blue,2,300]آنقدر به تاريكي لعنت نفرستيد ، يك شمع روشن كنيد. [/glow]

        دیدگاه


          #19
          پاسخ : کنترل سروو موتور.

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

          دیدگاه


            #20
            پاسخ : کنترل سروو موتور.

            درود سپاس از شما .. خیلی خوب کار می کنه اما تنها در یک زاویه ی خاص در گردش است. منظورم اینه اگه موتور توانایی گردش در یک زاویه ی 120 درجه رو داشته باشه، الان فقط در یک زاویه ی 45 تا 60 درجه کار می کنه و به ابتدا و انتهای واقعی خودش نمیره. باید کجای برنامه رو تغییر یدم ؟ :question:
            تنها خود را باور داشته باش که تو مرکز محور تمام عالمی ...

            دیدگاه


              #21
              پاسخ : کنترل سروو موتور.

              ببین دوست عزیز متاسفانه سروو موتور هایی که ما توی ایران داریم همه از نوع چینی و بی کیفیت هست . نه دیتاشیت درست و حسابی داره و نه فروشنده ها اطلاعات درستی دارند . به همین خاطر شما باید به صورت سعی و خطا عرض پالس مربوط به صفر درجه و 180 درجه رو بدست بیارین . به این صورت که مثلا در قسمت برچسب های decc و incc و ( If Motor_time < 2000 Then و If Motor_time > 1000 Then ) اعداد 1000 و 2000 را کم و زیاد کنید و ببینید درجه ابتدا و انتها کی به 0 و 180 میرسه .
              یک توصیه مهم : به خاطر همون بی کیفیتی که گفتم ، اون جوری که من امتحان کردم در بین زوایای 0 تا 90 درجه موتور به صورت خطی کار میکنه و در زوایای بیشتر از اون دیگه زاویه موتور با عرض پالس مطابقت نداره .
              [glow=blue,2,300]آنقدر به تاريكي لعنت نفرستيد ، يك شمع روشن كنيد. [/glow]

              دیدگاه


                #22
                پاسخ : کنترل سروو موتور.

                این که کلید رو برای هر بار چرخش موتور می بایست فشرد، کاری ناخوشایند و مبتدی ست :angry: :eek: آیا میشه تا هنگام فشرده شدن کلید، موتور به چرخش درآید و هنگامی که کلید را رها کنیم، موتور بایستد :agree:
                تنها خود را باور داشته باش که تو مرکز محور تمام عالمی ...

                دیدگاه


                  #23
                  پاسخ : کنترل سروو موتور.

                  آره به نظرم بشه . ببین شما اگه به جای دستور debounce از دستوری مثل ( S=PINB و if s=1 then goto incc ) استفاده کنی مشکلت حل میشه . بازم حل نشد توی انجمن AVR بزن حتما سر سه سوت حل میشه .
                  [glow=blue,2,300]آنقدر به تاريكي لعنت نفرستيد ، يك شمع روشن كنيد. [/glow]

                  دیدگاه


                    #24
                    پاسخ : کنترل سروو موتور.

                    سلامی مجدد؛ برد رو مونتاژ کردم و الان که همه چی باید رو به راه باشه، سرو موتورها افتضاح کار می کنند :angry: :cry: با فشردن هر کدوم از کلیدها، همه ی سرو ها فعال میشن و از کنترل خارجن چون یا به سرعت و زاویه ی زیاد به چرخش در میان و یا با زاویه ی کم :eek: برنامه رو در پایین میذارم و لطفا کمکم کن چون تا امشب باید آماده بشه . مرسی :cry: :cry2:


                    $regfile = "m32def.dat"
                    $crystal = 8000000

                    Config Portb = Output
                    Config Portc = Input
                    Config Porta = Input
                    Config Timer0 = Timer , Prescale = 1024 '8000000/(1024*156)=50Hz
                    Config Timer1 = Timer , Prescale = 8
                    Config Debounce = 20

                    Dim X As Byte
                    Dim Motor_time1 As Word
                    Dim Motor_time2 As Word
                    Dim Motor_time3 As Word
                    Dim Motor_time4 As Word

                    Motor_time1 = 1500
                    Motor_time2 = 1600
                    Motor_time3 = 1700
                    Motor_time4 = 1800

                    Motor1 Alias Portb.2 : Motor2 Alias Portb.3 : Motor3 Alias Portb.4 : Motor4 Alias Portb.5
                    Stop Timer1

                    Enable Ovf0
                    Enable Interrupts

                    Enable Timer0
                    On Ovf0 Make_pwm

                    Timer0 = 178
                    X = 0

                    First:
                    Do
                    If Pinc.7 = 1 Then
                    Set Portb.1
                    Set Portb.7
                    Else
                    Reset Portb.7
                    Reset Portb.1
                    End If
                    Debounce Pina.0 , 1 , Incc1
                    Debounce Pina.1 , 1 , Decc1
                    Debounce Pina.2 , 1 , Incc2
                    Debounce Pina.3 , 1 , Decc2
                    Debounce Pina.4 , 1 , Incc3
                    Debounce Pina.5 , 1 , Decc3
                    Debounce Pina.6 , 1 , Incc4
                    Debounce Pina.7 , 1 , Decc4

                    Loop



                    Incc1:
                    X = 1
                    If Pinc.6 = 0 Then
                    Set Portb.0
                    Waitms 100
                    If Motor_time1 < 6000 Then
                    Motor_time1 = Motor_time1 + 20
                    End If
                    Reset Portb.0
                    End If
                    Goto First

                    Decc1:
                    X = 1
                    If Pinc.5 = 0 Then
                    Set Portb.0
                    Waitms 100
                    If Motor_time1 > 200 Then
                    Motor_time1 = Motor_time1 - 20
                    End If
                    Reset Portb.0
                    End If
                    Goto First

                    Incc2:
                    X = 2
                    Set Portb.0
                    Waitms 100
                    If Motor_time2 < 6000 Then
                    Motor_time2 = Motor_time2 + 20
                    End If
                    Reset Portb.0
                    Goto First

                    Decc2:
                    X = 2
                    Set Portb.0
                    Waitms 100
                    If Motor_time2 > 200 Then
                    Motor_time2 = Motor_time2 - 20
                    End If
                    Reset Portb.0
                    Goto First

                    Incc3:
                    X = 3
                    Set Portb.0
                    Waitms 100
                    If Motor_time3 < 6000 Then
                    Motor_time3 = Motor_time3 + 20
                    End If
                    Reset Portb.0
                    Goto First

                    Decc3:
                    X = 3
                    Set Portb.0
                    Waitms 100
                    If Motor_time3 > 200 Then
                    Motor_time3 = Motor_time3 - 20
                    End If
                    Reset Portb.0
                    Goto First

                    Incc4:
                    X = 4
                    Set Portb.0
                    Waitms 100
                    If Motor_time4 < 6000 Then
                    Motor_time4 = Motor_time4 + 20
                    End If
                    Reset Portb.0
                    Goto First

                    Decc4:
                    X = 4
                    Set Portb.0
                    Waitms 100
                    If Motor_time4 > 200 Then
                    Motor_time4 = Motor_time4 - 20
                    End If
                    Reset Portb.0
                    Goto First

                    End

                    Make_pwm:

                    Timer0 = 178
                    Timer1 = 0
                    Start Timer1

                    If X = 1 Then
                    Set Motor1
                    Do
                    Loop Until Timer1 >= Motor_time1
                    Reset Motor1
                    Timer1 = 0
                    End If

                    If X = 2 Then
                    Set Motor2
                    Do
                    Loop Until Timer1 >= Motor_time2
                    Reset Motor2
                    Timer1 = 0
                    End If

                    If X = 3 Then
                    Set Motor3
                    Do
                    Loop Until Timer1 >= Motor_time3
                    Reset Motor3
                    Timer1 = 0
                    End If

                    If X = 4 Then
                    Set Motor4
                    Do
                    Loop Until Timer1 >= Motor_time4
                    Reset Motor4
                    End If

                    Return
                    تنها خود را باور داشته باش که تو مرکز محور تمام عالمی ...

                    دیدگاه


                      #25
                      پاسخ : کنترل سروو موتور.

                      آیا قبلا با این برنامه جواب درست گرفتین ؟ یه فکری که میکنم باید fusebit مربوط به BOD LEVEL رو روی 2.7 ولت بزاری .
                      [glow=blue,2,300]آنقدر به تاريكي لعنت نفرستيد ، يك شمع روشن كنيد. [/glow]

                      دیدگاه


                        #26
                        پاسخ : کنترل سروو موتور.

                        این همون برنامه ی خودتونه با کمی تغییر .. لطفاً کمک کنید چون من از فیوز بیت چیزی سر در نمیارم :cry:
                        تنها خود را باور داشته باش که تو مرکز محور تمام عالمی ...

                        دیدگاه


                          #27
                          پاسخ : کنترل سروو موتور.

                          میدونم . شما با این برنامه قبلا پاسخ گرفتین یا نه ؟
                          این عکس رو ببین . در قسمتی که میخوایی میکرو رو پروگرم کنی برو روی tab مربوط به fuse ها و فیوزبیتی که کنارش نوشته BOD level رو روی 2.7 ولت بزار یا فیوزبیت که کنارش نوشته BODEN رو disable کن . بعد در سمت راست همون پنجره یک button فعال میشه که نمیدونم دقیقا چی نوشته اما یه high fuse و write داره . اون رو بزن و بعد برنامه رو روی میکرو پروگرم کن .
                          [glow=blue,2,300]آنقدر به تاريكي لعنت نفرستيد ، يك شمع روشن كنيد. [/glow]

                          دیدگاه


                            #28
                            پاسخ : کنترل سروو موتور.

                            آره اما با یک موتور. خوب کار میکرد اما الان با چهار موتور و چهار کلید حسابی قاطی کرده. ضمنا گاهی هم خود به خود دستگاه خاموش میشه و مجبورم پس از 10 ثانیه مکث دوباره دستگاه رو روشن کنم

                            در مورد فیوزبیت هم الان یادم اومد. فیوزبیت رو روی حالت low fuse ( 0 *E4 ) ç یعنی برای 8 مگاهرتز رایت کردم. من از برنامه ی xTreme Burner برای رایت استفاده می کنم
                            تنها خود را باور داشته باش که تو مرکز محور تمام عالمی ...

                            دیدگاه


                              #29
                              پاسخ : کنترل سروو موتور.

                              فکر کنم فهمیدم مشکلتون چیه . وقتی شما 4 تا سروو رو روشن می کنید ، اولا ولتاژ افت میکنه و میکرو به خاطر وجود Brown out detector ریست میشه و قاطی میکنه . و بعد هم اینکه جریان زیادی از منبع کشیده میشه و منبع شما که احتمالا یا POWER کامپیوتر و یا منبع سوئیچینگ هست خاموش میشه . در مورد extreme burner من نمی دونم از دوستان انجمن AVR بپرس . اما در مورد جریان زیاد باید بگم که در یک زمان همه ی سروو ها نباید روشن باشه . اما بازم یه تاپیک توی انجمن AVR بزن و همه ی مشکلاتت رو بگو . احتمالا مشکلت از برنامه نیست .
                              [glow=blue,2,300]آنقدر به تاريكي لعنت نفرستيد ، يك شمع روشن كنيد. [/glow]

                              دیدگاه


                                #30
                                پاسخ : کنترل سروو موتور.

                                sسلام دوستان عزیز من سر کلاس آز میکرو یه برنامه نوشته بودم که با دو کلید میشد سرو موتور رو درحهات پ و دون چرخوند
                                ولی نمیدونم چرا الآن ازش نتیجه نمیگیرم،البته اونجا یه تغییراتی روش داده بودم تا تینکه کار کرد ولی متاسفانه بعد مدت زیادی که به زبان ای وی آر مراجعه کردم یادم نمیاد چیکار کرده بودم
                                برنامه یه چیزی شبیه این چیزی بود که اهان قرار دادم اگه میتونید با کمی تغییر به نتیجه برسید لطفا راهنماییم کنید
                                با تشکر
                                کد:
                                $regfile = "M16def.dat"
                                $crystal = 4000000
                                 Config Porta.0 = Output
                                 Config Porta.1 = Output
                                 Config Portb.0 = Input
                                 Config Portb.1 = Input
                                
                                 Dim A As Word
                                 Dim B As Word
                                 A = 1000
                                 Do
                                 If Portb.0 = 1 Then
                                 If A < 2000 Then
                                     A = A + 100
                                 End If
                                 End If
                                
                                 If Portb.1 = 1 Then
                                 If A > 1000 Then
                                 A = A - 100
                                 End If
                                 End If
                                 B = 20000 - A
                                
                                
                                 Pulseout Porta , 0 , 1000
                                 Pulseout Porta , 1 , 19000
                                Loop
                                 End
                                خدایا چگونه زیستن را به من بیاموز ، چگونه مردن را خود خواهم آموخت
                                "دکتر علی شریعتی"

                                دیدگاه

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