اطلاعیه

Collapse
No announcement yet.

تولید همزمان PWM و شمارش پالس در یک میکرو

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

    تولید همزمان PWM و شمارش پالس در یک میکرو

    سلام دوستان.
    آیا امکانش هست که یک میکرو پالس PWM تولید کنه و موتور با سرعت آرام راه اندازی بشه و بعد از طرف دیگه همون میکرو تعداد پالسی که موتور در اثر چرخیدن تولید کرده ( در حین تولید pwm )رو بشماره وپس از N پالس به موتورفرمان ایستادن رو صادر کنه ؟؟؟
    http://www.sharjweb.com/

    #2
    پاسخ : تولید همزمان PWM و شمارش پالس در یک میکرو

    جون من یکی راهنماییم کنه.
    http://www.sharjweb.com/

    دیدگاه


      #3
      پاسخ : تولید همزمان PWM و شمارش پالس در یک میکرو

      آره . چندان هم سخت نیست. با وقفه ها بلدی کار کنی؟

      دیدگاه


        #4
        پاسخ : تولید همزمان PWM و شمارش پالس در یک میکرو

        نوشته اصلی توسط محمد ایجی
        آره . چندان هم سخت نیست. با وقفه ها بلدی کار کنی؟
        تقریبا کار کردم. اما وقتی میکرو داره پالس PWM تولید میکنه وقت CPU فقط رو تولید پالس PWM هدر میره و دو کانتر دیگه که وظیفه شمارش پالس رو دارند ( البته این کار یعنی شمارش تعداد پالس بسیار دقیق باید انجام شه ومن از کریستال ساعت استفاده کردم) ، چطور میتونند پالرو بشمورند.
        از اینکه جواب دادین ممنونم.
        http://www.sharjweb.com/

        دیدگاه


          #5
          پاسخ : تولید همزمان PWM و شمارش پالس در یک میکرو

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

          دیدگاه


            #6
            پاسخ : تولید همزمان PWM و شمارش پالس در یک میکرو

            نوشته اصلی توسط mohsenjooon
            اما وقتی میکرو داره پالس PWM تولید میکنه وقت CPU فقط رو تولید پالس PWM هدر میره و دو کانتر دیگه که وظیفه شمارش پالس رو دارند ( البته این کار یعنی شمارش تعداد پالس بسیار دقیق باید انجام شه ومن از کریستال ساعت استفاده کردم) ، چطور میتونند پالرو بشمورند.
            از اینکه جواب دادین ممنونم.
            کلاک cpu به همین راحتی که میگی هدر نمیشه
            استفاده از وقفه ها در میکرو کنترلر راه حل مناسبی به نظر میاد
            تصور کن یه میکرو کنترلر مثلا xmega از خانواده avr ها 128 تا وقفه داره اگه قرار باشه با استفاده از 1 وقفه بقیه از بین برن یا اینکه cpu به تمام وقفه ها نتونه برسه اصلا این وقفه ها رو نمیزاشتن
            در ثانی PWM هم اونقدر کلاک CPU رو نمیگیره در حد صفر و یک کردن یه پورت (بسیار زمان کوتاهیه )
            اگه برنامه رو درست بنویسی و از دستورات حلقه و تاخیری زیاد استفاده نکنی CPU به تمام برنامه میرسه و کلی هم زمان اضافی میاره




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

            دیدگاه


              #7
              پاسخ : تولید همزمان PWM و شمارش پالس در یک میکرو

              درسته داش سعید ولی منظورم تو برنامه زیرهست. آیا تو برنامه زیر هم میشه چنین کاری کرد؟؟
              کد:
              $regfile = "M32def.dat"
              $crystal = 8000000
              
              Dim Count As Long
              Dim I As Long
              Dim J As Long
              
              
              Config Porta.0 = Output
              Config Porta.1 = Output
              
              Waitms 500
              Set Porta.1
              Waitms 10
              Reset Porta.0
              
              Config Timer1 = Counter , Edge = Rising
              
              
              
              Counter1 = 0
              I = 0
              
              Config Timer2 = Timer , Async = On , Prescale = 1
                   '
              Enable Interrupts
              Enable Timer2
              On Ovf2 Timer2_isr
              
              Stop Timer2
              Start Timer2
              
              
              Do
              
              Loop
              
              
              
              '--------------------------------------------------------------------
              Timer2_isr:
              
                If Count = 17 Then
              
                   Set Porta.0
                   I = 0
                   Timer2 = 0
                   Count = 0
                   Counter1 = 0
              
                End If
              
              
                Stop Timer2
                Count = Count + Counter1
                Counter1 = 0
                I = I + 1
              
              
                If I = 128 Then
              
                   Counter1 = 0
                   I = 0
                   Timer2 = 0
              
                End If
              
                Start Timer2
              
              Return
              http://www.sharjweb.com/

              دیدگاه


                #8
                پاسخ : تولید همزمان PWM و شمارش پالس در یک میکرو

                تو این برنامه وقتی پورت A.1 ست میشه به یه میکرو دیگه فرمان میده تا موتور با PWM راه اندازی بشه و بعدش پورت A.0 تولید شده به میکرو دو فرمان میده که تعداد 17 پالس شمورده شده و PWM خاموش یا به عبارتی موتور ترمز کنه. حالا چطور میشه این وسط PWM راه اندازی کرد. مگر بقول داش محمد از یک PWM سخت افزاری استفاده کنیم.
                http://www.sharjweb.com/

                دیدگاه


                  #9
                  پاسخ : تولید همزمان PWM و شمارش پالس در یک میکرو

                  در برنامه ی بالا متغیر counter1 کجا اضافه میشه؟! در سرویس وقفه خارجی؟؟؟؟
                  شما خیلی راحت میتونید PWM سخت افزاری رو فعال کنید. هر وقت هم خواستید disable اش کنید. خیالت راحت باشه ‏‎ CPU میکرو خیلی درگیر این قضایا نمیشه.

                  دیدگاه


                    #10
                    پاسخ : تولید همزمان PWM و شمارش پالس در یک میکرو

                    نوشته اصلی توسط محمد ایجی
                    در برنامه ی بالا متغیر counter1 کجا اضافه میشه؟! در سرویس وقفه خارجی؟؟؟؟
                    شما خیلی راحت میتونید PWM سخت افزاری رو فعال کنید. هر وقت هم خواستید disable اش کنید. خیالت راحت باشه ‏‎ CPU میکرو خیلی درگیر این قضایا نمیشه.
                    cont1 از طریق پایه فt1 میکرو مقدار کانتر یک رو اضافه میکنه. آقا محمد من کجای این برنامه دستورات pwm رو اضافه کنم. cpu میکرو هر ثانیه بایستی کانتر یک رو چی کنه؟؟ اگه میشه یکمی هم در مورد PWM سخت افزاری توضیح بدین . خیلی ممنون.
                    http://www.sharjweb.com/

                    دیدگاه


                      #11
                      پاسخ : تولید همزمان PWM و شمارش پالس در یک میکرو

                      کانتر رو بیخیال شو . چون وقفه overflow واست دردسرساز میشه!. بهترین کار همونیه که گفتم. سیگنال شمارش رو بده به پایه ی وقفه خارجی و تو سرویس وقفش هم فقط کافیه که یه متغیر رو افزایش بدی.
                      راستش من با PIC کار میکنم. در مورد دستورات برنامه نویسی و توضیح سخت افزار PWM (چون با PIC فرق میکنه) ، بقیه دوستان باید کمکت کنن.

                      دیدگاه


                        #12
                        پاسخ : تولید همزمان PWM و شمارش پالس در یک میکرو

                        قربونت. از اینکه کمکم کردی ممنونم. آیا مدار خارجی هست که PWM تولید کنه ؟؟
                        http://www.sharjweb.com/

                        دیدگاه


                          #13
                          پاسخ : تولید همزمان PWM و شمارش پالس در یک میکرو

                          تورو خدا کمکم کنید . گیر کردم.
                          http://www.sharjweb.com/

                          دیدگاه


                            #14
                            پاسخ : تولید همزمان PWM و شمارش پالس در یک میکرو

                            این برنامه ها توی هلپ خود بیسکام نوشته شده
                            شیوه استفاده از تایمر ها رو نوشته البته ناقص هستش ولی یه کمی تغییر توش میتونی برنامه رو نویسی




                            '-----------------------------------------------------------------------------------------
                            'name : timer1.bas
                            'copyright : (c) 1995-2005, MCS Electronics
                            'purpose : show using Timer1
                            'micro : 90S8515
                            'suited for demo : yes
                            'commercial addon needed : no
                            '-----------------------------------------------------------------------------------------

                            $regfile = "8515def.dat" ' specify the used micro
                            $crystal = 4000000 ' used crystal frequency
                            $baud = 19200 ' use baud rate
                            $hwstack = 32 ' default use 32 for the hardware stack
                            $swstack = 10 ' default use 10 for the SW stack
                            $framesize = 40 ' default use 40 for the frame space


                            Dim W As Word

                            'The TIMER1 is a versatile 16 bit TIMER.
                            'This example shows how to configure the TIMER

                            'First like TIMER0 , it can be set to act as a TIMER or COUNTER
                            'Lets configute it as a TIMER that means that it will count and that
                            'the input is provided by the internal clock.
                            'The internal clock can be divided by 1,8,64,256 or 1024
                            Config Timer1 = Timer , Prescale = 1024


                            'You can read or write to the timer with the COUNTER1 or TIMER1 variable
                            W = Timer1
                            Timer1 = W


                            'To use it as a COUNTER, you can choose on which edge it is trigereed
                            Config Timer1 = Counter , Edge = Falling , Prescale = 1
                            'Config Timer1 = Counter , Edge = Rising

                            'Also you can choose to capture the TIMER registers to the INPUT CAPTURE registers
                            'With the CAPTURE EDGE = , you can specify to capture on the falling or rising edge of
                            'pin ICP
                            Config Timer1 = Counter , Edge = Falling , Capture Edge = Falling , Prescale = 1024
                            'Config Timer1 = Counter , Edge = Falling , Capture Edge = Rising

                            'To allow noise canceling you can also provide :
                            Config Timer1 = Counter , Edge = Falling , Capture Edge = Falling , Noise Cancel = 1 , Prescale = 1

                            'to read the input capture register :
                            W = Capture1
                            'to write to the capture register :
                            Capture1 = W





                            'The TIMER also has two compare registers A and B
                            'When the timer value matches a compare register, an action can be performed
                            Config Timer1 = Counter , Edge = Falling , Compare A = Set , Compare B = Toggle , , Clear Timer = 1
                            'SET , will set the OC1X pin
                            'CLEAR, will clear the OC1X pin
                            'TOGGLE, will toggle the OC1X pin
                            'DISCONNECT, will disconnect the TIMER from output pin OC1X
                            'CLEAR TIMER will clear the timer on a compare A match

                            'To read write the compare registers, you can use the COMPARE1A and COMPARE1B variables
                            Compare1a = W
                            W = Compare1a


                            'And the TIMER can be used in PWM mode
                            'You have the choice between 8,9 or 10 bit PWM mode
                            'Also you can specify if the counter must count UP or down after a match
                            'to the compare registers
                            'Note that there are two compare registers A and B
                            Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Up , Compare B Pwm = Clear Down , Prescale = 1

                            'to set the PWM registers, just assign a value to the compare A and B registers
                            Compare1a = 100
                            Compare1b = 200

                            'Or for better reading :
                            Pwm1a = 100
                            Pwm1b = 200

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

                            دیدگاه


                              #15
                              پاسخ : تولید همزمان PWM و شمارش پالس در یک میکرو

                              داش سعید نوکرتم میشه بگین آیا امکانش هست تو برنامه ای که بالا نوشتم امکانش هست PWM رو همزمان با شمارش پالس ایجاد کرد؟؟؟
                              http://www.sharjweb.com/

                              دیدگاه

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