اطلاعیه

Collapse
No announcement yet.

تولید PWM در XMEGA

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

    تولید PWM در XMEGA

    سلام، خسته نباشید. من قصد دارم با XMEGA موج PWM تولید کنم. من این کارو سعی کردم با تایمر 0 انجام بدم اما نتوستم و فقط تونستم از طریق تولید فرکانس خروجی COMPARE رو تاگل کنم که کدش رو هم اینجا میزارم:

    کد:
    PORTC.DIR=0x01;
    
    	// Timer/Counter TCC0 initialization
    	// Clock source: Peripheral Clock/2
    	TCC0.CTRLA= TC_CLKSEL_DIV2_gc;
    	// Mode: Frequency Waveform Gen., Overflow Int./Event on TOP
    	// Compare/Capture on channel A: On
    	TCC0.CTRLB=TC0_CCAEN_bm |TC_WGMODE_FRQ_gc;
    	// Controlls the period in Frequency Waveform Generation mode
    	TCC0.CCA=0x44FF;

    *_ به صورت پیش فرض از اسلاتور 2 مگ داخلی برای این برنامه استفاده شده است.
    *_ خروجی رو میتونید از رو پین شماره 15 چیپ ATxmega128A1 مشاهده بفرمایید.

    لطفا بفرمایید چطور میتونم PWM تولید کنم و اینکه خروجی PWM از کدوم پین هستش.
    {امضاء خلاف قوانین}

    #2
    پاسخ : PWM در XMEGA

    برای تعیین اینکه کدام پین دارای چه وظیفه ای است باید به فصل 29 از Datasheet مربوط به سری A1 مراجعه کنید. برای تولید PWM هم به غیر از مقداردهی مستقیم به رجیسترها بهتر است از کتابخانه TC_driver.c که در AVR1306 وجود دارد، استفاده کنید. برای مقدار دهی مستقیم به رجیسترها باید در ابتدا مشخص کنید که در چه مدی قصد تولید PWM را دارید و فرکانس مورد نظر شما چقدر است و مواردی از این قبیل. ضمنا سعی کنید کدهایی که در انجمن قرار می دهید بصورت کامل باشد تا دیگران بتوانند از آن استفاده کنند.
    اوژن: به معنای افکننده و شکست دهنده است
    دانایی، توانایی است-Knowledge is POWER
    برای حرفه ای شدن در الکترونیک باید با آن زندگی کرد
    وضعمان بهتر می شود، اگر همه نسبت به جامعه و اطراف خود مسوول باشیم و نگوئیم به ما چه
    قوی شدن و خوب ماندن - خوبی کردن به دیگران یک لذت ماندگار است
    اگر قرار باشد نفت و منابع خام را بدهیم و چرخ بگیریم، بهتر است چرخ را از نو اختراع کنیم
    ساعت کار بدن اکثر انسان ها کمتر از 800000 ساعت است و بعد از آن از کار می افتد

    دیدگاه


      #3
      پاسخ : تولید PWM در XMEGA

      sسلام، من متوجه نشدم که منظور شما از فصل 29 دیتاشیت چیه، یکی از اونا دیتا مانوئل هستش و دیگری هم اورویو هستش. میشه شما یک مثال بدون استفاده از کتابخونه بزارید.
      {امضاء خلاف قوانین}

      دیدگاه


        #4
        پاسخ : تولید PWM در XMEGA

        نوشته اصلی توسط black-scorpion
        sسلام، من متوجه نشدم که منظور شما از فصل 29 دیتاشیت چیه
        منظور فایل زیر است:

        http://www.atmel.com/dyn/resources/p...ts/doc8067.pdf

        نوشته اصلی توسط black-scorpion
        میشه شما یک مثال بدون استفاده از کتابخونه بزارید.
        برنامه زیر روی خروجی PC0 یک موج PWM با فرکانس 10 کیلوهرتز و Duty cycle حدود 50 درصد تولید می کند.

        کد:
        #include<ioavr.h>
        void main()
        { 
         
         PORTC_DIRSET=PIN0_bm;
         TCC0_PER=199;
         TCC0_CTRLB=TC0_CCAEN_bm|TC_WGMODE_SS_gc;
         TCC0_CCABUF=100;
         TCC0_CTRLA=TC_CLKSEL_DIV1_gc;
         while(1);
        }
        اوژن: به معنای افکننده و شکست دهنده است
        دانایی، توانایی است-Knowledge is POWER
        برای حرفه ای شدن در الکترونیک باید با آن زندگی کرد
        وضعمان بهتر می شود، اگر همه نسبت به جامعه و اطراف خود مسوول باشیم و نگوئیم به ما چه
        قوی شدن و خوب ماندن - خوبی کردن به دیگران یک لذت ماندگار است
        اگر قرار باشد نفت و منابع خام را بدهیم و چرخ بگیریم، بهتر است چرخ را از نو اختراع کنیم
        ساعت کار بدن اکثر انسان ها کمتر از 800000 ساعت است و بعد از آن از کار می افتد

        دیدگاه


          #5
          پاسخ : تولید PWM در XMEGA

          اگر تایمر TCE0 در حالت PWM بصورت Dual Slope PWM راه اندازی کنیم وبیت های 0و1 رجیستر INTCTRLA را 1 کنیم آیا وقفه ای ایجاد خواهد شد تا در بردار وقفه مربوطه بتوان کدی اجرا کرد ؟
          یا اینکه این وقفه فقط مربوط به مد تایمر می باشدو فقط می توان از وقفه إ¾إ¾CCX استفاده کرد؟

          دیدگاه


            #6
            پاسخ : تولید PWM در XMEGA

            Flag مربوط به overflow/underflow در کلیه مدها عمل می کند و می توان وقفه آن را فعال کرد.
            اوژن: به معنای افکننده و شکست دهنده است
            دانایی، توانایی است-Knowledge is POWER
            برای حرفه ای شدن در الکترونیک باید با آن زندگی کرد
            وضعمان بهتر می شود، اگر همه نسبت به جامعه و اطراف خود مسوول باشیم و نگوئیم به ما چه
            قوی شدن و خوب ماندن - خوبی کردن به دیگران یک لذت ماندگار است
            اگر قرار باشد نفت و منابع خام را بدهیم و چرخ بگیریم، بهتر است چرخ را از نو اختراع کنیم
            ساعت کار بدن اکثر انسان ها کمتر از 800000 ساعت است و بعد از آن از کار می افتد

            دیدگاه


              #7
              تولید pwm روی پایه های مختلف xmega

              با سلام
              بنده با کمک از برنامه های استاد کی نژاد یک برنامه تولید pwm روی پین 5 از پورت C نوشتم و کار میکنه . میخواستم بدونم چه جوری این خروجی رو روی پین های دیگه داشته باشم مثل PORTE.5 اما نمیدونم چه جوری؟ manual رو خوندم نوشته بود که هر پین OCx رو متناظر با رجیستر CCExEN در نظر میگیریم .
              هر دو پین مورد نظر یعنی PORTC.5 و PORTE.5 هر دو OC1B هستند . پس طبق کد زیر از TCC1 و از کانال B استفاده شده . اما تغییرات لازم برای اینکه شکل موج روی PORTE.5 تولید بشه رو نمیدونم . ممکنه کمکم کنید و یک توضیح کلی هم در مورد فعال کردن PWM روی پایه های دیگه رو هم بفرمایید .
              ممنون

              کد:
              void main()
              { 
               
              
               unsigned char PWM_value=0;
               
               
               
               PORT_SetPinsAsOutput( &PORTC, 0xFF );
               PORT_SetPinAsOutput(&PORTE,PIN5_bp);
               TC_SetPeriod(&TCC1,254); // 254 is due to XMEGA hardware bug!!
               TC1_ConfigWGM(&TCC1,TC_WGMODE_SS_gc);
               
               
               __enable_interrupt();
               
               PWM_value=100;
               TC1_EnableCCChannels(&TCC1,TC1_CCBEN_bm);
               TC1_ConfigClockSource(&TCC1,TC_CLKSEL_DIV1_gc);
               while(1)
               {  
                
                 TC_SetCompareB(&TCC1,PWM_value);
               }
               
               
              }
              "در عجبم از مردمي که خود زير شلاق ظلم و ستم زندگي مي کنند و بر حسيني مي گريند که آزادنه زيست" شريعتي
              در جهان روشنايي هايي وجوددارد كه در عميق ترين ظلمات نهانند.

              دیدگاه


                #8
                پاسخ : تولید pwm روی پایه های مختلف xmega

                با استفاده از برد آموزشی و یه خورده مطالعه فهمیدم که چه ارتباطی بین تایمرها و کانال های CC با پورت های متناظر و خروجی های OCx وجود داره . لیست کامل اونها رو تو یه ورق نوشتم و ازش عکس گرفتم . امیدوارم به درد دوستان بخوره .
                http://s5.picofile.com/file/8103314618/PWM_Pins.jpg

                امیدوارم تو این تاپیک مطالب راجع به pwm و HiRes بحث بشه . الان من میخواستم از این pwm تولید شده برای کنترل دور یک موتور DC استفاده کنم اما نمیدونم بدون HiRes میتونم کنترل کامل روی چرخش موتور داشته باشم یا خیر . اگه دوستان ، نظر خاصی دارند ممنون میشم .

                ممنون
                "در عجبم از مردمي که خود زير شلاق ظلم و ستم زندگي مي کنند و بر حسيني مي گريند که آزادنه زيست" شريعتي
                در جهان روشنايي هايي وجوددارد كه در عميق ترين ظلمات نهانند.

                دیدگاه


                  #9
                  پاسخ : تولید PWM در XMEGA

                  برای PE5 باید از TCE1 استفاده کنید و شبیه به تنظیمات TCC1 را برای آن تایمر و پورت انجام دهید. در مورد HiRes هم برای بالا بردن فرکانس کلاک تولید کننده PWM مورد استفاده قرار می گیرد و در جزئیات سوال شما، لزوم استفاده از آن تا حدی مبهم است.
                  اوژن: به معنای افکننده و شکست دهنده است
                  دانایی، توانایی است-Knowledge is POWER
                  برای حرفه ای شدن در الکترونیک باید با آن زندگی کرد
                  وضعمان بهتر می شود، اگر همه نسبت به جامعه و اطراف خود مسوول باشیم و نگوئیم به ما چه
                  قوی شدن و خوب ماندن - خوبی کردن به دیگران یک لذت ماندگار است
                  اگر قرار باشد نفت و منابع خام را بدهیم و چرخ بگیریم، بهتر است چرخ را از نو اختراع کنیم
                  ساعت کار بدن اکثر انسان ها کمتر از 800000 ساعت است و بعد از آن از کار می افتد

                  دیدگاه


                    #10
                    پاسخ : تولید PWM در XMEGA

                    در مورد HiRes هم برای بالا بردن فرکانس کلاک تولید کننده PWM مورد استفاده قرار می گیرد
                    با سلام . من میخواستم دور یک موتور DC کوچک رو کنترل کنم . به نظر شما از HiRes استفاده کنم بهتره ؟ الان فرکانس pwm تولید شده حدود 10 کیلو هستش . سرعت موتور کم و زیاد میشه . به نظر شما کار کردن در فرکانس بالاتر چرخش رو بهتر میکنه ؟ ممکنه کاربرد استفاده از HiRes رو در کنترل موتور ها بفرمایید .

                    ممنون
                    "در عجبم از مردمي که خود زير شلاق ظلم و ستم زندگي مي کنند و بر حسيني مي گريند که آزادنه زيست" شريعتي
                    در جهان روشنايي هايي وجوددارد كه در عميق ترين ظلمات نهانند.

                    دیدگاه


                      #11
                      پاسخ : تولید PWM در XMEGA

                      با سلام . من از کد زیر استفاده میکنم تا کلاک میکرو رو با استفاده از یک کریستال 16 مگاهرتز به 32 مگاهرتز برسونم . چطوری میتونم بفهمم که میکرو داره تو این سرعت کار میکنه؟
                      ممنون از راهنماییتون

                      کد:
                        OSC_XOSCCTRL =OSC_FRQRANGE_12TO16_gc|OSC_XOSCSEL_XTAL_16KCLK_gc;
                        OSC_PLLCTRL =OSC_PLLSRC_XOSC_gc|2;
                        OSC_CTRL |=OSC_XOSCEN_bm;
                        while(!(OSC.STATUS & OSC_XOSCRDY_bm));
                        OSC_CTRL |=OSC_PLLEN_bm;
                        while(!(OSC.STATUS & OSC_PLLRDY_bm));
                        CCP=0xd8;
                        CLK.CTRL=CLK_SCLKSEL_PLL_gc;
                      "در عجبم از مردمي که خود زير شلاق ظلم و ستم زندگي مي کنند و بر حسيني مي گريند که آزادنه زيست" شريعتي
                      در جهان روشنايي هايي وجوددارد كه در عميق ترين ظلمات نهانند.

                      دیدگاه


                        #12
                        پاسخ : تولید PWM در XMEGA

                        نوشته اصلی توسط tictactoe
                        با سلام . من میخواستم دور یک موتور DC کوچک رو کنترل کنم . به نظر شما از HiRes استفاده کنم بهتره ؟ الان فرکانس pwm تولید شده حدود 10 کیلو هستش . سرعت موتور کم و زیاد میشه . به نظر شما کار کردن در فرکانس بالاتر چرخش رو بهتر میکنه ؟ ممکنه کاربرد استفاده از HiRes رو در کنترل موتور ها بفرمایید .
                        کاربرد HiRes در شرایطی است که همزمان با Resolution بالا برای PWM، فرکانس حامل آن هم بالا باشد. به عنوان مثال اگر حداکثر مقدار تایمر 0xffff در نظر گرفته شود (Resolution در وضعیت 16 بیت) در این شرایط حتی با کلاک 32 مگاهرتز برای تایمر هم فرکانس PWM حدود 488 هرتز خواهد شد که برای کابردهای کنترل دور موتور عدد پائینی محسوب می شود. اما با استفاده از قابلیت HiRes-Plus فرکانس کلی تایمر تا 256 مگاهرتز قابل افزایش است که با حفظ همان دقت برای Resolution، فرکانس حامل حدود 3906 هرتز خواهد شد که می تواند در بسیاری کاربردها عدد قابل قبولی باشد.

                        نوشته اصلی توسط tictactoe
                        چطوری میتونم بفهمم که میکرو داره تو این سرعت کار میکنه؟
                        روش های مختلفی ممکن است که یک روش این است که با استفاده از رجیستر CLKEVOUT، کلاک را روی یکی از پین های مجاز ظاهر کنید و با اسیلوسکوپ آن را مشاهده کنید.
                        اوژن: به معنای افکننده و شکست دهنده است
                        دانایی، توانایی است-Knowledge is POWER
                        برای حرفه ای شدن در الکترونیک باید با آن زندگی کرد
                        وضعمان بهتر می شود، اگر همه نسبت به جامعه و اطراف خود مسوول باشیم و نگوئیم به ما چه
                        قوی شدن و خوب ماندن - خوبی کردن به دیگران یک لذت ماندگار است
                        اگر قرار باشد نفت و منابع خام را بدهیم و چرخ بگیریم، بهتر است چرخ را از نو اختراع کنیم
                        ساعت کار بدن اکثر انسان ها کمتر از 800000 ساعت است و بعد از آن از کار می افتد

                        دیدگاه


                          #13
                          پاسخ : تولید PWM در XMEGA

                          نوشته اصلی توسط طراح
                          Flag مربوط به overflow/underflow در کلیه مدها عمل می کند و می توان وقفه آن را فعال کرد.
                          با سلام
                          در صورتی که تایمر/کانتری در مود single slope pwm قرار داده شود و وقفه مربوط compare match آن فعال شده باشد, آیا امکان فعالسازی وقفه overflow/underflow وجود دارد؟ و در صورت مثبت بودن پاسخ چه زمان وقفه مذکور رخ میدهد؟
                          با تشکر
                          مشخصات من در لینک زیر
                          http://www.eca.ir/forum2/index.php?topic=1721.msg698645#msg698645

                          www.********

                          دیدگاه


                            #14
                            پاسخ : تولید PWM در XMEGA

                            پاسخ مثبت است و در حرکت از PER به BOTTOM تقاضای وقفه ایجاد می شود.
                            اوژن: به معنای افکننده و شکست دهنده است
                            دانایی، توانایی است-Knowledge is POWER
                            برای حرفه ای شدن در الکترونیک باید با آن زندگی کرد
                            وضعمان بهتر می شود، اگر همه نسبت به جامعه و اطراف خود مسوول باشیم و نگوئیم به ما چه
                            قوی شدن و خوب ماندن - خوبی کردن به دیگران یک لذت ماندگار است
                            اگر قرار باشد نفت و منابع خام را بدهیم و چرخ بگیریم، بهتر است چرخ را از نو اختراع کنیم
                            ساعت کار بدن اکثر انسان ها کمتر از 800000 ساعت است و بعد از آن از کار می افتد

                            دیدگاه


                              #15
                              پاسخ : تولید PWM در XMEGA

                              نوشته اصلی توسط طراح
                              منظور فایل زیر است:

                              http://www.atmel.com/dyn/resources/p...ts/doc8067.pdf

                              برنامه زیر روی خروجی PC0 یک موج PWM با فرکانس 10 کیلوهرتز و Duty cycle حدود 50 درصد تولید می کند.

                              کد:
                              #include<ioavr.h>
                              void main()
                              { 
                               
                               PORTC_DIRSET=PIN0_bm;
                               TCC0_PER=199;
                               TCC0_CTRLB=TC0_CCAEN_bm|TC_WGMODE_SS_gc;
                               TCC0_CCABUF=100;
                               TCC0_CTRLA=TC_CLKSEL_DIV1_gc;
                               while(1);
                              }
                              با عرض ادب و احترام خدمت استاد عزیز
                              جناب کی نژاد اگر بخوام فرکانس رو بیشتر کنم باید چه تغییری تو برنامه بدم؟ برای راه اندازه یک استپر باید از فرکانس 2MHz استفاده کنم.
                              با سپاس...

                              دیدگاه

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