اطلاعیه

Collapse
No announcement yet.

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

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

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

    سلام می خواستم ببینم چجوری میشه یک موج سینوسی با AVR ساخت؟

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



    کد:
    [left]
    
    
    /*****************************************************
    Project : Generating sine waveform
    Author : Reza Sepas Yar            
    Email  : info@avr.ir              
    Chip type      : ATmega16
    Clock frequency   : 4.000000 MHz
    *****************************************************/
    
    #include <mega16.h>
    
    flash char sinewave[]={
    0x01,0x01,0x01,0x01,0x01,0x01,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,
    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,0x01,0x01,0x01,0x01,0x01
    };
    
    char i=0;
    
    interrupt [TIM1_COMPA] void timer1_compa_isr(void)
    {
      OCR1A=sinewave[i];
      i++;
    //  if(i==255)
    //  i=0;
    }
    
    void main(void) {
    
    DDRD=0xFF;
    
    // Timer/Counter 1 initialization
    // Clock source: System Clock
    // Clock value: 8000.000 kHz
    // Mode: Fast PWM top=00FFh
    // OC1A output: Non-Inv.
    // OC1B output: Discon.
    // Noise Canceler: Off
    // Input Capture on Falling Edge
    TCCR1A=0x81;
    TCCR1B=0x09;
    TCNT1H=0x00;
    TCNT1L=0x00;
    ICR1H=0x00;
    ICR1L=0x00;
    OCR1AH=0x00;
    OCR1AL=0x00;
    OCR1BH=0x00;
    OCR1BL=0x00;
    
    // Timer(s)/Counter(s) Interrupt(s) initialization
    TIMSK=0x10;
    
    //enable global interrups
    #asm("sei");
    
      while (1);
    } 
    
    
    [/left]
    There is nothing so practical as a good theory. — Kurt Lewin, 1951

    دیدگاه


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

      من داخل کتاب 10 مدار با avr این مدارو +برنامه اش به زبان سی دیدم اگه حاستی بگو برات بزارم
      انجام پروژه هاي برنامه نويسي اندرويد
      [glow=red,2,300]نرم افزار نقشه هاي پاور کامپيوتر اندوريد[/glow]
      http://cafebazaar.ir/app/?id=com.atxdroid

      دیدگاه


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

        اگه میشه یه توضیحی در مورد طریقه نوشتن look up table و بدست آوردن اعدادش بدین
        ممنون

        دیدگاه


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

          خیلی سادست.با کمک فرمول سینوس (x وy) و نمایش روی lcd گرافیکی

          دیدگاه


            #6
            پاسخ : تولید موج سینوسی با 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);   
            }
            اوژن: به معنای افکننده و شکست دهنده است
            دانایی، توانایی است-Knowledge is POWER
            برای حرفه ای شدن در الکترونیک باید با آن زندگی کرد
            وضعمان بهتر می شود، اگر همه نسبت به جامعه و اطراف خود مسوول باشیم و نگوئیم به ما چه
            قوی شدن و خوب ماندن - خوبی کردن به دیگران یک لذت ماندگار است
            اگر قرار باشد نفت و منابع خام را بدهیم و چرخ بگیریم، بهتر است چرخ را از نو اختراع کنیم
            ساعت کار بدن اکثر انسان ها کمتر از 800000 ساعت است و بعد از آن از کار می افتد

            دیدگاه


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

              با سلام مهندس میشه درباره این برنامه یه توضیح بدید و بفرمایید برای سه فاز کردنش بایدچه کار کرد؟در اصل اگر بخواهیم این را به یک پل igbt برای ساختن اینورتر سه فاز استفاده کرد باید چه کار کرد؟ممنونم

              دیدگاه


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

                نوشته اصلی توسط زوار
                با سلام مهندس میشه درباره این برنامه یه توضیح بدید و بفرمایید برای سه فاز کردنش بایدچه کار کرد؟در اصل اگر بخواهیم این را به یک پل igbt برای ساختن اینورتر سه فاز استفاده کرد باید چه کار کرد؟ممنونم
                تولید سه فاز بصورت ساده مستلزم وجود سه خروجی PWM است که بهترن روش استفاده از شماره هایی مانند mega64 است که تایمرهای 16 بیتی آن دارای 3 واحد compareهستند. هرچند که در mega8 می توان در وضعیت 8 بیتی از OC2 هم استفاده کرد که به دلیل استفاده از دو تایمر مختلف، کار مشکل تری نسبت به mega64 می باشد. از نظر نرم افزاری کافی است که اندیس آرایه را برای 3 فاز به گونه ای انتخاب کنیم تقریبا 120 درجه را محقق کند. از آنجایی که آرایه مورد استفاده دارای 256 عضو است، 120 درجه معادل 256/3 است که بصورت صحیح 85 می شود. برای 240 درجه هم 170 یا 171 را می توان در نظر گرفت. با توجه به اینکه اندیس آرایه از صف شروع می شود، کافی است دو فاز دیگر را با اختلاف اندیس 84 و 170 از جدول بخوانیم تا 3 فاز مورد نظر ایجاد شوند.
                اما برای کاربردهای کنترل موتور تنها تولید سه فاز به اینصورت جابگو نیست و مواردی مانند منحنی V/f و فرکانس Boost و Acceleration وِ Decelaration و مانند آن باید در نرم افزار پیش بینی شود.
                اوژن: به معنای افکننده و شکست دهنده است
                دانایی، توانایی است-Knowledge is POWER
                برای حرفه ای شدن در الکترونیک باید با آن زندگی کرد
                وضعمان بهتر می شود، اگر همه نسبت به جامعه و اطراف خود مسوول باشیم و نگوئیم به ما چه
                قوی شدن و خوب ماندن - خوبی کردن به دیگران یک لذت ماندگار است
                اگر قرار باشد نفت و منابع خام را بدهیم و چرخ بگیریم، بهتر است چرخ را از نو اختراع کنیم
                ساعت کار بدن اکثر انسان ها کمتر از 800000 ساعت است و بعد از آن از کار می افتد

                دیدگاه


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

                  ممنون از پاسختون چند تا سوال دارم 1- سه تا pwm برای اینورتر 3 فاز کم نیست؟آخه پل igbt 6 تا ورودیه گیت داره؟2-در پل igbt دوتا igbt که امیتر یکی به کلکتور دومی وصله پالس گیت اولی با دومی باید نات یکدیگر باشه؟3-برای ساختن یک کنترل دور برای تمام تنظیمات یک مگا 64 جواب میده یا باید از arm استفاده کرد؟4-اگر بخوام این کار را بکنم و این تاپیک را ادامه بدیم برای ساخت یک کنترل دور شما راهنمایی میکنید تا انجام بشه البته میدونم وقتتون کمه اما تجربیات شما در این کار میتونه خیلی مفید باشه و فکر کنم تاپیک خوبی بشه که همه میتونن استفاده کنند من منتظر پاسخ شما هستم ممنونم

                  دیدگاه


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

                    نوشته اصلی توسط زوار
                    ممنون از پاسختون چند تا سوال دارم 1- سه تا pwm برای اینورتر 3 فاز کم نیست؟آخه پل igbt 6 تا ورودیه گیت داره؟2-در پل igbt دوتا igbt که امیتر یکی به کلکتور دومی وصله پالس گیت اولی با دومی باید نات یکدیگر باشه؟3-برای ساختن یک کنترل دور برای تمام تنظیمات یک مگا 64 جواب میده یا باید از arm استفاده کرد؟4-اگر بخوام این کار را بکنم و این تاپیک را ادامه بدیم برای ساخت یک کنترل دور شما راهنمایی میکنید تا انجام بشه البته میدونم وقتتون کمه اما تجربیات شما در این کار میتونه خیلی مفید باشه و فکر کنم تاپیک خوبی بشه که همه میتونن استفاده کنند من منتظر پاسخ شما هستم ممنونم.
                    1و2- در عمل به 6 موج PWM نیاز است که دو موج بازوی ها بالا و پائین علاوه بر آنکه باید Not یکدیگر باشند، بلکه باید بین آنها یک Dead time هم وجود داشته باشد. به این معنی که بین غیرفعال شدن یک موج و فعال شدن موج دوم یک تاخیر وجود داشته باشد که با استفاده از 3 گیت Not و درایوری مانند IR2130می توان این هدف را محقق کرد. زیرا IR2130 بصورت خودکار Dead time را به موج اضافه می کند. بنابراین همان 3 موج PWM برای این کار کافی هستند. البته در XMEGA بصورت خاص این امکان تولید Dead time پیش بینی شده که مورد بحث این تاپیک نیست.

                    3- برای روش PWM سینوسی یک mega64 می تواند جوابگو باشد و نیازی به ARM نیست.

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

                    دیدگاه


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

                      با سلام بله مهندس در تاپیک MC3 واقعا راهنماییهای شما خیلی به من کمک کرد من هم در حد رفع اشکال میخوام به نظر شما اول سه تا موج PWM با اختلاف فاز 180 درجه بسازم؟در ضمن مهندس در MC3 مثل اینکه PWM TOP با PWM BOTTOM 180 درجه اختلاف فاز داشت و نات یکدیگر نبودند؟

                      دیدگاه


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

                        با سلام خدمت دوستان .ببخشید من یه سئوال داشتم شاید ارتباطی با موضوع اصلی نداشته یاشه ولی میپرسم .
                        لطفا بفرمائید که من با یک اتمگا 8 و کریستال 8 مگ حداکثر چه فرکانسی میتونم برای موج PWM تولید کنم . من خودم فکرمیکنم حداکثر 15 کیلو هرتز. من 100 کیلونیاز دارم :redface:
                        وقتي همه نيروهاي جسمي و ذهني متمرکز شوند توانايي فرد براي حل مشکلات به طور حيرت انگيزي چند برابر مي شود .
                        نرمن وينسنت پيل

                        دیدگاه


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

                          سلام
                          حتما نباید PWM رو از تایمر بگیرید
                          شمل میتونید یک زمان کوچک رو رو تایمر تنظیم کنید و با متغیر های مختلف PWM بگیرید
                          خدا گفت : به جهنم ببریدش، او برگشت و با تعجب به خدا نگاه کرد. خدا گفت : به بهشت ببریدش. فرشتگان پرسیدند: چرا؟! خدا گفت : او هنوز به من امیدوار است...

                          دیدگاه


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

                            نوشته اصلی توسط حمید نجفی
                            سلام
                            حتما نباید PWM رو از تایمر بگیرید
                            شمل میتونید یک زمان کوچک رو رو تایمر تنظیم کنید و با متغیر های مختلف PWM بگیرید
                            ببخشید آقای نجفی .این جواب مربوط به سئوال منه یا آقای زوار؟
                            اگه جواب منه لطفا کمی بیشتر توضیح بدید که چطوری به فرکانس مورد نظرم برسم؟100کیلو
                            وقتي همه نيروهاي جسمي و ذهني متمرکز شوند توانايي فرد براي حل مشکلات به طور حيرت انگيزي چند برابر مي شود .
                            نرمن وينسنت پيل

                            دیدگاه


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

                              بچه ها این تاپیک قرار شد برای طراحی یک اینورتر 3فاز باشه بیایید در همین رابطه صحبت کنیم ممنونم

                              دیدگاه

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