[求助] 来个大神给个输出正弦波的SPWM程序借鉴一下!

278023330   2012-7-14 14:42 楼主
真心不知道怎么实现!

回复评论 (16)

这种算法很多人都很保密 。我以前也找过,也整理过一个算法,不过硬盘坏了,给丢了!~
我是在 Microchip 官网上找的汇编程序看的,你自己去找找吧!
点赞  2012-7-14 23:09

#include<msp430g2553.h>
#define delay_us(x) __delay_cycles((long)(CPU_F*(double)x/1000000.0))
char sintable[10]={100,78,70,78,100,
126,148,156,148,126};
char y=0;
unsigned int i;
char flag=0;
void main()
{
  WDTCTL=WDTPW+WDTHOLD;
  BCSCTL1=CALBC1_16MHZ;
  DCOCTL=CALDCO_16MHZ;
  P1IE|=BIT4;        //P1.4触发  
  P1IES&=~0x10;     //上升沿触发
  P1IFG&=~0x10;
  P1DIR=0x04;   // P1.2输出  
  P1SEL=0x04;
  P1OUT=0;     //先输出低
  //ta1 congigure
  //ta0configure
  TACTL=TASSEL1+TACLR;
  CCR0=157;
  CCR1=sintable[y];
  CCTL1=OUTMOD_3;      //CCTL1|=CCIE;
  CCTL0=CCIE;
  TACTL|=MC_1;
  _EINT();
  while(1)
  {
    if(flag==1)
    {
      flag=0;
      TACTL|=MC_1;
    }
  }
}
#pragma vector=TIMER0_A0_VECTOR
__interrupt void Timer_A1(void)
{
   y=y+1;
   if(y<10)
   {
    CCR1=sintable[y];
   }
   else
   {
     y=0;
     CCR1=sintable[y];
   }
}
#pragma vector=PORT1_VECTOR
__interrupt void PORT1(void)
{
  y=3;
  //for(i=100;i>0;i--);
  CCR1=sintable[y];
  P1IFG&=~0x10;
}

 
   
 
 
 
 
   

点赞  2012-7-14 23:54
学习了!
点赞  2012-7-15 03:57
谢谢大家
点赞  2012-7-15 15:53
我也来学习下
点赞  2012-7-16 00:50
高手
点赞  2012-7-16 21:26
这是方波呀……
点赞  2012-7-17 09:15
查表输出就是了很简单
点赞  2012-7-17 09:50
他那个表不对

const u16 SPWM_Rom_CloseDataM1N256C8192[256]={
50,151,252,353,454,555,656,757,858,958,1059,1159,1259,1359,1458,1558,
1657,1756,1854,1953,2051,2149,2246,2343,2440,2536,2632,2728,2823,2918,3012,3106,
3199,3292,3384,3476,3567,3658,3748,3838,3927,4015,4103,4190,4276,4362,4448,4532,
4616,4699,4781,4863,4944,5024,5104,5182,5260,5337,5413,5489,5563,5637,5710,5782,
5853,5923,5992,6061,6128,6195,6260,6325,6388,6451,6513,6573,6633,6692,6750,6806,
6862,6916,6970,7022,7074,7124,7173,7221,7268,7314,7359,7403,7445,7487,7527,7566,
7604,7641,7677,7712,7745,7777,7808,7838,7867,7894,7921,7946,7970,7992,8014,8034,
8053,8071,8087,8103,8117,8130,8142,8152,8161,8169,8176,8182,8186,8189,8191,8191,
8191,8189,8186,8182,8176,8169,8161,8152,8142,8130,8117,8103,8088,8071,8053,8034,
8014,7993,7970,7946,7921,7895,7868,7839,7810,7779,7747,7714,7679,7644,7607,7569,
7530,7490,7449,7407,7364,7319,7274,7227,7179,7130,7081,7030,6978,6925,6871,6816,
6760,6702,6644,6585,6525,6464,6402,6339,6275,6210,6145,6078,6011,5942,5873,5802,
5731,5659,5587,5513,5439,5363,5287,5211,5133,5055,4976,4896,4815,4734,4652,4569,
4486,4402,4317,4232,4146,4059,3972,3884,3796,3707,3618,3528,3437,3346,3255,3163,
3070,2978,2884,2790,2696,2602,2507,2411,2316,2220,2123,2027,1930,1832,1735,1637,
1539,1441,1342,1244,1145,1046,947,847,748,648,549,449,349,249,149,49
};

这个是之前算过的模数8192,256个点
点赞  2012-7-17 09:54
能给个查表的程序不。。或者思想
点赞  2012-7-27 16:32
非常有用!谢谢!
但是现在我遇到了一个问题。定时器时钟选SMCLK频率为16MHZ,生成SPWM的频率为20KHZ,正弦波频率为50HZ,在占空比最高的一段,有两个地方本来应该是高电平的,现在变成了低电平,波形看起来不连贯,占空比的数据检查了是对的,希望帮忙分析一下是什么原因
  • 1
点赞  2012-8-1 16:12

回复 板凳 bodao123456 的帖子

非常有用!谢谢!
但是现在我遇到了一个问题。定时器时钟选SMCLK频率为16MHZ,生成SPWM的频率为20KHZ,正弦波频率为50HZ,在占空比最高的一段,有两个地方本来应该是高电平的,现在变成了低电平,波形看起来不连贯,占空比的数据检查了是对的,希望帮忙分析一下是什么原因
  • 1
点赞  2012-8-1 16:14
顶一下
点赞  2012-8-4 16:22
引用: 原理 发表于 2012-8-1 16:14
非常有用!谢谢!
但是现在我遇到了一个问题。定时器时钟选SMCLK频率为16MHZ,生成SPWM的频率为20KHZ,正 ...

请问问题解决了吗?我也遇到这样问题了,求大神指教
点赞  2014-7-14 17:50
引用: 杭电凌云 发表于 2014-7-14 17:50
请问问题解决了吗?我也遇到这样问题了,求大神指教

解决了吗。我也遇到了这种问题
点赞  2017-7-17 12:48
引用: Domen 发表于 2012-7-17 09:15
这是方波呀……

直接输出肯定是方波
点赞  2018-8-11 10:54
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复