3783|4

725

帖子

13

TA的资源

纯净的硅(初级)

楼主
 

MSP430单片机产生SPWM波 [复制链接]

MSP430在功率电子方面的一个应用,由MSP430产生SPWM波的主程序,由于程序较多所以完整的程序在附件里。这个程序是原来做比赛的时候用的,单片机出来的波形经过整形再经过光耦以及其他变换后用来驱动后级的全桥用的。不过用MSP430来做这个感觉有点吃力,MSP430F1611的主频只有8M,细化占空比时微调不好弄。编程也有点复杂。如果你有更好的解决方案或者思路希望能一起探讨。互相交流,共同进步~
/*
函数名:  SPWM
函数功能: TA定时产生高低电平,改变定时时间即改变占空比
*/

#include  
#include "math.h"
#include "lcdcaidan.h"
#include "lcd.h"
#include "SHUZHI.h"

/******************************函数声明*****************************************/
void Clock_Init();
void time_js();
void TA_init();
void TB_init();
void  io_init();

/*******************************宏定义******************************************/
#define  uchar unsigned char
#define  uint unsigned int
#define keyin (P2IN&0x1f) //注P2.0~P2.4为输入
#define PI 3.1415926
#define shuzhi 50.0
/***************************变量定义*******************************************/
static  float Um=1.0;
uchar doit=0;
unsigned int i,j,TA_flag=1;
unsigned int k=0;
static float f=400.0;
float time1[50],time3[50];
int time2[50],time4[50];
int time[51][3];



/*======================主函数=====================*/
void main(void)
{
  WDTCTL = WDTPW + WDTHOLD;       //关看门狗
  Clock_Init();
  io_init();
  time_js();
  TA_init();  
  _EINT();
  while(1);
}

/*================ 初始化IO===========================
函数名称:
函数功能:
函数参数:
================================================*/
void  io_init()
{
  P1DIR |= BIT2;                            // P1.2 output
}

/*===================数据处理=========================
函数名称: 计算SPWM的占空比值,即是定时器A产生PWM的占空比值
函数功能:
函数参数:t=(Um/W)*(cos (k-1/N )*pi - cos (k/N)*pi )
=================================================*/
void time_js()
{
  for(k=1;k<=shuzhi;k++)
   {     
     time1[k]=((Um/(2*PI*f))*(cos((k-1)*PI/shuzhi)-cos(k*PI/shuzhi))*8000000)*0.6;
   }
  for(k=1;k<=shuzhi;k++)
   {     
     time3[k]=(((8000000.0/f/shuzhi/2.0)-time1[k])*0.5);
   }
  for(k=1;k<=shuzhi;k++)
   {     
     time2[k]=(int)time1[k];
   }
  for(k=1;k<=shuzhi;k++)
   {     
     time4[k]=(int)time3[k];
   }
  for(k=1;k<=shuzhi;k++)
  {
      time[k][0]=time4[k];//低电平
      time[k][1]=time2[k];//高电平
      time[k][2]=time4[k];

  }
}

/*===============TA的初始化设置=========================
函数名称: void TA_dingshi()
函数功能:定时器A捕获设置,用于捕获上升沿
函数参数:
===========================================*/
void TA_init()
{   
  TACCR0 = 5;
  TACTL = TASSEL_2 + MC_1;  
  TACCTL0 = CCIE;
}

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

   if(TA_flag==150)
   {
     TA_flag=1;
   }
   i=TA_flag/3;
   j=TA_flag%3;
   if(i<50)
   {
     i++;
   }
   else if(i>50)
   {
     i--;
   }
   TACCR0 = time[j];
   if(j==1)
   {
      //P1OUT |= BIT2;
     P1OUT &= ~BIT2;
   }
   else
   {
      //P1OUT &= ~BIT2;
      P1OUT |= BIT2;
   }   
   TA_flag++;   
}
/******************************时钟模块*****************************************
函数功能:初始化XT2时钟函数
*******************************************************************************/
void Clock_Init()
{
   uint iq0;

   BCSCTL1 &= ~XT2OFF;     //打开XT2振荡器

   do
   {
      IFG1 &= ~OFIFG; //清除振荡器失效标志
      for (iq0 = 0xFF; iq0 > 0; iq0--); //延时,等待XT2起振
   }

   while ((IFG1 & OFIFG) != 0); //判断XT2是否起振

   BCSCTL2 = SELM_2 + SELS;        //选择MCLK、SMCLK为XT2
                                        //为高速时钟 不分频,均为8M
}

               

最新回复

附件   详情 回复 发表于 2015-11-26 21:56
 
点赞 关注

回复
举报

2453

帖子

19

TA的资源

五彩晶圆(中级)

沙发
 
附件在哪里啊,附件在哪里
 
 

回复

101

帖子

1

TA的资源

一粒金砂(中级)

板凳
 
可以用5529吗?
 
 
 

回复

9

帖子

0

TA的资源

一粒金砂(初级)

4
 
很好的资料
 
 
 

回复

3

帖子

0

TA的资源

一粒金砂(初级)

5
 
附件
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表