西莫电机圈

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

手机号码,快捷登录

查看: 2865|回复: 6

[求助] 看过三相交流异步电动机SVPWM开环调速控制程序(软件法)的请进

[复制链接]

该用户从未签到

发表于 2008-10-22 13:00 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

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,这个程序看了好几天了,还是迷糊的,请各位前辈指点...
西莫电机论坛微信公众平台正式上线!★详情请点击★ 西莫电机论坛会员交流专用群欢迎您西莫电机论坛加群请注明论坛用户名及所从事专业,否则不予通过

该用户从未签到

发表于 2008-10-23 12:07 | 显示全部楼层
我看不懂呀!事DSP的还是汇编的呢?哎!
西莫电机论坛微信公众平台正式上线!★详情请点击★ 西莫电机论坛会员交流专用群欢迎您西莫电机论坛加群请注明论坛用户名及所从事专业,否则不予通过
回复

使用道具 举报

该用户从未签到

发表于 2008-11-4 09:58 | 显示全部楼层
建议重新找方案 该方法不妙
西莫电机论坛微信公众平台正式上线!★详情请点击★ 西莫电机论坛会员交流专用群欢迎您西莫电机论坛加群请注明论坛用户名及所从事专业,否则不予通过
回复

使用道具 举报

该用户从未签到

发表于 2009-3-11 16:19 | 显示全部楼层
不会,怎么找不到经典C程序呢
西莫电机论坛微信公众平台正式上线!★详情请点击★ 西莫电机论坛会员交流专用群欢迎您西莫电机论坛加群请注明论坛用户名及所从事专业,否则不予通过
回复

使用道具 举报

该用户从未签到

发表于 2009-5-12 18:47 | 显示全部楼层
你贴的程序不完整,贴完整了,你就看明白了。
西莫电机论坛微信公众平台正式上线!★详情请点击★ 西莫电机论坛会员交流专用群欢迎您西莫电机论坛加群请注明论坛用户名及所从事专业,否则不予通过
回复

使用道具 举报

该用户从未签到

发表于 2009-9-26 19:48 | 显示全部楼层
使用32位,角度的分辨率高些。
西莫电机论坛微信公众平台正式上线!★详情请点击★ 西莫电机论坛会员交流专用群欢迎您西莫电机论坛加群请注明论坛用户名及所从事专业,否则不予通过
回复

使用道具 举报

该用户从未签到

发表于 2009-9-27 13:15 | 显示全部楼层
先找本理论方面的书看看就了解了
西莫电机论坛微信公众平台正式上线!★详情请点击★ 西莫电机论坛会员交流专用群欢迎您西莫电机论坛加群请注明论坛用户名及所从事专业,否则不予通过
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|手机版|Archiver|西莫电机圈 ( 浙ICP备10025899号-3 浙公网安备:33028202000436号

GMT+8, 2024-11-25 12:09 , Processed in 0.109975 second(s), 26 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表