اطلاعیه

Collapse
No announcement yet.

کنترل سرعت موتور DC در AVR

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

    کنترل سرعت موتور DC در AVR

    دوستان سلام
    من تو مباحث برنامه نویسی تازه کارم
    این برنامه رو نوشتم منتهی نمیدونم چرا درست کار نمیکنه...
    این برنامه قراره با یه جوی استیک دو موتور رو کنترل کنه که چپ گرد و راست گرد هم داره
    ممنون میشم اشکال کار رو بهم بگین کجاست...؟
    $regfile = "m8def.dat "
    $crystal = 8000000
    Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down , Prescale = 8
    Config Adc = Single , Prescaler = Auto
    Config Portc = Input
    Config Portb = Output
    Dim A As Word
    Dim B As Word
    Start Adc
    Do
    A = Getadc(0)
    B = Getadc(1)
    'MOTOR1'
    If A <= 110 Then
    Pinb.1 = 1
    Pinb.2 = 0
    A = 110 - A
    Pwm1a = A
    Waitms 50
    End If
    If A => 150 Then
    Pinb.1 = 0
    Pinb.2 = 1
    A = A - 150
    Pwm1a = A
    Waitms 50
    End If
    'MOTOR2'
    If B <= 110 Then
    Pinb.3 = 1
    Pinb.6 = 0
    B = 110 - B
    Pwm1a = B
    Waitms 50
    End If
    If B => 150 Then
    Pinb.3 = 0
    Pinb.6 = 1
    B = B - 150
    Pwm1a = B
    Waitms 50
    End If
    Loop
    End 'end program

    #2
    پاسخ : کنترل سرعت موتور DC در AVR

    یعنی واقعا کسی نمیدونه مشکل کجاست؟
    کسی نیست راهنمایی کنه؟

    دیدگاه


      #3
      پاسخ : کنترل سرعت موتور DC در AVR

      نوشته اصلی توسط Alidehghan120 نمایش پست ها
      یعنی واقعا کسی نمیدونه مشکل کجاست؟
      کسی نیست راهنمایی کنه؟
      سلام میکروت چیه شما اصلا اون پین ها pwm ساپورت میکنن؟ کد رو در قالب کد بنویسین و قرار بدین






      امیرحسین ضیا

      دیدگاه


        #4
        پاسخ : کنترل سرعت موتور DC در AVR

        میکرو mega8 هست،خط اول دستور
        کد رو در قالب کد بنویسم یعنی چی؟

        دیدگاه


          #5
          پاسخ : کنترل سرعت موتور DC در AVR

          سلام
          وقت بخیر
          نوشته اصلی توسط Alidehghan120 نمایش پست ها
          دوستان سلام
          من تو مباحث برنامه نویسی تازه کارم
          این برنامه رو نوشتم منتهی نمیدونم چرا درست کار نمیکنه...
          این برنامه قراره با یه جوی استیک دو موتور رو کنترل کنه که چپ گرد و راست گرد هم داره
          ممنون میشم اشکال کار رو بهم بگین کجاست...؟
          $regfile = "m8def.dat "
          $crystal = 8000000
          Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down , Prescale = 8
          Config Adc = Single , Prescaler = Auto
          Config Portc = Input
          Config Portb = Output
          Dim A As Word
          Dim B As Word
          Start Adc
          Do
          A = Getadc(0)
          B = Getadc(1)
          'MOTOR1'
          If A <= 110 Then
          Pinb.1 = 1
          Pinb.2 = 0
          A = 110 - A
          Pwm1a = A
          Waitms 50
          End If
          If A => 150 Then
          Pinb.1 = 0
          Pinb.2 = 1
          A = A - 150
          Pwm1a = A
          Waitms 50
          End If
          'MOTOR2'
          If B <= 110 Then
          Pinb.3 = 1
          Pinb.6 = 0
          B = 110 - B
          Pwm1a = B
          Waitms 50
          End If
          If B => 150 Then
          Pinb.3 = 0
          Pinb.6 = 1
          B = B - 150
          Pwm1a = B
          Waitms 50
          End If
          Loop
          End 'end program
          مقدمه :
          بنده هم در برنامه نویسی بیسیک ، بسیارمبتدی هستم .

          چند نکته و ابهام در برنامه شما وجود داره .
          1 : برای نوشتن در پورت ، از این فرمان استفاده نمایید >> portx.y = 0 or 1 .
          2 : رجیستر B را در pwm1b قرار دهید
          3 : پینهای portb.1 و portb.2 برای خروجی pwma و pwmb هستند
          4 : برای مقدار از 110 تا 150 ، در برنامه شما تصمیم گیری نشده .
          5 :در برنامه ، start adc را بعد از do و stop adc را بعد از آخرین قرائت (x = Getadc(y)) ، بنویسید
          6 : تکلیف سیمهای موتورها را مشخص نمایید . (شماتیک)

          فعلا این موارد را اصلاح بفرمایید تا بعد ......

          با احترام
          98/2/25
          جدیدترین ویرایش توسط amir_moayeri; ۱۹:۳۳ ۱۳۹۸/۰۲/۲۵.

          دیدگاه


            #6
            پاسخ : کنترل سرعت موتور DC در AVR

            سلام داداش
            ته قضیه شد این اما بازم نه
            $regfile = "m8def.dat "
            $crystal = 8000000


            Config Timer1 = Pwm , Pwm = 10 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down , Prescale = 8


            Config Adc = Single , Prescaler = Auto
            Config Portc = Input
            Config Portb = Output


            Dim A As Word
            Dim B As Word



            Do
            Start Adc
            A = Getadc(0)
            B = Getadc(1)
            Stop Adc
            'MOTOR1'
            If A > 110 and A < 150 Then
            Portb.1 = 0
            Portb.2 = 0
            End If


            If A <= 110 Then
            Portb.1 = 1
            portb.2 = 0
            A = 110 - A
            Pwm1a = A
            Waitms 50
            End If


            If A => 150 Then
            Portb.1 = 0
            Portb.2 = 1
            A = A - 150
            Pwm1a = A
            Waitms 50
            End If
            'MOTOR2'
            If B > 110 And B < 150 Then
            Portb.3 = 0
            Portb.6 = 0
            End If


            If B <= 110 Then
            Portb.3 = 1
            Portb.6 = 0
            B = 110 - B
            Pwm1b = B
            Waitms 50
            End If


            If B => 150 Then
            Portb.3 = 0
            Portb.6 = 1
            B = B - 150
            Pwm1b = B
            Waitms 50
            End If




            Loop
            End 'end program
            جدیدترین ویرایش توسط Alidehghan120; ۱۲:۴۹ ۱۳۹۸/۰۲/۲۹.

            دیدگاه


              #7
              پاسخ : کنترل سرعت موتور DC در AVR

              داش امیر /...

              دیدگاه


                #8
                پاسخ : کنترل سرعت موتور DC در AVR

                سلام
                وقت بخیر
                نوشته اصلی توسط Alidehghan120 نمایش پست ها
                سلام داداش
                ته قضیه شد این اما بازم نه
                $regfile = "m8def.dat "
                $crystal = 8000000
                Config Timer1 = Pwm , Pwm = 10 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down , Prescale = 8
                Config Adc = Single , Prescaler = Auto
                Config Portc = Input
                Config Portb = Output
                Dim A As Word
                Dim B As Word
                Do
                Start Adc
                A = Getadc(0)
                B = Getadc(1)
                Stop Adc
                'MOTOR1'
                If A > 110 and A < 150 Then
                Portb.1 = 0
                Portb.2 = 0
                End If
                If A <= 110 Then
                Portb.1 = 1
                portb.2 = 0
                A = 110 - A
                Pwm1a = A
                Waitms 50
                End If
                If A => 150 Then
                Portb.1 = 0
                Portb.2 = 1
                A = A - 150
                Pwm1a = A
                Waitms 50
                End If
                'MOTOR2'
                If B > 110 And B < 150 Then
                Portb.3 = 0
                Portb.6 = 0
                End If
                If B <= 110 Then
                Portb.3 = 1
                Portb.6 = 0
                B = 110 - B
                Pwm1b = B
                Waitms 50
                End If
                If B => 150 Then
                Portb.3 = 0
                Portb.6 = 1
                B = B - 150
                Pwm1b = B
                Waitms 50
                End If
                Loop
                End 'end program
                من ، کد شما رو مقداری دستکاری کردم
                ' motor control with joystick by A_Moayeri
                ' 98/2/29
                $regfile = "m8def.dat "
                $crystal = 8000000
                Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down , Prescale = 8
                Config Adc = Single , Prescaler = Auto
                Config Portc = Input
                Config Portb = Output
                Config Portd = Output
                Portb = 0
                Portd = 0
                Dim A As Word
                Dim B As Word
                Do
                Start Adc
                A = Getadc(0)
                B = Getadc(1)
                Stop Adc
                '==================
                A = A / 4
                B = B / 4
                '====================
                '++++++++++++++++++++++++++ motor1
                If A < 128 Then
                Portd.0 = 0
                jmp nxm
                End If
                If A > 128 Then
                Portd.0 = 1
                jmp nxm
                End If
                A = 0
                Portd.0 = 1
                Nxm:
                '++++++++++++++++++++++++++ motor2
                If B < 128 Then
                Portd.1 = 0
                jmp yyy
                End If
                If B > 128 Then
                Portd.1 = 1
                jmp yyy
                End If
                B = 0

                Portd.1 = 1
                Yyy:
                '==================
                Pwm1a = Pwm1b = 0
                Pwm1a = A
                Pwm1b = B
                Stp:
                Loop
                End


                تست بفرمایید

                با احترام
                98/2/31

                دیدگاه


                  #9
                  پاسخ : کنترل سرعت موتور DC در AVR

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

                  دیدگاه

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