采样SPWM程序.docx
- 文档编号:4043252
- 上传时间:2022-11-27
- 格式:DOCX
- 页数:19
- 大小:25.99KB
采样SPWM程序.docx
《采样SPWM程序.docx》由会员分享,可在线阅读,更多相关《采样SPWM程序.docx(19页珍藏版)》请在冰豆网上搜索。
采样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则删除该脉冲。
本例中的常数:
π倍载波周期:
π5010-6228=42166秒,Q28格式
载波频率:
20000Hz2=40000Hz,Q1格式;
定时器周期值:
50μs/2/25ns=1000个计数周期;
调制系数对调制波频率的比例系数:
0.9/50=0.018221=37749,Q21格式;
最小正脉宽:
3μs/25ns=120个计数周期;
最小负脉宽:
47μs/25ns=1880个计数周期;
弧度换算成度系数:
360/2π24=917,Q4格式;
2π/3212=8579弧度,Q12格式;
4π/3212=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值,Q14格式有符号数
LTTEMP5
MPYM_;乘M,Q9格式
PAC;Q23格式
SACHTEMP5,7;相当于右移9位,Q14格式有符号数
LACCTEMP5
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 采样 SPWM 程序