12下一页

用正弦表怎么生成SPWM

[复制链接]

实习生

发表于 2013-8-31 09:33:32   18866 查看 29 回复 显示全部楼层 倒序浏览
分享
小弟最近想做spwm  原理懂得 等面积原则那个 在网上搜了正弦表生成器 不知道怎么转换成 开关时间啊(怎么利用那个写程序)?望大侠指点下  谢谢

技术员

发表于 2013-9-1 18:25:08  
用Time_A或者Time_B
回复

点赞 举报

实习生

发表于 2013-9-1 21:20:57    楼主|

PCB在线计价下单

板子大小:

cm
X
cm

层数:

2

板子数量:

10

厚度:

1.6

首先感谢您 你说的太简单了。。。我是说怎么转化为TA的占空比
回复

点赞 举报

实习生

发表于 2014-4-1 11:47:35  
童鞋,你问对人了。
正弦表的生成有两种办法
1.利用matlab:程序如下:
fs=195;               %设定采样频率
N=195;                %采样点数为195
n=0:N-1;
t=n/fs;
f1=1;                %这个f1可以不要
x=round(1875*(1+(0.8*sin(2*pi*f1*t))));    %生成正弦信号,并取整
plot(t,x)
x就是比较寄存器的值,总共195个,下溢中断赋值就行了
2.方法二是在dsp中产生正弦表,计算占空比,计算比较寄存器的值
核心程序如下:
while (n<=195)  
  {
   
    q=n*2*PI;      
    q/=195;
    j=sin(q);     
    l=1875*(1+M*j);//M为调制比     //计算占空比表达式
   
   if(l>=375&l<=3375)
     sin_table[n]=l;  
    else
        {
        if(l>3375)
         sin_table[n]=3375;
        else
         sin_table[n]=375;
        }  
   n=n+1;
  }

具体吧!这些程序都是我编的,我就是这么做的。两种都可以。
回复

点赞 举报

技术员

发表于 2014-7-28 19:48:15  
1006050515 发表于 2014-4-1 11:47
童鞋,你问对人了。
正弦表的生成有两种办法
1.利用matlab:程序如下:

您好!我现在要生成spwm波,但是不知道占空比怎么计算?载波pWM的频率是40KHZ,调制信号正弦波的频率是2KHZ,pWM的幅度是从0-3.3V。不知道有没有相关的计算公式?
回复

点赞 举报

等待验证会员

发表于 2014-8-11 16:52:48  
跪求解释
回复

举报

实习生

发表于 2014-9-15 10:50:56  
按正弦表来刷TACCRx的值。占空比100%就是1,50%就是0,0%就是-1,按照正弦表的值计算占空比,再计算TACCRx的值
回复

点赞 举报

实习生

发表于 2014-9-18 15:22:38  
楼主 写好了吗 ?不知道你写了关于 PI校正以后的SPWM吗?交流一下
回复

点赞 举报

技术员

发表于 2014-9-23 23:59:00  
给你个软件  我也是从论坛下载的

spwm_calc_v1.3.2.rar

167.66 KB, 下载次数: 715, 下载积分: 积分 -1 分

spwm波表

回复

点赞 举报

助理工程师

发表于 2014-9-24 20:50:56  
软件不能用啊{:1:}{:1:}
回复

点赞 举报

实习生

发表于 2014-10-26 09:53:33    楼主|
很久没登了 我去年写的  你们参考一下吧
430单片机
#include <msp430x16x.h>
int n=0;
int flag = 1;
int spwm[256]=
{
   1   , 5  ,   9   , 13  ,  17    ,21  ,  24  ,  28  ,
   32  ,  36 ,   40 ,   43 ,   47  ,  51 ,   55,    58 ,   62,
    66  ,  70  ,  73   , 77  ,  81,    85   , 88  ,  92  ,  96,
    99  , 103,   106  , 110 ,  114   ,117,   121,   124,

   128  , 131  , 135 ,  138,   141  , 145   ,148   ,152  , 155 ,
   158  , 162   ,165 ,  168 ,  171  , 174,   178 ,  181,
   184   ,187  , 190,   193,   196,   199 ,  202  , 205  , 208 ,
   210   ,213  , 216,   219,   221 ,  224 ,  227 ,  229,

   232   ,234  , 237 ,  239 ,  242  , 244 ,  247 ,  249 ,  251 ,
   253  , 256  , 258  , 260  , 262  , 264 , 266 ,  268,
   270  , 272 ,  274 ,  276  , 277 ,  279  , 281  , 282  ,
   284  , 285 ,  287 ,  288 ,  290,   291,   293   ,294,   295,
   296  , 297   ,299,   300,   301  , 302,   303  , 303 ,  304 ,
     305  , 306 ,  307  , 307  , 308 ,  308  , 309,   309,

   310  , 310 ,  311 ,  311  , 311 ,  311 ,  311,   311,
   311  , 311 ,  311  , 311   ,311  , 311  , 311  , 311 ,  310,


   310 ,  309  , 309,   308  , 308 ,  307,   307,   306,
   305   ,304 ,  304 ,  303 ,  302  , 301  , 300,   299 ,  298,


   296 ,  295 ,  294   ,293  , 291   ,290  , 289,   287   ,286 ,
   284   ,282 ,  281   ,279  , 277  , 276,   274 ,  272,


   270  , 268  , 266 ,  264  , 262 ,  260 ,  258 ,  256,
   254 ,  251,   249  , 247 ,  244 ,  242 ,  240,   237  , 235,
   232  , 229,   227 ,  224   ,222  , 219,   216   ,213,   211  ,
   208   ,205 ,  202,   199,   196 ,  193 ,  190   ,187,

   184  , 181  , 178  , 175   ,171 ,  168  , 165  , 162 ,  158,
   155  , 152   ,148 ,  145 ,  142,   138 ,  135 ,  131,


   128   ,124,   121  , 117  , 114,   110  , 107 ,  103,    99 ,
   96    ,92  ,  88   , 85  ,  81  ,  77 ,   74,    70,
    66 ,   62 ,   59  ,  55  ,  51  ,  47  ,  44 ,   40 ,   36,
    32   , 28 ,   25  ,  21,    17 ,   13   ,  9  ,   5,    2

};
void TimerB_Init()
{
  P4SEL |= BIT2;                            // Set for Timer A1
  P4DIR |= BIT2;
  P4SEL |= BIT1;                            // Set for Timer A1
  P4DIR |= BIT1;
  TACCR0 = 312;
  TBCCR0 = 312;                               // Init TACCR0 w/ sample prd=CCR0+1
  TBCCR1 = 0;  
  TBCCR2 = 0;   
  TBCCTL1 = OUTMOD_7;                       // Set/reset
  TBCCTL2 = OUTMOD_7;                       // Set/reset
  CCTL0= CCIE;
  TBCTL = TBCLR + MC_1 + TBSSEL_2;          // clear TAR, up mode*/
  TACTL = TACLR + MC_1 + TASSEL_2;          // clear TAR, up mode*/
}


void ini_sys(void)
{
    BCSCTL1 &= ~XT2OFF;                       // XT2on
      do
      {
      IFG1 &= ~OFIFG;                           // Clear OSCFault flag
      for (char i = 0xFF; i > 0; i--);               // Time for flag to set
      }
      while ((IFG1 & OFIFG));                   // OSCFault flag still set?
    BCSCTL2=SELM_2+SELS;
}

void main()
{
   WDTCTL=WDTPW+WDTHOLD;
   ini_sys();  
   TimerB_Init();
   _EINT();

   
   while(1)
   {

        if( flag == 1)
        {
          TBCCR2 = 0;
          TBCCR1=spwm[n];
        }   
      
        else
        {
          TBCCR1 = 0;  
          TBCCR2 = spwm[n%256];
        }
        
   }
}

#pragma vector=TIMERA0_VECTOR
__interrupt void TimerA(void)
{

    n++;
    if((n%256) == 0)
    {
      flag = 1- flag;
    }
    if(n == 512)
    {
      n = 0;
    }
   
}
回复

点赞 举报

技术员

发表于 2014-10-28 18:44:18  
楼主你现在做的怎么样,用什么做的,能不能给的建议
回复

点赞 举报

实习生

发表于 2015-1-3 18:20:39    楼主|
青春流年 发表于 2014-10-28 18:44
楼主你现在做的怎么样,用什么做的,能不能给的建议

我用430单片机做的,效果也不是特别好,做了好久了的!都忘了
回复

点赞 举报

实习生

发表于 2015-5-17 19:37:49  
1006050515 发表于 2014-4-1 11:47
童鞋,你问对人了。
正弦表的生成有两种办法
1.利用matlab:程序如下:

可不可以留下联系方式,如qq,有问题请教。
回复

点赞 举报

实习生

发表于 2015-5-17 19:39:27  
神一滴 发表于 2014-9-23 23:59
给你个软件  我也是从论坛下载的

这个软件生成的数组怎么写到单片机里?要算法是什么?
回复

点赞 举报

技术员

发表于 2015-5-27 23:58:37  
直接建立一个数组复制进去啊
回复

点赞 举报

技术员

发表于 2015-5-28 20:08:37  
11楼OK
查表法最简单。
那些数字用excel简单拖公式就可以得到了。
回复

点赞 举报

发表于 2015-6-19 15:02:59  
1006050515 发表于 2014-4-1 11:47
童鞋,你问对人了。
正弦表的生成有两种办法
1.利用matlab:程序如下:

l=1875*(1+M*j),你这里的1875是怎么来的,还有后边的那个375和3375,这些值是怎么计算出来的
回复

点赞 举报

技术员

发表于 2015-6-29 23:28:24  
谢谢楼主,赞一个~
回复

举报

实习生

发表于 2015-7-15 15:35:37  
~~~~~~~~~~~~~~~~~~~~~~~~~~
回复

举报

12下一页
高级模式
您需要登录后才可以回帖 登录 | 注册

关闭

站长推荐 上一条 /9 下一条

快速回复 返回顶部 返回列表
-

推荐专区

技术干货集中营

专家问答

用户帮助┃咨询与建议┃版主议事

工程师杂谈

工程师创意

工程师职场

论坛电子赛事

社区活动专版

发烧友活动

-

嵌入式论坛

ARM技术论坛

Android论坛

Linux论坛

单片机/MCU论坛

FPGA|CPLD|ASIC论坛

DSP论坛

嵌入式系统论坛

-

电源技术论坛

电源技术论坛

无线充电技术

-

硬件设计论坛

PCB设计论坛

电路设计论坛

电子元器件论坛

控制|传感

总线技术|接口技术

-

测试测量论坛

LabVIEW论坛

Matlab论坛

测试测量技术专区

仪器仪表技术专区

-

EDA设计论坛

multisim论坛

PADS技术论坛

Protel|AD|DXP论坛

Allegro论坛

proteus论坛|仿真论坛

EasyEDA-中国人自已的EDA工具

Orcad论坛

-

综合技术与应用

电机控制

智能电网

光电及显示

参考设计中心

汽车电子技术论坛

医疗电子论坛

-

开源硬件

-

无线通信论坛

无线通信技术专区

天线|RF射频|微波|雷达技术

-

IC设计论坛

芯片测试与失效分析

Mixed Signal/SOC[数模混合芯片设计]

Analog/RF IC设计

设计与制造封装测试

-

厂商专区

TI论坛

TI Deyisupport社区

-

检测技术与质量

电磁兼容(EMC)设计与整改

安规知识论坛

检测与认证

-

消费电子论坛

手机技术论坛

平板电脑/mid论坛

音视/视频/机顶盒论坛

-

电子论坛综合区

聚丰众筹官方社区

新人报道区

聚丰供应链

-

论坛服务区

-

供求信息发布

供需广告

招聘┃求职发布区

电子展览展会专区