性无码一区二区三区在线观看,少妇被爽到高潮在线观看,午夜精品一区二区三区,无码中文字幕人妻在线一区二区三区,无码精品国产一区二区三区免费

  • 回復(fù)
  • 收藏
  • 點(diǎn)贊
  • 分享
  • 發(fā)新帖

spwm調(diào)制單片機(jī)實(shí)現(xiàn)

有沒有人開貼具體講spwm的數(shù)字實(shí)現(xiàn),小白一個(gè)求交流
全部回復(fù)(2)
正序查看
倒序查看
ykwn
LV.1
2
2017-08-02 16:13

首先做個(gè)0-90度的正弦表格,再用查表法周期性取表格數(shù)據(jù)再乘個(gè)系數(shù),用定時(shí)器輸出相應(yīng)脈寬的PWM就可以了,以下是我自己計(jì)算的表格及程序源碼,供參考。

const uint16_t sineTable[201] ={      0,   4,   8,  12,  16,  20,  24,  28,  32,  36,     40,  44,  48,  52,  56,  60,  64,  68,  72,  76,     80,  84,  88,  92,  96, 100, 104, 108, 112, 116,    120, 123, 127, 131, 135, 139, 143, 147, 151, 154,    158, 162, 166, 170, 173, 177, 181, 185, 188, 192,    196, 200, 203, 207, 211, 214, 218, 222, 225, 229,    232, 236, 240, 243, 247, 250, 254, 257, 261, 264,    268, 271, 274, 278, 281, 284, 288, 291, 294, 298,    301, 304, 307, 311, 314, 317, 320, 323, 326, 329,    333, 336, 339, 342, 345, 348, 350, 353, 356, 359,    362, 365, 368, 370, 373, 376, 379, 381, 384, 387,    389, 392, 395, 397, 400, 402, 405, 407, 409, 412,    414, 417, 419, 421, 423, 426, 428, 430, 432, 434,    437, 439, 441, 443, 445, 447, 449, 451, 452, 454,    456, 458, 460, 462, 463, 465, 467, 468, 470, 471,    473, 475, 476, 478, 479, 480, 482, 483, 484, 486,    487, 488, 489, 491, 492, 493, 494, 495, 496, 497,    498, 499, 500, 501, 501, 502, 503, 504, 504, 505,    506, 506, 507, 507, 508, 508, 509, 509, 510, 510,    510, 511, 511, 511, 511, 512, 512, 512, 512, 512,    512};

void Pwm_UPDATE(void)

{   

     uint16_t  Mod_UH, Mod_UL, modIndex_temp;   

     uint16_t volatile angle_Temp;   

     Inv_SinAngle += Inv_Angu_Freq;   

     if(Inv_SinAngle >= 800)    

    {       

         Inv_SinAngle -= 800;    

    }   

     if(Inv_SinAngle >= 600)                                                     //把角度值變換成0~90度之間(1/4正弦周期,正弦表取值范圍內(nèi))        

        angle_Temp = 800 - Inv_SinAngle;   

    else if(Inv_SinAngle >= 400)        

        angle_Temp = Inv_SinAngle - 400;    

    else if(Inv_SinAngle >= 200)        

        angle_Temp = 400 - Inv_SinAngle;    

    else        

        angle_Temp = Inv_SinAngle;    

    modIndex_temp = sineTable[angle_Temp];    

    //單極性調(diào)制    

    Mod_UH = ((uint32_t)Mod_output * modIndex_temp) >> 9;   

    Mod_UL = 0;    

    if(Mod_UH > Pulse_MAX)       

     Mod_UH = Pulse_MAX;   

     if(Inv_SinAngle < Inv_PWMTAB_180)    

    {        

        TIM1_SetCompare2(Mod_UH);       

        TIM1_SetCompare1(Mod_UL);   

     }    

    else                                                                        //負(fù)半周   

     {        

        TIM1_SetCompare1(Mod_UH);       

        TIM1_SetCompare2(Mod_UL);    

    }

}

0
回復(fù)
ruohan
LV.9
3
2018-08-14 15:40
@ykwn
首先做個(gè)0-90度的正弦表格,再用查表法周期性取表格數(shù)據(jù)再乘個(gè)系數(shù),用定時(shí)器輸出相應(yīng)脈寬的PWM就可以了,以下是我自己計(jì)算的表格及程序源碼,供參考。constuint16_tsineTable[201]={   0, 4, 8, 12, 16, 20, 24, 28, 32, 36,   40, 44, 48, 52, 56, 60, 64, 68, 72, 76,   80, 84, 88, 92, 96,100,104,108,112,116,  120,123,127,131,135,139,143,147,151,154,  158,162,166,170,173,177,181,185,188,192,  196,200,203,207,211,214,218,222,225,229,  232,236,240,243,247,250,254,257,261,264,  268,271,274,278,281,284,288,291,294,298,  301,304,307,311,314,317,320,323,326,329,  333,336,339,342,345,348,350,353,356,359,  362,365,368,370,373,376,379,381,384,387,  389,392,395,397,400,402,405,407,409,412,  414,417,419,421,423,426,428,430,432,434,  437,439,441,443,445,447,449,451,452,454,  456,458,460,462,463,465,467,468,470,471,  473,475,476,478,479,480,482,483,484,486,  487,488,489,491,492,493,494,495,496,497,  498,499,500,501,501,502,503,504,504,505,  506,506,507,507,508,508,509,509,510,510,  510,511,511,511,511,512,512,512,512,512,  512};voidPwm_UPDATE(void){       uint16_t Mod_UH,Mod_UL,modIndex_temp;       uint16_tvolatileangle_Temp;       Inv_SinAngle+=Inv_Angu_Freq;       if(Inv_SinAngle>=800)       {             Inv_SinAngle-=800;       }       if(Inv_SinAngle>=600)                          //把角度值變換成0~90度之間(1/4正弦周期,正弦表取值范圍內(nèi))             angle_Temp=800-Inv_SinAngle;      elseif(Inv_SinAngle>=400)             angle_Temp=Inv_SinAngle-400;       elseif(Inv_SinAngle>=200)             angle_Temp=400-Inv_SinAngle;       else             angle_Temp=Inv_SinAngle;       modIndex_temp=sineTable[angle_Temp];       //單極性調(diào)制       Mod_UH=((uint32_t)Mod_output*modIndex_temp)>>9;      Mod_UL=0;       if(Mod_UH>Pulse_MAX)         Mod_UH=Pulse_MAX;       if(Inv_SinAngle
是什么芯片做的
0
回復(fù)
發(fā)