اطلاعیه

Collapse
No announcement yet.

pwm برای مقدار های پیوسته

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

    pwm برای مقدار های پیوسته

    سلام
    آیا میشه با تایمر avr در حالت pwm ، یک سیگنال pwm با فرکانس 20 هرتز ایجاد کرد؟
    تمام مقاله هایی که خوندم (چه در این سایت و چه در کتابهای دیگه) فرمولی ارائه کرده بودن که با اون فقط میشد pwm با یک سری فرکانس های خاص و گسسته ایجاد کرد.
    مثلا فرکانس 6 - 15 - 33 - ....
    آیا واقعا همینطوره یا میشه با فرکانسی بین این ها (20 هرتز) ایجاد کرد؟

    #2
    پاسخ : pwm برای مقدار های پیوسته

    سلام.تا جایی که من میدونم،با pwmفقط فرکانس های خاصی رو میشه تولید کرد.

    دیدگاه


      #3
      پاسخ : pwm برای مقدار های پیوسته

      برای این کار سه راه وجود داره:

      1. استفاده از تایمرهای 16 بیتی در Mode های Fast PWM، Phase Correct PWM و Phase & Frequency Correct PWM در وضعیتی که TOP توسط ICR تعیین بشه.

      2. استفاده از هر کدام از تایمر های AVR در Mode های PWM در وضعیتی که تایمر به صورت کانتر پیکربندی شده، در این حالت پالس کلاک خارجی فرکانس تون رو تعیین می کنه.

      3. استفاده از تایمر 8 بیتی در وضعیت آسنکرون که کلاک توسط پایه های TOSC1 و TOSC2 تعیین می شود.
      There is nothing so practical as a good theory. — Kurt Lewin, 1951

      دیدگاه


        #4
        پاسخ : pwm برای مقدار های پیوسته

        فرکانس pwm با مقدار فرکانسی که برای تایمر تعین میکنید تقسیم بر ماکسیمم عدد pwm (بسته به 8 , 9 یا 10 بیتی بودن pwm ) مشخص میشه.
        کار pwm ایجاد پالسی با پهنای قابل تنظیمه.
        برای ایجاد یک پالس با فرکانس دلخواه میتونی از مقایسه گر تایمر استفاده کنی.
        الهم عجل لولیک الفرج

        دیدگاه


          #5
          پاسخ : pwm برای مقدار های پیوسته

          راستی یک راه دیگه هم هست از کلاک کریستال فرکانس پایین استفاده کنید (32768) و با تایمر 16 بیتی موج PWM فرکانس پایین تون رو بسازید. بسیار دقیق میشه!! :rolleyes:
          There is nothing so practical as a good theory. — Kurt Lewin, 1951

          دیدگاه


            #6
            پاسخ : pwm برای مقدار های پیوسته

            نوشته اصلی توسط shockley
            راستی یک راه دیگه هم هست از کلاک کریستال فرکانس پایین استفاده کنید (32768) و با تایمر 16 بیتی موج PWM فرکانس پایین تون رو بسازید. بسیار دقیق میشه!! :rolleyes:
            تا حالا به این موضوع فکر نکرده بودم. چه کار جالبی :job:

            دیدگاه


              #7
              پاسخ : pwm برای مقدار های پیوسته

              مرسی
              ولی اگر از کریستال فرکانس پایین استفاده کنیم سرعت کل پردازش پایین میاد درسته؟
              چون در این سیستم نیاز به اسکن صفحه کلید و نمایش در LCD هم هست.
              در ضمن دو تا فرکانس 20 هرتز نیاز دارم که فکر می کنم همین نیاز به پردازش های خاصی داشته باشه.
              راستش من اصلا با AVR کار نکردم و برای یه پروژه که بهم محول شده بود مجبور شدم دو سه روزه بشینم کار کنم برای همین تجربم خیلی کمه.
              برنامه ای که من نوشتم با بسکام هست و اینجا می ذارمش ولی چند تا اشکال داره:
              اولا که duty cycle هر دو پالس 50% نمایش داده میشه.
              دوما با اینکه دکمه ای از کیبورد فشار داده نمیشه، مدام مقدار 15 رو بر میگردونه
              کسی میتونه کمکی بهم بکنه؟
              این مدار قراره که دو پالس PWM با فرکانس 20 هرتز تولید کنه و duty cycle های این دو پالس از طریق یک کیبورد مشخص میشه.



              $regfile = "M8535.DAT"
              $crystal = 8000000
              Config Timer1 = Timer , Compare A = Toggle , Compare B = Toggle , Prescale = 8
              'Config Kbd = Portb , Debounce = 50
              Config Lcd = 16 * 2
              Config Lcdpin = Pin , Db4 = Portc.4 , Db5 = Portc.5 , Db6 = Portc.6 , Db7 = Portc.7 , E = Portc.3 , Rs = Portc.2
              Enable Interrupts
              Enable Timer1
              Dim Halfval1 As Integer
              Halfval1 = 5000
              Dim Halfval2 As Integer
              Halfval2 = 20000
              Dim C As Bit
              Dim D As Bit
              Dim E As Bit
              E = 0
              Dim Keya As Byte
              Dim Raw As Byte
              Enable Oc1a
              Enable Oc1b
              Enable Ovf1
              On Oc1a Cmprmtch1
              On Oc1b Cmprmtch2
              On Ovf1 Overflow
              Compare1a = 21535
              Compare1b = 36535
              Start Timer1

              Do
              Gosub Scan
              Loop
              End

              Cmprmtch1:

              If C = 0 Then
              Compare1a = 65536 - Halfval1
              Else
              Compare1a = 15535 + Halfval1
              End If
              Toggle C
              Return

              Cmprmtch2:
              If D = 0 Then
              Compare1b = 65536 - Halfval2
              Else
              Compare1b = 15535 + Halfval2
              End If
              Toggle D
              Return

              Overflow:
              Timer1 = 15535
              Return

              Scan:
              Keya = Getkbd()
              If Keya < 16 Then
              If Keya = 3 Then
              Toggle E
              If E = 0 Then
              Locate 1 , 10
              Lcd "CNG"
              Else
              Locate 1 , 10
              Lcd "GAS"
              End If
              Else
              Raw = Keya * 10
              Locate 2 , 1
              Lcd Keya
              Again:
              Keya = Getkbd()
              If Keya < 16 Then
              Raw = Raw + Keya
              Locate 2 , 1
              Lcd Raw
              Raw = Raw / 100
              If E = 0 Then
              Halfval1 = Raw * 25000
              Toggle E
              Else
              Halfval2 = Raw * 25000
              Toggle E
              End If
              Else
              Goto Again
              End If
              End If
              Else
              End If
              Return

              دیدگاه


                #8
                پاسخ : pwm برای مقدار های پیوسته

                در ضمن اگر خودتون برای این مورد نظری دارید خوشحال می شم که کمکم کنید.
                منظورم اینه که نیازی نیست که حتما اشکال برنامه پیدا بشه. حتی اگر با زبانهای دیگه هم میتونید این کار رو بکنید لطفا کمک کنید این برنامه رو بنویسم.
                ممنون.

                دیدگاه


                  #9
                  پاسخ : pwm برای مقدار های پیوسته

                  سلام

                  فکر کنم PIC توی تولید PWM یه کم از AVR انعطاف پذیر تر باشه

                  کامپایلر پروتون:

                  HPWM
                  Syntax
                  HPWM Channel , Dutycycle , Frequency
                  Overview
                  Output a pulse width modulated pulse train using the CCP modules PWM hardware, available
                  on some PICmicros. The PWM pulses produced can run continuously in the background while
                  the program is executing other instructions.
                  Operators
                  Channel is a constant value that specifies which hardware PWM channel to use. Some devices
                  have 1, 2 or 3 PWM channels. On devices with 2 channels, the Frequency must be the same
                  on both channels. It must be noted, that this is a limitation of the PICmicrotm not the compiler.
                  The data sheet for the particular device used shows the fixed hardware pin for each Channel.
                  For example, for a PIC16F877, Channel 1 is CCP1 which is pin PORTC.2. Channel 2 is CCP2
                  which is pin PORTC.1.
                  Dutycycle is a variable, constant (0-255), or expression that specifies the on/off (high/low) ratio
                  of the signal. It ranges from 0 to 255, where 0 is off (low all the time) and 255 is on (high) all the
                  time. A value of 127 gives a 50% duty cycle (square wave).
                  Frequency is a variable, constant (0-32767), or expression that specifies the desired frequency
                  of the PWM signal. Not all frequencies are available at all oscillator settings. The highest frequency
                  at any oscillator speed is 32767Hz. The lowest usable HPWM Frequency at each oscillator
                  setting is shown in the table below: -
                  XTAL frequency Lowest useable PWM frequency
                  4MHz 145Hz
                  8MHz 489Hz
                  10MHz 611Hz
                  12MHz 733Hz
                  16MHz 977Hz
                  20MHz 1221Hz
                  24MHz 1465Hz
                  33MHz 2015Hz
                  40MHz 2442Hz
                  Example
                  DEVICE = 16F877
                  XTAL = 20
                  HPWM 1,127,1000 ' Send a 50% duty cycle PWM signal at 1KHz
                  DELAYMS 500
                  HPWM 1,64,2000 ' Send a 25% duty cycle PWM signal at 2KHz
                  STOP
                  ِِDie for Life, Not Live to Die
                  Freedom Fighter
                  " ناخود گاه، هریک از ما ، از نامیرائی خود یقین دارد " . فروید

                  دیدگاه

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