您好, 登录| 注册|
论坛导航
您好, 登录| 注册|
子站:
商城:
论坛首页    逆变/光伏/并网
  •  发帖
  • 收藏

spwm调制单片机实现
阅读: 305 |  回复: 1 楼层直达

2017/07/28 18:04:25
1
lmx10
电源币:11 | 积分:3 主题帖:1 | 回复帖:4
LV1
士兵

QQ截图20160321155901  高效、易用、便捷的电源调试助理——是德科技E36313A可编程直流电源测评

QQ截图20160321155901  【申请中】0成本的畅玩!PN8327 LED电源 免费试用


有没有人开贴具体讲spwm的数字实现,小白一个求交流
具有流行抑制功能的立体声耳机放大器 IO-Link数字输入集线器参考设计 面向 1000mA 空间受限类应用的同步降压稳压器
16 MHz超低功耗微控制器8通道10位ADC 基于汽车分流的±500A精密电流检测 具有超低 IQ 的 60V、100mA 双模同步降压稳压器
低功耗单边沿触发D型触发器5-SC70 -40至85 12V/48V汽车系统的双向DC-DC转换器 3.5 – 60V 2A 低静态电流降压转换器
2017/08/02 16:13:24
2
ykwn
电源币:3 | 积分:0 主题帖:0 | 回复帖:2
LV1
士兵

首先做个0-90度的正弦表格,再用查表法周期性取表格数据再乘个系数,用定时器输出相应脉宽的PWM就可以了,以下是我自己计算的表格及程序源码,供参考。

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正弦周期,正弦表取值范围内)        

        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];    

    //单极性调制    

    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                                                                        //负半周   

     {        

        TIM1_SetCompare1(Mod_UH);       

        TIM1_SetCompare2(Mod_UL);    

    }

}

该帖有赏
关注我们
新浪微博
官方Q群
客服热线
服务时间:周一至周五9:00-18:00
微信关注
免费技术研讨会
获取一手干货分享