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

📄 mcs.asm

📁 DSP关于F2407的实例程序
💻 ASM
📖 第 1 页 / 共 2 页
字号:
  	.include "f2407.h"
 	.include "vector.h" 
 	.include "pvecs.h"       
    	
   	.global i_GET,i_GET_INIT	
	.global	CLARK,CLARK_INIT
	.global	PARK,PARK_INIT
	.global	FLUX,FLUX_INIT
	.global	QEP,QEP_INIT
	.global	Omiga_PID,Omiga_PID_INIT
	.global	KesaiR_PID,KesaiR_PID_INIT
	.global IST_PID,IST_PID_INIT
	.global	IPARK
	.global	SVPWM,SVPWM_INIT
	.global	PROTECT
	.global SINTAB_360,SIN90
	.global	PDPINTA_INIT
	.global	FILTER_INIT,FILTER
	.global	OMIGA_FILTER_INIT,OMIGA_FILTER
	.global	OMIGAE0_FILTER_INIT,OMIGAE0_FILTER
;=====================================================================
	.global	TEMP,TEMP1
	.global	Tpwm
	.global	IA0,IA1,IA2,IB0,IB1,IB2,Omiga_in	;i_GET function 	
	.global	Ialfa0,Ibeta0,CLARK_C1,CLARK_C2		;CLARK function 
	.global	PARK_Theta,ISM0,IST0,IST1,IST2,ThetaS1,OmigaS1	;PARK function
	.global t_ptr,ip_val,cos_PARK_Theta,sin_PARK_Theta,nxt_entry,delta_angle ;PARK function
	.global	OmigaS0,OmigaR0,delta_omiga,ThetaS0,KesaiR1,KesaiR0,FLUX_C1,FLUX_C2,FLUX_C3 ;FLUX function
	.global	POS0,POS1,QEP_dir,QEP_C,OmigaR_temp	 		;QEP function
	.global	Omiga_ref,IST_ref1,IST_ref,IST_ref_TEMP,OmigaE0,OmigaE1,OmigaE2	;Omiga_PID function
	.global	Omiga_PID_K0,Omiga_PID_K1,Omiga_PID_K2,IST_refmax,IST_refmin;Omiga_PID function
	.global	KesaiR_ref,USM1,USM_TEMP,USM0,KesaiRE0,KesaiRE1,KesaiRE2;KesaiR_PID function
	.global	KesaiR_PID_K0,KesaiR_PID_K1,KesaiR_PID_K2,USMmax,USMmin	;KesaiR_PID function
	.global	IST_ref,IST_PID_K0,IST_PID_K1,IST_PID_K2		;IST_PID function
	.global UST1,UST_TEMP,UST0,USTmax,USTmin,ISTE0,ISTE1,ISTE2,ISTE3;IST_PID function
	.global Ualfa0,Ubeta0,cos_ThetaS0,sin_ThetaS0			;IPARK function	
	.global SECTOR,A,B,C,SVPWM_C1,SVPWM_C2,CMPR1_BUFF,CMPR2_BUFF,ACTRA_BUFF,TX1,TX2	;SVPWM function
	.global	FILTER_Y1,FILTER_Y2,FILTER_Y3,FILTER_Y4,FILTER_Y5,FILTER_Y6	;FILTER function
	.global	FILTER_MAX,FILTER_MIN,FILTER_RESULT,FILTER_COUNT	;FILTER function
	.global	OMIGA_FILTER_Y1,OMIGA_FILTER_Y2,OMIGA_FILTER_Y3,OMIGA_FILTER_Y4
	.global	OMIGA_FILTER_Y5,OMIGA_FILTER_Y6,OMIGA_FILTER_Y7,OMIGA_FILTER_Y8
	.global	OMIGA_FILTER_RESULT					;OMIGA_FITER function
	.global	OMIGAE0_FILTER_Y1,OMIGAE0_FILTER_Y2,OMIGAE0_FILTER_Y3,OMIGAE0_FILTER_Y4
	.global	OMIGAE0_FILTER_Y5,OMIGAE0_FILTER_Y6,OMIGAE0_FILTER_Y7,OMIGAE0_FILTER_Y8
	.global	OMIGAE0_FILTER_RESULT
;--------------------------------------------------------------------
	.bss	TEMP,1
	.bss	TEMP1,1
	.bss	Tpwm,1			;Tpwm=0.2mS=6554(Q15)
;----------------	
	.bss	IA0,1			;i_GET function output (Q12)
	.bss	IA1,1
	.bss	IA2,1
	.bss	IB0,1			;(Q12)
	.bss	IB1,1
	.bss	IB2,1
	.bss	Omiga_in,1		;(7FFFH/mS)
;----------------
	.bss	Ialfa0,1		;CLARK function output (Q11)
	.bss	Ibeta0,1		;(Q11)
	.bss	CLARK_C1,1		;(Q15),CLARK function constant
	.bss	CLARK_C2,1		;(Q15)
;----------------
	.bss	ISM0,1          
	.bss	IST0,1
	.bss	IST1,1
	.bss	IST2,1
	.bss	PARK_Theta,1
	.bss	ThetaS1,1		;前一周期的磁链定向角
	.bss	OmigaS1,1		;前一周期的磁链旋转角速度
	.bss	t_ptr,1			;表指针,指向PARK_Theta的sin值。
	.bss	ip_val,1		;存插值
	.bss	cos_PARK_Theta,1	;存cos(PARK_Theta)(Q15)
	.bss	sin_PARK_Theta,1	;存sin(PARK_Theta)(Q15)
	.bss	nxt_entry,1		;表中sin(PARK_Theta)的下一个值,做插值时用。
	.bss	delta_angle,1		;表中前后两个值的差值。	
;----------------	
	.bss	OmigaS0,1		;(7FFFH/mS)
	.bss	OmigaR0,1		;(7FFFH/mS)
	.bss	delta_omiga,1		;(7FFFH/mS)
	.bss	ThetaS0,1		;(7FFFH/360)
	.bss	KesaiR1,1		;(Q4)
	.bss	KesaiR0,1		;(Q4)
	.bss	FLUX_C1,1		;(Q15),FLUX function constant
	.bss	FLUX_C2,1		;(Q8)
	.bss	FLUX_C3,1		
;----------------
	.bss	POS0,1			;Rotator‘s position
	.bss	POS1,1			;Rotator‘s position
	.bss	QEP_dir,1		;转向
	.bss	QEP_C,1			;QEP function constant
;----------------	
	.bss	Omiga_ref,1		;给定
	.bss	IST_ref,1		;输出
	.bss	IST_ref1,1		;上一次输出
	.bss	IST_ref_TEMP,1		;上一次输出
	.bss	IST_refmax,1		;饱和情况下的最值
	.bss	IST_refmin,1				
	.bss	OmigaE0,1		;误差值
	.bss	OmigaE1,1
	.bss	OmigaE2,1
	.bss	Omiga_PID_K0,1		;PID调节系数
	.bss	Omiga_PID_K1,1
	.bss	Omiga_PID_K2,1	
;----------------	
	.bss	KesaiR_ref,1		;给定
	.bss	USM0,1			;输出
	.bss	USM1,1			;上一次输出
	.bss	USM_TEMP,1		;上一次输出
	.bss	USMmax,1		;饱和情况下的最值
	.bss	USMmin,1				
	.bss	KesaiRE0,1		;误差值
	.bss	KesaiRE1,1
	.bss	KesaiRE2,1
	.bss	KesaiR_PID_K0,1		;PID调节系数
	.bss	KesaiR_PID_K1,1
	.bss	KesaiR_PID_K2,1
;----------------
;	.bss	IST_ref,1		;给定,前面已经定义
	.bss	UST0,1			;输出
	.bss	UST1,1			;上一次输出
	.bss	UST_TEMP,1		;上一次输出
	.bss	USTmax,1		;饱和情况下的最值
	.bss	USTmin,1				
	.bss	ISTE0,1			;误差值
	.bss	ISTE1,1
	.bss	ISTE2,1
	.bss	IST_PID_K0,1		;PID调节系数
	.bss	IST_PID_K1,1
	.bss	IST_PID_K2,1
;----------------
	.bss	Ualfa0,1		;IPARK output(Q11)
	.bss	Ubeta0,1		;(Q11)
	.bss	cos_ThetaS0,1		;cos(ThetaS0)(Q15)
	.bss	sin_ThetaS0,1		;sin(ThetaS0)(Q15)
;----------------
	.bss	SECTOR,1		
	.bss	A,1
	.bss	B,1
	.bss	C,1
	.bss	TX1,1
	.bss	TX2,1
	.bss	CMPR1_BUFF,1		;SVPWM function output
	.bss	CMPR2_BUFF,1
	.bss	ACTRA_BUFF,1		
	.bss	SVPWM_C1,1
	.bss	SVPWM_C2,1
;----------------			;IST0滤波参数
	.bss	FILTER_Y1,1	
	.bss	FILTER_Y2,1
	.bss	FILTER_Y3,1
	.bss	FILTER_Y4,1
	.bss	FILTER_Y5,1
	.bss	FILTER_Y6,1
	.bss	FILTER_Y7,1
	.bss	FILTER_Y8,1
	.bss	FILTER_Y9,1
	.bss	FILTER_Y10,1
	.bss	FILTER_MAX,1
	.bss	FILTER_MIN,1
	.bss	FILTER_RESULT,1
	.bss	FILTER_COUNT,1
;----------------			;转速滤波参数
	.bss	OMIGA_FILTER_Y1,1
	.bss	OMIGA_FILTER_Y2,1
	.bss	OMIGA_FILTER_Y3,1
	.bss	OMIGA_FILTER_Y4,1
	.bss	OMIGA_FILTER_Y5,1
	.bss	OMIGA_FILTER_Y6,1
	.bss	OMIGA_FILTER_Y7,1
	.bss	OMIGA_FILTER_Y8,1
	.bss	OMIGA_FILTER_RESULT,1
;----------------			;转速误差滤波参数
	.bss	OMIGAE0_FILTER_Y1,1
	.bss	OMIGAE0_FILTER_Y2,1
	.bss	OMIGAE0_FILTER_Y3,1
	.bss	OMIGAE0_FILTER_Y4,1
	.bss	OMIGAE0_FILTER_Y5,1
	.bss	OMIGAE0_FILTER_Y6,1
	.bss	OMIGAE0_FILTER_Y7,1
	.bss	OMIGAE0_FILTER_Y8,1
	.bss	OMIGAE0_FILTER_RESULT,1
;----------------

		 
 	.data
ST0_CON1	.word	#0           	;保存ST0结果
ST1_CON1	.word	#0              ;保存ST1结果,必须保存在DP=0页!
;TS		.word	#07D0H
;TS2		.word	#03E8H

PRT_A	.usect	"table",80H		;一页存储单元
PRT_B	.usect	"table",80H
PRT_C	.usect	"table",80H
PRT_D	.usect	"table",80H
PRT_E	.usect	"table",80H
PRT_F	.usect	"table",80H
PRT_G	.usect	"table",80H
PRT_H	.usect	"table",80H
PRT_I	.usect	"table",80H
PRT_J	.usect	"table",80H
PRT_K	.usect	"table",80H
PRT_L	.usect	"table",80H
PRT_M	.usect	"table",80H
PRT_N	.usect	"table",80H
PRT_O	.usect	"table",80H


;=====================================================================
	.text
START: 
	NOP
	NOP
	SETC	INTM			;Disable interrupt
	SETC	SXM
	CLRC	CNF			;B0作为数据存储区
	LDP	#0H
	SPLK	#0023H,IMR		;使能第1级中断1,2,6
	
	LACC	IFR
	SACL	IFR				;Clear IFR

	LDP	#DP_PF1			;7000h-707Fh
	SPLK	#80FEH,SCSR1			;CLK=10MHz,CLKOUT=40MHz,仿真时CLKOUT脚没有信号。

	SPLK	#006FH,WDCR			;Disable DOG
	
	LDP	#DP_PF2
	;SPLK 	#0F03FH,MCRA		
	SPLK 	#0FFFH,MCRA			;配置为特殊功能用途
	SPLK	#00FAH,MCRB			;使能CAN,SPI特殊功能 
	SPLK	#0001H,MCRC			;CLKOUT引脚输出CPU时钟   
	
	LDP 	#DP_PF1
	SPLK	#8007H,XINT1CR			;外部中断上升沿中断,低优先级
	SPLK	#0,XINT2CR

		
	CALL	EVA_INIT			;EVA模块初始化 
	
;    	CALL	QEP_INIT
    	CALL	i_GET_INIT
;   	CALL	CLARK_INIT
;  	CALL	PARK_INIT
;    	CALL	FLUX_INIT			
;    	CALL	Omiga_PID_INIT
;    	CALL	KesaiR_PID_INIT 
;    	CALL	IST_PID_INIT		
    	CALL	SVPWM_INIT
;    	CALL	FILTER_INIT
;    	CALL	OMIGAE0_FILTER_INIT
;赋初值	
	LDP	#DP_DATA
	SPLK	#1000011001100110B,ACTRA_BUFF
	SPLK	#010H,CMPR1_BUFF
	SPLK	#030H,CMPR2_BUFF
	
	SPLK	#0,IA0
	SPLK	#0,IA1
	SPLK	#0,IA2
	SPLK	#0,IB0
	SPLK	#0,IB1
	SPLK	#0,IB2
	SPLK	#0,IST0
	SPLK	#0,IST1
	SPLK	#0,IST2
	
	SPLK	#0,OmigaR0
	SPLK	#340,Omiga_ref		;791*1.831=1450r/min(额定)
	SPLK	#17000,KesaiR_ref	;225mH*5A=18000
	SPLK	#5000,IST_ref   
	SPLK	#7000,USM0
	SPLK	#7000,UST0
	SPLK	#0,ThetaS0
     	
     	LAR	AR7,#PRT_A		;开始存波形的位置。
     	LAR	AR6,#PRT_H

⌨️ 快捷键说明

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