最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 正文

三种SPWM算法源码

来源:动视网 责编:小OO 时间:2025-10-01 02:03:48
文档

三种SPWM算法源码

三种SPWM算法源码.txt再过几十年,我们来相会,送到火葬场,全部烧成灰,你一堆,我一堆,谁也不认识谁,全部送到农村做化肥。头文件spwm.h/***************普通SPWM程序************************/#ifndef_NORMAL_SPWM_H#define_NORMAL_SPWM_H//SPWM表结构体三项公用一个表typedefstruct_SPWM_table{Uint16TableSize;//表大小即表中所有数据Uint16SpwmSize;/
推荐度:
导读三种SPWM算法源码.txt再过几十年,我们来相会,送到火葬场,全部烧成灰,你一堆,我一堆,谁也不认识谁,全部送到农村做化肥。头文件spwm.h/***************普通SPWM程序************************/#ifndef_NORMAL_SPWM_H#define_NORMAL_SPWM_H//SPWM表结构体三项公用一个表typedefstruct_SPWM_table{Uint16TableSize;//表大小即表中所有数据Uint16SpwmSize;/
三种SPWM算法源码.txt再过几十年,我们来相会,送到火葬场,全部烧成灰,你一堆,我一堆,谁也不认识谁,全部送到农村做化肥。

头文件  spwm.h

/***************普通SPWM程序************************/

#ifndef _NORMAL_SPWM_H

#define _NORMAL_SPWM_H

//SPWM 表结构体 三项公用一个表 

typedef struct _SPWM_table

{

    Uint16 TableSize;     //表大小 即表中所有数据 

    Uint16 SpwmSize;      //SPWM表大小 

    volatile Uint16 *p_SPWM_A;     //A相指针

    volatile Uint16 *p_SPWM_B;     //B相指针

    volatile Uint16 *p_SPWM_C;     //C相指针

    Uint16 *p_HeadTable;  //表头指针  指向SPWM表

}SPWM_TABLE;

extern SPWM_TABLE g_SPWM_Table; //全局SPWM表 

void InitSpwm(void);

void StartSpwm(void);

interrupt void ISR_T1UFINT_NORMAL_FUNC(void);

void CalcSpwmWithSym(float32 a/*调制比*/,float32 w_Hz/*调制频率*/,float32 z_Hz/*载波频率*/);

void CalcSpwmWithImSym(float32 a/*调制比*/,Uint16 w_Hz/*调制频率*/,Uint32 z_Hz/*载波频率*/);

void CalcSpwmWithArea(float32 a/*调制比*/,Uint16 w_Hz/*调制频率*/,Uint32 z_Hz/*载波频率*/);

#endif

源文件

#include "DSP281x.h"

#include "SPWM.h"

#include "float.h"

#include "math.h"

#define MAX_BUF  400

#define PI   3.1415926

Uint16 g_spwm_data[MAX_BUF]; //表的数据存储

SPWM_TABLE g_SPWM_Table; //全局SPWM表 

//SPWM初始化程序

void InitSpwm(void)

    g_SPWM_Table.p_HeadTable = g_spwm_data ; //指向数据表

    g_SPWM_Table.TableSize = MAX_BUF; //存储表的大小

    EALLOW;        

    PieVectTable.T1UFINT=&ISR_T1UFINT_NORMAL_FUNC;

    EDIS;

    IER|=M_INT2;  //开中断2

    PieCtrlRegs.PIEIER2.bit.INTx6=1; //开下益中断

    EvaRegs.EVAIFRA.bit.T1UFINT=1;   //清楚中断标志

    PieCtrlRegs.PIEACK.bit.ACK2 = 1;   //响应同组中断

}

void StartSpwm(void)

{

  EvaRegs.EVAIMRA.bit.T1UFINT = 1; //打开下益 中断

}

//对称规则采样法

void CalcSpwmWithSym(float32 a/*调制比*/,float32 w_Hz/*调制频率*/,float32 z_Hz/*载波频率*/)

{

    Uint16 tmp_PR; //T1周期值 

    volatile Uint16 i,n,*p;

    float32 m;

    m = z_Hz/w_Hz ; //求出载波比

    g_SPWM_Table.SpwmSize =(Uint16)m;

    tmp_PR = g_T1_Clk /(2*z_Hz);  //计算出其周期值

    p=g_SPWM_Table.p_HeadTable; //得到数据表头指针

for(i=0;i<(Uint16)m;i++)

    {

        n=tmp_PR*(0.5-0.5*a*sin((i+0.75)*2*PI/m));

        *p=n;

        p++;

    }

}

//不对称规则采样法

void CalcSpwmWithImSym(float32 a/*调制比*/,Uint16 w_Hz/*调制频率*/,Uint32 z_Hz/*载波频率*/)

{

    Uint16 tmp_PR; //T1周期值 

    volatile Uint16 i,n,*p;

    float32 m;

    m = z_Hz/w_Hz ; //求出载波比

    g_SPWM_Table.SpwmSize =(Uint16)m;

    tmp_PR = g_T1_Clk /(2*z_Hz);  //计算出其周期值

    p=g_SPWM_Table.p_HeadTable; //得到数据表头指针

for(i=0;i<(Uint16)m;i++)

    {

        n=tmp_PR*(0.5-0.25*a*(sin((i+0.25)*2*PI/m)+sin((i+0.75)*2*PI/m)));

        *p=n;

        p++;

    }

}

//面积法 

void CalcSpwmWithArea(float32 a/*调制比*/,Uint16 w_Hz/*调制频率*/,Uint32 z_Hz/*载波频率*/)

{

    //Uint16 tmp_PR; //T1周期值 

    volatile Uint16 i,n,*p;

    float32 m,n1,n2;

    m = z_Hz/w_Hz ; //求出载波比

    g_SPWM_Table.SpwmSize =(Uint16)m;

    //tmp_PR = g_T1_Clk /(2*z_Hz);  //计算出其周期值

    p=g_SPWM_Table.p_HeadTable; //得到数据表头指针

    n=m;

    m/=2; //除去一半 计算半波 

    n1=(float32)g_T1_Clk/(8.0*m*w_Hz); // 计算首相

    n2=(float32)g_T2_Clk/(8.0*PI*w_Hz)*a;

for(i=0;i    {

       *p=n1-n2*(cos(i*PI/m)-cos((i+1)*PI/m));

       p++;

    }

   

}

//中断程序

interrupt void ISR_T1UFINT_NORMAL_FUNC(void)

{

    static Uint16 cnt=0 ; //计数

    EvaRegs.CMPR1 = g_spwm_data[cnt];

    cnt++;

if(cnt>=g_SPWM_Table.SpwmSize)

    cnt = 0;

    EvaRegs.EVAIFRA.bit.T1UFINT=1;

    PieCtrlRegs.PIEACK.bit.ACK2 = 1;  

    EINT;

}

文档

三种SPWM算法源码

三种SPWM算法源码.txt再过几十年,我们来相会,送到火葬场,全部烧成灰,你一堆,我一堆,谁也不认识谁,全部送到农村做化肥。头文件spwm.h/***************普通SPWM程序************************/#ifndef_NORMAL_SPWM_H#define_NORMAL_SPWM_H//SPWM表结构体三项公用一个表typedefstruct_SPWM_table{Uint16TableSize;//表大小即表中所有数据Uint16SpwmSize;/
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top