اطلاعیه

Collapse
No announcement yet.

موج سینوسی

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

    موج سینوسی

    موج سینوسی
    سلام
    درباری موج سینوسی این کدها چطوره به دست می ارن,اگه بخواهیم از تایمرهای 16 بیتی استفاده کنیم باید چطوری کد گذاری کنیم0xffff .

    void main(void)
    {
    a[0]=131; a[1]=134; a[2]=137; a[3]=140; a[4]=144; a[5]=147; a[6]=150; a[7]=153;
    a[8]=156; a[9]=159; a[10]= 162; a[11]= 165; a[12]=168;a[13] = 171;a[14]= 174;a[15] =177;a[16]=180;a[17]=183;a[18]=185;a[19]=188;a[20]=191;
    a[21]=194;a[22]= 196;a[23]=199;a[24]= 201;a[25]= 204;a[26]=206;a[27]= 209;a[28] =211;a[29]= 214;a[30]=216;a[31]=218;a[32]=220;a[33]=222;
    a[34]=225;a[35]= 227;a[36]=229;a[37]= 230;a[38]= 232;a[39]=234;a[40]= 236;a[41]=237;a[42]= 239;a[43]=240;a[44]= 242;a[45]= 243;a[46]=245;
    a[47]=246;a[48]= 247;a[49] =248;a[50]=249;a[51] =250;a[52] =251;a[53] =252;a[54] =252;a[55] =253;a[56]=254;a[57]= 254;a[58]= 255;a[59]= 255;
    a[60]=255;a[61]=255;a[62] =255;a[63]= 255;a[64] =255;a[65]= 255;a[66] =255;a[67]= 255;a[68]= 255;a[69] =254;a[70] =254;a[71] =253;a[72]= 252;
    a[73]=252;a[74]= 251;a[75] =250;a[76]= 249;a[77] =248;a[78]= 247;a[79]= 246;a[80] =245;a[81]= 243;a[82] =242;a[83] =240;a[84] =239;a[85] =237;
    a[86]=236;a[87]= 234;a[88] =232;a[89]= 230;a[90] =229;a[91]= 227;a[92]= 225;a[93] =222;a[94]= 220;a[95] =218;a[96] =216;a[97] =214;a[98] =211;
    a[99]=209;a[100]= 206;a[101]= 204;a[102]= 201;a[103]= 199;a[104]= 196;a[105]= 194;a[106] =191;a[107] =188;a[108] =185;a[109] =183;a[110]= 180;a[111] =177;
    a[112]=174;a[113]= 171;a[114] =168;a[115]= 165;a[116]= 162;a[117]= 159;a[118]= 156;a[119]= 153;a[120]= 150;a[121]= 147;a[122] =144;a[123]= 140;a[124] =137;
    a[125]=134;a[126]= 131;a[127] =128;a[128]= 125;a[129]= 122;a[130]= 119;a[131] =116;a[132]= 112;a[133]= 109;a[134]= 106;a[135] =103;a[136]= 100;a[137] = 97;
    a[138]=94;a[139] = 91;a[140] =88;a[141] = 85;a[142] = 82;a[143] = 79;a[144] = 76;a[145] = 73;a[146] = 71;a[147] = 68;a[148] =65;a[149]= 62;a[150] = 60;
    a[151]=57;a[152] = 55;a[153] =52;a[154] = 50;a[155] = 47;a[156] = 45;a[157] = 42;a[158] = 40;a[159]= 38;a[160] = 36;a[161] = 34;a[162]= 31;a[163] = 29;
    a[164]=27;a[165] = 26;a[166] =24;a[167] = 22;a[168] = 20;a[169] = 19;a[170] = 17;a[171] = 16;a[172] = 14;a[173] = 13;a[174] =11;a[175]= 10;a[176] = 9;
    a[177]=8;a[178] = 7;a[179] =6;a[180] = 5;a[181] = 4;a[182] = 4;a[183] = 3;a[184] = 2;a[185] = 2;a[186] = 1;a[187] = 1;a[188] = 1;a[189] = 1;
    a[190]=1;a[191] = 1;a[192] =1;a[193] = 1;a[194] = 1;a[195] = 1;a[196] = 1;a[197] = 2;a[198] = 2;a[199] = 3;a[200] = 4;a[201] = 4;a[202] = 5;
    a[203]=6;a[204] = 7;a[205] =8;a[206] = 9;a[207] =10;a[208] =11;a[209] = 13;a[210] =14;a[211] =16;a[212] =17;a[213] =19;a[214] = 20;a[215] = 22;
    a[216]=24;a[217] = 26;a[218] =27;a[219] = 29;a[220] = 31;a[221] = 34;a[222] =36;a[223] = 38;a[224] =40;a[225] = 42;a[226] = 45;a[227]= 47;a[228]= 50;
    a[229]=52;a[230] = 55;a[231] =57;a[232] = 60;a[233] = 62;a[234] = 65;a[235] =68;a[236] = 71;a[237] =73;a[238] = 76;a[239] = 79;a[240]= 82;a[241]= 85;
    a[242]= 88;a[243]= 91;a[244]= 94;a[245]= 97;a[246]= 100;a[247]= 103;a[248] =106;a[249]= 109;a[250] =112;a[251]= 116;a[252]= 119;a[253]= 122;a[254]=125;a[255]=128

    #2
    پاسخ : موج سینوسی

    کد بالا ناقصه و در صورت تکمیل مربوط میشه به ت/ک 8 بیتی روش کارش هم به این شکله که یه ارایه 256 عنصری از نوع int تعریف میشه نتیجه معادله
    y=sinx به ترتیب وارد آرایه میشه و این ارایه به رجیستر TCNTn داده میشه (که این از برنامه جا مونده)
    خیلی ببخشید این روش کار کاملا بی فایدست خصوصا با تایمرکانتر 16 بیتی ارایش حتی تو arm هم جاش نمیشه
    اگه هدفتون ایجاد موج سینوسیه راه حل های بسیار بسیار ساده تری هم هست سرچ کنید نبود میگم.
    *یادگیری علم زمانی مشکل است که قبل از یادگیری آن را پیچیده تصور کنیم.
    *چرا فکر میکنیم مباحث مهم و پیشرفته و سطح بالا باید پیچیده باشند.

    دیدگاه


      #3
      پاسخ : موج سینوسی

      با سلام
      این تو پروتوس جواب داده اما یه کمی مشکل داره اگه راه حل مناسبی دارید ازتون ممنون می شم که در اختیار من قرار بدهید ,من که جستجو کردم راه حل مناسبی رو ندیدم
      با تشکر

      دیدگاه


        #4
        پاسخ : موج سینوسی

        void main()
        {
        int i=0;
        double rad;
        for(i=0;i<3600;i++)
        {
        if(!(i-3600)) rad=0;
        y=sin(rad);
        rad+=0.0017453;
        {
        {


        تذکرات:
        1- در کد بالا بجای y با توجه به مد کاری TCNTn یا OCRn قرار میگیرد
        2- در صورت اشکال در خروجی بجای تابع sin از cos استفاده کنید
        3- دقت موج ایجاد شده 3600 می باشد و فقط برای تایمرکانتر 16 بیتی قابل استفاده می باشد.
        4-ممکنه میکروکنترلر avr از پس محاسبش خوب بر نیاد در این صورت همون راه حل خودتون بهتره
        اگر دقت کنید فهمیدن کد بالا خیلی راحت و آسونه
        موفق باشید
        *یادگیری علم زمانی مشکل است که قبل از یادگیری آن را پیچیده تصور کنیم.
        *چرا فکر میکنیم مباحث مهم و پیشرفته و سطح بالا باید پیچیده باشند.

        دیدگاه


          #5
          پاسخ : موج سینوسی

          1-سلام این روشی که در بالا نوشتید نحوه بدست آوردن جدول لوک پ تیبل است؟ اعداده بدست امده دسیماله؟!اگه هست چطور می توان به هگز بدست آورد؟!
          2-من تنها هزار نمونه از یک موج سینوسی می خواهم باید چیکار کنم؟(می خواهم تعداد نمونه جدول لوک پمو تغییر بدهم)
          2-چطور می توانیم یک موج سینوسی از یک هرتز تا 1کیلو هرتز تولید کرد؟با استفاده از یک میکرو ؟atmega16
          3-آیا میشه این موج را با پله یک هرتز بدست آورد چطور؟

          دیدگاه


            #6
            پاسخ : موج سینوسی

            1-برای تبدیل به هگزا کد لینک زیر رو وترد کن
            http://www.hcpp.mihanblog.com/post/3

            2-

            void main()
            {
            int i=0;
            double rad=0;
            while(1)
            {
            if(!(i-1000)) rad=0;
            y=sin(rad);
            rad+=0.006273;
            i+=1;
            }
            }

            3 - در برنامه بالا فرکانس موج سینوسی ایجاد شده بستگی به سرعت پردازنده میکرو داره و نهایت فرکانسی که میشه با میکرو ایجاد کرد در خروجی مشخص میشه که فکر میکنم نهایتا 10 هرتزی بشه
            اما اگه میخوای فرکانس رو کنترل کنی باید داخل حلقه بالا وقفه زمانی ایجاد کنی که این کار با دستور delay هم قابل انجامه:

            while(1)
            {
            daley-ms(p/1000)
            if(!(i-1000)) rad=0;
            y=sin(rad);
            rad+=0.006273;
            i+=1;
            }
            در این دستور p متغیری از نوع صحیح و بر حسب میلی ثانیه هست این p دقیقا مدت زمانیه که موج یدور کامل میزنه
            هر چقدر این متغیر بیشتر بشه فرکانس موج کم میشه(رابطه وارون)
            مثلا اگر p=1000 بشه فرکانس 1 هرتز میشه
            4- بله فرکانس رو میشه بصورت پله ای تنطیم کرد
            کافیه p بصورت افزایشی یا کاهشی تغییر داده بشه




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

            دیدگاه


              #7
              پاسخ : موج سینوسی

              اگه بخواهیم سه فاز با اختلاف فاز ایجاد کنیم باید چه تغییراتیو به برنامه داد


              دیدگاه

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