⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 macro.h

📁 开发环境CCS2.0 TI公司240DSP电机VVVF控制程序 可直接使用
💻 H
📖 第 1 页 / 共 2 页
字号:
;==========================================================
;所用宏
;----------------------------------------------------------
STOP:		.MACRO				;停机模块
		LDP 	#0E1H			;7080H-70FFH
		LACL	PADATDIR
		AND	#1111111111110111B
		SACL	PADATDIR		;PADATDIR.3(IOPA3)=/DISDRIVE(DP=0E1H)


		LDP	#0E8H
		LACL	COMCON
		AND	#1111110111111111B
		SACL	COMCON			;禁止PWM输出
		
		LDP     #0E8H
                SPLK	#0,CMPR1	
		SPLK	#0,CMPR2

                LDP	#4			;200H-027FH
		SPLK	#0,RunFlag	
		.ENDM
;--------------------------------------------------------------------
RUN:		.MACRO				;运行宏

                LDP	#4			;200H-027FH
		SPLK	#1,RunFlag

		LDP 	#0E1H			;7080H-70FFH
		LACL	PADATDIR		;;PADATDIR.3(IOPA3)=/DISDRIVE(DP=0E1H)
		OR	#1000B
		SACL	PADATDIR		;;PADATDIR.3(IOPA3)=/DISDRIVE(DP=0E1H)

		LDP 	#0E1H			;7080H-70FFH
		LACC	#1111111111111011B			
		AND	PADATDIR
		SACL	PADATDIR		;PADATDIR.2(IOPA2)=UNCLOCK	
		LACC	#100B		
		OR	PADATDIR
		SACL	PADATDIR		;将UNLOCK置低再置高

		LDP	#0E8H
		LACL	COMCON
		OR	#1000000000B
		SACL	COMCON			;允许PWM输出
		.ENDM
;----------------------------------------------------------
ALARM:		.MACRO				;ALARM模块
		
		LDP 	#0E1H			;7080H-70FFH
		LACL	PCDATDIR		;PCDATDIR.6(IOPC6)=ALARM
		OR	#1000000B
		SACL	PCDATDIR		;PCDATDIR.6(IOPC6)=ALARM
		
		.ENDM
;-----------------------------------------------------------------------
DISALARM:	.MACRO				;DISALARM模块		
		LDP 	#0E1H			;7080H-70FFH
		LACL	PCDATDIR		;PCDATDIR.6(IOPC6)=ALARM
		AND	#1111111110111111B
		SACL	PCDATDIR		;PCDATDIR.6(IOPC6)=ALARM		
		.ENDM
;------------------------------------------------------------------------
SHORT:		.MACRO
		LDP	#0E1H
		LACC	PBDATDIR
		OR	#80H			;PBDATDIR.7(IOPB7)
		SACL	PBDATDIR		
		.ENDM
;-----------------------------------------------------------------------
DISSHORT:	.MACRO
		LDP	#0E1H
		LACC	PBDATDIR
		AND	#0FF7FH			;PBDATDIR.7(IOPB7)
		SACL	PBDATDIR
		.ENDM
;========================================================================
BREAK:		.MACRO
		LDP	#0E1H
		LACC	PBDATDIR
		OR	#20H			;PBDATDIR.5(IOPB5)
		SACL	PBDATDIR		
		.ENDM
;========================================================================
DISBREAK:	.MACRO
		LDP	#0E1H
		LACC	PBDATDIR
		AND	#0FFDFH			;PBDATDIR.5(IOPB5)
		SACL	PBDATDIR
		.ENDM
;========================================================================
FAN:		.MACRO
		LDP	#0E1H
		LACC	PBDATDIR
		OR	#40H			;PBDATDIR.6(IOPB6)
		SACL	PBDATDIR		
		.ENDM
;========================================================================
DISFAN:		.MACRO
		LDP	#0E1H
		LACC	PBDATDIR
		AND	#0FFBFH			;PBDATDIR.6(IOPB6)
		SACL	PBDATDIR
		.ENDM
;========================================================================
;========================================================================
Y1ON		.MACRO
		LDP	#0E1H
		LACC	PCDATDIR
		OR	#10B			;PCDATDIR.1(IOPC1)=RUN(Y1)
		SACL	PCDATDIR
		.ENDM
		
Y1OFF		.MACRO
		LDP	#0E1H
		LACC	PCDATDIR
		AND	#1111111111111101B	;PCDATDIR.1(IOPC1)=RUN(Y1)
		SACL	PCDATDIR
		.ENDM
		
Y2ON		.MACRO
		LDP	#0E1H
		LACC	PCDATDIR
		OR	#1B		;PCDATDIR.0(IOPC0)=FAI(Y2)
		SACL	PCDATDIR
		.ENDM
		
Y2OFF		.MACRO
		LDP	#0E1H
		LACC	PCDATDIR
		AND	#1111111111111110B	;PCDATDIR.0(IOPC0)=FAI(Y2)
		SACL	PCDATDIR
		.ENDM	
		
Y3ON		.MACRO
		LDP	#0E1H
		LACC	PCDATDIR
		OR	#10000000B		;PCDATDIR.7(IOPC7)=FDT(Y3)
		SACL	PCDATDIR
		.ENDM
		
Y3OFF		.MACRO
		LDP	#0E1H
		LACC	PCDATDIR
		AND	#1111111101111111B	;PCDATDIR.7(IOPC7)=FDT(Y3)
		SACL	PCDATDIR
		.ENDM
;========================================================================	
;=================================================================
SinCosAngle	.MACRO
;------------------------------------------------------------------
;(Angle)--->(CosAngle,SinAngle)
;------------------------------------------------------------------
		ldp	#4
		LACL	Angle			;磁通角度扇区
		sub	#900
		BCND	QUADRANT1,LT
		sub	#900
		BCND	QUADRANT2,LT
		sub	#900
		BCND	QUADRANT3,LT
		sub	#900
		BCND	QUADRANT4,LT
		
QUADRANT1	LACL	Angle
        	ADD	#SINCOSTAB
        	TBLR	SinAngle
        	LACC	#900
        	SUB	Angle
        	ADD	#SINCOSTAB
        	TBLR	CosAngle
        	B	SinCosCalEnd
        	
QUADRANT2	LACC	#1800
		sub	Angle
        	ADD	#SINCOSTAB
        	TBLR	SinAngle
        	LACC	Angle
        	SUB	#900
        	ADD	#SINCOSTAB
        	TBLR	CosAngle
        	lacc	CosAngle
        	neg
        	sacl	CosAngle
        	B	SinCosCalEnd	

QUADRANT3	LACC	Angle
		sub	#1800
        	ADD	#SINCOSTAB
        	TBLR	SinAngle
        	lacc	SinAngle
        	neg
        	sacl	SinAngle
        	LACC	#2700
        	SUB	Angle
        	ADD	#SINCOSTAB
        	TBLR	CosAngle
        	lacc	CosAngle
        	neg
        	sacl	CosAngle
        	B	SinCosCalEnd
        	
QUADRANT4	LACC	#3600
		sub	Angle
        	ADD	#SINCOSTAB
        	TBLR	SinAngle
        	lacc	SinAngle
        	neg
        	sacl	SinAngle
        	LACC	Angle
        	SUB	#2700
        	ADD	#SINCOSTAB
        	TBLR	CosAngle
        	B	SinCosCalEnd        	        		
		


SinCosCalEnd	nop
		.ENDM	

;=============================================================================
;===========================================================
Store1		.macro
		MAR     *,AR1
                MAR	*+
                SST     #1,*+
                SST     #0,*+
                SACH    *+
                SACL    *+
                PAC
                MPYK    #1
                SPL     *+
                SACH    *+
                SACL    *+
                SAR	AR4,*+		;for scope
                SAR	AR2,*		;for scope
		.endm
;===========================================================
Restore1	.macro
		
		MAR     *,AR1
                lar	AR2,*-		;for scope
                lar	AR4,*-		;for scope
                LT      *-
                MPYK    #1
                LPH     *-
                LT      *-
                LACl    *-
                ADD     *-,16
                LST     #0,*-
                LST     #1,*-
                
		.endm
;===========================================================
Store3		.macro
		MAR	*,AR1
		MAR	*+
		SST	#1,*+
		SST	#0, *+
		SACH	*+
		SACL	*+
		SAR	AR2,*+		;for scope
		SAR	AR4,*		;for scope
		.endm
;===========================================================
Restore3	.macro
		
		MAR	*,AR1
		lar	AR4,*-		;for scope
		lar	AR2,*-		;for scope
		LACL	*-
		ADDH	*-
		LST	#0, *-
		LST	#1, *-
		.endm
;=======================================================================
;软件计时模块
;功能:S01每S01_K次中断(0.1s)有一次过零
;	S01每过一次零Clock增加1

;-----------------------------------------------------------------------
Clock_S01	.macro	S01,S01_K,Clock
                ldp	#S01/128		;200H-027FH
		LACL	S01
		ADD	#1
		SACL	S01
		SUB	#S01_K
		BCND	S01OUT,LEQ
		
		splk	#0,S01			;S01复位
		ldp	#SAH_k/128		;示波器变量区
		lacc	Clock,16		;软件时钟用于定时触发等
		add	#1<<1,15
		sach	Clock
			
S01OUT		NOP
		.endm
;===========================================================
ReadCurrent	.MACRO

ADLOOPI:	LDP	#ADCTRL1/128
		BIT	ADCTRL1,7
		BCND	ADLOOPI, NTC		;查询IA和ib是否转换完毕   

		Current_scale	ADCFIFO1,kia,ia_offset,IA,TEMP
		Current_scale	ADCFIFO2,kib,ib_offset,IB,TEMP
		
		LDP	#IA/128
		LACC	IA
		ADD	IB
		NEG
		SACL	IC			;IC=-(IA+IB)
		
		lacc    IA          ;电机过流保护
		abs 
		sub     #8192  
		bcnd    I_abn,GT
                lacc    IB
                abs
                sub     #8192
                bcnd    I_abn,GT  
                lacc    IC
                abs
                sub     #8192
                bcnd    I_abn,GT
		b       I_end
		
I_abn	        STOP
		ALARM
	        ldp     #4
		splk    #1,I_FAIL
		LDP 	#232
		LACC	EVIFRA
		SACL	EVIFRA		
		Restore1		;恢复现场
		CLRC	INTM
		RET	
I_end           nop		
		.ENDM
;===========================================================
Current_scale	.MACRO	ADCFIFO1,kia,ia_offset,IA,TEMP
		LDP     #ADCFIFO1/128
		LACC	ADCFIFO1,10
                and	#3FFH,16
		sub	#512*2,15
                ldp	#TEMP/128
		sach	TEMP
		lt	TEMP
		sdp	TEMP,kia
		mpy	kia			;2^22
		pac
		sdp	kia,ia_offset        
		SUB	ia_offset,(22-13)
		sdp	ia_offset,IA
               	sach	IA,7			;AD结果减512不会大于512,故不会溢出
		.ENDM
;===========================================================
ReadVdcVcap	.macro				;用于不检测线电压的接法

ADLOOPVDCCAP:	LDP     #0E0H
		BIT	ADCTRL1,7
                BCND    ADLOOPVDCCAP, NTC                		

		VDC_sacle	ADCFIFO1,kvdc,VDC,TEMP					
		
		LDP     #0E0H
                LACC    ADCFIFO2,10
                AND	#3FFH,16
                LDP	#4			;200H-027FH
	        SACH    vcap
	        
	        ldp     #4                        ;电机过压保护
		lacl    VDC
		sub     #17241   ;220*1.732*1.414*2^5=17241.3 
		bcnd    V_abn,GT
		b       V_end

V_abn           STOP
		ALARM
	        ldp     #4
		splk    #1,V_FAIL
		LDP 	#232
		LACC	EVIFRA
		SACL	EVIFRA		
		Restore1		;恢复现场
		CLRC	INTM
		RET	
V_end           nop
		.endm
;===========================================================
;===========================================================
VDC_sacle	.macro	ADCFIFO1,kvdc,VDC,TEMP
		LDP     #ADCFIFO1/128
		LACC	ADCFIFO1,10
		AND	#3FFH,16
		LDP	#TEMP/128
         	SACH    TEMP       		;temp中是10位AD量  	         	
		LT	TEMP
		sdp	TEMP,kvdc
		mpy	kvdc			;2^14 lyh2002.9.2
		pac
		sfl				;2^15 lyh2002.9.2
		sfl				;2^16 lyh2002.9.3
		sdp	kvdc,VDC
		sach	VDC,5			;2^5 
		.endm
;===========================================================
;=========================================================================
sdp		.macro	data_last,data
		.if	(data_last/128!=data/128)
		ldp	#data/128
		.endif
		.endm
;=========================================================================
;==========================================================

dq_ab	.macro	di,qi,sini,cosi,ai,bi
	ab_dq	qi,di,sini,cosi,bi,ai
	.endm
;=========================================

;=========================================
; vd = va*cos(angle)+vb*sin(angle)
; vq =-va*sin(angle)+vb*cos(angle)
; (DP自动切换)
; 要求 PM=0
;-----------------------------------------
ab_dq	.macro	a,b,sin,cos,d,q
	
	ldp	#b/128
	lt	b
	sdp	b,sin
	mpy	sin
	sdp	sin,a
	ltp	a		;b*sin->acc,a->TREG
	sdp	a,cos
	mpy	cos		;a*cos->PREG
	sdp	cos,sin
	mpya	sin		;a*cos+b*sin->acc,a*sin->PREG
	add	#1,14
	sdp	sin,d
	sach	d,1		;a*cos+b*sin->d
	
	lacl	#0
	sdp	d,b
	lt	b
	sdp	b,cos	
	mpys	cos		;-a*sin->acc,b*cos->PREG
	apac			;-a*sin+b*cos->acc
	add	#1,14
	sdp	cos,q
	sach	q,1		;-a*sin+b*cos->q
	.endm
;=========================================              
;=========================================
;(DP自动切换)
;要求:pm=0
;-----------------------------------------
anb_abc	.macro	al,be,a,b,c,temp
	ldp	#al/128
	lacl	al
	sdp	al,a
	sacl	a
	sdp	a,be
	lt	be
	sdp	be,temp
	splk	#-28378,temp		;sqrt(3),2^14
	mpy	temp
	pac
	sdp	temp,al
	sub	al,14
	add	#1,14
	sdp	al,b
	sach	b,1
	pac
	neg
	sdp	b,al
	sub	al,14
	add	#1,14
	sdp	al,c
	sach	c,1
	.endm
;=========================================
;=====================================================================
ms_delay	.macro	ms_num_k,temp

		ldp	#temp/128
		splk	#20000,temp
		lacc	#ms_num_k
ms_LOOP		RPT	temp			;20000 nop = 1mS
		NOP				;1 cycle
		sub	#1
		bcnd	ms_LOOP,gt
		
		.endm
;=========================================================================
;=============================================================================	
; 加减速模块
; tinc,tdec的含义:是w变化1(0-wn)所需要的时间(范围:0-2000秒, 定标:2^4)
; 有待修改: 
;	1.将tinc,tdec在主程序中转化为单位时间频率的变化量.
;	2.当时间改为实际值后,时间的基值将不参与运算
;	3.在移位的地方需要的时候要采用条件汇编
;	4.四舍五入
;	5.注意除法分子要小于分母(TC<tdec)
;----------------------------------------------------------------------------
wincdec		.macro	w,w_l,wobj,w_shift,tinc,tdec,TC,tc_shift,temp1
		
		ldp	#w/128
		lacc	w			;w_shift
		sdp	w,wobj
		sub	wobj			;w_shift
		BCND	STABLE?,EQ
		BCND	INC?,LT
		
DEC?:		sdp	wobj,TC
		lacc	TC			;2^tc_shift
		sdp	TC,tdec
		rpt	#15
		subc	tdec			;2^4
		sdp	tdec,temp1
		sacl	temp1
		lt	temp1
		sdp	temp1,wn
		mpy	wn			;2^w_shift
		pac				;2^(tc_shift-4+w_shift)		
		rpt	#((tc_shift-4+w_shift)-(w_shift+16)-1)
		sfr
		neg
		
		sdp	wn,w
		add	w,16
		adds	w_l
		sach	w
		sacl	w_l
		sdp	w,wobj		
		sub	wobj,16
		bcnd	INCDECOUT?,geq
		b	stopincdec?
		
INC?:		sdp	wobj,TC
		lacc	TC
		sdp	TC,tinc
		rpt	#15
		subc	tinc		
		sdp	tinc,temp1
		sacl	temp1
		lt	temp1
		sdp	temp1,wn
		mpy	wn			;2^w_shift
		pac				;2^(tc_shift-4+w_shift)		
		rpt	#((tc_shift-4+w_shift)-(w_shift+16)-1)
		sfr
		
		sdp	wn,w
		add	w,16
		adds	w_l
		sach	w
		sacl	w_l
		sdp	w,wobj		
		sub	wobj,16
		bcnd	INCDECOUT?,leq
		b	stopincdec?

stopincdec?	lacl	wobj
		sdp	wobj,w
		sacl	w
		splk	#0,w_l
		B	INCDECOUT?
STABLE?:	nop
		B	INCDECOUT?

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -