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

📄 newscope.asm

📁 这是f240用于电机的变压变频控制
💻 ASM
📖 第 1 页 / 共 2 页
字号:
		ldp	#4
                splk	#18704,kia		;scale=2^23              
                splk	#18704,kib		;scale=2^23
                splk	#25367,kvdc		;25367=523V/675.6*2^15

                
		splk	#QEP_num,QEPCNT
		
		LAR	AR1,#60H		;用于中断环境保存的栈底
		setc 	OVM		
		setc 	sxm 			;sign extension mode
		
						
;==================================================================

; ENABLE Serial Rx INTERRUPT, and begin the Scope Initial Loop.
;If (MultiSingle!=0ffffh && StartTime!=0ffffh) then Break
;-------------------------------------------------------------------
                LDP	#0E8H
                splk    #0001H, EVIMRA	;ENABAL PDPINT
                LDP 	#00H
                splk    #01H, IMR	;ENABLE XINT1(INT1)

		CLRC 	INTM

;==================================================================

; ENABLE USED INTERRUPT
;-------------------------------------------------------------------
                LDP	#0E8H
                splk	#1H, EVIMRB
                splk    #0201H, EVIMRA	;ENABAL T1 UNDERFLAW 和PDPINT
                LDP 	#00H
                splk    #03H, IMR	;ENABLE TIMER1 INTERRUPT(INT2)
			                     	;和XINT1(INT1)

		CLRC 	INTM
                
            


;==================================================================
		


MENU		NOP

              	B	MENU
	


;==================================================================	
;中断2:定时器1下溢中断和过流保护中断		
GISR2		MAR	*,AR1
		MAR	*+
		SST	#1,*+
		SST	#0, *+
		SACH	*+
		SACL	*
				

		
		LDP	#232      
		LACC	EVIVRA
		SUB	#29H
		BCND	TIM,EQ
		B       PDP
TIM             
		LACC	EVIFRA
		SACL	EVIFRA
		b	TIMER1			;跳至定时器中断服务程序
		
                		
PDP     	LACC	EVIFRA			;过流保护处理
		SACL	EVIFRA			;清中断标志		
                LDP	#4			;200H-027FH
		STOP
		LDP	#4
		splk    #1,FailFlag
		
		ALARM
		
		Y1ON
	        
		MAR	*,AR1
		LACL	*-
		ADDH	*-
		LST	#0, *-
		LST	#1, *-
 		CLRC	INTM
		RET
;================================================================================
;定时器1下溢中断

TIMER1:		
		CLRC	INTM
;-------------------------------------------------------------------
; A/D START FOR ia AND ic
;Scale of current=2^10
;i(scaled)=AD*18.26601308589056*(2^10/2^10)=AD*18704.4/2^10
;-------------------------------------------------------------------                
                LDP     #0E0H
                splk    #1011100100100101B, ADCTRL1	;启动电流采样
                                
ADLOOP1		NOP
                LDP     #0E0H
		BIT	ADCTRL1,7
                BCND    ADLOOP1, NTC			;查询ia和ib是否转换完毕

		LACL	ADCFIFO2
		rpt	#5
		sfr
                LDP	#4			;200H-027FH
                sacl	lia		
                SACL    TEMP
                lt	kia
                mpy	TEMP              
                pac  
                sach	TEMP,6  
                lacl	TEMP     
                sub	#ia_OFFSET_K
                sacl	ia			;ia的6.10f(实际值)
                
                
                

		LDP     #0E0H
		LACL	ADCFIFO1
		rpt	#5
		sfr
                LDP	#4			;200H-027FH
                 sacl	lib
                SACL    TEMP
                lt	kib
                mpy	TEMP              
                pac  
                sach	TEMP,6  
                lacl	TEMP     
                sub	#ib_OFFSET_K
                sacl	ib			;ib的6.10f(实际值)
                
                LACC    ia
                ADD     ib
                NEG
                SACL    ic			;ic=-(ia+ib)

		
;------------------------------------------------------------------
;第4路电压及直流母线电压检测及过压保护        
;------------------------------------------------------------------                
STARTADVDCCAP	LDP     #0E0H
	        	splk    #1011100100110111B, ADCTRL1	;启动vdc,VCAP的采样
ADLOOPVDCCAP:	NOP
                LDP     #0E0H
	        	BIT	    ADCTRL1,7
                BCND    ADLOOPVDCCAP, NTC

		        LACL	ADCFIFO1
		        rpt	    #5
	        	sfr
                LDP	    #4			;200H-027FH
                sacl	lvdc
VDC_AD          SACL    TEMP
		        LT	    kvdc			
		        mpy	    TEMP
		        pac		
		        sach	vdc,6		;vdc的实际值*2^5
		
;--------------------------------------------------------------------
;过压检测及保护
		LACL	vdc
		SUB	    #VDCMAX_K
JOE		BCND	NO_OE,lt		;判断是否过压
OE:		STOP				;若有过压则自由停车
		LDP	    #4			;200H-027FH
		splk	#2,FailFlag
NO_OE	NOP		
;--------------------------------------------------------------------

;第四路信号检测
		LDP     #0E0H
                LACL    ADCFIFO2
                RPT     #5
                SFR
                LDP	    #4			;200H-027FH
IDC_AD          SACL    vcap
		
;--------------------------------------------------------------------
;码盘速度检测
		ldp	#4
		lacl	QEPCNT
		sub	#1
		sacl	QEPCNT
		bcnd	QEPend,neq
read_QEP	ldp	#0E8H
		lacc	T3CNT
		splk	#0000h,T3CNT
		ldp	#4
		sacl	spdQEP		
		ldp	#4
		splk	#QEP_num,QEPCNT
        splk   #5,TEMP
        LT     TEMP
        mpy    spdQEP
        pac
        sacl    n

QEPend	nop		


		
;------------------------------------------------------------------
;------------------------------------------------------------------
* Clarke transformation
* (a,b) -> (alfa,beta)
* isalfa = ia
* isbeta = (2 * ib + ia) / sqrt(3)
;------------------------------------------------------------------
	
		ldp	   #4
		lacc	ia
		sacl	isalfa		;isalfa 3.13 format
		lacc	ib,1		;isbeta = (2 * ib + ia) / sqrt(3)
		add	ia
		sacl	temp3
		lt	temp3
		mpy	#SQRT3inv	;SQRT3inv = (1 / sqrt(3)) = 093dh
					;4.12 format = 0.577350269
		pac
		sach	isbeta,4	;isbeta 3.13 format
;================================================================
;直角坐标-极坐标变换
;Amplitude,SinTheta,CosTheta的计算
;(ValX,ValY)--->(Amplitude,SinTheta,CosTheta,Theta)
;================================================================
		setc	sxm

;------------------------------------------------------------------
;求角度的正余弦值 (Angle)--->(CosAngle,SinAngle)

		SinCosAngle
;------------------------------------------------------------------
		ldp	#4
		splk	#0,Vsd_ref	;#0CCDH,Vsd_ref	;0
		splk	#4096,Vsq_ref	;#099AH,Vsq_ref	;1
;------------------------------------------------------------------		
;V/f控制环节	
;------------------------------------------------------------------		
;(Vsd_ref*=F/18),(Vsq_ref*=F/18)
;------------------------------------------------------------------		
VF		ldp	#4
		splk	#18,TEMP
		LT	f
		MPY	Vsd_ref
		pac
		rpt	#15
		subc	TEMP
		SACL	Vsd_ref
		
		LT	f
		MPY	Vsq_ref
		pac
		rpt	#15
		subc	TEMP
		SACL	Vsq_ref
;------------------------------------------------------------------		
;加斩波直流电压测量定子电阻和导线电阻
;		splk	#0000H,Vsd_ref
;		splk	#0200H,Vsq_ref
;------------------------------------------------------------------		
; 反park转换(d,q) -> (alfa,beta)
                       
; vSal_ref = Vsd_ref * cos(Angle) - vSqref * sin(Angle)     
; vSbe_ref = Vsd_ref * sin(Angle) + vSqref * cos(Angle)
;  
; vSal_ref,vSbe_ref -----4.12 format 
; sin(Angle),cos(Angle)--2.14 format                                        
;------------------------------------------------------------------		
		LT 	    Vsd_ref		;4.12 format
	 	MPY 	CosAngle	;2.14 format
	 	PAC
        SACH 	TEMP,2

		LT 	    Vsq_ref		;4.12 format
		MPY 	SinAngle
		PAC
		SACH    TEMP1,2  	;4.12 format
		MPY 	CosAngle
		PAC
		SACH 	TEMP2,2
		LACL 	TEMP
		SUB 	TEMP1
		SACL 	Vsalfa_ref	;得到4.12 FORMAT的Vsalfa_ref

		LACC 	#0		;
		LT  	Vsd_ref		;4.12 format
		MPY 	SinAngle	;2.14 format
		PAC
		SACH 	TEMP,2
		LACL 	TEMP
		ADD 	TEMP2
		SACL 	Vsbeta_ref	;得到4.12 format的Vsbeta_ref
;------------------------------------------------------------------
;------------------------------------------------------------------		
;空间矢量模块
;(Vsalfa_ref,Vsbeta_ref,vdc)--->(SVPWM发出)
;------------------------------------------------------------------

		SVPWM
NOPWM		NOP
;------------------------------------------------------------------				
;Angle+=f
;------------------------------------------------------------------		
ChangeAngle	ldp 	#4
		LACC	Angle
		ADD 	f
		SACL	Angle
		sub	#3600
		BCND	Skip_Dec,LT
		sacl	Angle
Skip_Dec	nop
;--------------------------------------------------------------------
;==============================================
;加减速模块开始
; if (f=fobj) then goto stable
; else if(f>fobj) then 每TDEC次中断执行f=f-1
; else if(f<fobj) then 每TINC次中断执行f=f+1
;------------------------------------------
;输入变量:f,fobj,TINC,TDEC
;输出变量:f
;专用变量:IncDecCounter
;------------------------------------------
	    ldp	#4			;200H-027FH
		LACL	f
		SUB	fobj
		nop
		BCND	STABLE,EQ
		BCND	INC,LT
DEC:	LACL	IncDecCounter
		ADD	#1
		SACL	IncDecCounter
		SUB	TDEC
		BCND	DECF,GEQ		
		B	INCDECOUT
		
DECF:	LACL	f
		SUB	#1
		SACL	f
		splk	#0,IncDecCounter
		B	INCDECOUT

INC:	LACL	IncDecCounter
		ADD	#1
		SACL	IncDecCounter
		SUB	TINC
		BCND	INCF,  GEQ		
		B	INCDECOUT

INCF:	LACL	f
		ADD	#1
		SACL	f
		splk	#0,IncDecCounter
		B	INCDECOUT
STABLE:		splk	#0,IncDecCounter
INCDECOUT:	NOP	
;------------------------------------------
;----------------------------------------------------------------------------
;计算时间测定	

;----------------------------------------------------------------------------				
		
;环境恢复返回主程序  
		mar 	*,AR1
		lacl 	*- 		;Accu. restored for context restore
		addh 	*-
		lst 	#0,*-
		lst 	#1,*-
		clrc 	INTM
		RET
;----------------------------------------------------------------------------
;TIMER1中断程序结束
;================================================================================



⌨️ 快捷键说明

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