采样SPWM程序.docx

上传人:b****3 文档编号:4831550 上传时间:2023-05-07 格式:DOCX 页数:22 大小:25.91KB
下载 相关 举报
采样SPWM程序.docx_第1页
第1页 / 共22页
采样SPWM程序.docx_第2页
第2页 / 共22页
采样SPWM程序.docx_第3页
第3页 / 共22页
采样SPWM程序.docx_第4页
第4页 / 共22页
采样SPWM程序.docx_第5页
第5页 / 共22页
采样SPWM程序.docx_第6页
第6页 / 共22页
采样SPWM程序.docx_第7页
第7页 / 共22页
采样SPWM程序.docx_第8页
第8页 / 共22页
采样SPWM程序.docx_第9页
第9页 / 共22页
采样SPWM程序.docx_第10页
第10页 / 共22页
采样SPWM程序.docx_第11页
第11页 / 共22页
采样SPWM程序.docx_第12页
第12页 / 共22页
采样SPWM程序.docx_第13页
第13页 / 共22页
采样SPWM程序.docx_第14页
第14页 / 共22页
采样SPWM程序.docx_第15页
第15页 / 共22页
采样SPWM程序.docx_第16页
第16页 / 共22页
采样SPWM程序.docx_第17页
第17页 / 共22页
采样SPWM程序.docx_第18页
第18页 / 共22页
采样SPWM程序.docx_第19页
第19页 / 共22页
采样SPWM程序.docx_第20页
第20页 / 共22页
亲,该文档总共22页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

采样SPWM程序.docx

《采样SPWM程序.docx》由会员分享,可在线阅读,更多相关《采样SPWM程序.docx(22页珍藏版)》请在冰点文库上搜索。

采样SPWM程序.docx

采样SPWM程序

《采用不对称规则采样法生成三相SPWM波的开环调速控制程序》

本例载波频率为20KHz,或载波周期为50μs。

DSP晶振10MHz,内部4倍频,时钟频率为40MHz,计数周期为25ns。

假设调制波频率由外部输入(1~50Hz),并转换成合适的格式(本例为Q4格式)。

调制系数M为0~0.9。

死区时间1.6μs。

最小删除脉宽3μs。

主程序的工作是根据输入的调制波频率计算N、2N和M值。

定时器采用连续增减计数方式。

利用下溢中断,每个载波周期都产生一次中断,在每次中断都根据以下公式分别计算出下一个载波周期的三个比较值。

并比较正负脉宽是否小于3μs,如果小于3μs则删除该脉冲。

本例中的常数:

π倍载波周期:

π50⨯10-6⨯228=42166秒,Q28格式

载波频率:

20000Hz⨯2=40000Hz,Q1格式;

定时器周期值:

50μs/2/25ns=1000个计数周期;

调制系数对调制波频率的比例系数:

0.9/50=0.018⨯221=37749,Q21格式;

最小正脉宽:

3μs/25ns=120个计数周期;

最小负脉宽:

47μs/25ns=1880个计数周期;

弧度换算成度系数:

360/2π⨯24=917,Q4格式;

2π/3⨯212=8579弧度,Q12格式;

4π/3⨯212=17157弧度,Q12格式;

2π⨯212=25736弧度,Q12格式;

.include"240x.h";寄存器地址

.global_c_int0;全局化标号

;--------------------------------------以下定义变量-----------------------------------------------------------

ST0.set0;状态寄存器ST0

ST1.set1;状态寄存器ST1

.bssTEMP,1;中间变量

.bssTEMP1,1;中间变量

.bssTEMP2,1;中间变量

.bssTEMP3,1;中间变量

.bssTEMP4,1;中间变量

.bssTEMP5,1;中间变量

.bssTEMP6,1;中间变量

.bssK_,1;第K个采样点

.bssPITC,1;π乘载波周期=42166,Q28格式

.bssF2M,1;调制系数对调制波频率的比例系数,Q21格式

.bssT_QUA,1;T_carr/4的定时器计数脉冲个数,Q0格式

.bssF_CARR,1;载波频率,Q1格式

.bssPMIN,1;最小正脉宽(脉冲个数),Q0格式

.bssPMAX,1;最小负脉宽(脉冲个数),Q0格式

.bssF_MODU,1;调制波频率,Q4格式

.bssN_,1;每个调制波周期的载波脉冲数,Q0格式

.bssM_,1;M值

.bssKMAX,1;2N,Q0格式

.bssATOD,1;弧度换算成度系数917,Q4格式

.bssACCH,1;ACC高字保存单元

.bssACCL,1;ACC低字保存单元

.bssAR0_SAVE,1;AR0保存单元

.bssP_HI,1;P寄存器高字保存单元

.bssP_LO,1;P寄存器低字保存单元

;--------------------------------------CONTEXT段,定义保护现场数据区----------------------------

ST0_SAVE.usect".context",1;状态寄存器ST0保存单元

ST1_SAVE.usect".context",1;状态寄存器ST1保存单元

;--------------------------------------定义主向量段---------------------------------------------

.sect".vectors";定义主向量段

RESETB_c_int0;地址0000H,复位,优先级1

INT1BPHANTOM;地址0002H,INT1,优先级4

INT2B_C_INT2;地址0004H,INT2,优先级5

INT3BPHANTOM;地址0006H,INT3,优先级6

INT4BPHANTOM;地址0008H,INT4,优先级7

INT5BPHANTOM;地址000AH,INT5,优先级8

INT6BPHANTOM;地址000CH,INT6,优先级9

RESERVEDBPHANTOM;地址000EH,测试,优先级10

SW_INT8BPHANTOM;地址0010H,自定义软中断

SW_INT9BPHANTOM;地址0012H,自定义软中断

SW_INT10BPHANTOM;地址0014H,自定义软中断

SW_INT11BPHANTOM;地址0016H,自定义软中断

SW_INT12BPHANTOM;地址0018H,自定义软中断

SW_INT13BPHANTOM;地址001AH,自定义软中断

SW_INT14BPHANTOM;地址001CH,自定义软中断

SW_INT15BPHANTOM;地址001EH,自定义软中断

SW_INT16BPHANTOM;地址0020H,自定义软中断

TRAPBPHANTOM;地址0022H,TRAP矢量

NMIBPHANTOM;地址0024H,NMI,优先级3

EMU_TRAPBPHANTOM;地址0026H,仿真Trap,优先级2

SW_INT20BPHANTOM;地址0028H,自定义软中断

SW_INT21BPHANTOM;地址002AH,自定义软中断

SW_INT22BPHANTOM;地址002CH,自定义软中断

SW_INT23BPHANTOM;地址002EH,自定义软中断

SW_INT24BPHANTOM;地址0030H,自定义软中断

SW_INT25BPHANTOM;地址0032H,自定义软中断

SW_INT26BPHANTOM;地址0034H,自定义软中断

SW_INT27BPHANTOM;地址0036H,自定义软中断

SW_INT28BPHANTOM;地址0038H,自定义软中断

SW_INT29BPHANTOM;地址003AH,自定义软中断

SW_INT30BPHANTOM;地址003CH,自定义软中断

SW_INT31BPHANTOM;地址003EH,自定义软中断

;--------------------------------------定义子向量段----------------------------------------------------

.sect".pvecs";定义子向量段

PVECTORSBPHANTOM;偏移地址0000H

BPHANTOM;偏移地址0001H

BPHANTOM;偏移地址0002H

BPHANTOM;偏移地址0003H

BPHANTOM;偏移地址0004H

BPHANTOM;偏移地址0005H

BPHANTOM;偏移地址0006H

BPHANTOM;偏移地址0007H

BPHANTOM;偏移地址0008H

BPHANTOM;偏移地址0009H

BPHANTOM;偏移地址000AH

BPHANTOM;偏移地址000BH

BPHANTOM;偏移地址000CH

BPHANTOM;偏移地址000DH

BPHANTOM;偏移地址000EH

BPHANTOM;偏移地址000FH

BPHANTOM;偏移地址0010H

BPHANTOM;偏移地址0011H

BPHANTOM;偏移地址0012H

BPHANTOM;偏移地址0013H

BPHANTOM;偏移地址0014H

BPHANTOM;偏移地址0015H

BPHANTOM;偏移地址0016H

BPHANTOM;偏移地址0017H

BPHANTOM;偏移地址0018H

BPHANTOM;偏移地址0019H

BPHANTOM;偏移地址001AH

BPHANTOM;偏移地址001BH

BPHANTOM;偏移地址001CH

BPHANTOM;偏移地址001DH

BPHANTOM;偏移地址001EH

BPHANTOM;偏移地址001FH

BPHANTOM;偏移地址0020H

BPHANTOM;偏移地址0021H

BPHANTOM;偏移地址0022H

BPHANTOM;偏移地址0023H

BPHANTOM;偏移地址0024H

BPHANTOM;偏移地址0025H

BPHANTOM;偏移地址0026H

BPHANTOM;偏移地址0027H

BPHANTOM;偏移地址0028H

BWXM;偏移地址0029H

BPHANTOM;偏移地址002AH

BPHANTOM;偏移地址002BH

BPHANTOM;偏移地址002CH

BPHANTOM;偏移地址002DH

BPHANTOM;偏移地址002EH

BPHANTOM;偏移地址002FH

BPHANTOM;偏移地址0030H

BPHANTOM;偏移地址0031H

BPHANTOM;偏移地址0032H

BPHANTOM;偏移地址0033H

BPHANTOM;偏移地址0034H

BPHANTOM;偏移地址0035H

BPHANTOM;偏移地址0036H

BPHANTOM;偏移地址0037H

BPHANTOM;偏移地址0038H

BPHANTOM;偏移地址0039H

BPHANTOM;偏移地址003AH

BPHANTOM;偏移地址003BH

BPHANTOM;偏移地址003CH

BPHANTOM;偏移地址003DH

BPHANTOM;偏移地址003EH

BPHANTOM;偏移地址003FH

BPHANTOM;偏移地址0040H

BPHANTOM;偏移地址0041H

;--------------------------------------以下是主程序-----------------------------------------------------

.text

;--------------------------------------系统初始化程序--------------------------------------------------

_c_int0SETCINTM;禁止中断

CLRCCNF;B0为数据存储区

LDP#224

SPLK#0000000000000100B,SCSR1;4倍频,CLKOUT40MHz

SPLK#68H,WDCR;不用看门狗

LDP#225

LACCMCRA

OR#0FC0H;设置PWM1-6引脚

SACLMCRA

;--------------------------------------中断初始化程序------------------------------------------------

LDP#0

SPLK#0FFH,IFR;清所有系统中断标志

SPLK#00000010B,IMR;开INT2中断

LDP#232

SPLK#0FFFH,EVAIFRA;清事件管理器A所有中断标志

SPLK#0FH,EVAIFRB

SPLK#0FH,EVAIFRC

SPLK#0200H,EVAIMRA;开T1下溢中断

SPLK#0,EVAIMRB;屏蔽所有中断

SPLK#0,EVAIMRC;屏蔽所有中断

;--------------------------------------初始化事件管理器A程序-----------------------------------------

SPLK#1000,T1PR;T1周期值=1000

SPLK#1000,CMPR1;占空比初值0%

SPLK#1000,CMPR2

SPLK#1000,CMPR3

SPLK#0000011001100110B,ACTRA;引脚PWM1,3,5高有效,2,4,6低有效

SPLK#01F4H,DBTCONA;死区时间1*32*50ns=1.6uμs

SPLK#1000001000000000B,COMCONA;允许比较,下溢重载

SPLK#0000100001000010B,T1CON;连续增减计数方式,预分频=1

CLRCINTM;开总中断

;--------------------------------------变量初始化---------------------------------------------------------

LDP#6

SPLK#0,K_;K=0

SPLK#42166,PITC;π*T_carr=42166,Q28格式

SPLK#37749,F2M;F-M转换系数,Q21格式

SPLK#250,T_QUA;T_carr/4的定时器计数脉冲个数,Q0格式

SPLK#40000,F_CARR;载波频率,Q1格式

SPLK#120,PMIN;最小正脉宽(脉冲个数),Q0格式

SPLK#1880,PMAX;最小负脉宽时的最大正脉宽,Q0格式

SPLK#917,ATOD;Q4格式

SPLK#480,F_MODU;调试数据,Q4格式

;--------------------------------------主循环-------------------------------------------------------------

CYCLELDP#6

CLRCSXM

LACCF_MODU,13;调制波频率,Q4格式

SACHTEMP;右移3位,Q1格式

LACCF_CARR;载波频率,Q1格式

RPT#15

SUBCTEMP;计算N=F_carr/F_modu

SACLN_;保存N,Q0格式

LACCN_,1;2N

SACLKMAX;保存,Q0格式

LTF2M;F-M转换系数37749,Q21格式

MPYUF_MODU;Q4格式

PAC

SACHM_;保存M,Q9格式

BCYCLE;循环

;--------------------------------------假中断子程序---------------------------------------------------------

PHANTOMRET;假中断

;--------------------------------------T1下溢中断处理子程序-----------------------------------------

_C_INT2SST#ST0,ST0_SAVE;保存现场ST0

SST#ST1,ST1_SAVE;保存ST1

LDP#6

SACHACCH

SACLACCL;保存ACC

SPHP_HI

SPLP_LO;保存P

MPY#1;P<=T

SPLT_SAVE;保存T

LDP#224

LACCPIVR,1;读偏移地址

ADD#PVECTORS;子向量表首地址

BACC

WXMLDP#232

SPLK#0FFFH,EVAIFRA;清中断标志

LDP#6

LTPITC;π*T_carr=42166,Q28格式

MPYUK_;Q0格式

PAC;计算K*π*T_carr

SACHTEMP1;保存乘积,Q12格式

LTTEMP1

MPYUF_MODU;乘调制波频率,Q4格式

PAC;计算K*π*T_carr*T_modu

RPT#3

ROR;右移4位,Q12格式

SACLTEMP1;保存第1个角度值

LACCTEMP1

ADD#8579;加2π/3,Q12格式

SACLTEMP2;保存第2个角度值

SUB#25736;检测是否小于2π,Q12格式

BCNDWXM1,LEQ;小于2π跳转

SACLTEMP2;否则保存

WXM1LACCTEMP1

ADD#17157;加4π/3,Q12格式

SACLTEMP3;保存第3个角度值

SUB#25736;检测是否小于2π,Q12格式

BCNDWXM2,LEQ;小于2π跳转

SACLTEMP3;否则保存

WXM2LTTEMP1;开始将第1个角度转换成度

MPYUATOD;乘转换系数,Q4格式

PAC

SACHTEMP1;保存第1个角度值,Q0格式

LACC#SIN_ENTRY;SIN表入口地址

ADDTEMP1;偏移量

TBLRTEMP1;保存第1个SIN值,Q14格式有符号数

LTTEMP1

MPYM_;乘M,Q9格式

PAC;Q23格式

SACHTEMP1,7;相当于右移9位,Q14格式有符号数

LACCTEMP1

ADD#1,14;加+1

SACLTEMP1;保存,Q14格式

LTT_QUA;T_carr/4=250,Q0格式

MPYUTEMP1

PAC

SACHTEMP1,2;相当于右移14位,保存

为Q0格式

LTTEMP2;开始将第2个角度转换成度

MPYUATOD

PAC

SACHTEMP2;保存第2个角度值,Q0格式

LACC#SIN_ENTRY;SIN表入口地址

ADDTEMP2;偏移量

TBLRTEMP2;保存第2个SIN值,Q14格式有符号数

LTTEMP2

MPYM_;乘M,Q9格式

PAC;Q23格式

SACHTEMP2,7;相当于右移9位,Q14格式有符号数

LACCTEMP2

ADD#1,14;加+1

SACLTEMP2;保存,Q14格式

LTT_QUA;T_carr/4=250,Q0格式

MPYUTEMP2

PAC

SACHTEMP2,2;相当于右移14位,保存

为Q0格式

LTTEMP3;开始将第3个角度转换成度

MPYUATOD

PAC

SACHTEMP3;保存第3个角度值,Q0格式

LACC#SIN_ENTRY;SIN表入口地址

ADDTEMP3;偏移量

TBLRTEMP3;保存第3个SIN值,Q14格式有符号数

LTTEMP3

MPYM_;乘M,Q9格式

PAC;Q23格式

SACHTEMP3,7;相当于右移9位,Q14格式有符号数

LACCTEMP3

ADD#1,14;加+1

SACLTEMP3;保存,Q14格式

LTT_QUA;T_carr/4=250,Q0格式

MPYUTEMP3

PAC

SACHTEMP3,2;相当于右移14位,保存

为Q0格式

LACCK_

ADD#1;K+1

SACLK_

LTPITC;π*T_carr=42166,Q28格式

MPYUK_;Q0格式

PAC;计算K*π*T_carr

SACHTEMP4;保存乘积,Q12格式

LTTEMP4

MPYUF_MODU;乘调制波频率,Q4格式

PAC;计算K*π*T_carr*T_modu

RPT#3

ROR;右移4位,Q12格式

SACLTEMP4;保存第4个角度值

LACCTEMP4

ADD#8579;加2π/3,Q12格式

SACLTEMP5;保存第5个角度值

SUB#25736;检测是否小于2π,Q12格式

BCNDWXM3,LEQ;小于2π跳转

SACLTEMP5;否则保存

WXM3LACCTEMP4

ADD#17157;加4π/3,Q12格式

SACLTEMP6;保存第6个角度值

SUB#25736;检测是否小于2π,Q12格式

BCNDWXM4,LEQ;小于2π跳转

SACLTEMP6;否则保存

WXM4LTTEMP4;开始将第4个角度转换成度

MPYUATOD;乘转换系数,Q4格式

PAC

SACHTEMP4;保存第4个角度值,Q0格式

LACC#SIN_ENTRY;SIN表入口地址

ADDTEMP4;偏移量

TBLRTEMP4;保存第4个SIN值,Q14格式有符号数

LTTEMP4

MPYM_;乘M,Q9格式

PAC;Q23格式

SACHTEMP4,7;相当于右移9位,Q14格式有符号数

LACCTEMP4

ADD#1,14;加+1

SACLTEMP4;保存,Q14格式

LTT_QUA;T_carr/4=250,Q0格式

MPYUTEMP4

PAC

SACHTEMP4,2;相当于右移14位,保存

为Q0格式

LTTEMP5;开始将第5个角度转换成度

MPYUATOD

PAC

SACHTEMP5;保存第5个角度值,Q0格式

LACC#SIN_ENTRY;SIN表入口地址

ADDTEMP5;偏移量

TBLRTEMP5;保存第5个SIN值,Q1

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

当前位置:首页 > 解决方案 > 学习计划

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

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