;
; ¿ªÊ¼Ê±£º±ØÐëµ÷Óà InitMeasCompCurr¡£
; ½øÈëʱ£º MeasCurrParm½á¹¹±ØÐë°üº¬ qKaºÍ qKb¡£ ; ADCͨµÀ 1ºÍ 2±ØÐë°üÀ¨ÓзûºÅСÊýÖµ¡£ ; Í˳öʱ£º ParkParm½«°üº¬ qIaºÍ qIb¡£ ;
;²ÎÊý£º
;ÊäÈë²ÎÊý£º ;ÎÞ
;·µ»ØÖµ£º ; Void
;ËùÐèµÄ SFRÉ趨£º ; CORCON.SATA = 0
;Èç¹ûÀÛ¼ÓÆ÷¿ÉÄÜÒç³ö£¬±ØÐëÉ趨£º ; CORCON.SATDW = 1 ;
;ËùÐèµÄÖ§³Ö×Ó³ÌÐò£º ;ÎÞ
;¾Ö²¿¶ÑջʹÓ㺠;ÎÞ
;Ð޸ĵļĴæÆ÷£º ; w0,w1,w4,w5 ;Ö´ÐÐʱ¼ä£º ; 29¸öÖÜÆÚ
;*******************************************************************
global _MeasCompCurr global MeasCompCurr
_MeasCompCurr: MeasCompCurr:
;; CorrADC1 = ADCBUF1 - iOffsetHa/2^16
;; qIa = 2 * qKa * CorrADC1
mov.w _MeasCurrParm+ADC_iOffsetHa,w0 sub.w _ADCBUF1,WREG ; w0 = ADC - Offset clr.w w1
btsc w0,#15 setm w1
mov.w w0,w5
mov.w _MeasCurrParm+ADC_qKa,w4 mpy w4*w5,A sac A,#-1,w4
mov.w w4,_ParkParm+Park_qIa
;; iOffset += (ADC-Offset)
add _MeasCurrParm+ADC_iOffsetLa mov.w w1,w0
addc _MeasCurrParm+ADC_iOffsetHa
;; CorrADC2 = ADCBUF2 - iOffsetHb/2^16 ;; qIb = 2 * qKb * CorrADC2
mov.w _MeasCurrParm+ADC_iOffsetHb,w0
sub.w _ADCBUF2,WREG ; w0 = ADC -Offset clr.w w1 btsc w0,#15 setm w1
mov.w w0,w5
mov.w _MeasCurrParm+ADC_qKb,w4 mpy w4*w5,A sac A,#-1,w4
mov.w w4,_ParkParm+Park_qIb
;; iOffset += (ADC-Offset)
add _MeasCurrParm+ADC_iOffsetLb mov.w w1,w0
addc _MeasCurrParm+ADC_iOffsetHb
return
ClarkePark.s
;******************************************************************* ; ClarkePark ;
; ˵Ã÷£º
;¼ÆËã ClarkeºÍ Park±ä»»¡£
;¼Ù¶¨ CosºÍ SinÖµÔÚ qSinºÍ qCosÖС£ ;
; Ialpha = Ia
; Ibeta = Ia*dOneBySq3 + 2*Ib*dOneBySq3; ;ÆäÖÐ Ia+Ib+Ic = 0 ;
; Id = Ialpha*cos(Angle) + Ibeta*sin(Angle) ; Iq = -Ialpha*sin(Angle) + Ibeta*cos(Angle) ;
;¸Ã×Ó³ÌÐòͬÑùÊÊÓÃÓÚÕûÊý¶¨±êºÍ 1.15¶¨±ê¸ñʽ¡£;
; º¯ÊýÔÐÍ£º ;
; void ClarkePark( void ) ;
;½øÈëʱ£º ParkParm½á¹¹±ØÐë°üº¬ qSin¡¢ qCos¡¢;Í˳öʱ£º ParkParm½«°üº¬ qIdºÍ qIq¡£ ;
; ²ÎÊý£º ;ÊäÈë²ÎÊý£º ;·µ»ØÖµ£º ; Void
;ËùÐèµÄ SFRÉ趨£º ; CORCON.SATA = 0
;Èç¹û (Ia+2*Ib)/sqrt(3)¿ÉÄܳöÏÖÒç³ö£¬±ØÐëÉ趨
; CORCON.SATDW = 1 ;
; ËùÐèµÄÖ§³Ö×Ó³ÌÐò£º ;ÎÞ
; ¾Ö²¿¶ÑջʹÓ㺠;ÎÞ
; Ð޸ĵļĴæÆ÷£º ; w3 -> w7 ; Ö´ÐÐʱ¼ä£º
qIaºÍ qIb¡£
; 20¸öÖÜÆÚ
;******************************************************************* ;
include \ ; ÍⲿÒýÓÃ
include \
; ¼Ä´æÆ÷ʹÓÃ
.equ ParmW, w3 ; Ö¸Ïò ParkParm½á¹¹µÄÖ¸Õë .equ Sq3W, w4 ; OneBySq3 .equ SinW, w4 ;Ìæ´ú Work0W .equ CosW, w5
.equ IaW, w6 ; qIaµÄ¿½±´ .equ IalphaW, w6 ; Ìæ´ú Ia .equ IbW, w7 ; qIbµÄ¿½±´
.equ IbetaW, w7 ; Óà IbetaÌæ´ú Ib ; ³£Á¿
equ OneBySq3, 0x49E7 ; 1/sqrt(3)£¬²ÉÓà 1.15¸ñʽ
;=================== ´úÂë ===================== section .text
global _ClarkePark global ClarkePark
_ClarkePark:
ClarkePark:
;; Ibeta = Ia*OneBySq3 + 2*Ib*OneBySq3;
mov.w #OneBySq3,Sq3W ; 1/sqrt(3)£¬²ÉÓà 1.15¸ñʽ mov.w _ParkParm+Park_qIa,IaW mpy Sq3W*IaW,A
mov.w _ParkParm+Park_qIb,IbW mac Sq3W*IbW,A mac Sq3W*IbW,A
mov.w _ParkParm+Park_qIa,IalphaW mov.w IalphaW,_ParkParm+Park_qIalpha sac A,IbetaW
mov.w IbetaW,_ParkParm+Park_qIbeta
;; ÒѾ¼ÆËã Ialpha ºÍ Ibeta¡£ÏÖÔÚ½øÐÐÐýת¡£