اطلاعیه

Collapse
No announcement yet.

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

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

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

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

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

    با این برنامه میتونی سروو رو کنترل کنی . با تغییر Motor_time بین 1000 تا 2000 میتونی درجه سروو رو تغییر بدی .

    $regfile = "m16def.dat"
    $crystal = 8000000
    Config Portb = Output
    Config Timer0 = Timer , Prescale = 1024
    Config Timer1 = Timer , Prescale = 8
    Dim Motor_time As Word
    Motor_time = 1500
    Motor1 Alias Portb.0

    Stop Timer1
    Enable Ovf0
    Enable Interrupts
    Enable Timer0
    On Ovf0 Make_pwm
    Timer0 = 178

    Do
    Loop

    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]

    دیدگاه


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

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

      دیدگاه


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

        من با برنامه زیر تونستم 4 تا موج PWM تولید کنم . اینم شکل 4 تا PWM .


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

        Config Portb = Output 'motor1
        Config Timer0 = Timer , Prescale = 1024 '8000000/(1024*156)=50Hz
        Config Timer1 = Timer , Prescale = 8

        Dim Motor_time(4) As Word

        Motor_time(1) = 1000
        Motor_time(2) = 1200
        Motor_time(3) = 1500
        Motor_time(4) = 2000

        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

        Do
        Loop

        End

        Make_pwm:

        Timer0 = 178
        Timer1 = 0
        Start Timer1

        set motor1
        Do
        Loop Until Timer1 >= Motor_time(1)
        Reset Motor1
        Timer1 = 0

        Set Motor2
        Do
        Loop Until Timer1 >= Motor_time(2)
        Reset Motor2
        Timer1 = 0

        Set Motor3
        Do
        Loop Until Timer1 >= Motor_time(3)
        Reset Motor3
        Timer1 = 0

        Set Motor4
        Do
        Loop Until Timer1 >= Motor_time(4)
        Reset Motor4

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

        دیدگاه


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

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

          دیدگاه


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

            الان درست شد.
            موتور ها در پروتوس کار کردنند.
            حالا چطور باید به صورت دستی و با کلید این موتور ها رو کنترل کنم؟

            دیدگاه


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

              [b]خوب حالا با وصل دوتا کلید به میکرو و دستور Debounce باید بگی با هر بار فشردن کلید ها به متغییر های Motor_time اضافه یا کم کنه . مثلا در ابتدا Motor_time رو روی 1000 بزار . بعد با فشردن یک کلید اون رو تا 2000 افزایش بده . موتور شروع میکنه از 0 درجه تا 180 درجه به چرخیدن . مشکلی بود در خدمتم .[b]
              [glow=blue,2,300]آنقدر به تاريكي لعنت نفرستيد ، يك شمع روشن كنيد. [/glow]

              دیدگاه


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

                ممنون دوست من. فردا یه تست می زنم اگر جواب داد خیلی خوبه. دستتون درد نکنه

                دیدگاه


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

                  سلام.
                  هر کاری می کنم نمی تونم برای اون 2 تا کلید برنامه بنویسم. می توانید کمک کنید؟

                  دیدگاه


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

                    اینم خلاصه برنامه کلید . کامل کردنش با خودت .
                    Config Debounce = 20

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

                    Incc:
                    If Motor_time < 2000 Then
                    Incr Motor_time
                    End If
                    Goto First

                    Decc:
                    If Motor_time > 1000 Then
                    Decr Motor_time
                    End If
                    Goto First
                    [glow=blue,2,300]آنقدر به تاريكي لعنت نفرستيد ، يك شمع روشن كنيد. [/glow]

                    دیدگاه


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

                      دستم به دامنت. هر کاری می کنم نمی دونم این دستور ها رو که نوشتی کجایی برنامه بزارم.
                      کلید ها با مثبت وصل بشن و مقاومت پوا پ رو به منفی وصل کنم یا برعکس؟
                      :angry: :angry: :angry: :angry: :angry: :angry: :cry: :cry:

                      دیدگاه


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

                        ببین توی پست قبلیم که برنامه داشت ، یه DO و LOOP قبل از END داشت ، بزار توی همون حلقه . بعدشم وقتی گفتم Debounce Pinb.0 , 1 , incc یعنی وقتی کلید متصل به پایه PB.0 یک شد برو به برچسب incc . یعنی PB.0 رو Pull down میکنی و یه کلید بین PB.0 و VCC میزاری . در حالت عادی PB.0 زمینه و به محض فشردن کلید میشه VCC .
                        [glow=blue,2,300]آنقدر به تاريكي لعنت نفرستيد ، يك شمع روشن كنيد. [/glow]

                        دیدگاه


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

                          سلام.
                          حسابی قاطی کردم :angry: :angry: :angry: :angry:
                          تو رو خدا برنامه رو برام بزار.
                          دیگه نمی دونم چکار کنمو طوری گیج شدم که دیگه نمی تونم یک برنامه چشمک زن بنویسم. :angry: :angry: :angry: :cry: :cry: :cry: :cry: :cry: :cry: :cry: :cry: :cry: :cry:

                          دیدگاه


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

                            حالا چرا قاطی میکنی . بیا اینم برنامه و شماتیک . با هر بار فشردن کلید ها یا PW کم یا زیاد میشه ( بین 1000 تا 2000 میکرو ثانیه ) .

                            $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 + 10
                            End If
                            Goto First

                            Decc:
                            If Motor_time > 1000 Then
                            Motor_time = Motor_time - 10
                            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]

                            دیدگاه


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

                              سلام.
                              دستتون درد نکنه. الان مخم به جای اولش اومد. :mrgreen:
                              الان درست کار می کنه.
                              :job: :applause: :wow: :rolleyes: :biggrin: :wow:

                              دیدگاه

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