اطلاعیه

Collapse
No announcement yet.

کمک در مورد استپر موتور فوری

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

    #31
    پاسخ : کمک در مورد استپر موتور فوری

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

    فایل های پیوست شده

    دیدگاه


      #32
      پاسخ : کمک در مورد استپر موتور فوری

      نوشته اصلی توسط حامــد جعفـری
      آقا اینو نگاه کن . خیلی سریع نوشتم . حتی فرصت نکردم مرور کنم . اما به نظر مشکلی نداره :

      حامد جان ممنون ولی برنامه کار نمی کنه .اگه چکش کنی ممنون میشم .تایمرت مقدار ثابتی داره من نفهمیدم چطوری کار میکنه

      دیدگاه


        #33
        پاسخ : کمک در مورد استپر موتور فوری

        تایمر مقدار ثابتی داره؟ یعنی چی؟
        ببین هر یک میلی ثانیه وقفه تایمر اتفاق می افته و هر بار یکی به مقدار count اضافه میشه . اگه ایم مقداربه 1000 رسید یعنی یک ثانیه رد شده و مقدار متغیرsecond یکی زیاد میشه . اگه این مقدار با مقدار عدد وارد شده (B) یکی شد استپر موتور متوقف میشه .

        دیدگاه


          #34
          پاسخ : کمک در مورد استپر موتور فوری

          نوشته اصلی توسط حامــد جعفـری
          تایمر مقدار ثابتی داره؟ یعنی چی؟
          ببین هر یک میلی ثانیه وقفه تایمر اتفاق می افته و هر بار یکی به مقدار count اضافه میشه . اگه ایم مقداربه 1000 رسید یعنی یک ثانیه رد شده و مقدار متغیرsecond یکی زیاد میشه . اگه این مقدار با مقدار عدد وارد شده (B) یکی شد استپر موتور متوقف میشه .

          اقا حامد هر مقداری می دی 135 درجه می چرخه و تقوقف می کنه .

          دیدگاه


            #35
            پاسخ : کمک در مورد استپر موتور فوری

            موتورت چند پله است؟

            این برنامه رو امتحان کن ببین رو LCD زمانی که موتور شروع به کار می کنه چه زمانی نشون میده :



            $regfile = "m32def.dat"
            $crystal = 8000000
            Enable Interrupts
            On Timer1 Timer_int
            Stop Timer1
            Config Timer1 = Timer , Prescale = 8
            Config Kbd = Portb , Delay = 200 , Debounce = 100
            Config Portd = Output
            Config Lcd = 16 * 2
            Config Lcdpin = Pin , Db4 = Porta.4 , Db5 = Porta.5 , Db6 = Porta.6 , Db7 = Porta.7 , E = Portc.7 , Rs = Portc.6
            Dim A As Byte
            Dim B As Byte
            Dim I As Byte
            Dim R As Byte
            Dim Check As Bit
            Dim Count As Word
            Dim Second As Byte
            Dim Rev As Byte

            Main:
            Cls
            Locate 1 , 6
            Lcd "Time :"
            Do
            A = Getkbd()
            A = Lookup(a , Key)
            Select Case A
            Case Is < 10:
            B = B * 10
            B = B + A
            Locate 2 , 7 : Lcd B ; " "
            Case 15:
            Goto Motor
            Case 13:
            B = B / 10
            Locate 2 , 7 : Lcd B ; " "
            End Select
            Loop

            Motor:
            Cls
            Enable Timer1
            Timer1 = 64536
            Start Timer1
            Do
            R = 128
            For I = 1 To 4
            Rotate R , Left
            If R = 16 Then R = 1
            Portd = R
            Waitms 10
            Next
            Loop Until Check = 0

            End

            Timer_int:
            Incr Count
            Timer1 = 64536
            If Count >= 1000 Then
            Disable Timer1
            Count = 0
            Incr Second
            Rev = B - second
            Locate 2 , 7 : Lcd Rev ; " "

            If Second >= B Then Check = 1
            Enable Timer1
            End If
            Return

            Key:
            Data 1 , 2 , 3 , 10 , 4 , 5 , 6 , 11 , 7 , 8 , 9 , 12 , 13 , 0 , 14 , 15 , 16

            دیدگاه


              #36
              پاسخ : کمک در مورد استپر موتور فوری

              نوشته اصلی توسط حامــد جعفـری
              موتورت چند پله است؟

              این برنامه رو امتحان کن ببین رو LCD زمانی که موتور شروع به کار می کنه چه زمانی نشون میده :



              $regfile = "m32def.dat"
              $crystal = 8000000
              Enable Interrupts
              On Timer1 Timer_int
              Stop Timer1
              Config Timer1 = Timer , Prescale = 8
              Config Kbd = Portb , Delay = 200 , Debounce = 100
              Config Portd = Output
              Config Lcd = 16 * 2
              Config Lcdpin = Pin , Db4 = Porta.4 , Db5 = Porta.5 , Db6 = Porta.6 , Db7 = Porta.7 , E = Portc.7 , Rs = Portc.6
              Dim A As Byte
              Dim B As Byte
              Dim I As Byte
              Dim R As Byte
              Dim Check As Bit
              Dim Count As Word
              Dim Second As Byte
              Dim Rev As Byte

              Main:
              Cls
              Locate 1 , 6
              Lcd "Time :"
              Do
              A = Getkbd()
              A = Lookup(a , Key)
              Select Case A
              Case Is < 10:
              B = B * 10
              B = B + A
              Locate 2 , 7 : Lcd B ; " "
              Case 15:
              Goto Motor
              Case 13:
              B = B / 10
              Locate 2 , 7 : Lcd B ; " "
              End Select
              Loop

              Motor:
              Cls
              Enable Timer1
              Timer1 = 64536
              Start Timer1
              Do
              R = 128
              For I = 1 To 4
              Rotate R , Left
              If R = 16 Then R = 1
              Portd = R
              Waitms 10
              Next
              Loop Until Check = 0

              End

              Timer_int:
              Incr Count
              Timer1 = 64536
              If Count >= 1000 Then
              Disable Timer1
              Count = 0
              Incr Second
              Rev = B - second
              Locate 2 , 7 : Lcd Rev ; " "

              If Second >= B Then Check = 1
              Enable Timer1
              End If
              Return

              Key:
              Data 1 , 2 , 3 , 10 , 4 , 5 , 6 , 11 , 7 , 8 , 9 , 12 , 13 , 0 , 14 , 15 , 16
              حامد جان من تو پروتوس چک کردم جواب نداد
              وقتی موتور راه می افته lcd هیچی نشون نمی ده

              دیدگاه


                #37
                پاسخ : کمک در مورد استپر موتور فوری

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

                دیدگاه


                  #38
                  پاسخ : کمک در مورد استپر موتور فوری

                  حامد جان اگه برات امکان داره یه مقدار در مورد روند برنامه توضیحاتی بده

                  A = Getkbd()
                  A = Lookup(a , Key)
                  Select Case A
                  Case Is < 10:
                  B = B * 10
                  B = B + A
                  Locate 2 , 7 : Lcd B ; " "
                  Case 15:
                  Goto Motor
                  Case 13:
                  B = B / 10
                  Locate 2 , 7 : Lcd B ; " "
                  End Select
                  در اینجا عددی رو که از کی پد گرفته شده رو تو متغیر a ریختی بع دوباره همین متغیر رو از جدول لوکاپ دوباره مقدار دهی کردی ، در این مورد توضیح بده



                  R = 128
                  For I = 1 To 4
                  Rotate R , Left
                  If R = 16 Then R = 1
                  Portd = R
                  Waitms 10
                  Next
                  Loop Until Check = 0

                  اینجا هم یه توضیح کلی بده
                  کمتر به سایت میام .....

                  دیدگاه


                    #39
                    پاسخ : کمک در مورد استپر موتور فوری

                    نوشته اصلی توسط بهرام
                    حامد جان اگه برات امکان داره یه مقدار در مورد روند برنامه توضیحاتی بده

                    A = Getkbd()
                    A = Lookup(a , Key)
                    Select Case A
                    Case Is < 10:
                    B = B * 10
                    B = B + A
                    در اینجا عددی رو که از کی پد گرفته شده رو تو متغیر a ریختی بع دوباره همین متغیر رو از جدول لوکاپ دوباره مقدار دهی کردی ، در این مورد توضیح بده



                    R = 128
                    For I = 1 To 4
                    Rotate R , Left
                    If R = 16 Then R = 1
                    Portd = R
                    Waitms 10
                    Next
                    Loop Until Check = 0

                    اینجا هم یه توضیح کلی بده
                    رقم اولی که گرفته میشه دهگانه و رقم دوم یکان.درست!
                    و رقم دوم یکانه. برای اینکه مثلاً 25 رو وارد کنید شما اول 2 رو میزنید بعد 5 رو.نمیشه که 2 رو همین جوری با 5 جمع کرد(میشه 7) :mrgreen:.باید 2 رو در 10 ضرب کرد بعد با 5 (یکان)جمعش کرد.
                    2 در اینجا B هست و 5 در اینجا A.

                    دیدگاه


                      #40
                      پاسخ : کمک در مورد استپر موتور فوری

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

                      متغیر b مقدار اولیه که نداره ، متوجه شدم که چرا در 10 ضرب شده ولی مقدار اولیشو متوجه نشدم
                      کمتر به سایت میام .....

                      دیدگاه


                        #41
                        پاسخ : کمک در مورد استپر موتور فوری

                        خب من جدول لوک پ رو برای تغییرات کدهای کیپد در نظر گرفتم :

                        10 3 2 1
                        11 6 5 4
                        12 9 8 7
                        15 14 0 13
                        و در صورتی که کلیدی فشرده نشه کد 16 رو بر می گردونه . با این ترکیب پس اگه بعد از دستور A=Lookup(a,key) به مقدار A توجه کنیم می بینیم که ارقام کدی کمتر از 10 دارند. پس اگه یه عدد رو فشار بدیم چون B مقدار اولیه صفر داره ( اگه برای یه متغیر مقدار اولیه تعریف نکنیم مقدارش صفر در نظر گرفته میشه) پس B در 10 ضرب میشه و با A جمع میشه . اگه فرض کنیم 2 رو زده باشیم ، B میشه 2 . در مرحله بعد کلید 5 رو می زنیم . این بار B در 10 ضرب میشه ( 20 ) و با A جمع میشه . در این صورت مقدار B=25 میشه .
                        حالا اگه کلید اینترو بزنیم ( تو برنامه کد 15 دادم ) وارد قسمت Motor میشه و ادامه ماجرا .


                        در مورد چرخش موتور هم باید بگم که فرض بر این بوده که موتور یک سیم مشترک و چهار سیم برای فرمان داره. این سیم ها ( سر سیم پیچ ها ) باید به ترتیب و در یک جهت شروع به چرخش کنند ( چرخش یک منطقی یا 5 ولت بین سیم ها ) . پس این برنامه رو نوشتم.

                        مقدار اولیه R=128 هست . یعنی 10000000 باینری . به محض وارد شدن تو حلقه For به ازای مقادیر مختلف I روی پورت خروجی داریم :

                        I=1 ===> 00000001
                        I=2 ===> 00000010
                        I=3 ===> 00000100
                        I=4 ===> 00001000
                        و این حلقه اونقدر ادامه پیدا می کنه تا تایمر به زمان B ثانیه برسه و مقدار check=1 بشه . بعد از این رویداد برنامه از حلقه خارج میشه و End برنامه.

                        دیدگاه


                          #42
                          پاسخ : کمک در مورد استپر موتور فوری

                          ایول کاملا متوجه شدم نکته اینجا بود که
                          مقدار اولیه R=128 هست . یعنی 10000000 باینری
                          اگه مشکلی بود مطرح میکنم
                          کمتر به سایت میام .....

                          دیدگاه


                            #43
                            پاسخ : کمک در مورد استپر موتور فوری

                            نوشته اصلی توسط حامــد جعفـری
                            خب من جدول لوک پ رو برای تغییرات کدهای کیپد در نظر گرفتم :

                            10 3 2 1
                            11 6 5 4
                            12 9 8 7
                            15 14 0 13
                            و در صورتی که کلیدی فشرده نشه کد 16 رو بر می گردونه . با این ترکیب پس اگه بعد از دستور A=Lookup(a,key) به مقدار A توجه کنیم می بینیم که ارقام کدی کمتر از 10 دارند. پس اگه یه عدد رو فشار بدیم چون B مقدار اولیه صفر داره ( اگه برای یه متغیر مقدار اولیه تعریف نکنیم مقدارش صفر در نظر گرفته میشه) پس B در 10 ضرب میشه و با A جمع میشه . اگه فرض کنیم 2 رو زده باشیم ، B میشه 2 . در مرحله بعد کلید 5 رو می زنیم . این بار B در 10 ضرب میشه ( 20 ) و با A جمع میشه . در این صورت مقدار B=25 میشه .
                            حالا اگه کلید اینترو بزنیم ( تو برنامه کد 15 دادم ) وارد قسمت Motor میشه و ادامه ماجرا .



                            حامد جان یعنی رو برد ببندم؟




                            در مورد چرخش موتور هم باید بگم که فرض بر این بوده که موتور یک سیم مشترک و چهار سیم برای فرمان داره. این سیم ها ( سر سیم پیچ ها ) باید به ترتیب و در یک جهت شروع به چرخش کنند ( چرخش یک منطقی یا 5 ولت بین سیم ها ) . پس این برنامه رو نوشتم.

                            مقدار اولیه R=128 هست . یعنی 10000000 باینری . به محض وارد شدن تو حلقه For به ازای مقادیر مختلف I روی پورت خروجی داریم :

                            I=1 ===> 00000001
                            I=2 ===> 00000010
                            I=3 ===> 00000100
                            I=4 ===> 00001000
                            و این حلقه اونقدر ادامه پیدا می کنه تا تایمر به زمان B ثانیه برسه و مقدار check=1 بشه . بعد از این رویداد برنامه از حلقه خارج میشه و End برنامه.

                            دیدگاه


                              #44
                              پاسخ : کمک در مورد استپر موتور فوری

                              نوشته اصلی توسط 3xbox.mohammad


                              حامد جان روی برد ببندم؟
                              موتورم 200 پله است

                              دیدگاه


                                #45
                                پاسخ : کمک در مورد استپر موتور فوری

                                خب میگی موتورت 200 پله است . یعنی هر پله 1.8 درجه . از طرفی میگی 135فقط درجه می چرخه. پس یعنی 75فقط پله می چرخه. با زمان تقریبی 10*75 میلی ثانیه یعنی 750 میلی ثانیه . با این حرف یعنی زمانی رو که تایمر ایجاد می کنه اینه . و چون میگی هر عددی میدی این همین زمانو طی می کنه پس یا درست شبیه سازی نمیشه یا زیربرنامه گرفتن عدد ایراد داره و یا قسمت تایمر ایراد داره.
                                حالا رو برد بورد ببند . نتیجشو بگو

                                دیدگاه

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