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

📄 rampgen.asm

📁 这是关于有刷直流电动机PWM控制方案的源码
💻 ASM
字号:
;===========================================================================
; 文件名:	rampgen.asm
;
; 模块名: 	RAMP_GEN				      
;
; 初始化程序名: RAMP_GEN_INIT
;
; 公司:	达盛科技
;
; 功能描述:	产生频率、增益、偏移量可变的斜坡信号,模拟转子磁场
;
;				            |~~~~~~~~~~~~~~~~~|
;	   rmp_gain	    o------>|	 	          |
;	   rmp_offset 	o------>|    RAMP_GEN	  |----->o  rmp_out
;	   rmp_freq	    o------>|		          |
;				            |_________________|
;
;
;=====================================================================================
; 更改纪录:
;-------------------------------------------------------------------------------------
; 最后更新日期:2005.5.19    版本号: Ver 1.0
;===========================================================================
;(要调用模块,就将下面声明语句复制到主程序代码中相应位置)
;		.ref	RAMP_GEN, RAMP_GEN_INIT			;function call
;		.ref	rmp_gain, rmp_offset, rmp_freq	;Inputs
;		.ref	step_angle_max					;Input
;		.ref	rmp_out							;Outputs
;===========================================================================
;变量定义
;===========================================================================
		.def	RAMP_GEN, RAMP_GEN_INIT			;function call
		.def	rmp_gain, rmp_offset, rmp_freq	;Inputs
		.def	step_angle_max					;Input
		.def	rmp_out,rmp_out_abs				;Output
;===========================================================================
		.include 	"x24x_app.h"  

STEP_ANGLE_RG_MAX	.set	100;1000	;305.2Hz 对应 fs=20kHz
								
alpha_rg		.usect "rampgen",1
step_angle_rg	.usect "rampgen",1
step_angle_max	.usect "rampgen",1
rmp_gain		.usect "rampgen",1
rmp_offset		.usect "rampgen",1
rmp_freq		.usect "rampgen",1
rmp_out			.usect "rampgen",1
rmp_out_abs		.usect "rampgen",1
rmp_freq_p  	.usect "rampgen",1
;===========================================================================
;初始化
;===========================================================================
RAMP_GEN_INIT:
		LDP	#alpha_rg
		SPLK	#0, alpha_rg  				
		SPLK	#STEP_ANGLE_RG_MAX, step_angle_max

		SPLK	#3FFFh, rmp_gain	 		
		SPLK	#3FFFh, rmp_offset 		
		SPLK	#3FFFh, rmp_freq	 		
		RET
;===========================================================================
;控制程序
;===========================================================================
RAMP_GEN:
		SPM 0
		LDP		#rmp_freq
		LACC	rmp_freq,16	; ACC = rmp_freq  (Q15)
		ABS					; ACC = |rmp_freq|  (Q15)
		SACH	rmp_freq_p 	; rmp_freq_p = |rmp_freq|  (Q15)
	
		LT	rmp_freq_p		;规格化频率参考值 rmp_freq 
							;Q15
		MPY	step_angle_max	;Q15 x Q0
		PAC					;Q0 x Q15 = Q15 (32bit)
		SACH	step_angle_rg,1		;Q0 

		LACC	alpha_rg		;Q0
		ADD	step_angle_rg		;Q0+Q0
		SACL	alpha_rg		;Q0

	;根据设定值改变输出增益
		LT	alpha_rg			;Q0
		MPY	rmp_gain			;Q0 x Q15
		PAC						;P = rmp_gain * alpha_rg
		SACH	rmp_out_abs,1	;Q0
		LACC	rmp_out_abs		;Q0
		SACL	rmp_out			;Q15**
**说明
;rmp_out = rmp_out_abs/7FFFh. 

		SETC	SXM					; Sign extension mode
		SETC	OVM					; Set Overflow mode
		LACC	rmp_freq			; ACC = rmp_freq  (Q15)
		BCND	RMP_FREQ_POS, GT  	; Branch to RMP_FREQ_POS if rmp_freq > 0  	
		LACC	rmp_out,16			; ACC = rmp_out  (Q15)
		NEG							; ACC = -rmp_out  (Q15)
		SACH	rmp_out				; rmp_out = -rmp_out  (Q15) 
RMP_FREQ_POS		

    ;加偏移量
		LACC	rmp_out			;Q15
		ADD		rmp_offset		;Q15+Q15
		SACL	rmp_out			;Q15
		RET

⌨️ 快捷键说明

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