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

📄 clarke.asm

📁 这是实现三相异步电动机FOC的DSP开发源代码
💻 ASM
字号:
;=======================================================================
; 文件名:	clarke.asm			      
;
; 模块名称: CLARKE	
;
; 初始化程序名: CLARKE_INIT
;
; 公司:	达盛科技
;
; 功能描述:	三相静止坐标到两相正交静止坐标变换
;			从(a,b,c)坐标 -> (d,q) 坐标变换
;				clark_d = clark_a
;				clark_q = (2 * clark_b + clark_a) / sqrt(3)
;
;			         |~~~~~~~~~~~~~~~~~|
;	clark_a	 o------>|		           |----->o  clark_d
;	clark_b	 o------>|     CLARKE      |
;	clark_c* o------>|		           |----->o  clark_q
;			         |_________________|
;
; 目标板cpu:	x2407
;=====================================================================================
; 修改记录:
;-------------------------------------------------------------------------------------
; 最终更改日期:2005.7.10	版本号: ver.1.0	
;=======================================================================
;(使用子程序就把下面的变量声明文件复制到主程序中) ref【识别在当前模块中使用但在其他模块中定义的符号】
;		.ref	CLARKE, CLARKE_INIT				;子程序调用
;		.ref	clark_a, clark_b				;输入
;		.ref	clark_d, clark_q				;输出
;=======================================================================
;外部变量声明    def【识别在当前模块中定义且可以被其他模块使用的符号】
		.def	CLARKE, CLARKE_INIT				;子程序调用
		.def	clark_a, clark_b				;输入
		.def	clark_d, clark_q				;输出
;=======================================================================
		.include "x24x_app.h"  ;include 【告诉汇编器开始从其他文件中读仍从读原语句】

; 变量定义      .usect【在未初始化命名段内保留空间】
clark_a		.usect "clarke",1
clark_b		.usect "clarke",1
clark_d		.usect "clarke",1
clark_q		.usect "clarke",1
sqrt3inv	.usect "clarke",1    			; 1/sqrt(3)
clk_temp	.usect "clarke",1
 
;=========================
CLARKE_INIT:	  
;=========================
; sqrt3inv = (1/sqrt(3))=0.577350269
		ldp		#sqrt3inv
		SPLK 	#018830,sqrt3inv  	; 1/sqrt(3) (Q15)
		RET
   
;=========================
CLARKE:	  
;=========================
		SPM	1						; 设置乘积移位模式以适合 Q15 计算
		SETC	SXM                 ; 允许符号扩展

;clark_d = clark_a
		ldp	#clark_a
		LACC	clark_a		      	; ACC = clark_a
		SACL	clark_d				; clark_d = clark_a
                                    
;clark_q = (2 * clark_b + clark_a) / sqrt(3)
		SFR	                        ; ACC = clark_a/2
		ADD	clark_b         		; ACC = clark_a/2 + clark_b
		SACL	clk_temp            ; clk_temp = clark_a/2 + clark_b
		LT	clk_temp        		; TREG = clark_a/2 + clark_b
		MPY	sqrt3inv				; PREG = (clark_a/2 + clark_b)*(1/sqrt(3))
		PAC               			; ACC =  (clark_a/2 + clark_b)*(1/sqrt(3))
    	SFL               			; ACC =  (clark_a + clark_b*2)*(1/sqrt(3))
		SACH	clark_q  			; clark_q = (clark_a + clark_b*2)*(1/sqrt(3))
    	SPM	0                 		; 禁止符号扩展
		RET
	

⌨️ 快捷键说明

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