اطلاعیه

Collapse
No announcement yet.

تولید موج سینوسی با AVR

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

    پاسخ : پاسخ : تولید موج سینوسی با AVR

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

    sigpic

    دیدگاه


      پاسخ : تولید موج سینوسی با AVR

      داشتم صفحات اول تاپیک رو مطالعه میکردم که سوالاتی در باره پل igbt به ذهنم رسید
      فرض :
      فرکانس کاری pwm برابر 15000 هرتز
      خروجی سه فاز متور 50 هرتز و دامنه ماکسیموم
      توی یک سیکل کامل 300 بار خروجی در یک جفت از پل خواهیم داشت
      دد تایم کی و کجا نیاز است و اینکه چرا باید قسمت پایین و بالا هر شاخه از پل با هم 180 درجه اختلاف داشته باشند ؟
      عکس و شکل موجی از خروجی دارین ؟
      فرض pwm 40 درصد فعال و60 درصد غیر فعال
      برای اعمال به یک شاخه ایا :
      در هر ثانیه :
      300 بار (با در نظر گرفتن فرکانس 15000 برای pwm )
      39 درصد زمان igbt بالا کش روشن و 60 درصد زمان jgbt پایین روشن ؟)
      در مورد شکل موج ورودی های 6 گیت مشکل دارم
      [move][img width=133 height=100]http://bargiri.persiangig.com/aks/0.306310001356499787_taknaz_ir.gif[/img][/move]

      دیدگاه


        پاسخ : تولید موج سینوسی با AVR

        نوشته اصلی توسط طراح
        پاسخ دوم صحیح است. در واقع اگر مقادیر موجود در جدول را دارای یک بخش DC و یک بخش AC بدانیم، تنها بخش AC است که باید تضعیف شود. با توجه به اینکه 127.5 در عمل قابل دسترسی نیست و با توجه به اینکه مقادیر قرار داده شده در OCR مقدار اعشاری را نمی پذیرند، در نهایت باید از یک فرایند گرد کردن استفاده شود. تابع مورد نظر را می توان در حالت ایده آل و با صرف نظر از صحیح بودن مقادیر جدول به صورت زیر نوشت:
        Vsin=127.5+127.5.a.sin(x)

        که a ضریب تضعیف کوچکتر یا مساوی با یک است.
        با سلام و خسته نباشید به استاد گرامی جناب آقای طراح
        اینکه جدول مقادیر سینوسی رو چجوری باید تهیه کرد رو متوجه نمی شم ؟
        قاعدتا باید مقادیر اون رو طبق فرمول بالا بدست آورد !
        اگه اشتباه نکنم برای 25 هرتز باید سینوس 25 رو بگیریم ؟ خوبه حالا ضریب A رو چطور بدست بیاریم ؟ برای هر فرکانس باید یک عدد متفاوت بذاریم ؟
        بدون امضاء

        دیدگاه


          پاسخ : تولید موج سینوسی با AVR

          نوشته اصلی توسط freedom_truth
          منم پیدا نکردم ولی خب با اجازه جناب کی نژاد مختصر میگم:
          شما 360 درجه (یک سیکل کامل) رو به تعداد نمونه هایی که میخوای تقسیم میکنی.(در اینجا 256 تا)
          بعد سینوس همشونو حساب میکنی که میشه یه چیزی بین 1+ تا 1- .
          حالا در 128 ضرب میکنی و طبعا میشه بین 128+ و 128- .(نقطه تقارن صفر)
          بعد همه رو با 128 جمع میکنی بشه بین 0 تا 256. (یعنی نقطه تقارن رو از 0 به 128 منتقل میکنی)
          میتونید با کمک اکسل اتوماتیک این کارها رو انجام بدید.
          در مورد سوال دوم تون هم صفحه 2 و 3 و 6 همین تاپیک رو نگاه کنید.
          همچنین صفحه 2 این تاپیک http://www.eca.ir/forum2/index.php?topic=47979.15
          با سلام
          توی این پست هم به ضریب A اشاره ای نشده بود ؟
          میشه بدست آوردن این مقادیر رو بیشتر توضییح بدین ؟
          بدون امضاء

          دیدگاه


            پاسخ : تولید موج سینوسی با AVR

            سلام
            صورت کلی برنامه به این صورت است که یه سری نقاط داریم و قراره این نقاط در خروجی نشان داده بشه( به صورت Sin)، مشکل من در پورت خروجی است.
            در پورت خروجی عددی که وجود دارد یک عدد اعشاری است؟
            من برنامه تولید یک موج sin دارم که در پورت خروجی اعداد تنها صفر و یک هستند ولی بعد از عبور از فیلتر به صورت شکل sin دیده میشود
            دنیا آنقدر وسیع هست که برای همه مخلوقات جایی باشد پس به جای آنکه جای کسی را بگیریم تلاش کنیم جای واقعی خود را بیابیم

            دیدگاه


              پاسخ : تولید موج سینوسی با AVR

              نوشته اصلی توسط طراح
              برای اینکه این مسئله را بهتر متوجه شوید، یک بررسی انجام دهید که اگر مقدار قرائت شده از جدول سینوسی در فرکانس 50 هرتز در محدوده 255-0 باشد، در فرکانس 25 هرتز که دامنه باید نصف شود، این محدوده باید چقدر باشد.
              با سلام
              استاد گرامی جناب طراح با تشکر از شما به خاطر زحماتی که انجام می دهید
              من در قسمت لوکاپ تیبل مقدار سینوسی کمی دچار مشکل هستم و اگر اشتباه نکرده باشم آخرین سوالاتی که داشتم درباری همین موضوع بوده است
              و با توجه به شناختی که از شما بدست آورده ام شما قصد آموزش اصولی را در این انجمن دارید که بسیار پسندیده است
              ولی خوبه من در این مدت درگیر همین قسمت شده ام وبا توجه مشغله های شغلی و شخصی به صورت پراکنده توانسته ام وقت بگذارم که نتیجه مطلوبی نگرفتم
              در صورت امکان همین قسمت را توضییحی مختصر بفرمایید ( مثالی که برای فرکانس 50 هرتز و 25 هرتز زدید )
              بدون امضاء

              دیدگاه


                پاسخ : تولید موج سینوسی با AVR

                در این تاپیک و تاپیک موجود در انجمن پروژه های تکمیل شده AVR به انواع سوالات درباره تولید سینوسی و مسائل مرتبط با آن پاسخ داده شده و به نظر نمی رسد در صورت مطالعه دقیق این تاپیک ها نکته چندان مبهمی وجود داشته باشد. اما در مورد سوال شما، چنانچه یک سینوسی با محور تقارن فرضی 127.5 و دامنه 127.5 را در نظر بگیریم، تغییرات آن در محدوده 255-0 خواهد بود. حال اگر دامنه سینوسی نصف شود، محدوده تغییرات بین 63.75-127.5 و 63.75+127.5 و با فرض گرد کردن اعداد در محدوده 64 تا 191 خواهد بود (63.75 نصف دامنه حداکثر برابر با 127.5/2 است).
                اوژن: به معنای افکننده و شکست دهنده است
                دانایی، توانایی است-Knowledge is POWER
                برای حرفه ای شدن در الکترونیک باید با آن زندگی کرد
                وضعمان بهتر می شود، اگر همه نسبت به جامعه و اطراف خود مسوول باشیم و نگوئیم به ما چه
                قوی شدن و خوب ماندن - خوبی کردن به دیگران یک لذت ماندگار است
                اگر قرار باشد نفت و منابع خام را بدهیم و چرخ بگیریم، بهتر است چرخ را از نو اختراع کنیم
                ساعت کار بدن اکثر انسان ها کمتر از 800000 ساعت است و بعد از آن از کار می افتد

                دیدگاه


                  پاسخ : تولید موج سینوسی با AVR

                  نوشته اصلی توسط طراح
                  برنامه زیر دو موج PWM روی خروجی های OC1A و OC1B در mega8 تولید می کند که با فیلتر کردن آن می توان موج های سینوسی با اختلاف فاز 180 درجه را مشاهده کرد. فرکانس سینوسی در محدوده 488.2-1.9 هرتز تغییر می کند که برای تغییر آن باید یک ولتاژ متغیر در محدوده 0 تا AVcc را به ورودی ADC0 اعمال کرد. این کار می تواند از طریق یک پتاسیومتر انجام شود که دو سر کناری آن به زمین و AVcc و سر وسط آن به ADC0 متصل می شود و با تغییر وضعیت پتانسیومتر، فرکانس خروجی تغییر خواهد کرد. فرکانس کلاک mega8 باید در 8MHz تنظیم شود که این کار از طریق تنظیم مناسب فیوزبیت ها انجام می گیرد.همچنین فرکانس حامل PWM برابر 15.6 کیلوهرتز می باشد.

                  کد:
                  #include <mega8.h>
                  volatile unsigned char Delay;
                  flash unsigned char sine[256]={
                  0x80,0x83,0x86,0x89,0x8c,0x8f,0x92,0x95,0x98,0x9c,0x9f,0xa2,0xa5,0xa8,0xab,0xae,
                  0xb0,0xb3,0xb6,0xb9,0xbc,0xbf,0xc1,0xc4,0xc7,0xc9,0xcc,0xce,0xd1,0xd3,0xd5,0xd8,
                  0xda,0xdc,0xde,0xe0,0xe2,0xe4,0xe6,0xe8,0xea,0xec,0xed,0xef,0xf0,0xf2,0xf3,0xf5,
                  0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,0xfc,0xfc,0xfd,0xfe,0xfe,0xff,0xff,0xff,0xff,0xff,
                  0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfe,0xfd,0xfc,0xfc,0xfb,0xfa,0xf9,0xf8,0xf7,
                  0xf6,0xf5,0xf3,0xf2,0xf0,0xef,0xed,0xec,0xea,0xe8,0xe6,0xe4,0xe2,0xe0,0xde,0xdc,
                  0xda,0xd8,0xd5,0xd3,0xd1,0xce,0xcc,0xc9,0xc7,0xc4,0xc1,0xbf,0xbc,0xb9,0xb6,0xb3,
                  0xb0,0xae,0xab,0xa8,0xa5,0xa2,0x9f,0x9c,0x98,0x95,0x92,0x8f,0x8c,0x89,0x86,0x83,
                  0x80,0x7c,0x79,0x76,0x73,0x70,0x6d,0x6a,0x67,0x63,0x60,0x5d,0x5a,0x57,0x54,0x51,
                  0x4f,0x4c,0x49,0x46,0x43,0x40,0x3e,0x3b,0x38,0x36,0x33,0x31,0x2e,0x2c,0x2a,0x27,
                  0x25,0x23,0x21,0x1f,0x1d,0x1b,0x19,0x17,0x15,0x13,0x12,0x10,0x0f,0x0d,0x0c,0x0a,
                  0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x03,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,
                  0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x05,0x06,0x07,0x08,
                  0x09,0x0a,0x0c,0x0d,0x0f,0x10,0x12,0x13,0x15,0x17,0x19,0x1b,0x1d,0x1f,0x21,0x23,
                  0x25,0x27,0x2a,0x2c,0x2e,0x31,0x33,0x36,0x38,0x3b,0x3e,0x40,0x43,0x46,0x49,0x4c,
                  0x4f,0x51,0x54,0x57,0x5a,0x5d,0x60,0x63,0x67,0x6a,0x6d,0x70,0x73,0x76,0x79,0x7c};
                  interrupt [TIM2_COMP] void timer2_comp_isr(void)
                  {
                   static unsigned char index=0;
                   if(!--Delay)
                   {
                   Delay=(ADCH?ADCH:1); 
                   OCR1A=sine[++index]; 
                   OCR1B=sine[index];
                   } 
                  }
                  
                  void main(void)
                  {
                   DDRB=0x06; 
                   ADMUX=0x60;
                   ADCSRA=0xE6;
                   while(!ADCSRA.4); 
                   Delay=(ADCH?ADCH:1);
                   OCR1A=sine[0];
                   OCR1B=sine[0];
                   TCCR1A=0xB1;
                   TCCR1B=0x01;
                   TCCR2=0x09;
                   OCR2=63;
                   TIMSK=0x80;
                   #asm("sei")
                   while (1);   
                  }
                  با سلام
                  دربرنامه فوق چرا در OCR1A و OCR1B سینوس صفر رو گداشتن ؟

                  ببخشید متوجه شدم برای بار اول این رجیستر ها رو صفر کرده
                  و بعد هر بار که اینتراپت میاد یکی به ایندکس اضافه می کنه و میذاره تو رجیسترها
                  بدون امضاء

                  دیدگاه


                    پاسخ : تولید موج سینوسی با AVR

                    نوشته اصلی توسط طراح
                    به این صورت بنویسید:

                    OCR1B=sine[(unsigned char)(index+84U)];
                    با سلام
                    شرمنده تعداد سوالات من خیلی زیاد شد !
                    این u که در رابطه بالا استفاده شده به چه معناست ؟
                    بدون امضاء

                    دیدگاه


                      پاسخ : تولید موج سینوسی با AVR

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

                      دیدگاه


                        پاسخ : تولید موج سینوسی با AVR

                        نوشته اصلی توسط طراح
                        5- در mega64 سخت افزار لازم برای اضافه کردن Dead time مانند XMEGA وجود ندارد و البته روش هایی برای انجام این کار وجود دارد که باید از هردو تایمرهای 1 و 3 استفاده شود، اما با توجه به وجود میکروکنترلری مانند XMEGA صرف وقت برای این کار در مورد AVR چندان توجیه پذیر نیست و بهتر است از گیت NOT برای تولید 3خروجی متمم و قابلیت اضافه کردن Dead time در IR2130 استفاده شود.
                        با تشکر از زحمات شما جناب مهندس کی نژاد

                        1- ممنون میشم در مورد تولید dead time با مگا 64 راهنمایی کنید، آیا با اختلاف مقدار OCR می تونیم 6 تا پالس با dead time رو با mega64 به دست بیاریم؟؟
                        2- و برای این منظور به 8کانال pwm نیاز هست؟ 6 تا برای خروجی و 2 تا هم برای خواندن جدول سینوسی؟؟
                        3- آیا با mega48 میتونم 6 تا پالس اینورتر با dead time را بدست بیاریم و اگر نه لطفاً یه میکرو که dip بوده و این قابلیت رو داشته باشه معرفی کنین.
                        4- ممنون میشم ساده ترین و ارزون ترین میکروی xmega که این قابلیت رو داشته باشه رو هم معرفی کنین

                        ببخشید زیاد شد
                        با تشکر
                        ادیسون : من هفتصد بار اشتباه نکرده ام ، من یکبار هم اشتباه نکرده ام من زمانی موفق شدم که ،هفتصد راهی را که موفقیت آمیز نبود اصلاح کردم.
                        Gmail: Jsoltanii@gmail.com

                        دیدگاه


                          پاسخ : تولید موج سینوسی با AVR

                          نوشته اصلی توسط حامد رحیمی
                          داشتم صفحات اول تاپیک رو مطالعه میکردم که سوالاتی در باره پل igbt به ذهنم رسید
                          فرض :
                          فرکانس کاری pwm برابر 15000 هرتز
                          خروجی سه فاز متور 50 هرتز و دامنه ماکسیموم
                          توی یک سیکل کامل 300 بار خروجی در یک جفت از پل خواهیم داشت
                          دد تایم کی و کجا نیاز است و اینکه چرا باید قسمت پایین و بالا هر شاخه از پل با هم 180 درجه اختلاف داشته باشند ؟
                          عکس و شکل موجی از خروجی دارین ؟
                          فرض pwm 40 درصد فعال و60 درصد غیر فعال
                          برای اعمال به یک شاخه ایا :
                          در هر ثانیه :
                          300 بار (با در نظر گرفتن فرکانس 15000 برای pwm )
                          39 درصد زمان igbt بالا کش روشن و 60 درصد زمان jgbt پایین روشن ؟)
                          در مورد شکل موج ورودی های 6 گیت مشکل دارم
                          خوب توی یه اینورتر 3 فاز شما 3 تا ساق متناظر با هر فاز دارین و در هر فاز دو سوییچ هست، سوییچ بالایی برای اتصال ولتاژ DC به خروجی و سوییچ پایینی برای اتصال زمین به خروجی.
                          دلیل اختلاف 180 درجه: در صورتی که دو سوییچ با هم روشن بشن به بیانی ساده ولتاژ DC به زمین وصل شده و جریان زیادی از سوییچ ها گذشته و سوییچ ها می سوزند. پس دو سوییچ نباید هیچ وقت با هم روشن بشن بنابراین ذو سیگنال سوییچ بالا و پایین not یکدیگرند.
                          دلیل dead time: سوییچ های کار برده شده در اینورتر معمولاً از نوع فت و igbt هست، که به دلیل وجود خازن در مدار المان، سوییچ به صورت آنی قطع و وصل نشده(شارژ و دشارژ خازن) و بین روشن شدن یک سوییچ و خاموش شدن سوییچ دیگر اشتراکی به وجود می آید، پس باید با بکارگیری dead time تاخیری بین دو سوییچ بوجود آورد

                          راهنما:
                          http://www.ijetae.com/files/Volume4Issue1/IJETAE_0114_67.pdf
                          ادیسون : من هفتصد بار اشتباه نکرده ام ، من یکبار هم اشتباه نکرده ام من زمانی موفق شدم که ،هفتصد راهی را که موفقیت آمیز نبود اصلاح کردم.
                          Gmail: Jsoltanii@gmail.com

                          دیدگاه


                            پاسخ : تولید موج سینوسی با AVR

                            سلام دوستان
                            من برنامه تولید 3 شکل موج زیر با استفاده از PWM رو میخوام میشه کمکم کنید؟؟؟ :cry: :cry:
                            شکل موج سینوسی با فرکانس 400 هرتز
                            شکل موج دندانهارهای با فرکانس 50 هرتز
                            شکل موج مثلثی با فرکانس 50 هرتز

                            دیدگاه


                              پاسخ : تولید موج سینوسی با AVR

                              نوشته اصلی توسط ZAHR4
                              سلام دوستان
                              من برنامه تولید 3 شکل موج زیر با استفاده از PWM رو میخوام میشه کمکم کنید؟؟؟ :cry: :cry:
                              شکل موج سینوسی با فرکانس 400 هرتز
                              شکل موج دندانهارهای با فرکانس 50 هرتز
                              شکل موج مثلثی با فرکانس 50 هرتز
                              برای تولید موج سینوسی با فرکانس 400 هرتز
                              کد:
                              /* Written by : OZHAN KD - www.KnowledgePlus.ir
                              
                                50Hz sinusoidal PWM output on OCR1A
                                Carrier frequency = 15.68 KHz
                                Sine frequency = 400Hz
                                PWM resolution = 8bit
                                mega32 oscillator frequency = 8MHz
                              */
                              
                              #include <mega32.h>
                              
                              flash unsigned char sine[256]={
                              0x80,0x83,0x86,0x89,0x8c,0x8f,0x92,0x95,0x98,0x9c,0x9f,0xa2,0xa5,0xa8,0xab,0xae,
                              0xb0,0xb3,0xb6,0xb9,0xbc,0xbf,0xc1,0xc4,0xc7,0xc9,0xcc,0xce,0xd1,0xd3,0xd5,0xd8,
                              0xda,0xdc,0xde,0xe0,0xe2,0xe4,0xe6,0xe8,0xea,0xec,0xed,0xef,0xf0,0xf2,0xf3,0xf5,
                              0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,0xfc,0xfc,0xfd,0xfe,0xfe,0xff,0xff,0xff,0xff,0xff,
                              0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfe,0xfd,0xfc,0xfc,0xfb,0xfa,0xf9,0xf8,0xf7,
                              0xf6,0xf5,0xf3,0xf2,0xf0,0xef,0xed,0xec,0xea,0xe8,0xe6,0xe4,0xe2,0xe0,0xde,0xdc,
                              0xda,0xd8,0xd5,0xd3,0xd1,0xce,0xcc,0xc9,0xc7,0xc4,0xc1,0xbf,0xbc,0xb9,0xb6,0xb3,
                              0xb0,0xae,0xab,0xa8,0xa5,0xa2,0x9f,0x9c,0x98,0x95,0x92,0x8f,0x8c,0x89,0x86,0x83,
                              0x80,0x7c,0x79,0x76,0x73,0x70,0x6d,0x6a,0x67,0x63,0x60,0x5d,0x5a,0x57,0x54,0x51,
                              0x4f,0x4c,0x49,0x46,0x43,0x40,0x3e,0x3b,0x38,0x36,0x33,0x31,0x2e,0x2c,0x2a,0x27,
                              0x25,0x23,0x21,0x1f,0x1d,0x1b,0x19,0x17,0x15,0x13,0x12,0x10,0x0f,0x0d,0x0c,0x0a,
                              0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x03,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,
                              0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x05,0x06,0x07,0x08,
                              0x09,0x0a,0x0c,0x0d,0x0f,0x10,0x12,0x13,0x15,0x17,0x19,0x1b,0x1d,0x1f,0x21,0x23,
                              0x25,0x27,0x2a,0x2c,0x2e,0x31,0x33,0x36,0x38,0x3b,0x3e,0x40,0x43,0x46,0x49,0x4c,
                              0x4f,0x51,0x54,0x57,0x5a,0x5d,0x60,0x63,0x67,0x6a,0x6d,0x70,0x73,0x76,0x79,0x7c};
                              
                              interrupt [TIM0_COMP] void timer0_compare_isr(void)
                              {
                               OCR1A=sine[index++];
                              }
                              
                              void main(void)
                              {
                               DDRD=1<<PORTD5;
                               OCR1A=sine[0];
                               TCCR1A=(1<<COM1A1)|(1<<WGM10);
                               TCCR1B=1<<CS10;// 8bit Phase correct PWM
                               OCR1B=78;
                              // TCCR0=(1<<WGM01)|(1<<CS00); // CTC
                               TIMSK=1<<OCIE1;  
                               // فعال کردن وقفه کلی با ست کردن بیت هفتم رجیستر sreg
                               #asm("sei")
                               while (1);
                              }
                              ادیسون : من هفتصد بار اشتباه نکرده ام ، من یکبار هم اشتباه نکرده ام من زمانی موفق شدم که ،هفتصد راهی را که موفقیت آمیز نبود اصلاح کردم.
                              Gmail: Jsoltanii@gmail.com

                              دیدگاه


                                پاسخ : تولید موج سینوسی با AVR

                                نوشته اصلی توسط جواد سلطانی
                                برای تولید موج سینوسی با فرکانس 400 هرتز
                                خیلی ممنون لطف کردید

                                دیدگاه

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