اطلاعیه

Collapse
No announcement yet.

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

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

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

    یه توضیح را هم اضافه می کنم که من می خواهم از اینتراپت تایمر به نحوی استفاده کنم که به طور مثال اگر 1000نمونه باشد هر 1000/1 ثانیه یک اینتراپت بده و داخل برنامه اینتراپت این کد را بنویسم که تنها یک نمونه را به خروجی میکرو ببره!اونوقت 1000نمونه *1/1000ثانیه=1ثانیه،یعنی در عرض 1ثانیه ،1000نمونه خوانده می شود که تولید یک موج سینوسی 1هرتز می کند و برای 2هرتز یکی درمیان نمونه ها رو می خونه و.....

    دیدگاه


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

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

      دیدگاه


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

        خیلی ممنون از پاسختون

        شما درست میگید من تنها مثال زدم.برای تولید موج سینوسی یک هرتز تا یک کیلو هرتزی حداقل نیاز به 32 نمونه و حداکثر 32000نمونه دارم(برای تولید یک هرتز).چیزی که باعث شده من به بنبست برسم اینه که چطور میشه حافظه را باتوجه به اینکه 32000نمونه می خواهم کاهش بدم؟به عبارت دیگر الان باید از یک میکرو ات مگا 64 استفاده کنم ولی میخواهم با کاهش حجم حافظه میکرو مورد استفادم ات مگا16باشه!؟

        دیدگاه


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

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

          دیدگاه


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

            سلام آقای کی نژاد همانطور که گفتید من مد تایمر را CTC گذاشتم و باتوجه به اینکه می خواهم هر 15.3میکروثانیه اینتراپت بده مقدارش را f4 قرار دادم حالا که میخوام چک کنم ببینم ،تایمر کانتر من درست کار می کند گفتم یکی از پورتامو مکمل کند ،متاسفانه در پرتئوس ورزن 7.7 هر 15.3 میکروثانیه پورتم را مکمل نمی کند؟(یا موج مربعی تشکیل می شود ولی هر15.3میکروثانیه این اتفاق نمی افتد؟؟)من سعی می کنم برنامه ام را در این پست شر کنم به نظرتون مشکل من در چیست؟
            مراحل تولید:
            با استفاده از فرمول زیر (فرمول از دیتا شیت مگا 16 گرفته شده) مقدار OCRn را محاسبه کردم:

            fOCn=1/(2*15.3 us) ,
            fclk_I/O=16 MHz ,
            N=1 ,
             OCRn=243.8
            که چون این عدد باید به صورت دیجیتال باشد آن را به مقدار 244 تقریب میزنیم که در این صورت فاصله اینتراپت به 15.3125 us تغییر می یابد ، حال اگر مقدار 244 را به مبنای 16 ببریم برابر مقدار f4 میآ‌شود.
            244 = (f4)16

            سپس در ویزارد یکی از تایمرها را مطابق شکل زیر تنظیم کردم و همانطور که در شکل دیده میآ‌شود مقدار f4 را نیز در باکس compare وارد کردم .

            و همچنین برنامه را به صورت زیر نوشتم :
            PORTB.0=!PORTB.0;

            **مشکل از اینجا هستند

            دیدگاه


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

              http://up6.iranblog.com/files2/c1squere-wave-test-timer-.rar


              من در ادرس بالا فایل مربوطه راقراردادم

              دیدگاه


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

                مقدار OCR0 را همیشه باید یک واحد کمتر قرار دهید ( 0xf3 در این مثال). همچنین فرکانس میکروکنترلر باید از طریق تنظیم صحیح فیوزبیت ها روی کریستال خارجی 16 مگاهرتز قرار داده شود. مورد آخر اینکه در مد CTC لازم نیست در روتین وقفه مجددا به OCR0 مقداردهی کنید.
                اوژن: به معنای افکننده و شکست دهنده است
                دانایی، توانایی است-Knowledge is POWER
                برای حرفه ای شدن در الکترونیک باید با آن زندگی کرد
                وضعمان بهتر می شود، اگر همه نسبت به جامعه و اطراف خود مسوول باشیم و نگوئیم به ما چه
                قوی شدن و خوب ماندن - خوبی کردن به دیگران یک لذت ماندگار است
                اگر قرار باشد نفت و منابع خام را بدهیم و چرخ بگیریم، بهتر است چرخ را از نو اختراع کنیم
                ساعت کار بدن اکثر انسان ها کمتر از 800000 ساعت است و بعد از آن از کار می افتد

                دیدگاه


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

                  خیلی سپاس گذارم از راهنماییتون ،ولی من متوجه 2مورد نشدم:
                  1-چرا باید از کریستال کوارتز 16مگاهرتز استفاده کنم؟چون میخواهم موج تولید کنم نویزپذیریش بالا نمیره؟!
                  من یک حدس هایی زدم که منبع کلاک سیستم (داخلی)1،2،4،8مگاهرتز است به همین دلیل میگید از کریستال کوارتز استفاده کنم؟!خوب اگر اینطوره من منبع کلاک را 8مگاهرتز گرفتم باز هم در پروتئوس وقتی چک می کنم باز هم درست جواب نمی ده! یعنی زمان تولید شده درست نیست.
                  2-منظور شما اینه که حتما سخت افزاری چک میشود که هر 15.3میکروثانیه اینتراپت میده؟!یعنی بوسیله پروتئوس نمیشه؟!

                  دیدگاه


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

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

                    دیدگاه


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

                      سلام،من این تایپیکو چند بار خوندم ولی هیج جا از نحوه تولید 256نمونه وهمان جدول لوک پ تیبل چیزی نگفته؟

                      دیدگاه


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

                        با سلام خدمت دوستان و مهندس کینژاد عزیز
                        کل مطالب رو خوندم دستتون درد نکنه
                        تصمیم دارم برای پروژم اینورتر رو بسازم البته تغییرات رو انجام دادم روی xmega
                        نقشه های اقای زوار از لحاظ اصول طراحی شماتیک استاندارد نیست و کاربر دچار سردرگمی میشه البته از زحماتت تشکر میکتم
                        نقشه و کد ها رو کامل میکنم و پ میکنم ایشالا بعد از 13
                        خیلی دوست دارم از تجریه های هم استقاده کنیم
                        البته من پروژم بعد از این مرحله تبدیل میشه به یه فیلتر اکتیو که اونجا به dsp احتیاج میشه که با dspic کار کردم واسه fft و بقیه موارد عالی میشه
                        اگه دوست داشتین ادامه میدیم
                        یا علی
                        گر قادر نیستی خود را بالا ببری همانند سیب باش تا با افتادنت اندیشهآ‌ای را بالا ببری

                        دیدگاه


                          پاسخ : تولید موج سینوسی با 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);   
                          }
                          سلام مهندس سال نو مبارک
                          لطف کنید بفرمایید برای تغییر اختلاف فاز از 180 درجه به 90 درجه برنامه چه تغییری باید بکنه.
                          ممنوم.
                          این مدعیان در طلبش بی خبرانند
                          آن را که خبر شد خبری باز نیامد

                          دیدگاه


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

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

                            دیدگاه


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

                              سلام و خسته نباشید
                              جناب مهندس کی نژاد اگر از برنامه تولید موج سینوسی به روش spwm برای ساخت UPS بخواهیم استفاده کنیم روش محاسبه فیلتر خروجی که مانع عبور
                              موج با فرکانس 15 کیلوهرتز شود چگونه است.

                              این مدعیان در طلبش بی خبرانند
                              آن را که خبر شد خبری باز نیامد

                              دیدگاه


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

                                سلام بر اساتید محترم
                                من یه برنامه به همین منظور نوشتم امیدوارم خوب باشه
                                https://rapidshare.com/files/959561110/sine_wave.rar
                                آنکس که بداند و بداند که بداند /، اسب شرف از گنبد گردون بجهاند
                                آنکس که بداند و نداند که بداند / ، بیدارش نمایید که بسی خفته نماند
                                آنکس که نداند و بداند که نداند / ، لنگان خرک خویش به مقصد برساند
                                آنکس که نداند و نداند که نداند / ، در جهل مرکب ابدالدهر بماند

                                دیدگاه

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