- 积分
- 56
- 回帖
- 0
- 西莫币
-
- 贡献
-
- 威望
-
- 存款
-
- 阅读权限
- 5
- 最后登录
- 1970-1-1
该用户从未签到
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
x
《三相交流异步电动机SVPWM开环调速控制程序(软件法)》
.include "240x.h" ; 寄存器地址
.global _c_int0 ;全局化标号
;--------------------------------------以下定义变量-------------------------------------------------------------
ST0 .set 0 ;状态寄存器ST0
ST1 .set 1 ;状态寄存器ST1
.bss TEMP,1 ;临时变量
.bss SET_F,1 ;频率调节比,Q16格式(值为0-1,对应0-50Hz)
.bss F_OMEGA,1 ;频率调节比-角频率转换率,Q5格式
.bss OMEGA,1 ;调制波角频率,Q5格式
.bss SET_V,1 ;参考电压,Q14格式
.bss MAX_V,1 ;最大参考电压幅值1/ ,Q14格式
.bss T_SAMPLE,1 ;采样周期,Q24格式
.bss THETA_H,1 ;参考电压相位角高字,Q12格式
.bss THETA_L,1 ;参考电压相位角低字,Q12格式
.bss THETA_R,1 ;相位角的圆整值,Q12格式
.bss THETA_M,1 ;相位查表值(0-90度),Q12格式
.bss THETA_I,1 ;相角查表索引,Q9格式
.bss SS,1 ;SIN符号,Q0格式
.bss SC,1 ;COS符号,Q0格式
.bss SIN_INDX,1 ;SIN表索引,Q0格式
.bss SIN_ENTRY,1 ;SIN表入口地址
.bss SIN_END,1 ;SIN表结束地址
.bss SIN_THETA,1 ;SINθ值,Q14格式
.bss COS_THETA,1 ;COSθ值,Q14格式
.bss UA,1 ;参考电压D轴分量UA,Q12格式
.bss UB,1 ;参考电压Q轴分量UB,Q12格式
.bss THETA_S,1 ;θ-扇区数转换系数,Q15格式
.bss SECTOR,1 ;参考电压所在的扇区数,Q0格式
.bss THETA_90,1 ;90度,Q12格式
.bss THETA_180,1 ;180度,Q12格式
.bss THETA_270,1 ;270度,Q12格式
.bss THETA_360,1 ;360度,Q12格式
.bss DEC_MS,24 ;6个逆阵,Q14格式
.bss T1_PERIODS,1 ;定时器1周期值,Q5格式
.bss CMP_1,1 ;第1基本矢量,Q0格式
.bss CMP_2,1 ;第2基本矢量,Q0格式
.bss CMP_0,1 ;0基本矢量/2,Q0格式
.bss FIRST_TOG,1 ;存放第一次比较匹配的比较器地址
.bss SEC_TOG,1 ;存放第二次比较匹配的比较器地址
.bss ACCH,1 ;ACC高字保存单元
.bss ACCL,1 ;ACC低字保存单元
.bss AR0_SAVE,1 ;AR0保存单元
.bss P_HI,1 寄存器高字保存单元
.bss P_LO,1 寄存器低字保存单元
;-------------------------------------- CONTEXT段,定义保护现场数据区--------------------------
ST0_SAVE .usect ".context",1 ;状态寄存器ST0保存单元
ST1_SAVE .usect ".context",1 ;状态寄存器ST1保存单元
;-------------------------------------- 定义主向量段---------------------以下是主程序------------------------------
.text
;--------------------------------------系统初始化程序----------------------------------------------------
_c_int0
SETC INTM ; 禁止中断
CLRC CNF ;B0为数据存储区
LDP #224
SPLK #0000001000000100B,SCSR1 ;CLKIN 10M,CLKOUT 20M
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 #500,T1PR ; T1周期值=50 us/50ns/2=500
SPLK #500,CMPR1 ; 占空比初值 0%
SPLK #500,CMPR2
SPLK #500,CMPR3
SPLK #0000011001100110B,ACTRA ; 引脚PWM1,3,5高有效,2,4,6低有效
SPLK #01F4H,DBTCONA ; 死区时间1*32*50ns=1.6us
SPLK #1000001000000000B,COMCONA ;允许比较,不用硬件空间矢量
SPLK #1000100000000010B,T1CON ;连续增减计数方式,预分频=1
;--------------------------------------变量初始化程序-----------------------------------------------------
LDP #6 ; 指向B1
SPLK #0347H,T_SAMPLE ;采样周期=50us *224=839秒=347H, Q24格式
SPLK #16000,T1_PERIODS ;T1周期值的Q5格式,500*32
SPLK #11585,MAX_V ; 最大参考电压幅值1/ ,Q14格式
SPLK #0,SET_F ; SET F=0
SPLK #10053,F_OMEGA ;频率调节比-角频率转换率,Q5格式
;当SET_F=1时,对应最大角频率2π50Hz*25=10053
SPLK #0,THETA_L ;θ低字,Q12格式
SPLK #0,THETA_H ; θ高字,Q12格式
LAR AR0,#THETA_90 ; 传送常用角度和逆阵数据
LAR AR1,#(28-1) ; 28个
LACC #ANGLES_ ; 指向源
LAR AR0
INIT_TBL
TBLR *+,AR1 ; 下一个
ADD #1 ; 下一个地址
BANZ INIT_TBL,AR0 ;AR1=0结束
SPLK #29335,THETA_I ; 相角查表索引,180/π,Q9格式
SPLK #31291,THETA_S ; θ-扇区数转换系数,6/(2π),Q15格式
SPLK #SIN_ENTRY_,SIN_ENTRY ;SIN表起始地址
SPLK #(SIN_ENTRY_+90),SIN_END ;SIN表结束地址
LDP #232
SPLK #0000100001000010B,T1CON ;使能T1
CLRC INTM ; 开总中断
;--------------------------------------主循环程序(SET_F由外部输入)-----------------------------------
MAIN_LOOP
LDP #6
LT SET_F ; 将频率调节比(Q16格式)转换成角频率
MPYU F_OMEGA ; Q21
PAC ; 积送ACC, Q5格式
SACH OMEGA ; 保存角频率,Q5格式
LT SET_F ;将频率调节比(Q16格式)转换成参考电压
MPYU MAX_V ; Q16*Q14=Q30
PAC
SACH SET_V ; 保存参考电压幅值,Q14格式
B MAIN_LOOP ; 循环
;--------------------------------------假中断处理----------------------------------------------------------
PHANTOM
CLRC INTM
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
SAR AR0,AR0_SAVE ; 保存AR0
CLRC SXM
LDP #224
LACC PIVR ;读偏移地址
SUB #029H ; T1 下溢中断?
BCND T1UF_ISR,EQ ;是下溢中断跳T1UF_ISR
REST
LDP #6 ;否则恢复现场
LAR AR0, AR0_SAVE ; 恢复AR0
LT P_LO ;恢复P
MPY #1
LPH P_HI
LT T_SAVE ;恢复T
LACC ACCH,16
ADDS ACCL ;恢复ACC
LDP #0 ;指向B2
LST #ST1,ST1_SAVE ; 恢复ST1
LST #ST0,ST0_SAVE ; 恢复ST0
CLRC INTM ; 开中断
RET ; 返回
T1UF_ISR
LDP #232
SPLK #0FFFH,EVAIFRA ; 清中断标志
LDP #6 ; 计算转角增量
LT OMEGA ; Q5
MPY T_SAMPLE ; Q5*Q24
PAC ;积存ACC, Q13
SFR ; 右移一位成Q12格式
ADD THETA_H,16 ; Q12
ADDS THETA_L ;计算绝对位置
SACH THETA_H ;保存
SACL THETA_L
BCND CHK_UPLIM,GEQ ;如果大于0检查上限
ADD THETA_360,16 ;否则与2π比较,Q12
SACH THETA_H ; 保存
B RND_THETA
CHK_UPLIM
SUB THETA_360,16 ;与2π比较,Q12
BCND REST_THETA,LEQ ; 如果在范围内恢复THETA_H
SACH THETA_H
B RND_THETA
REST_THETA
ADD THETA_360,16 ; 恢复THETA_H
RND_THETA
ADD #1,15 ; 圆整并保留高字
SACH THETA_R ;保存
LACC #1 ;假设THETA_H在第一象限
SACL SS ; SIN符号=1
SACL SC ; COS符号=1
LACC THETA_R
SACL THETA_M ; 存入THETA_M
SUB THETA_90 ;
BCND E_Q,LEQ ;在第一象限则跳转
SPLK #-1,SC ; COS符号=—1
..................................
.data
;--------------------------------------数据段---------------------------------------------------------------------
ANGLES_ .word 01922H ; π/2, Q12格式
.word 03244H ; π, Q12格式
.word 04B66H ; 3π/2, Q12格式
.word 06488H ; 2π, Q12格式
.word 20066 ; 矩阵A的逆阵数据,每一个逆阵有4个数据,Q14格式
.word –11585 ; 按参考电压所在的扇区索引
.word 0
.word 23170
.word -20066
.word 11585
.word 20066
.word 11585
.word 0
.word 23170
.word -20066
.word -11585
.word 0
.word -23170
.word -20066
.word 11585
.word -20066
.word -11585
.word 20066
.word -11585
.word 20066
.word 11585
.word 0
.word -23170
FIRST_ .word CMPR1 ; 用于第1次比较匹配的比较寄存器地址,
.word CMPR2 ; 按参考电压所在的扇区索引
.word CMPR2
.word CMPR3
.word CMPR3
.word CMPR1
SECOND_ .word CMPR2 ;用于第2次比较匹配的比较寄存器地址,
.word CMPR1 ; 按参考电压所在的扇区索引
.word CMPR3
.word CMPR2
.word CMPR1
.word CMPR3
SIN_ENTRY_
.word 0 ; 0-90度SIN值表,Q14格式
.word 286,572,857,1143,1428
......
.end
电压相位角为什么要用32位?相位高字,低字。
.bss THETA_H,1 ;参考电压相位角高字,Q12格式
.bss THETA_L,1 ;参考电压相位角低字,Q12格式
相位角的圆整值是什么意思呢?
.bss THETA_R,1 ;相位角的圆整值,Q12格式
我刚学svpwm,这个程序看了好几天了,还是迷糊的,请各位前辈指点... |
|