带有锁相环的SPWM算法程序Word格式文档下载.docx

上传人:b****4 文档编号:7455163 上传时间:2023-05-08 格式:DOCX 页数:19 大小:17.31KB
下载 相关 举报
带有锁相环的SPWM算法程序Word格式文档下载.docx_第1页
第1页 / 共19页
带有锁相环的SPWM算法程序Word格式文档下载.docx_第2页
第2页 / 共19页
带有锁相环的SPWM算法程序Word格式文档下载.docx_第3页
第3页 / 共19页
带有锁相环的SPWM算法程序Word格式文档下载.docx_第4页
第4页 / 共19页
带有锁相环的SPWM算法程序Word格式文档下载.docx_第5页
第5页 / 共19页
带有锁相环的SPWM算法程序Word格式文档下载.docx_第6页
第6页 / 共19页
带有锁相环的SPWM算法程序Word格式文档下载.docx_第7页
第7页 / 共19页
带有锁相环的SPWM算法程序Word格式文档下载.docx_第8页
第8页 / 共19页
带有锁相环的SPWM算法程序Word格式文档下载.docx_第9页
第9页 / 共19页
带有锁相环的SPWM算法程序Word格式文档下载.docx_第10页
第10页 / 共19页
带有锁相环的SPWM算法程序Word格式文档下载.docx_第11页
第11页 / 共19页
带有锁相环的SPWM算法程序Word格式文档下载.docx_第12页
第12页 / 共19页
带有锁相环的SPWM算法程序Word格式文档下载.docx_第13页
第13页 / 共19页
带有锁相环的SPWM算法程序Word格式文档下载.docx_第14页
第14页 / 共19页
带有锁相环的SPWM算法程序Word格式文档下载.docx_第15页
第15页 / 共19页
带有锁相环的SPWM算法程序Word格式文档下载.docx_第16页
第16页 / 共19页
带有锁相环的SPWM算法程序Word格式文档下载.docx_第17页
第17页 / 共19页
带有锁相环的SPWM算法程序Word格式文档下载.docx_第18页
第18页 / 共19页
带有锁相环的SPWM算法程序Word格式文档下载.docx_第19页
第19页 / 共19页
亲,该文档总共19页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

带有锁相环的SPWM算法程序Word格式文档下载.docx

《带有锁相环的SPWM算法程序Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《带有锁相环的SPWM算法程序Word格式文档下载.docx(19页珍藏版)》请在冰点文库上搜索。

带有锁相环的SPWM算法程序Word格式文档下载.docx

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)

EPwm2Regs.TBPRD=sp;

//SettimerperiodspTBCLKs

EPwm2Regs.TBPHS.half.TBPHS=0x0000;

EPwm2Regs.TBCTR=0x0000;

EPwm2Regs.CMPA.half.CMPA=sp/2;

//SetcompareAvalue

EPwm2Regs.CMPB=0;

//SetCompareBvalue

EPwm2Regs.TBCTL.bit.CTRMODE=TB_COUNT_UPDOWN;

EPwm2Regs.TBCTL.bit.PHSEN=TB_DISABLE;

EPwm2Regs.TBCTL.bit.HSPCLKDIV=TB_DIV1;

EPwm2Regs.TBCTL.bit.CLKDIV=TB_DIV1;

EPwm2Regs.CMPCTL.bit.SHDWAMODE=CC_SHADOW;

EPwm2Regs.CMPCTL.bit.SHDWBMODE=CC_SHADOW;

EPwm2Regs.CMPCTL.bit.LOADAMODE=CC_CTR_ZERO;

EPwm2Regs.CMPCTL.bit.LOADBMODE=CC_CTR_ZERO;

EPwm2Regs.AQCTLA.bit.CAU=AQ_SET;

EPwm2Regs.AQCTLA.bit.CAD=AQ_CLEAR;

EPwm2Regs.AQCTLB.bit.CBU=AQ_CLEAR;

EPwm2Regs.AQCTLB.bit.CBD=AQ_SET;

EPwm2Regs.DBCTL.bit.OUT_MODE=0x3;

//输出B,A翻转看原理图

EPwm2Regs.DBCTL.bit.POLSEL=0x2;

//B取反逻辑

EPwm2Regs.DBFED=50;

EPwm2Regs.DBRED=70;

EPwm2Regs.ETSEL.bit.INTSEL=ET_CTR_ZERO;

EPwm2Regs.ETSEL.bit.INTEN=1;

EPwm2Regs.ETPS.bit.INTPRD=ET_3RD;

<

/pre>

prename="

code"

class="

objc"

>

/*#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);

voidCONVERT(void)

AD_START=0;

DELAY_US(3);

while(AD_BUSY==1);

/*voidREAD_AD(void)

}*/

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)

GpioCtrlRegs.GPAPUD.bit.GPIO5=1;

//disablepulluponGPIO5

GpioCtrlRegs.GPAMUX1.bit.GPIO5=0;

//GPI05=GPI05

GpioCtrlRegs.GPADIR.bit.GPIO5=1;

//GPIO5=output

voidInit6Gpio(void)

GpioCtrlRegs.GPAPUD.bit.GPIO6=1;

//disablepulluponGPIO6

GpioCtrlRegs.GPAMUX1.bit.GPIO6=0;

//GPI06=GPI06

GpioCtrlRegs.GPADIR.bit.GPIO6=0;

//GPIO6=input

stdio.h"

math.h"

float.h"

//#include"

InitEPwmXExample.c"

#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中断向量表

/************************************************************************/

PieVectTable.EPWM1_INT=&

epwm1_isr;

//中断服务程序入口地址

PieVectTable.EPWM2_INT=&

epwm2_isr;

//PieVectTable.XINT13=&

cpu_timer1_isr;

//================================================

SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC=0;

InitEPwm1Example();

//产生epwm的配置

InitEPwm2Example();

SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC=1;

//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;

interruptvoidepwm2_isr(void)

if(k1<

EPwm2Regs.CMPA.half.CMPA=a[k1];

//EPwm2Regs.CMPB=a[k1];

k1=k1+1;

else

k1=0;

EPwm2Regs.ETCLR.bit.INT=1;

//Acknowledgethisinterrupttoreceivemoreinterruptsfromgroup3

/*

interruptvoidcpu_timer1_isr(void)

{

AD_START=0;

}

*/

voidsintable()

float32M=0.8;

float32q,j;

float64l;

Uint16n;

for(n=0;

NX;

a[n]=0;

n=0;

while(n<

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;

sp-100)

a[n]=sp-100;

a[n]=100;

n=n+1;

//=====================AD7656======================================

float32READ_AD(void)

float32ADC_F[6];

//Uint16ADC_TMP;

ADC_TMP[0]=ADC_DATA&

0XFFFF;

//读取通道1的数值

ADC_TMP[1]=ADC_DATA&

//读取通道2的数值

ADC_TMP[2]=ADC_DATA&

//读取通道3的数值

ADC_TMP[3]=ADC_DATA&

//读取通道4的数值

ADC_TMP[4]=ADC_DATA&

//读取通道5的数值

ADC_TMP[5]=ADC_DATA&

//读取通道6的数值

if((ADC_TMP[0]&

0X8000)!

=0X8000)//转换通道1结果

ADC_F[0]=((float)ADC_TMP[0])/((float)0X7FFF)*(10.0);

ADC_F[0]=((float)(0XFFFF-ADC_TMP[0]))/((float)0X7FFF)*(-10.0);

if((ADC_TMP[1]&

=0X8000)//转换通道2结果

ADC_F[1]=((float)ADC_TMP[1])/((float)0X7FFF)*(10.0);

ADC_F[1]=((float)(0XFFFF-ADC_TMP[1]))/((float)0X7FFF)*(-10.0);

i

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 初中教育 > 数学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2