




已阅读5页,还剩8页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
此文档收集于网络,如有侵权,请联系网站删除采用不对称规则采样法生成三相SPWM波的开环调速控制程序 本例载波频率为20KHz,或载波周期为50s。DSP晶振10MHz,内部4倍频,时钟频率为40MHz,计数周期为25ns。假设调制波频率由外部输入(150Hz),并转换成合适的格式(本例为Q4格式)。调制系数M为00.9。死区时间1.6s。最小删除脉宽3s。 主程序的工作是根据输入的调制波频率计算N、2N和M值。 定时器采用连续增减计数方式。利用下溢中断,每个载波周期都产生一次中断,在每次中断都根据以下公式分别计算出下一个载波周期的三个比较值。并比较正负脉宽是否小于3s,如果小于3s则删除该脉冲。 本例中的常数:倍载波周期:5010-6228=42166秒,Q28格式载波频率:20000Hz2=40000Hz,Q1格式;定时器周期值:50s/2/25ns=1000个计数周期;调制系数对调制波频率的比例系数:0.9/50=0.018221=37749,Q21格式;最小正脉宽:3s/25ns=120个计数周期;最小负脉宽:47s/25ns=1880个计数周期;弧度换算成度系数:360/224=917,Q4格式;2/3212=8579弧度,Q12格式;4/3212=17157弧度,Q12格式;2212=25736弧度,Q12格式; .include 240x.h ;寄存器地址 .global _c_int0 ;全局化标号;-以下定义变量-ST0 .set 0 ;状态寄存器ST0ST1 .set 1 ;状态寄存器ST1 .bss TEMP,1 ;中间变量 .bss TEMP1,1 ;中间变量 .bss TEMP2,1 ;中间变量 .bss TEMP3,1 ;中间变量 .bss TEMP4,1 ;中间变量 .bss TEMP5,1 ;中间变量 .bss TEMP6,1 ;中间变量 .bss K_,1 ;第K个采样点 .bss PITC,1 ;乘载波周期=42166,Q28格式 .bss F2M,1 ;调制系数对调制波频率的比例系数, Q21格式 .bss T_QUA,1 ; T_carr/4的定时器计数脉冲个数,Q0格式 .bss F_CARR,1 ;载波频率,Q1格式 .bss PMIN,1 ;最小正脉宽(脉冲个数),Q0格式 .bss PMAX,1 ;最小负脉宽(脉冲个数),Q0格式 .bss F_MODU,1 ;调制波频率,Q4格式 .bss N_,1 ;每个调制波周期的载波脉冲数,Q0格式 .bss M_,1 ;M值 .bss KMAX,1 ;2N,Q0格式 .bss ATOD,1 ;弧度换算成度系数917,Q4格式 .bss ACCH,1 ;ACC高字保存单元 .bss ACCL,1 ;ACC低字保存单元 .bss AR0_SAVE,1 ;AR0保存单元 .bss P_HI,1 ;P寄存器高字保存单元 .bss P_LO,1 ;P寄存器低字保存单元;-CONTEXT段,定义保护现场数据区-ST0_SAVE .usect .context,1 ;状态寄存器ST0保存单元ST1_SAVE .usect .context,1 ;状态寄存器ST1保存单元;- 定义主向量段-.sect .vectors ;定义主向量段RESET B _c_int0 ;地址0000H,复位,优先级1INT1 B PHANTOM ;地址0002H,INT1,优先级4INT2 B _C_INT2 ;地址0004H,INT2,优先级5INT3 B PHANTOM ;地址0006H,INT3,优先级6INT4 B PHANTOM ;地址0008H,INT4,优先级7INT5 B PHANTOM ;地址000AH,INT5,优先级8INT6 B PHANTOM ;地址000CH,INT6,优先级9 RESERVED B PHANTOM;地址000EH,测试,优先级10SW_INT8 B PHANTOM;地址0010H,自定义软中断SW_INT9 B PHANTOM;地址0012H,自定义软中断SW_INT10 B PHANTOM;地址0014H,自定义软中断SW_INT11 B PHANTOM;地址0016H,自定义软中断SW_INT12 B PHANTOM;地址0018H,自定义软中断SW_INT13 B PHANTOM;地址001AH,自定义软中断SW_INT14 B PHANTOM;地址001CH,自定义软中断SW_INT15 B PHANTOM;地址001EH,自定义软中断SW_INT16 B PHANTOM;地址0020H,自定义软中断TRAP B PHANTOM;地址0022H,TRAP矢量NMI B PHANTOM;地址0024H,NMI,优先级3EMU_TRAP B PHANTOM;地址0026H,仿真Trap,优先级2SW_INT20 B PHANTOM;地址0028H,自定义软中断SW_INT21 B PHANTOM;地址002AH,自定义软中断SW_INT22 B PHANTOM;地址002CH,自定义软中断SW_INT23 B PHANTOM;地址002EH,自定义软中断SW_INT24 B PHANTOM;地址0030H,自定义软中断SW_INT25 B PHANTOM;地址0032H,自定义软中断SW_INT26 B PHANTOM;地址0034H,自定义软中断SW_INT27 B PHANTOM;地址0036H,自定义软中断SW_INT28 B PHANTOM;地址0038H,自定义软中断SW_INT29 B PHANTOM;地址003AH,自定义软中断SW_INT30 B PHANTOM;地址003CH,自定义软中断SW_INT31 B PHANTOM;地址003EH,自定义软中断;-定义子向量段-.sect .pvecs ;定义子向量段PVECTORSBPHANTOM;偏移地址0000H BPHANTOM ;偏移地址0001HBPHANTOM;偏移地址0002HBPHANTOM;偏移地址0003HBPHANTOM;偏移地址0004HBPHANTOM;偏移地址0005HBPHANTOM;偏移地址0006HBPHANTOM;偏移地址0007HBPHANTOM;偏移地址0008HBPHANTOM;偏移地址0009HBPHANTOM;偏移地址000AHBPHANTOM;偏移地址000BHBPHANTOM;偏移地址000CHBPHANTOM;偏移地址000DHBPHANTOM;偏移地址000EHBPHANTOM;偏移地址000FH BPHANTOM;偏移地址0010HBPHANTOM;偏移地址0011HBPHANTOM;偏移地址0012HBPHANTOM;偏移地址0013HBPHANTOM;偏移地址0014HBPHANTOM;偏移地址0015HBPHANTOM;偏移地址0016HBPHANTOM;偏移地址0017H BPHANTOM;偏移地址0018HBPHANTOM;偏移地址0019H BPHANTOM;偏移地址001AHBPHANTOM;偏移地址001BHBPHANTOM;偏移地址001CHBPHANTOM;偏移地址001DHBPHANTOM;偏移地址001EHBPHANTOM;偏移地址001FHBPHANTOM;偏移地址0020HBPHANTOM;偏移地址0021H BPHANTOM;偏移地址0022HBPHANTOM;偏移地址0023HBPHANTOM;偏移地址0024HBPHANTOM;偏移地址0025HBPHANTOM;偏移地址0026H BPHANTOM;偏移地址0027H BPHANTOM;偏移地址0028HBWXM ;偏移地址0029HBPHANTOM;偏移地址002AHBPHANTOM;偏移地址002BHBPHANTOM;偏移地址002CHBPHANTOM;偏移地址002DHBPHANTOM;偏移地址002EHBPHANTOM;偏移地址002FH BPHANTOM;偏移地址0030HBPHANTOM;偏移地址0031HBPHANTOM;偏移地址0032HBPHANTOM;偏移地址0033HBPHANTOM;偏移地址0034HBPHANTOM;偏移地址0035HBPHANTOM;偏移地址0036HBPHANTOM;偏移地址0037HBPHANTOM;偏移地址0038HBPHANTOM;偏移地址0039HBPHANTOM;偏移地址003AHBPHANTOM;偏移地址003BHBPHANTOM;偏移地址003CHBPHANTOM;偏移地址003DHBPHANTOM;偏移地址003EHBPHANTOM;偏移地址003FHBPHANTOM;偏移地址0040HBPHANTOM ;偏移地址0041H;-以下是主程序- .text;-系统初始化程序-_c_int0 SETC INTM ;禁止中断 CLRC CNF ;B0为数据存储区 LDP #224 SPLK #0000000000000100B,SCSR1 ;4倍频,CLKOUT 40MHz SPLK #68H,WDCR ;不用看门狗 LDP #225 LACC MCRA OR #0FC0H ;设置PWM1-6引脚 SACL MCRA;-中断初始化程序- 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.6us SPLK #1000001000000000B,COMCONA ;允许比较,下溢重载 SPLK #0000100001000010B,T1CON ;连续增减计数方式,预分频=1 CLRC INTM ;开总中断;-变量初始化- 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格式;-主循环-CYCLE LDP #6 CLRC SXM LACC F_MODU,13 ;调制波频率,Q4格式 SACH TEMP ;右移3位,Q1格式 LACC F_CARR ;载波频率,Q1格式 RPT #15 SUBC TEMP ;计算N=F_carr/F_modu SACL N_ ;保存N,Q0格式 LACC N_,1 ;2N SACL KMAX ;保存,Q0格式 LT F2M ; F-M转换系数37749,Q21格式 MPYU F_MODU ;Q4格式 PAC SACH M_ ;保存M,Q9格式 B CYCLE ;循环;-假中断子程序-PHANTOM RET ;假中断;-T1下溢中断处理子程序-_C_INT2 SST #ST0,ST0_SAVE ;保存现场ST0 SST #ST1,ST1_SAVE ;保存ST1 LDP #6 SACH ACCH SACL ACCL ;保存ACC SPH P_HI SPL P_LO ;保存 P MPY #1 ;P=T SPL T_SAVE ;保存 T LDP #224 LACC PIVR,1 ;读偏移地址 ADD # PVECTORS ;子向量表首地址 BACC WXM LDP #232 SPLK #0FFFH,EVAIFRA ;清中断标志 LDP #6 LT PITC ;*T_carr =42166,Q28格式 MPYU K_ ;Q0格式 PAC ;计算K*T_carr SACH TEMP1 ;保存乘积,Q12格式 LT TEMP1 MPYU F_MODU ;乘调制波频率,Q4格式 PAC ;计算K*T_carr*T_modu RPT #3 ROR ;右移4位,Q12格式 SACL TEMP1 ;保存第1个角度值 LACC TEMP1 ADD #8579 ;加2/3,Q12格式 SACL TEMP2 ;保存第2个角度值 SUB #25736 ;检测是否小于2,Q12格式 BCND WXM1 ,LEQ ;小于2跳转 SACL TEMP2 ;否则保存WXM1 LACC TEMP1 ADD #17157 ;加4/3,Q12格式 SACL TEMP3 ;保存第3个角度值 SUB #25736 ;检测是否小于2,Q12格式 BCND WXM2 ,LEQ ;小于2跳转 SACL TEMP3 ; 否则保存WXM2 LT TEMP1 ;开始将第1个角度转换成度 MPYU ATOD ;乘转换系数,Q4格式 PAC SACH TEMP1 ;保存第1个角度值,Q0格式 LACC #SIN_ENTRY ;SIN表入口地址 ADD TEMP1 ;偏移量 TBLR TEMP1 ;保存第1个SIN值,Q14格式有符号数 LT TEMP1 MPY M_ ;乘M,Q9格式 PAC ;Q23格式 SACH TEMP1,7 ;相当于右移9位,Q14格式有符号数 LACC TEMP1 ADD #1,14 ;加+1 SACL TEMP1 ;保存, Q14格式 LT T_QUA ;T_carr/4=250,Q0格式 MPYU TEMP1 PAC SACH TEMP1,2 ;相当于右移14位,保存为Q0格式 LT TEMP2 ;开始将第2个角度转换成度 MPYU ATOD PAC SACH TEMP2 ;保存第2个角度值,Q0格式 LACC #SIN_ENTRY ;SIN表入口地址 ADD TEMP2 ;偏移量 TBLR TEMP2 ;保存第2个SIN值,Q14格式有符号数 LT TEMP2 MPY M_ ;乘M,Q9格式 PAC ;Q23格式 SACH TEMP2,7 ;相当于右移9位,Q14格式有符号数 LACC TEMP2 ADD #1,14 ;加+1 SACL TEMP2 ;保存, Q14格式 LT T_QUA ;T_carr/4=250,Q0格式 MPYU TEMP2 PAC SACH TEMP2,2 ;相当于右移14位,保存为Q0格式 LT TEMP3 ;开始将第3个角度转换成度 MPYU ATOD PAC SACH TEMP3 ;保存第3个角度值,Q0格式 LACC #SIN_ENTRY ;SIN表入口地址 ADD TEMP3 ;偏移量 TBLR TEMP3 ;保存第3个SIN值,Q14格式有符号数 LT TEMP3 MPY M_ ;乘M,Q9格式 PAC ;Q23格式 SACH TEMP3,7 ;相当于右移9位,Q14格式有符号数 LACC TEMP3 ADD #1,14 ;加+1 SACL TEMP3 ;保存, Q14格式 LT T_QUA ;T_carr/4=250,Q0格式 MPYU TEMP3 PAC SACH TEMP3,2 ;相当于右移14位,保存为Q0格式 LACC K_ ADD #1 ;K+1 SACL K_ LT PITC ;*T_carr =42166,Q28格式 MPYU K_ ;Q0格式 PAC ;计算K*T_carr SACH TEMP4 ;保存乘积,Q12格式 LT TEMP4 MPYU F_MODU ;乘调制波频率,Q4格式 PAC ;计算K*T_carr*T_modu RPT #3 ROR ;右移4位,Q12格式 SACL TEMP4 ;保存第4个角度值 LACC TEMP4 ADD #8579 ;加2/3,Q12格式 SACL TEMP5 ;保存第5个角度值 SUB #25736 ;检测是否小于2,Q12格式 BCND WXM3 ,LEQ ;小于2跳转 SACL TEMP5 ;否则保存WXM3 LACC TEMP4 ADD #17157 ;加4/3,Q12格式 SACL TEMP6 ;保存第6个角度值 SUB #25736 ;检测是否小于2,Q12格式 BCND WXM4 ,LEQ ;小于2跳转 SACL TEMP6 ;否则保存WXM4 LT TEMP4 ;开始将第4个角度转换成度 MPYU ATOD ;乘转换系数,Q4格式 PAC SACH TEMP4 ;保存第4个角度值,Q0格式 LACC #SIN_ENTRY ;SIN表入口地址 ADD TEMP4 ;偏移量 TBLR TEMP4 ;保存第4个SIN值,Q14格式有符号数 LT TEMP4 MPY M_ ;乘M,Q9格式 PAC ;Q23格式 SACH TEMP4,7 ;相当于右移9位,Q14格式有符号数 LACC TEMP4 ADD #1,14 ;加+1 SACL TEMP4 ;保存, Q14格式 LT T_QUA ;T_carr/4=250,Q0格式 MPYU TEMP4 PAC SACH TEMP4,2 ;相当于右移14位,保存为Q0格式 LT TEMP5 ;开始将第5个角度转换成度 MPYU ATOD PAC SACH TEMP5 ;保存第5个角度值,Q0格式 LACC #SIN_ENTRY ;SIN表入口地址 ADD TEMP5 ;偏移量 TBLR TEMP5 ;保存第5个SIN值,Q14格式有符号数 LT TEMP5 MPY M_ ;乘M,Q9格式 PAC ;Q23格式 SACH TEMP5,7 ;相当于右移9位,Q14格式有符号数 LACC TEMP5 ADD #1,14 ;加+1 SACL TEMP5 ;保存, Q14格式 LT T_QUA ;T_carr/4=250,Q0格式 MPYU TEMP5 PAC SACH TEMP5,2 ;相当于右移14位,保存为Q0格式 LT TEMP6 ;开始将第6个角度转换成度 MPYU ATOD PAC SACH TEMP6 ;保存第6个角度值,Q0格式 LACC #SIN_ENTRY ;SIN表入口地址 ADD TEMP6 ;偏移量 TBLR TEMP6 ;保存第6个SIN值,Q14格式有符号数 LT TEMP6 MPY M_ ;乘M,Q9格式 PAC ;Q23格式 SACH TEMP6,7 ;相当于右移9位,Q14格式有符号数 LACC TEMP6 ADD #1,14 ;加+1 SACL TEMP6 ;保存, Q14格式 LT T_QUA ;T_carr/4=250,Q0格式 MPYU TEMP6 PAC SACH TEMP6,2 ;相当于右移14位,保存为Q0格式 LACC K_ ADD #1 ;K+1 SACL K_ SUB KMAX ;比较K是否小于2N BCND WXM5,LT ;是则跳转 SPLK #0,K_ ;否则K=0WXM5 LACC TEMP1 ADD TEMP4 ;计算脉宽 SACL TEMP1 ;暂存 SUB PMIN ;检测是否小于最小正脉宽3微秒 BCND WXM6,GT ;不是继续 SPLK #0,TEMP1 ;是则删除窄脉冲 B WXM7WXM6 LACC TEMP1 ;检测是否小于最小负脉宽3微秒 SUB PMAX BCND WXM7,LT ;不是继续 SPLK #2000,TEMP1 ;是则删除窄脉冲WXM7 LACC #2000 ;2倍周期值 SUB TEMP1 ;计算比较值1 ROR ;除2 LDP #232 ;指向事件管理器A SACL CMPR1 ;保存比较值1 LDP #6 LACC TEMP2 ADD TEMP5 ;计算脉宽 SACL TEMP2 ;暂存 SUB PMIN ;检测是否小于最小正脉宽3微秒 BCND WXM8,GT ;不是继续 SPLK #0,TEMP2 ;是则删除窄脉冲 B WXM9WXM8 LACC TEMP2 ;检测是否小于最小负脉宽3微秒 SUB PMAX BCND WXM9,LT ;不是继续 SPLK #2000,TEMP2 ;是则删除窄脉冲WXM9 LACC #2000 ;2倍周期值 SUB TEMP2 ;计算比较值2 ROR ;除2 LDP #232 ;指向事件管理器A SACL CMPR2 ;保存比较值2 LDP #6 LACC TEMP3 ADD TEMP6 ;计算脉宽 SACL TEMP3 ;暂存 SUB PMIN ;检测是否小于最小正脉宽3微秒 BCND WXM10,GT ;不是继续 SPLK #0,TEMP3 ;是则删除窄脉冲 B WXM11WXM10 LACC TEMP3 ;检测是否小于最小负脉宽3微秒 SUB PMAX BCND WXM11,LT ;不是继续 SPLK #2000,TEMP3 ;是则删除窄脉冲WXM11 LACC #2000 ;2倍周期值 SUB TEMP3 ;计算比较值3 R
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 浙江省嘉兴市嘉善高级中学2026届高二化学第一学期期中考试试题含解析
- 2026届湖北省随州市第二高级中学、郧阳中学化学高二第一学期期末统考模拟试题含答案
- 桡骨中段骨折护理查房课件
- 2025年能源资源管理与可持续发展试卷及答案
- 2025年注册验船师资格考试(C级船舶检验专业基础安全)综合能力测试题及答案二
- 2025年注册验船师资格考试(A级船舶检验法律法规)综合能力测试题及答案一
- 2025年钢琴学习教程与曲目练习指南
- 2025年企业运营管理能力提升课程试题集及解析
- 2025年9月遗传生殖门诊护理理论考试题及答案
- 北京市门头沟区2023-2024学年七年级上学期期末质量监测数学考试题目及答案
- 2025-2030中国城市更新政策演变与实施路径专项调研报告
- 儿科川崎病课件
- 2025年书记员考试题库(附答案)
- 中成药合理使用培训课件
- 建筑材料绿色采购实施方案
- 学堂在线 劳动教育 章节测试答案
- 2025-2031年中国AI成人娃娃行业市场发展规模及投资机会研判报告
- 2025至2030中国个人定位信标(PLB)行业产业运行态势及投资规划深度研究报告
- 2025年振兴中学分班考试题及答案
- 肿瘤防治宣传科课件
- 2025年军队文职人员招聘考试(公共科目)测试题及答案一
评论
0/150
提交评论