?? bldc3pwm.asm
字號:
; 文件名: Bldc3pwm.asm
; 模塊名: BLDC_3PWM_DRV
; 初始化程序: BLDC_3PWM_DRV_INIT
;
; 公司: 達盛科技
;
; 功能描述: 控制逆變器開關狀態(tài)驅動一個直流無刷電動機
;
; |~~~~~~~~~~~~~~~|
; cmtn_ptr_bd o----->| |----->o CMPR1 (EV register)
; D_func o----->| BLDC_3PWM_DRV |----->o CMPR2 (EV register)
; Mfunc_p o----->| |----->o CMPR3 (EV register)
; | |----->o T1PER (EV register)
; |_______________|
;
;=============================================================================
; 歷史記錄:
;-----------------------------------------------------------------------------
; 2005.08.20 版本: Ver 1.0
;=============================================================================
;(要調用模塊,就將下面聲明語句復制到主程序代碼中相應位置)
; .ref BLDC_3PWM_DRV, BLDC_3PWM_DRV_INIT ;子程序調用
; .ref cmtn_ptr_bd, D_func, Mfunc_p ;輸入
;CMPR1, CMPR2, CMPR3, T1PR 在頭文件中已經(jīng)定義
;=============================================================================
;外部變量聲明
.def BLDC_3PWM_DRV, BLDC_3PWM_DRV_INIT ;子程序調用
.def cmtn_ptr_bd, D_func, Mfunc_p ;輸入
;=============================================================================
.include x24x_app.h
ACTIVE_HI .set 0 ;通過置1設定輸出有效電平,同時必須且只能有一個參數(shù)為1,
ACTIVE_LO .set 1 ;另外一個則必須為0
;此項設置取決于所采用的功率器件. ACTIVE_HI 代表功率器件高電平開通,ACTIVE_LO 代
;表功率器件低電平開通. 這里的極性設定不同于 PWM 的極性設置,PWM極性設置是通過寄
;存器(x24x/x24xx)的ACTR相應控制位來設置的(Active High 或者 Active Low)。這個設
;置只有當 ACTR 被設置成 Active Low PWM 時才是正確的。
;==============================================================================
;內部變量聲明
;------------------------------------------------------------------------------
;cmtn_ptr_bd .usect "bldc3pwm",1 ;換相指針
;D_func .usect "bldc3pwm",1
;Mfunc_p .usect "bldc3pwm",1
;period_max .usect "bldc3pwm",1
;period .usect "bldc3pwm",1
;GPR0_BLDC_PWM .usect "bldc3pwm",1
bldc3pwm_vars .usect "bldc3pwm",6,1
cmtn_ptr_bd .set bldc3pwm_vars+0 ;換相指針
D_func .set bldc3pwm_vars+1
Mfunc_p .set bldc3pwm_vars+2
period_max .set bldc3pwm_vars+3
period .set bldc3pwm_vars+4
GPR0_BLDC_PWM .set bldc3pwm_vars+5
;===============================================================================
BLDC_3PWM_DRV_INIT: ;初始化程序
;===============================================================================
;---x240目標板設置-----------------------------------------------------------
.if (x240) ;x240 cpu
FPERIOD .set 1000 ;1000 x 50nS = 50uS, 對應 20KHz PWM
; 初始化事件管理器
;PWM 單元設置
ldp #Mfunc_p
SPLK #FPERIOD, period_max
SPLK #7FFFh, Mfunc_p
;設置全比較寄存器
POINT_EV
SPLK #FPERIOD, T1PER ;臨時初始化
SPLK #0fffh,ACTR
SPLK #1000001000000000b,COMCON ;比較控制
SPLK #1001000001000000b,T1CON ;通用定時器1初始化
SPLK #0000000000000000b,GPTCON
;||||!!!!||||!!!!
;5432109876543210
.endif
;-------------------------------------------------------------------------------
;---x243目標板設置-----------------------------------------------------------
.if (x243) ;x243 cpu
FPERIOD .set 1000 ;1000 x 50nS = 50uS, 對應 20KHz PWM
; 初始化事件管理器
;PWM 單元設置
ldp #Mfunc_p
SPLK #FPERIOD, period_max
SPLK #7FFFh, Mfunc_p
;設置全比較寄存器
POINT_EV
SPLK #FPERIOD, T1PER ;臨時初始化
SPLK #0fffh,ACTR
SPLK #1000001000000000b,COMCON ;比較控制設定
SPLK #1001000001000000b,T1CON ;通用定時器1初始化
SPLK #0000000000000000b,GPTCON
;||||!!!!||||!!!!
;5432109876543210
;使能 CMP1-CMP6 PWM 輸出功能
POINT_PF2 ;OCRA.6 - OCRA.11
LACC OCRA
OR #0000111111000000b
;||||!!!!||||!!!!
;5432109876543210
SACL OCRA
.endif
;--------------------------------------------------------------------------------
;---x2407目標板設置------------------------------------------------------------
.if (x2407) ;x2407 cpu
FPERIOD .set 2000 ;2000 x 25nS = 50uS, 對應 20KHz PWM
; 初始化事件管理器
;PWM 單元設置
ldp #Mfunc_p
SPLK #FPERIOD, period_max
SPLK #7FFFh, Mfunc_p
;設置全比較寄存器
POINT_EV
SPLK #FPERIOD, T1PER ;臨時初始化
SPLK #0fffh,ACTR
SPLK #1000001000000000b,COMCON ;比較控制
SPLK #1001000001000000b,T1CON ;Asym
SPLK #0000000000000000b,GPTCON
;||||!!!!||||!!!!
;5432109876543210
;使能 CMP1-CMP6 PWM 輸出功能
POINT_PF2 ;OCRA.6 - OCRA.11
LACC OCRA
OR #0000111111000000b
;||||!!!!||||!!!!
;5432109876543210
SACL OCRA
.endif
;--------------------------------------------------------------------------------
RET ;初始化完成
;================================================================================
BLDC_3PWM_DRV: ;控制程序
;================================================================================
spm 0
ldp #cmtn_ptr_bd
LACC #COMMUTATION_TBL
ADD cmtn_ptr_bd
TBLR GPR0_BLDC_PWM
LACC GPR0_BLDC_PWM
BACC
STATE_ANB ;電流從A相流入,從B相流出,C相關斷
POINT_EV ;
SPLK #0f3dH,ACTR ;
B STATE_END
STATE_ANC ;電流從A相流入,從C相流出,B相關斷
POINT_EV ;
SPLK #03fdH,ACTR ;
B STATE_END
STATE_BNC ;電流從B相流入,從C相流出,A相關斷
POINT_EV ;
SPLK #03dfH,ACTR ;
B STATE_END
STATE_BNA ;電流從B相流入,從A相流出,C相關斷
POINT_EV ;
SPLK #0fd3H,ACTR ;
B STATE_END
STATE_CNA ;電流從C相流入,從A相流出,B相關斷
POINT_EV ;
SPLK #0df3H,ACTR ;
B STATE_END
STATE_CNB ;電流從C相流入,從B相流出,A相關斷
POINT_EV ;
SPLK #0d3fH,ACTR ;
STATE_END:
;將 "Period" 從(Q15)格式轉換到 Q0 格式
ldp #Mfunc_p
LT Mfunc_p
MPY period_max ;P = period x period_max
PAC
SACH period,1
;將 "D_func" 從(Q15) 格式轉換到 Q0 格式
.if (ACTIVE_LO) ;有效電平處理
LACC #7FFFh
SUB D_func
SACL GPR0_BLDC_PWM
.endif
.if (ACTIVE_HI) ;有效電平處理
LACC D_func
SACL GPR0_BLDC_PWM
.endif
LT GPR0_BLDC_PWM
MPY period ; P = D_func x period
PAC
POINT_EV
SACH CMPR1,1
SACH CMPR2,1
SACH CMPR3,1
RET
;換相表 - 按 BAC 循環(huán).
;----------------------------------------------------------------------------
COMMUTATION_TBL:
ANB .word STATE_ANB ;COMMUTATION_PTR = 0, de-energized phase = C
ANC .word STATE_ANC ;COMMUTATION_PTR = 1, de-energized phase = B
BNC .word STATE_BNC ;COMMUTATION_PTR = 2, de-energized phase = A
BNA .word STATE_BNA ;COMMUTATION_PTR = 3, de-energized phase = C
CNA .word STATE_CNA ;COMMUTATION_PTR = 4, de-energized phase = B
CNB .word STATE_CNB ;COMMUTATION_PTR = 5, de-energized phase = A
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -