اطلاعیه

Collapse
No announcement yet.

pwm با فرکانس و دیوتی سیکل متغیر

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

    pwm با فرکانس و دیوتی سیکل متغیر

    من هر کاری کردم که بتونم pwm با دیوتی سیکل متغیر داشته باشم و همچنین فرکانس متغیر نتونستم ایا اصلا میشه این دو کار رو به صورت جدا ازهم تو میکرو انجام داد

    مثلا یه ولوم بزاری که فرکانس موج مربعی رااز 1 هرتز تا 50 هرتز تغییر بده
    و ولوم دیگر هم دیوتی سیکل موج مربعی رو تغییر بده


    ایا میکرو توانایی چنین کاری رو داره
    ادمهای خوب تو eca خیلی پیدا میشه

    #2
    پاسخ : pwm با فرکانس و دیوتی سیکل متغیر

    فرکانس متغییر همون دیوتی سایکل متغییره.
    یه برنامه پی دبلو ام ( :biggrin: ) متغیر ساده نوشتم ولی تو انجمن گم شده oo: ولی اگه بگردی پیدا میشه.
    اصلا کاربرد pwm به متغییر و قابل کنترل بودنشه.

    دیدگاه


      #3
      پاسخ : pwm با فرکانس و دیوتی سیکل متغیر

      فرکانس چه ربطی به دیوتی سیکل داره

      ادمهای خوب تو eca خیلی پیدا میشه

      دیدگاه


        #4
        پاسخ : pwm با فرکانس و دیوتی سیکل متغیر

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

        دیدگاه


          #5
          پاسخ : pwm با فرکانس و دیوتی سیکل متغیر

          نوشته اصلی توسط SAMIN20
          من هر کاری کردم که بتونم pwm با دیوتی سیکل متغیر داشته باشم و همچنین فرکانس متغیر نتونستم ایا اصلا میشه این دو کار رو به صورت جدا ازهم تو میکرو انجام داد

          مثلا یه ولوم بزاری که فرکانس موج مربعی رااز 1 هرتز تا 50 هرتز تغییر بده
          و ولوم دیگر هم دیوتی سیکل موج مربعی رو تغییر بده


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

          دیدگاه


            #6
            پاسخ : pwm با فرکانس و دیوتی سیکل متغیر

            میشه فقط رنج فرکانس این طور نیس که بتونی 1 تا 50 هرتز کامل پوشش بده .چون خودش اعداد های ثابت برا تقسیم فرکانسی داره . با کدوم کامپایلر کار می کنی؟

            دیدگاه


              #7
              پاسخ : pwm با فرکانس و دیوتی سیکل متغیر

              دوست عزیز من متوجه نمیشم .الان من برنامه یک pwm با فرکانس ثابت مثلا 50 هرتز تولید کنم و دیوتی سیکل رو از 0 تا 100 درصد تغییر بدهم و مشکلی ندارم ولی مشکل من اینجاست که میخواهم فرکانس هم تغیر بدم
              از تصحیح فاز استفاده کردم و خروجی موج oc1a پورت بی1 اتمگا 8

              میشه بیشتر راهنمایی کنید من با اسمبلی برنامه مینویسم
              ادمهای خوب تو eca خیلی پیدا میشه

              دیدگاه


                #8
                پاسخ : pwm با فرکانس و دیوتی سیکل متغیر

                من با اسمبلی کار نکردم ولی تو کدویژن ریجیستر tccr سه بیت آخرش (cs0-cs1-cs2)مربوط به فرکانس pwm هستش که با تغییر اون ها میشه فرکانس رو تغییر داد مثلا 001 برا فرکانس ck یا 010 برا ck/8 وهمینطور به ترتیب ck/32 ck/64 و...

                دیدگاه


                  #9
                  پاسخ : pwm با فرکانس و دیوتی سیکل متغیر

                  دوست عزیز در این صورت چند تا حالت محدود فرکانس نداریم فرضا بگیر 4 تا

                  من مگیم همونجور که بادادن عدد میتونیم دیوتی سیکل pwm رو تغییر بدهیم بتونیم با دادن عدد فرکانس هم تغییر بدهیم
                  ادمهای خوب تو eca خیلی پیدا میشه

                  دیدگاه


                    #10
                    پاسخ : pwm با فرکانس و دیوتی سیکل متغیر

                    منم مشتاق شدم ببینم چطور میشه این کار رو انجام داد.چون یه کاری هم من با این حالت برام پیش اومده.
                    اساتید راهنمایی کنن. :agree:

                    دیدگاه


                      #11
                      پاسخ : pwm با فرکانس و دیوتی سیکل متغیر

                      برای این که بتونید فرکانس متغیر تقریبا دلخواه داشته باشید باید از MODE هایی که مقدار TOP اون ها قابل تغییر هستند استفاده کنید .

                      توی برنامه زیر که با تایمر 1 میکروکنترلر mega8 نوشته شده از FAST PWM - TOP=ICR1 استفاده شده و توی این MODE هر عددی که توی رجیستر ICR1 ریخته بشه طول کل پالس ( برعکس فرکانس ) رو تعیین میکنه و هر عددی که توی رجیستر OCR1A یا OCR1B ریخته بشه طول بخش فعال ( دیوتی سایکل ) رو تعیین میکنه .
                      ( فقط باید حواستون باشه که اگر عدد OCR بیشتر از عدد ICR بشه دیوتی سایکل 100 درصد میشه و دیگه پین صفر نمیشه )

                      کد:
                      #include <mega8.h>
                      #include <delay.h>
                      
                      
                      // Voltage Reference: AVCC pin
                      #define ADC_VREF_TYPE ((0<<REFS1) | (1<<REFS0) | (0<<ADLAR))
                      
                      // Read the AD conversion result
                      unsigned int read_adc(unsigned char adc_input)
                      {
                      ADMUX=adc_input | ADC_VREF_TYPE;
                      // Delay needed for the stabilization of the ADC input voltage
                      delay_us(10);
                      // Start the AD conversion
                      ADCSRA|=(1<<ADSC);
                      // Wait for the AD conversion to complete
                      while ((ADCSRA & (1<<ADIF))==0);
                      ADCSRA|=(1<<ADIF);
                      return ADCW;
                      }
                      
                      void main(void)
                      {
                      // Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=Out Bit1=Out Bit0=In
                      DDRB=(0<<DDB7) | (0<<DDB6) | (0<<DDB5) | (0<<DDB4) | (0<<DDB3) | (1<<DDB2) | (1<<DDB1) | (0<<DDB0);
                      // State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=0 Bit1=0 Bit0=T
                      PORTB=(0<<PORTB7) | (0<<PORTB6) | (0<<PORTB5) | (0<<PORTB4) | (0<<PORTB3) | (0<<PORTB2) | (0<<PORTB1) | (0<<PORTB0);
                      
                      // Port C initialization
                      // Function: Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In
                      DDRC=(0<<DDC6) | (0<<DDC5) | (0<<DDC4) | (0<<DDC3) | (0<<DDC2) | (0<<DDC1) | (0<<DDC0);
                      // State: Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T
                      PORTC=(0<<PORTC6) | (0<<PORTC5) | (0<<PORTC4) | (0<<PORTC3) | (0<<PORTC2) | (0<<PORTC1) | (0<<PORTC0);
                      
                      // Port D initialization
                      // Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In
                      DDRD=(0<<DDD7) | (0<<DDD6) | (0<<DDD5) | (0<<DDD4) | (0<<DDD3) | (0<<DDD2) | (0<<DDD1) | (0<<DDD0);
                      // State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T
                      PORTD=(0<<PORTD7) | (0<<PORTD6) | (0<<PORTD5) | (0<<PORTD4) | (0<<PORTD3) | (0<<PORTD2) | (0<<PORTD1) | (0<<PORTD0);
                      
                      // Timer/Counter 1 initialization
                      // Clock source: System Clock
                      // Clock value: 8000.000 kHz
                      // Mode: Fast PWM top=ICR1
                      // OC1A output: Non-Inverted PWM
                      // OC1B output: Non-Inverted PWM
                      // Noise Canceler: Off
                      // Input Capture on Falling Edge
                      // Timer Period: 0.125 us
                      // Output Pulse(s):
                      // OC1A Period: 0.125 us
                      // OC1B Period: 0.125 us
                      // Timer1 Overflow Interrupt: Off
                      // Input Capture Interrupt: Off
                      // Compare A Match Interrupt: Off
                      // Compare B Match Interrupt: Off
                      TCCR1A=(1<<COM1A1) | (0<<COM1A0) | (1<<COM1B1) | (0<<COM1B0) | (1<<WGM11) | (0<<WGM10);
                      TCCR1B=(0<<ICNC1) | (0<<ICES1) | (1<<WGM13) | (1<<WGM12) | (0<<CS12) | (0<<CS11) | (1<<CS10);
                      TCNT1H=0x00;
                      TCNT1L=0x00;
                      ICR1H=0x00;
                      ICR1L=0x00;
                      OCR1AH=0x00;
                      OCR1AL=0x00;
                      OCR1BH=0x00;
                      OCR1BL=0x00;
                      
                      // ADC initialization
                      // ADC Clock frequency: 1000.000 kHz
                      // ADC Voltage Reference: AVCC pin
                      ADMUX=ADC_VREF_TYPE;
                      ADCSRA=(1<<ADEN) | (0<<ADSC) | (0<<ADFR) | (0<<ADIF) | (0<<ADIE) | (0<<ADPS2) | (1<<ADPS1) | (1<<ADPS0);
                      SFIOR=(0<<ACME);
                      
                      while (1)
                         {
                         ICR1=read_adc(0)<<6;
                         OCR1A=read_adc(1)<<6;
                         delay_ms(100);
                         }
                      }


                      http://s6.picofile.com/file/8209541250/PWM.rar.html

                      دیدگاه


                        #12
                        پاسخ : pwm با فرکانس و دیوتی سیکل متغیر

                        سلام
                        تو میتونی از یک lm331 استفاده کنی تا فرکانس خروجی تغییر بدی و اونو به میکرو بدی و...
                        ولی اگه میخای تنها با میکرو اینکارو کنی یکم مشکله چرا؟؟چون من خودم میخاستم سیگنال ژنراتور بسازم و فرکانس تغییر بدم ولی رنجی ک تغیرر میکرد خیلی بالا بود و شاید غیر علمی بود.
                        من با دانش و آکاهی ام تمام جهالت ها رو به زانو در خواهم اورد.

                        دیدگاه


                          #13
                          پاسخ : pwm با فرکانس و دیوتی سیکل متغیر

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

                          دیدگاه

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