带有锁相环的SPWM算法程序.docx
- 文档编号:10766440
- 上传时间:2023-02-22
- 格式:DOCX
- 页数:19
- 大小:17.31KB
带有锁相环的SPWM算法程序.docx
《带有锁相环的SPWM算法程序.docx》由会员分享,可在线阅读,更多相关《带有锁相环的SPWM算法程序.docx(19页珍藏版)》请在冰豆网上搜索。
带有锁相环的SPWM算法程序
锁相的SPWM算法程序
#include"DSP2833x_Device.h"//DSP2833xHeaderfileIncludeFile
#include"DSP2833x_Examples.h"//DSP2833xExamplesIncludeFile
#defineCPU_CLK50e6
#definePWM_CLK6000//Ifdifffreq.desired,changefreqhere.
#definespCPU_CLK/(2*PWM_CLK)
voidInitEPwm1Example(void);
voidInitEPwm2Example(void);
voidInitEPwm1Example(void)
{
//SetupTBCLK
EPwm1Regs.TBPRD=sp;//Settimerperiod
EPwm1Regs.TBPHS.half.TBPHS=0x0000;//Phaseis0
EPwm1Regs.TBCTR=0x0000;//Clearcounter
//SetComparevalues
EPwm1Regs.CMPA.half.CMPA=sp/2;//SetcompareAvalue
EPwm1Regs.CMPB=0;//SetCompareBvalue
//Setupcountermode
EPwm1Regs.TBCTL.bit.CTRMODE=TB_COUNT_UPDOWN;//CountupTB_COUNT_UPDOWN
EPwm1Regs.TBCTL.bit.PHSEN=TB_DISABLE;//Disablephaseloading
EPwm1Regs.TBCTL.bit.HSPCLKDIV=TB_DIV1;//ClockratiotoSYSCLKOUT
EPwm1Regs.TBCTL.bit.CLKDIV=TB_DIV1;
//Setupshadowing
EPwm1Regs.CMPCTL.bit.SHDWAMODE=CC_SHADOW;
EPwm1Regs.CMPCTL.bit.SHDWBMODE=CC_SHADOW;
EPwm1Regs.CMPCTL.bit.LOADAMODE=CC_CTR_ZERO;//LoadonZero
EPwm1Regs.CMPCTL.bit.LOADBMODE=CC_CTR_ZERO;
//Setactions
EPwm1Regs.AQCTLA.bit.CAU=AQ_SET;//SetPWM1AoneventA,upcount
EPwm1Regs.AQCTLA.bit.CAD=AQ_CLEAR;//ClearPWM1AoneventA,downcount
EPwm1Regs.AQCTLB.bit.CBU=AQ_CLEAR;//SetPWM1BoneventB,upcount
EPwm1Regs.AQCTLB.bit.CBD=AQ_SET;//ClearPWM1BoneventB,downcount
EPwm1Regs.DBCTL.bit.OUT_MODE=0x3;//输出B,A翻转看原理图
EPwm1Regs.DBCTL.bit.POLSEL=0x2;//B取反逻辑
EPwm1Regs.DBFED=50;
EPwm1Regs.DBRED=70;
//InterruptwherewewillchangetheCompareValues
EPwm1Regs.ETSEL.bit.INTSEL=ET_CTR_ZERO;//SelectINTonZeroevent
EPwm1Regs.ETSEL.bit.INTEN=1;//EnableINT
EPwm1Regs.ETPS.bit.INTPRD=ET_3RD;//GenerateINTon3rdevent
}
voidInitEPwm2Example(void)
{
//SetupTBCLK
EPwm2Regs.TBPRD=sp;//SettimerperiodspTBCLKs
EPwm2Regs.TBPHS.half.TBPHS=0x0000;//Phaseis0
EPwm2Regs.TBCTR=0x0000;//Clearcounter
//SetComparevalues
EPwm2Regs.CMPA.half.CMPA=sp/2;//SetcompareAvalue
EPwm2Regs.CMPB=0;//SetCompareBvalue
//Setupcountermode
EPwm2Regs.TBCTL.bit.CTRMODE=TB_COUNT_UPDOWN;//CountupTB_COUNT_UPDOWN
EPwm2Regs.TBCTL.bit.PHSEN=TB_DISABLE;//Disablephaseloading
EPwm2Regs.TBCTL.bit.HSPCLKDIV=TB_DIV1;//ClockratiotoSYSCLKOUT
EPwm2Regs.TBCTL.bit.CLKDIV=TB_DIV1;
//Setupshadowing
EPwm2Regs.CMPCTL.bit.SHDWAMODE=CC_SHADOW;
EPwm2Regs.CMPCTL.bit.SHDWBMODE=CC_SHADOW;
EPwm2Regs.CMPCTL.bit.LOADAMODE=CC_CTR_ZERO;//LoadonZero
EPwm2Regs.CMPCTL.bit.LOADBMODE=CC_CTR_ZERO;
//Setactions
EPwm2Regs.AQCTLA.bit.CAU=AQ_SET;//SetPWM1AoneventA,upcount
EPwm2Regs.AQCTLA.bit.CAD=AQ_CLEAR;//ClearPWM1AoneventA,downcount
EPwm2Regs.AQCTLB.bit.CBU=AQ_CLEAR;//SetPWM1BoneventB,upcount
EPwm2Regs.AQCTLB.bit.CBD=AQ_SET;//ClearPWM1BoneventB,downcount
EPwm2Regs.DBCTL.bit.OUT_MODE=0x3;//输出B,A翻转看原理图
EPwm2Regs.DBCTL.bit.POLSEL=0x2;//B取反逻辑
EPwm2Regs.DBFED=50;
EPwm2Regs.DBRED=70;
//InterruptwherewewillchangetheCompareValues
EPwm2Regs.ETSEL.bit.INTSEL=ET_CTR_ZERO;//SelectINTonZeroevent
EPwm2Regs.ETSEL.bit.INTEN=1;//EnableINT
EPwm2Regs.ETPS.bit.INTPRD=ET_3RD;//GenerateINTon3rdevent
}
#include"DSP2833x_Examples.h"//DSP2833xExamplesIncludeFile
/*#defineAD_BUSYGpioDataRegs.GPADAT.bit.GPIO6
#defineAD_STARTGpioDataRegs.GPADAT.bit.GPIO5
#defineAD_RESETGpioDataRegs.GPADAT.bit.GPIO4
*/
voidRESET_AD(void);
voidCONVERT(void);
//voidREAD_AD(void);
voidRESET_AD(void)
{
AD_RESET=0;
asm("RPT#10||NOP");
AD_RESET=1;
AD_START=1;
DELAY_US
(1);
AD_RESET=0;
}
voidCONVERT(void)
{
AD_START=0;
DELAY_US
(1);
AD_START=1;
DELAY_US(3);
while(AD_BUSY==1);
}
/*voidREAD_AD(void)
{
}*/
#include"DSP2833x_Examples.h"//DSP2833xExamplesIncludeFile
voidInit4Gpio(void);
voidInit5Gpio(void);
voidInit6Gpio(void);
voidInit4Gpio(void)
{
EALLOW;
GpioCtrlRegs.GPAPUD.bit.GPIO4=1;//disablepulluponGPIO4
GpioCtrlRegs.GPAMUX1.bit.GPIO4=0;//GPI04=GPI04
GpioCtrlRegs.GPADIR.bit.GPIO4=1;//GPIO4=output
EDIS;
}
voidInit5Gpio(void)
{
EALLOW;
GpioCtrlRegs.GPAPUD.bit.GPIO5=1;//disablepulluponGPIO5
GpioCtrlRegs.GPAMUX1.bit.GPIO5=0;//GPI05=GPI05
GpioCtrlRegs.GPADIR.bit.GPIO5=1;//GPIO5=output
EDIS;
}
voidInit6Gpio(void)
{
EALLOW;
GpioCtrlRegs.GPAPUD.bit.GPIO6=1;//disablepulluponGPIO6
GpioCtrlRegs.GPAMUX1.bit.GPIO6=0;//GPI06=GPI06
GpioCtrlRegs.GPADIR.bit.GPIO6=0;//GPIO6=input
EDIS;
}
#include"DSP2833x_Examples.h"//DSP2833xExamplesIncludeFile
#include"stdio.h"
#include"math.h"
#include"float.h"
//#include"InitEPwmXExample.c"
#defineCPU_CLK50e6
#definePWM_CLK6000//Ifdifffreq.desired,changefreqhere.
#definespCPU_CLK/(2*PWM_CLK)
#defineADC_DATA*(Uint16*)0x004000
//Uint16*AddrStart=(Uint16*)0x100000;
//宏定义
#definePI3.1415926
#defineNX120
//函数申明
voidsintable(void);
float32READ_AD(void);
interruptvoidepwm1_isr(void);
interruptvoidepwm2_isr(void);
interruptvoidcpu_timer1_isr(void);
//参数定义
longdoublea[NX];
unsignedintk0,k1;
Uint16ADC_TMP[6];
Uint16simpletmp[6];
float32simpledata[80];
voidmain(void)
{
InitSysCtrl();//初始化系统函数
InitEPwm1Gpio();//初始化io口为epwm功能
InitEPwm2Gpio();
//初始化gpio,即AD的一些控制信号
Init4Gpio();
Init5Gpio();
Init6Gpio();
//InitXintf16Gpio();
InitXintf();
DINT;
IER=0x0000;//禁止CPU中断
IFR=0x0000;//清除CPU中断标志
/*************************************************************************/
InitPieCtrl();//初始化PIE控制寄存器
InitPieVectTable();//初始化PIE中断向量表
/************************************************************************/
EALLOW;
PieVectTable.EPWM1_INT=&epwm1_isr;//中断服务程序入口地址
PieVectTable.EPWM2_INT=&epwm2_isr;
//PieVectTable.XINT13=&cpu_timer1_isr;
EDIS;
/************************************************************************/
//================================================
EALLOW;
SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC=0;
EDIS;
InitEPwm1Example();//产生epwm的配置
InitEPwm2Example();//产生epwm的配置
EALLOW;
SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC=1;
EDIS;
//================================================
//InitCpuTimers();
//ConfigureCPU-Timer0,1,and2tointerrupteverysecond:
//100MHzCPUFreq,1secondPeriod(inuSeconds)
//ConfigCpuTimer(&CpuTimer1,100,250);//4000hz
//CpuTimer1Regs.TCR.all=0x4001;//Usewrite-onlyinstructiontosetTSSbit=0
//EnableCPUINT3whichisconnectedtoEPWM1-3INT:
IER|=M_INT3;
//IER|=M_INT13;tint1
//EnableEPWMINTninthePIE:
Group3interrupt1-3
PieCtrlRegs.PIEIER3.bit.INTx1=1;
PieCtrlRegs.PIEIER3.bit.INTx2=1;
//====================================================
sintable();
RESET_AD();
//====================================================
EINT;//开全局中断
ERTM;//开实时中断
for(;;)
{
Uint16n;
//第一次转换
CONVERT();
simpledata[0]=READ_AD();
DELAY_US(217);
AD_START=1;
DELAY_US
(1);
AD_RESET=0;
for(n=1;n<80;n++)
{
CONVERT();
simpledata[n]=READ_AD();
if(simpledata[n]>0&simpledata[n-1]<0)
{
k0=0;
k1=0;
}
DELAY_US(217);
AD_START=1;
DELAY_US
(1);
AD_RESET=0;
}
n=1;
}
}
interruptvoidepwm1_isr(void)
{
if(k0<=NX)
{
EPwm1Regs.CMPA.half.CMPA=a[k0];
k0=k0+1;
}
else
{
k0=0;
}
EPwm1Regs.ETCLR.bit.INT=1;
PieCtrlRegs.PIEACK.all=PIEACK_GROUP3;
EINT;//开全局中断
}
interruptvoidepwm2_isr(void)
{
if(k1<=NX)
{
EPwm2Regs.CMPA.half.CMPA=a[k1];
//EPwm2Regs.CMPB=a[k1];
k1=k1+1;
}
else
{
k1=0;
}
EPwm2Regs.ETCLR.bit.INT=1;
//Acknowledgethisinterrupttoreceivemoreinterruptsfromgroup3
PieCtrlRegs.PIEACK.all=PIEACK_GROUP3;
EINT;//开全局中断
}
/*
interruptvoidcpu_timer1_isr(void)
{
AD_START=0;
DELAY_US
(1);
}
*/
voidsintable()
{
float32M=0.8;
float32q,j;
float64l;
Uint16n;
for(n=0;n { a[n]=0; } n=0; while(n<=NX) { q=(n+0.75); q=q*2*PI; q/=120; j=sin(q); //l=sp*(1+M*j);//M为调制比//计算占空比表达式 l=sp*(0.5+0.5*M*j); if(l>=100&l<=sp-100) { a[n]=l; } else { if(l>sp-100) a[n]=sp-100; else a[n]=100; } n=n+1; } } //=====================AD7656====================================== float32READ_AD(void) { float32ADC_F[6]; //Uint16ADC_TMP; ADC_TMP[0]=ADC_DATA&0XFFFF;//读取通道1的数值 DELAY_US (1); ADC_TMP[1]=ADC_DATA&0XFFFF;//读取通道2的数值 DELAY_US (1); ADC_TMP[2]=ADC_DATA&0XFFFF;//读取通道3的数值 DELAY_US (1); ADC_TMP[3]=ADC_DATA&0XFFFF;//读取通道4的数值 DELAY_US (1); ADC_TMP[4]=ADC_DATA&0XFFFF;//读取通道5的数值 DELAY_US (1); ADC_TMP[5]=ADC_DATA&0XFFFF;//读取通道6的数值 if((ADC_TMP[0]&0X8000)! =0X8000)//转换通道1结果 { ADC_F[0]=((float)ADC_TMP[0])/((float)0X7FFF)*(10.0); } else { ADC_F[0]=((float)(0XFFFF-ADC_TMP[0]))/((float)0X7FFF)*(-10.0); } if((ADC_TMP[1]&0X8000)! =0X8000)//转换通道2结果 { ADC_F[1]=((float)ADC_TMP[1])/((float)0X7FFF)*(10.0); } else { ADC_F[1]=((float)(0XFFFF-ADC_TMP[1]))/((float)0X7FFF)*(-10.0); } i
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 带有 锁相环 SPWM 算法 程序
![提示](https://static.bdocx.com/images/bang_tan.gif)