اطلاعیه

Collapse
No announcement yet.

درخواست پروژه تولید موج سینیوسی

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

    درخواست پروژه تولید موج سینیوسی

    با سلام
    من میخوام به وسیله Avr و İGBT یک موج سینوسی مانند کنترل موتور القایی درست کنم . اما می خوام در در حد آموزش باشه نه در حد پروژه کاملی که در سایت هست . هر کمکی ( مدار ،برنامه .... ) از دستتون بر بیاد ممنون میشم .
    (من بسکام کار میکنم البته اگه کامپایلر دیگری بود مشکلی نداره )

    #2
    پاسخ : درخواست پروژه تولید موج سینیوسی

    کد:
    #include <avr/io.h>
    
    const unsigned char sine[] = {
     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,
    };
    
    int main(void) {
     unsigned char i = 0; // Dim i As Byte // i = 0
     
     DDRB = ~0; // Config Portb = Output
     
     while (1) { // Do
      PORTB = sine[i++]; // Portb = Lookup(sine, i) // Inc i
     } // Loop
     
     return 0; // End
    }
    به خروجی (PORTB) هم یه dac وصل کن یا از شبکه R2R استفاده کن
    گذشت خصلت مردان است

    دیدگاه


      #3
      پاسخ : درخواست پروژه تولید موج سینیوسی

      این کد مال اتمل استودیو هستش ؟

      دیدگاه


        #4
        پاسخ : درخواست پروژه تولید موج سینیوسی

        نوشته اصلی توسط ababakz
        این کد مال اتمل استودیو هستش ؟
        رو همشون کار باید بکنه(همه کامپایلرها).

        دیدگاه


          #5
          پاسخ : درخواست پروژه تولید موج سینیوسی

          نوشته اصلی توسط ababakz
          این کد مال اتمل استودیو هستش ؟
          نوشتند
          کد:
          int main(void)
          پس اتمل هست
          اگر همین رو خواستید با کدویژن کار کنید باید بنویسید
          کد:
          void main(void)
          موفق باشید
          [b]چگونه همه پایه های میکروکنترلر AVR را PWM کنیم؟
          معرفی نرم افزارEasy 7segment (برای راه اندازی آسانتر 7segment )
          معرفی نرم افزار Codewizard PWM
          با من بیشتر آشنا شوید

          دیدگاه


            #6
            پاسخ : درخواست پروژه تولید موج سینیوسی

            واسه avr-gcc :
            کد:
            #include <avr/io.h>
            واسه کدویژن :
            کد:
            #include <io.h>
            گذشت خصلت مردان است

            دیدگاه


              #7
              پاسخ : درخواست پروژه تولید موج سینیوسی

              نوشته اصلی توسط tohid041
              واسه avr-gcc :
              کد:
              #include <avr/io.h>
              واسه کدویژن :
              کد:
              #include <io.h>
              ممنون که گفتی
              یادم نبود ...
              ولی من یادمه قبلا تو کدتون نبودااااا
              ویرایش کردین ؟؟
              [b]چگونه همه پایه های میکروکنترلر AVR را PWM کنیم؟
              معرفی نرم افزارEasy 7segment (برای راه اندازی آسانتر 7segment )
              معرفی نرم افزار Codewizard PWM
              با من بیشتر آشنا شوید

              دیدگاه


                #8
                پاسخ : درخواست پروژه تولید موج سینیوسی

                بله ، اون کد رو همینجوری نوشتم واسه یادگیری ، گفتم شاید خواستین تست کنین ، ویرایش کردم
                گذشت خصلت مردان است

                دیدگاه


                  #9
                  پاسخ : درخواست پروژه تولید موج سینیوسی

                  خوب تا اون جایی که متوجه شدم این کد اون مقادیر مخصوص رو از جدول می خونه و به ترتیب در یک پورت قرار میده اما اگه بخوام شکل موج سه فاز باشه باید از سه تا پورت استفاده کنم ؟ اختلاف افز چطور ایجاد میشه ؟ البته گفتم این قرار نیست به موتور واقعی وصل بشه و در حد آموزشه . یه راه هم دیدم از PWM استفاده میشه . اون به چه ترتیب هست ؟

                  دیدگاه


                    #10
                    پاسخ : درخواست پروژه تولید موج سینیوسی

                    لزومی نداره این همه دیتا رو بنویسین. اول برنامه وقتی میاد بالا بگین خودش مقادیر رو حساب کنه و بریزه تو آرایه. درسته که ای وی آره ولی نا سلامتی میکروکنترولره.
                    کمترین توقع از یک فرد تحصیلکرده، دانستن املای صحیح کلمات است.

                    دیدگاه


                      #11
                      پاسخ : درخواست پروژه تولید موج سینیوسی

                      فکر میکنم این مقادیر به توسط مهندس کی نژاد نوشته شده به دست آوردنش آسون نیست .

                      دیدگاه


                        #12
                        پاسخ : درخواست پروژه تولید موج سینیوسی

                        میتونی از روش محاسبه استفاده کنی، زیاد پیچیده نیست :
                        کد:
                        floor(((sin(Value * (2 * M_PI) / 256) * (255 / 2)) + (256 / 2)) + 0.5)
                        آرایه ای که استفاده شده، در واقع خروجی همین محاسبه هست،
                        اگه بخواین خود میکرو محاسبه کنه، کد خروجی مطمعنا چند برابر این خواهد بود، و سرعت کم

                        واسه سه فاز :
                        کد:
                        #include <avr/io.h>
                        
                        const unsigned char sine[] = {
                         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,
                        };
                        
                        int main(void) {
                         unsigned char i = 0; // Dim i As Byte // i = 0
                         unsigned char j = 85; // Dim j As Byte // j = 85
                         unsigned char k = 170; // Dim k As Byte // k = 170
                         
                         DDRB = ~0; // Config Portb = Output
                         DDRC = ~0; // Config Portc = Output
                         DDRD = ~0; // Config Portd = Output
                         
                         while (1) { // Do
                          PORTB = sine[i++]; // Portb = Lookup(sine, i) // Inc i
                          PORTC = sine[j++]; // Portc = Lookup(sine, j) // Inc j
                          PORTD = sine[k++]; // Portd = Lookup(sine, k) // Inc k
                         } // Loop
                         
                         return 0; // End
                        }
                        واسه pwm باید تایمر/کانتر راه اندازی کنیم، که در حالت سه فاز سه کانال pwm لازم داریم
                        گذشت خصلت مردان است

                        دیدگاه


                          #13
                          پاسخ : درخواست پروژه تولید موج سینیوسی

                          ممنون . میشه در مورد Pwm بیشتر توضیح بدین ؟

                          دیدگاه


                            #14
                            پاسخ : درخواست پروژه تولید موج سینیوسی

                            اگه موقع بالا اومدن محاسبه کنه شما اصلا حس نمیکنید. مثل یه تاخیر چند میلی ثانیه ای میمونه.
                            کمترین توقع از یک فرد تحصیلکرده، دانستن املای صحیح کلمات است.

                            دیدگاه


                              #15
                              پاسخ : درخواست پروژه تولید موج سینیوسی

                              نوشته اصلی توسط ababakz
                              ممنون . میشه در مورد Pwm بیشتر توضیح بدین ؟
                              در مورد pwm مطلب هست یه سرچی کنین، مطالعه بفرمایین، اگر مشکلی بود در خدمتیم

                              نوشته اصلی توسط نو رسیده
                              اگه موقع بالا اومدن محاسبه کنه شما اصلا حس نمیکنید. مثل یه تاخیر چند میلی ثانیه ای میمونه.
                              متوجه منظورتون شدم، ولی ارزش کلی کد اضافی رو نداره،
                              با کامپایلر avr-gcc یه چیزی حدود ده برابر میشه کد خروجی :eek:
                              بهتره یه برنامه کوچیک تو کامپیوتر بنویسین تا اعداد رو براتون محاسبه کنه و بعد کپی کنین تو آرایه
                              البته بهتره آرایه در حافضه فلش باشه، اینجا واسه ساده شدن در حافضه فلش نیس !
                              کد:
                              /* sine array generator */
                              
                              #include <stdio.h>
                              #include <math.h>
                              
                              #define BYTES_IN_LINE 16 /* number of bytes in one line */
                              
                              int main() {
                               int i;
                               FILE * fp;
                               
                               fp = fopen("arr-sine-out.h", "wt");
                               
                               if (!fp || ferror(fp)) {
                                printf("opening file failed\n");
                               } else {
                                fprintf(fp, "\nconst unsigned char sine[256] = {");
                                for (i = 0; i < 256; i++) {
                                 if (!(i % BYTES_IN_LINE)) {
                                  fprintf(fp, "\n ");
                                 }
                                 fprintf(fp, "0x%02X,", (int)floor((sin(i * (2 * M_PI) / 256) * (255 / 2)) + (256 / 2) + 0.5));
                                }
                                fprintf(fp, "\n};\n\n");
                               }
                               
                               fclose(fp);
                               
                               return 0;
                              }
                              گذشت خصلت مردان است

                              دیدگاه

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