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

📄 speed_fr.asm.txt

📁 此源码事有关DSP编程用的
💻 TXT
字号:
;=====================================================================
; File Name	:	speed_fr.asm			      
; Module Name	: 	SPEED_FRQ	
; Initialization Routine: SPEED_FRQ_INIT
; Description: This module calculates motor speed based on measurement 
;				of frequency of the signal generated by a speed sensor.
;				The frequency of the speed sensor signal is the number 
;				of pulses generated per sec, which is again proportional 
;				to the angular displacement of the sensor disk and hence 
;				that of the rotor. Therefore, this module gets it's input 
;				as rotor shaft displacements (shaft_angle) for a known 
;				time interval and then uses these information to calculate
;				the motor speed. Samples the position once every 
;				(SPEED_LP_MAX x Speed loop sampling time period) sec.
;
;						|~~~~~~~~~~~~~~~|
;	shaft_angle	o------>|				|----->o  speed_frq
;	  					| SPEED_FRQ		|
;	  direction o------>|  				|----->o  speed_frq_rpm
;						|_______________|
;===================================================================== 
;(To use this Module, copy this section to main system file)
;		.ref	SPEED_FRQ, SPEED_FRQ_INIT		;function call
;		.ref	shaft_angle, direction			;Inputs
;		.ref	speed_frq, speed_frq_rpm		;Outputs
;=====================================================================
;Module definitions for external reference.
		.def	SPEED_FRQ, SPEED_FRQ_INIT		;function call
		.def	shaft_angle, direction			;Inputs
		.def	speed_frq, speed_frq_rpm		;Outputs
		.def	SPEED_LP_MAX, rpm_scaler
;=====================================================================		.include	x24x_app.h

SPEED_LP_MAX_	.set	200						;200 x 50uS = 0.010 sec
RPM_SCALER_	.set	6000

shaft_angle	.usect	"speed_fr",1
s_angle_cur	.usect	"speed_fr",1
s_angle_old	.usect	"speed_fr",1
direction		.usect	"speed_fr",1
speed_frq		.usect	"speed_fr",1
speed_frq_rpm	.usect	"speed_fr",1
rpm_scaler	.usect	"speed_fr",1
speed_skp_cnt	.usect	"speed_fr",1
SPEED_LP_MAX	.usect	"speed_fr",1
;=====================================================================
SPEED_FRQ_INIT:
;=====================================================================
		ldp		#rpm_scaler
		SPLK	#RPM_SCALER_, rpm_scaler
		splk	#SPEED_LP_MAX_, SPEED_LP_MAX
		RET

;=====================================================================
SPEED_FRQ:
;=====================================================================
		ldp		#speed_skp_cnt
		LACC	speed_skp_cnt
		ADD		#1
		SACL	speed_skp_cnt
		SUB		SPEED_LP_MAX
		BCND	MS_FRQ_END, LT			;Skip the Speed meas.

MSF_1		
LACC	s_angle_cur
		SACL	s_angle_old
		LACC	shaft_angle
		SACL	s_angle_cur
		LACC	direction
		BCND	UP_CNT, NEQ			;If not=0, then Up-count

;---------------------------
DWN_CNT:
;---------------------------
		LACC	s_angle_cur
		SUB		s_angle_old
		BCND	DNEG_DELTA, LT		;If negative

DPOS_DELTA:
		SUB		#7FFFh				;Sub 1 from Delta
		SACL	speed_frq			;Delta = f(t2) - f(t1) - 1
		B		SM_SCALE

DNEG_DELTA:
		SACL	speed_frq			;Delta = f(t2) - f(t1)
		B		SM_SCALE


;---------------------------
UP_CNT:
;---------------------------
		LACC	s_angle_cur
		SUB		s_angle_old
		BCND	UNEG_DELTA, LT		;If negative

UPOS_DELTA	
SACL	speed_frq			;Delta = f(t2) - f(t1)
		B		SM_SCALE

UNEG_DELTA	
ADD		#7FFFh				;Add 1 to Delta
		SACL	speed_frq			;Delta = 1 + f(t2) - f(t1)


SM_SCALE:
		LT		speed_frq
		MPY		rpm_scaler
		PAC
		SACH	speed_frq_rpm,1

		SPLK	#0, speed_skp_cnt		;reset count		

MS_FRQ_END:
		RET

⌨️ 快捷键说明

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