📄 bldcref.asm
字号:
***********BLDC MOTOR CONTROL FOR MACHANGSHAN-PCB*****************
;TI周期匹配启动ADC--ADCINT
;CAP捕获中断
;电流调节采用P,COMP(k)=COMP(k-1)+K*ek,同时COMP还设极限范围[0,500],即BANG-BANG
;速度调节采用PI,得到速度调节输出IG,它作为电流调节的参考值
;速度调节输出的公式为IG(k)=IG(k-1)+KP*(e(k)-e(k-1))+KI*T*ek
;速度调节频率为1250个PWM周期,由VCOUNT比较的值决定
;--------------------------------------------------------
;| **** ***300H开始的6个单元中存放的变量*** **** |
;--------------------------------------------------------
;地址 | 变量 | 地址 | 变量 |
;--------------------------------------------------------
;300H |第k次捕捉时间 |303H |第k次速度偏差 |
;--------------------------------------------------------
;301H |第k-1次捕捉时间 |304H |第k-1次速度偏差 |
;--------------------------------------------------------
;302H |两次时间差 |305H |两次偏差之差 |
;--------------------------------------------------------
;速度调节所需的参数存放在数据区300H开始的6个单元中,AR2作为数据的地址指针
;
;
*********************************
.include "LF2407.H"
.bss KP,1 ;KP FOR SPEED
.bss KI,1 ;KI FOR SPEED
.bss CAPT,1 ;换相控制字
.bss COMP,1 ;比较值
.bss IA,1 ;
.bss IB,1
.bss IC,1
.bss IG,1 ;电流参考值
.bss VG,1 ;速度参考值
.bss VCOUNT,1 ;速度调节循环计数器
.bss STACK,1 ;软件堆栈初始地址
.def _c_int0
.sect "vectors"
revect b _c_int0
int1 b PHANTOM
int2 b PHANTOM
int3 b PHANTOM
int4 b CAPINT ;捕获中断
int5 b PHANTOM
int6 b ADCINT ;ADC中断
;-------------------------
.TEXT
_c_int0:
LDP #0
SETC INTM
SETC SXM
CLRC OVM
CLRC CNF
;AR*
LAR AR2,#0300H
LAR AR1,STACK
;SYSTEM
LDP #0
SPLK #0,IMR
SPLK #0FFFFH,IFR
LDP #0E0H
SPLK #068H,WDCR
SPLK #208DH,SCSR1 ;40MHZ
;IO
LDP #0E1H
SPLK #0FF8H,MCRA
;EVA
LDP #0E8H
SPLK #0FFFFH,T2PR
SPLK #0,T2CNT
SPLK #10C0H,T2CON ;T1 ENABLE
;-----------
SPLK #0100H,GPTCONA ;T1 CONTROL AD
SPLK #0,T1CNT
SPLK #1000,T1PR ;f=20KHz,50uS
SPLK #0840H,T1CON ;连续增计数,不分频
;-----------
SPLK #0A200H,COMCONA
SPLK #0FFFH,ACTRA
SPLK #04F0H,DBTCONA ;1.6uS
SPLK #500,CMPR1
SPLK #500,CMPR2
SPLK #500,CMPR3
SPLK #0B0FCH,CAPCONA
SPLK #0,CAPFIFOA
;--------------
LDP #0
SPLK #000BH,IMR
LACC IMR
SACL IFR
LDP #0E8H
LACC EVAIFRA
SACL EVAIFRA
LACC EVAIFRB
SACL EVAIFRB
LACC EVAIFRC
SACL EVAIFRC
SPLK #0100H,EVAIMRA
SPLK #0,EVAIMRB
SPLK #7,EVAIMRC
;ADC
LDP #0E1H
SPLK #4000H,ADCTRL1
NOP
SPLK #0900H,ADCTRL1
SPLK #4000H,ADCTRL2
NOP
SPLK #0500H,ADCTRL2
SPLK #1H,MAXCONV
SPLK #0001H,CHSELSEQ1;??????????
;VARITY
SPLK #0H,IG
SPLK #0H,VG
SPLK #0H,COMP
SPLK #0H,VCOUNT
SPLK #0H,CAPT
;ENABLE INTS
CLRC INTM
;检测转子初始位置
LDP #0E8H
SPLK #8000H,CAPCONA
SPLK #00FFH,CAPFIFOA
LDP #0E1H
SPLK #0FC00H,MCRA
SPLK #0,PADATDIR
LACC PADATDIR
AND #038H
LDP #0
SACL CAPT
LACC CAPT,13
SACH CAPT
LDP #0E1H
SPLK #0FF8H,MCRA
LDP #0E8H
SPLK #0B0FCH,CAPCONA
SPLK #00FFH,CAPFIFOA
;-----------**************----------------
LOOP:
NOP
B LOOP
;---------*******************-------------
PHANTOM
CLRC INTM
NOP
RET
;--------------------------
ADCINT
INT_PUSH
LDP #4
LACC VCOUNT
SUB #1250 ;每1250个PWM周期进行一次速度调节,即周期为62.5mS
BCND NO_SPEED_REG,NEQ
CALL SPEED_REG
NO_SPEED_REG
LACC VCOUNT
ADD #1
SACL VCOUNT
LDP #0E0H
LACC PIVR
SACL PIVR
LDP #0E8H
LACC EVAIFRA
SACL EVAIFRA
LDP #0E1H
LACC ADCTRL2
OR #0202H
SACL ADCTRL2
;电流调节,P
CLRC SXM
;
;-重写-?????????????????
;
CALL SEQUENCE
LDP #0E8H
SACL EVAIFRA
SACL EVAIFRA
INT_POP
CLRC INTM
RET
;-------------------------------
CAPINT
INT_PUSH
;速度参数计算
MAR *,AR2
LACL T2CNT
SACL *+
SUB *+
SACL *-
ADD *
SACL *-
;获取换相控制字
LDP #0E8H
SPLK #8000H,CAPCONA
SPLK #00FFH,CAPFIFOA
LDP #0E1H
SPLK #0FC00H,MCRA
SPLK #0H,PADATDIR
LACC PADATDIR
AND #038H
LDP #0
SACL CAPT
LACC CAPT,13
SACH CAPT
;换相
CALL SEQUENCE
LDP #0E1H
SPLK #0FF8H,MCRA
LDP #0E8H
SPLK #0B0FCH,CAPCONA
SPLK #00FFH,CAPFIFOA
INT_POP
LDP #0E8H
LACC EVAIFRC
SACL EVAIFRC
CLRC INTM
RET
;------------------------------------
;换相或修改占空比子程序
SEQUENCE
LDP #0
LACC CAPT
SUB #1
SFL ;(CAPT-1)*2 WHY?
ADD #CAPT_DETER
BACC
CAPT_DETER
B FALLING3
B FALLING1
B RISING2
B FALLING2
B RISING1
RISING3
LACC COMP
LDP #0E8H
SPLK 0EF7H,ACTRA
SACL CMPR3
SACL CMPR1
SPLK #0,CMPR2
B ENDD
FALLING3
LACC COMP
LDP #0E8H
SPLK #07FDH,ACTRA
SACL CMPR1
SACL CMPR3
SPLK #0,CMPR2
B ENDD
RISING2
LACC COMP
LDP #0E8H
SPLK 07DFH,ACTRA
SACL CMPR3
SACL CMPR2
SPLK #0,CMPR1
B ENDD
FALLING2
LACC COMP
LDP #0E8H
SPLK #0D7FH,ACTRA
SACL CMPR2
SACL CMPR3
SPLK #0,CMPR1
B ENDD
RISING1
LACC COMP
LDP #0E8H
SPLK 0F7DH,ACTRA
SACL CMPR1
SACL CMPR2
SPLK #0,CMPR3
B ENDD
FALLING1
LACC COMP
LDP #0E8H
SPLK #0FD7H,ACTRA
SACL CMPR2
SACL CMPR1
SPLK #0,CMPR3
B ENDD
ENDD
RET
;-------------------------------
;SPEED PI
SPEED_REG
MAR *,AR2
LAR AR2,#0302H ;捕获时间增量
LDP #0
SPLK #0,VCOUNT ;计数器清0
CLRC SXM
LACC #0
OR #0FFFFH ;ACC=FFFFH无符号数
RPT #15
SUBC * ;除以捕获时间增量
AND #0FFFFH ;屏蔽高16位
SUB #VG
NEG ;求补
SETC SXM
LAR AR2,#0303H ;第k次速度偏差
SACL *+
SUB *+
SACL *
LT *
MPY KP
LAR AR2,#0303H
LTP * ;积存ACC,同时LT AR2所指的值
MPY KI
LTD * ;积累加
ADD IG,4 ;累加
SFR ;右移4位(由于乘T)
SFR
SFR
SFR
SACL IG
LAR AR2,#0303H
RET
.END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -