اطلاعیه

Collapse
No announcement yet.

ایجاد موج pwm با میکرو حدود 20khz

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

    ایجاد موج pwm با میکرو حدود 20khz

    با سلام من می خوام با میکرو avr موج pwm با فرکانس 100khzتولید کنم بغیر از میکرو tiny15 با کدوم میکرو میشه اینو درس کرد راهنمایی کنید

    #2
    پاسخ : ایجاد موج pwm با میکرو حدود 20khz

    نوشته اصلی توسط MOGTABAKIT
    با سلام من می خوام با میکرو avr موج pwm با فرکانس 20khzتولید کنم بغیر از میکرو tiny15 با کدوم میکرو میشه اینو درس کرد راهنمایی کنید
    سلام
    با بیشتر میکروها میشه ... از جمله :
    .....,attiny10,13,20,2313,24,25,26
    atmega8,16,32,64,128
    و خیلی از میکرو های دیگه ...
    [b]چگونه همه پایه های میکروکنترلر AVR را PWM کنیم؟
    معرفی نرم افزارEasy 7segment (برای راه اندازی آسانتر 7segment )
    معرفی نرم افزار Codewizard PWM
    با من بیشتر آشنا شوید

    دیدگاه


      #3
      پاسخ : ایجاد موج pwm با میکرو حدود 20khz

      با سلام میشه کمی راهنمایی کنید اگه من کریستان 16 مگ به میکرو مگا 8 وصل کنم
      pwmfrequncy=fosc/(510*prescale)
      واگر prscaleبذارم رو عدد 1 فرکانس کاری من میشه 31.372khzیعنی بیشترین فرکانسی که میشه با مگا 8 ایجاد کرد اونم به صورت 8 بیت برای ایجاد فرکانس 50khzباید چیکار کنم آیا محاسبات من درسته با اون فرکانس میشه 31khz
      بدس آورد یا کمتر میده لطفا راهنماییم کنید

      دیدگاه


        #4
        پاسخ : ایجاد موج pwm با میکرو حدود 20khz

        نوشته اصلی توسط MOGTABAKIT
        با سلام میشه کمی راهنمایی کنید اگه من کریستان 16 مگ به میکرو مگا 8 وصل کنم
        pwmfrequncy=fosc/(510*prescale)
        واگر prscaleبذارم رو عدد 1 فرکانس کاری من میشه 31.372khzیعنی بیشترین فرکانسی که میشه با مگا 8 ایجاد کرد اونم به صورت 8 بیت برای ایجاد فرکانس 50khzباید چیکار کنم آیا محاسبات من درسته با اون فرکانس میشه 31khz
        بدس آورد یا کمتر میده لطفا راهنماییم کنید
        از اونجایی که نمیشه با تایمر 8بیتی mega8 این pwm رو ایجاد کرد باید از تایمر 16 بیتی مگا8 استفاده کنید ...
        با تایمر یک باید توی این مد و این حالات کار کنید
        کد:
        // Timer/Counter 1 initialization
        // Clock source: System Clock
        // Clock value: 2000.000 kHz
        // Mode: Fast PWM top=ICR1
        // OC1A output: Non-Inv.
        // OC1B output: Discon.
        // Noise Canceler: Off
        // Input Capture on Falling Edge
        // Timer1 Overflow Interrupt: Off
        // Input Capture Interrupt: Off
        // Compare A Match Interrupt: Off
        // Compare B Match Interrupt: Off
        با فرکانس 16 مگاهرتز و تقسیم کننده 1 فرکانس تایمر میشه 16مگا ... 16مگا تقسیم بر 20000 میشه 800 و چون شمارش دیجیتال از صفر شروع میشه باید مقدار ICR1 را مساوی 799 قرار دهید (البته اگر رزولیشن برایتان خیلی مهم است با این حالت کار کنید)

        با فرکانس 16 مگاهرتز و تقسیم کننده 8 فرکانس تایمر میشه 2مگا ... 2مگا تقسیم بر 20000 میشه 100 و چون شمارش دیجیتال از صفر شروع میشه باید مقدار ICR1 را مساوی 99 قرار دهید ... مزیت این حالت این است که مقدار 0 تا 99 را به رجیستر OCR1AL میدهیم که دیگر نیازی به جداسازی مقادیر 16 بیتی به 8 بیتی نیست ... در اینجا میخواهیم با این روش کار کنیم ...
        این هم برنامه
        کد:
        /*****************************************************
        Chip type        : ATmega8
        Program type      : Application
        AVR Core Clock frequency: 16.000000 MHz
        *****************************************************/
        #include <mega8.h>
        void main(void)
        {        
          PORTB=0x00;
          DDRB=0x02;
        
          // Timer/Counter 1 initialization
          // Clock source: System Clock
          // Clock value: 2000.000 kHz
          // Mode: Fast PWM top=ICR1
          // OC1A output: Non-Inv.
          // OC1B output: Discon.
          // Noise Canceler: Off
          // Input Capture on Falling Edge
          // Timer1 Overflow Interrupt: Off
          // Input Capture Interrupt: Off
          // Compare A Match Interrupt: Off
          // Compare B Match Interrupt: Off
          TCCR1A=0x82;
          TCCR1B=0x1A;
          ICR1L=99;
          OCR1AL=50;
        
          while (1)
          {
          // Place your code here
        
          }
        }
        توجه داشته باشید که پین B1 خروجی تعریف شود ...
        راستی
        میتوانید که دو خروجی هم بگیرید ...
        سوالی بود در خدمتم
        [b]چگونه همه پایه های میکروکنترلر AVR را PWM کنیم؟
        معرفی نرم افزارEasy 7segment (برای راه اندازی آسانتر 7segment )
        معرفی نرم افزار Codewizard PWM
        با من بیشتر آشنا شوید

        دیدگاه


          #5
          پاسخ : ایجاد موج pwm با میکرو حدود 20khz

          تشکر میشه برنامشو به زبان بیسیک بنویسید آخه من از بعضی قسمت های برنامه سر در نیاوردم

          دیدگاه


            #6
            پاسخ : ایجاد موج pwm با میکرو حدود 20khz

            نوشته اصلی توسط MOGTABAKIT
            تشکر میشه برنامشو به زبان بیسیک بنویسید آخه من از بعضی قسمت های برنامه سر در نیاوردم
            کد:
            $regfile = "m8def.dat"
            $crystal = 16000000
            
              Ddrb = 2
            
              ' Timer/Counter 1 initialization
              ' Clock source: System Clock
              ' Clock value: 2000.000 kHz
              ' Mode: Fast PWM top=ICR1
              ' OC1A output: Non-Inv.
              ' OC1B output: Discon.
              ' Noise Canceler: Off
              ' Input Capture on Falling Edge
              ' Timer1 Overflow Interrupt: Off
              ' Input Capture Interrupt: Off
              ' Compare A Match Interrupt: Off
              ' Compare B Match Interrupt: Off
              Tccr1a = &H82
              Tccr1b = &H1A
              Icr1l = 99
              Ocr1al = 50
            
              Do
            
              Loop
              End
            موفق باشید
            [b]چگونه همه پایه های میکروکنترلر AVR را PWM کنیم؟
            معرفی نرم افزارEasy 7segment (برای راه اندازی آسانتر 7segment )
            معرفی نرم افزار Codewizard PWM
            با من بیشتر آشنا شوید

            دیدگاه

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