ソースを参照

母线限流,转把释放速度为0后停止FOC

Signed-off-by: huhui <huhui@sharkgulf.com>
huhui 3 年 前
コミット
e1d53b8df7

+ 2 - 1
Applications/app/nv_storage.c

@@ -45,11 +45,12 @@ static void nv_default_foc_params(void) {
 	foc_params.s_maxRPM = 8200;
 	foc_params.s_maxEpmRPM = 133;
 	foc_params.s_maxTorque = 180;
-	foc_params.s_maxBrkCurrent = 2.0f;
+	foc_params.s_maxBrkCurrent = 10.0f;
 	foc_params.n_currentBand = 500;
 	foc_params.n_modulation = 1.0f;
 	foc_params.n_PhaseFilterCeof = 0.2f;
 	foc_params.n_TrqVelLimGain = 1.0f;
+	foc_params.s_LimitiDC = 20.0f;
 	foc_params.spd_kp = 0.001f;
 	foc_params.spd_ki = 0.01;
 	foc_params.trq_kp = 0.001f;

+ 1 - 0
Applications/app/nv_storage.h

@@ -13,6 +13,7 @@ typedef struct {
 	float s_maxEpmRPM;
 	float s_maxTorque;
 	float s_maxBrkCurrent;
+	float s_LimitiDC;
 	float n_modulation;
 	float n_PhaseFilterCeof;
 	float n_currentBand; //电流环带宽

+ 32 - 19
Applications/bsp/adc.c

@@ -66,6 +66,7 @@ static void adc0_init(void){
 #ifdef W_PHASE_I_CHAN	
 	adc_update_insert_sample_time(ADC0, W_PHASE_I_CHAN, ADC_SAMPLE_TIME);
 #endif
+
 #ifdef HIGH_SIDE_CURRENT_SENSOR
 	adc_oversample_mode_config(ADC0, ADC_OVERSAMPLING_ALL_CONVERT, ADC_OVERSAMPLING_SHIFT_3B, ADC_OVERSAMPLING_RATIO_MUL8);
 	adc_oversample_mode_enable(ADC0);
@@ -118,7 +119,6 @@ static void adc1_init(void){
     adc_channel_length_config(ADC1, ADC_INSERTED_CHANNEL, 1);
 
     /* configure ADC inserted channel */
-    //adc_inserted_channel_config(ADC1, 0, V_PHASE_I_CHAN, ADC_SAMPLE_TIME);
 #ifdef U_PHASE_I_CHAN
 	adc_update_insert_sample_time(ADC1, U_PHASE_I_CHAN, ADC_SAMPLE_TIME);
 #endif
@@ -128,6 +128,7 @@ static void adc1_init(void){
 #ifdef W_PHASE_I_CHAN	
 	adc_update_insert_sample_time(ADC1, W_PHASE_I_CHAN, ADC_SAMPLE_TIME);
 #endif
+
 #ifdef HIGH_SIDE_CURRENT_SENSOR
 	adc_oversample_mode_config(ADC1, ADC_OVERSAMPLING_ALL_CONVERT, ADC_OVERSAMPLING_SHIFT_3B, ADC_OVERSAMPLING_RATIO_MUL8);
 	adc_oversample_mode_enable(ADC1);
@@ -146,16 +147,22 @@ static void adc1_init(void){
 }
 
 static void adc_gpio_init(void) {
-#ifdef U_PHASE_ADC_RCU
-	rcu_periph_clock_enable(U_PHASE_ADC_RCU);
+
+	rcu_periph_clock_enable(RCU_AF);
+		/* configure ADC pin, current sampling -- ADC_IN1(PA1) ADC_IN12(PC2) ADC_IN13(PC3) */
+#ifdef U_PHASE_ADC_GROUP
+		rcu_periph_clock_enable(U_PHASE_ADC_RCU);
+		gpio_init(U_PHASE_ADC_GROUP, U_PHASE_ADC_MODE, GPIO_OSPEED_50MHZ, U_PHASE_ADC_PIN);
 #endif
-#ifdef V_PHASE_ADC_RCU
-	rcu_periph_clock_enable(V_PHASE_ADC_RCU);
+#ifdef V_PHASE_ADC_GROUP
+		rcu_periph_clock_enable(V_PHASE_ADC_RCU);
+		gpio_init(V_PHASE_ADC_GROUP, V_PHASE_ADC_MODE, GPIO_OSPEED_50MHZ, V_PHASE_ADC_PIN);
 #endif
-#ifdef W_PHASE_ADC_RCU	
-	rcu_periph_clock_enable(W_PHASE_ADC_RCU);
+#ifdef W_PHASE_ADC_GROUP
+		rcu_periph_clock_enable(W_PHASE_ADC_RCU);
+		gpio_init(W_PHASE_ADC_GROUP, W_PHASE_ADC_MODE, GPIO_OSPEED_50MHZ, W_PHASE_ADC_PIN);
 #endif
-	rcu_periph_clock_enable(RCU_AF);
+
 #ifdef VBUS_V_ADC_GROUP
 	rcu_periph_clock_enable(VBUS_V_ADC_RCU);
 	/* configure ADC pin, bus voltage sampling -- ADC_IN0(PA0) */
@@ -172,16 +179,22 @@ static void adc_gpio_init(void) {
 	/* configure ADC pin, temperature sampling -- ADC_IN11(PC1) */
 	gpio_init(TEMP_V_ADC_GROUP, TEMP_V_ADC_MODE, GPIO_OSPEED_50MHZ, TEMP_V_ADC_PIN);
 #endif
-	/* configure ADC pin, current sampling -- ADC_IN1(PA1) ADC_IN12(PC2) ADC_IN13(PC3) */
-#ifdef U_PHASE_ADC_GROUP
-	gpio_init(U_PHASE_ADC_GROUP, U_PHASE_ADC_MODE, GPIO_OSPEED_50MHZ, U_PHASE_ADC_PIN);
+
+
+#ifdef U_VOL_ADC_GROUP
+	rcu_periph_clock_enable(U_VOL_ADC_RCU);
+	gpio_init(U_VOL_ADC_GROUP, U_VOL_ADC_MODE, GPIO_OSPEED_50MHZ, U_VOL_ADC_PIN);
 #endif
-#ifdef V_PHASE_ADC_GROUP
-	gpio_init(V_PHASE_ADC_GROUP, V_PHASE_ADC_MODE, GPIO_OSPEED_50MHZ, V_PHASE_ADC_PIN);
+#ifdef V_VOL_ADC_GROUP
+	rcu_periph_clock_enable(V_VOL_ADC_RCU);
+	gpio_init(V_VOL_ADC_GROUP, V_VOL_ADC_MODE, GPIO_OSPEED_50MHZ, V_VOL_ADC_PIN);
 #endif
-#ifdef W_PHASE_ADC_GROUP	
-	gpio_init(W_PHASE_ADC_GROUP, W_PHASE_ADC_MODE, GPIO_OSPEED_50MHZ, W_PHASE_ADC_PIN);
+#ifdef W_VOL_ADC_GROUP
+	rcu_periph_clock_enable(W_VOL_ADC_RCU);
+	gpio_init(W_VOL_ADC_GROUP, W_VOL_ADC_MODE, GPIO_OSPEED_50MHZ, W_VOL_ADC_PIN);
 #endif
+
+
 }
 
 void adc_init(void) {
@@ -202,10 +215,10 @@ u16 adc_get_throttle(void) {
 	return adc_buffer[1];
 }
 
-void adc_get_uvw_phases(u16 *u, u16 *v, u16 *w) {
-	*u = adc_buffer[2];
-	*v = adc_buffer[3];
-	*w = adc_buffer[4];
+void adc_get_uvw_phaseV(u16 *uvw) {
+	uvw[0] = adc_buffer[2];
+	uvw[1] = adc_buffer[3];
+	uvw[2] = adc_buffer[4];
 }
 
 void adc_start_convert(void) {

+ 2 - 1
Applications/bsp/adc.h

@@ -63,6 +63,7 @@ static void __inline adc_phase_current_read(u8 phases, s32 *v1, s32 *v2) {
 #endif
 }
 
+
 static void __inline adc_current_sample_config(u8 phases) {
 #ifdef HIGH_SIDE_CURRENT_SENSOR
 	ADC_ISQ(ADC0) = ADC_RANK_CHANNEL(V_PHASE_I_CHAN);
@@ -127,6 +128,6 @@ void adc_start_convert(void);
 void adc_stop_convert(void);
 u16 adc_get_vbus(void);
 u16 adc_get_throttle(void);
-void adc_get_uvw_phases(u16 *u, u16 *v, u16 *w);
+void adc_get_uvw_phaseV(u16 *uvw);
 
 #endif /* _ADC_H__ */

+ 1 - 1
Applications/bsp/board_mc_v1.h

@@ -186,7 +186,7 @@
 
 #define ENC_MAX_interpolation 4.0F
 
-#define ENC_FILTER_NR          20
+#define ENC_FILTER_NR          15
 
 /* 编码器参数      */
 #define ENC_MAX_RES  1024

+ 50 - 13
Applications/foc/core/PMSM_FOC_Core.c

@@ -18,7 +18,12 @@ static Fir_t phase1, phase2;
 
 static __INLINE void RevPark(DQ_t *dq, float angle, AB_t *alpha_beta) {
 	float c,s;
+#if 0
 	SinCos_Lut(angle, &s, &c);
+#else
+	s = _gFOC_Ctrl.out.sin;
+	c = _gFOC_Ctrl.out.cos;
+#endif
 
 	alpha_beta->a = dq->d * c - dq->q * s;
 	alpha_beta->b = dq->d * s + dq->q * c;
@@ -31,8 +36,12 @@ static __INLINE void Clark(float A, float B, float C, AB_t *alpha_beta){
 
 static __INLINE void Park(AB_t *alpha_beta, float angle, DQ_t *dq) {
 	float c,s;
+#if 0
 	SinCos_Lut(angle, &s, &c);
-
+#else
+	s = _gFOC_Ctrl.out.sin;
+	c = _gFOC_Ctrl.out.cos;
+#endif
 	dq->d = alpha_beta->a * c + alpha_beta->b * s;
 	dq->q = -alpha_beta->a * s + alpha_beta->b * c;
 }
@@ -113,6 +122,7 @@ static void PMSM_FOC_Reset_PID(void) {
 	PI_Controller_Reset(_gFOC_Ctrl.pi_ctl_fw, 0);
 	PI_Controller_Reset(_gFOC_Ctrl.pi_ctl_trq, 0);
 	PI_Controller_Reset(_gFOC_Ctrl.pi_ctl_lock, 0);
+	PI_Controller_Reset(_gFOC_Ctrl.pi_ctl_power, 0);
 }
 
 
@@ -125,6 +135,7 @@ void PMSM_FOC_CoreInit(void) {
 	_gFOC_Ctrl.pi_ctl_fw = &PI_Ctrl_fw;
 	_gFOC_Ctrl.pi_ctl_trq = &PI_Ctrl_trq;
 	_gFOC_Ctrl.pi_ctl_lock = &PI_Ctrl_lock;
+	_gFOC_Ctrl.pi_ctl_power = &PI_Ctrl_Power;
 	memset(&_gFOC_Ctrl.in, 0, sizeof(_gFOC_Ctrl.in));
 	memset(&_gFOC_Ctrl.out, 0, sizeof(_gFOC_Ctrl.out));
 	_gFOC_Ctrl.params.s_maxiDC = nv_get_foc_params()->s_maxiDC;//(MAX_iDQ);
@@ -141,6 +152,7 @@ void PMSM_FOC_CoreInit(void) {
 	_gFOC_Ctrl.params.n_PhaseFilterCeof = nv_get_foc_params()->n_PhaseFilterCeof;//(0.2f);
 	_gFOC_Ctrl.params.n_TrqVelLimGain = nv_get_foc_params()->n_TrqVelLimGain;
 	_gFOC_Ctrl.params.n_poles = nv_get_motor_params()->poles;//MOTOR_POLES;
+	_gFOC_Ctrl.in.s_LimitiDC = nv_get_foc_params()->s_LimitiDC;
 	_gFOC_Ctrl.out.n_RunMode = CTRL_MODE_OPEN;
 	_gFOC_Ctrl.out.f_vdqRation = 0;
 	_gFOC_Ctrl.in.s_manualAngle = INVALID_ANGLE;
@@ -157,6 +169,7 @@ void PMSM_FOC_CoreInit(void) {
 //#define PHASE_LFP_FIR
 #define PHASE_LFP
 static __INLINE void PMSM_FOC_Update_Hardware(void) {
+	AB_t vAB;
 	if (!_gFOC_Ctrl.in.b_MTPA_calibrate && (_gFOC_Ctrl.in.s_manualAngle != INVALID_ANGLE)) {
 		_gFOC_Ctrl.in.s_motAngle = _gFOC_Ctrl.in.s_manualAngle;
 		_gFOC_Ctrl.in.s_hallAngle = motor_encoder_get_angle();
@@ -164,11 +177,19 @@ static __INLINE void PMSM_FOC_Update_Hardware(void) {
 		_gFOC_Ctrl.in.s_hallAngle = motor_encoder_get_angle();
 		_gFOC_Ctrl.in.s_motAngle = _gFOC_Ctrl.in.s_hallAngle;
 	}
-
+	SinCos_Lut(_gFOC_Ctrl.in.s_motAngle, &_gFOC_Ctrl.out.sin, &_gFOC_Ctrl.out.cos);
+	
 	_gFOC_Ctrl.in.s_motRPM = motor_encoder_get_speed() / _gFOC_Ctrl.params.n_poles;
 	_gFOC_Ctrl.in.s_vDC = get_vbus_float();
 	//sample current
 	phase_current_get(_gFOC_Ctrl.in.s_iABC);
+	get_phase_vols(_gFOC_Ctrl.in.s_vABC);
+	_gFOC_Ctrl.in.s_vABC[0] -= _gFOC_Ctrl.in.s_vDC/2.0f;
+	_gFOC_Ctrl.in.s_vABC[1] -= _gFOC_Ctrl.in.s_vDC/2.0f;
+	_gFOC_Ctrl.in.s_vABC[2] -= _gFOC_Ctrl.in.s_vDC/2.0f; 
+	Clark(_gFOC_Ctrl.in.s_vABC[0], _gFOC_Ctrl.in.s_vABC[1], _gFOC_Ctrl.in.s_vABC[2], &vAB);
+	
+	Park(&vAB, _gFOC_Ctrl.in.s_motAngle, &_gFOC_Ctrl.out.s_RealVdq);
 
 #ifdef PHASE_LFP
 	LowPass_Filter(_gFOC_Ctrl.in.s_iABCFilter[0], _gFOC_Ctrl.in.s_iABC[0], _gFOC_Ctrl.params.n_PhaseFilterCeof);
@@ -214,14 +235,15 @@ static __INLINE void PMSM_FOC_Plot_Debug(void) {
 		//plot_2data16(FtoS16(_gFOC_Ctrl.in.s_hallAngle), FtoS16(_gFOC_Ctrl.in.s_motAngle));
 		//plot_3data16(_gFOC_Ctrl.in.s_motRPM, FtoS16x1000(_gFOC_Ctrl.out.s_OutVdq.d), FtoS16x1000(_gFOC_Ctrl.out.s_OutVdq.q));
 		//plot_3data16(_gFOC_Ctrl.in.s_motRPM, FtoS16x1000(_gFOC_Ctrl.out.s_RealIdq.d), FtoS16x1000(_gFOC_Ctrl.out.s_RealIdq.q));
-		if (jtag_plot == 2) {
+		//if (jtag_plot == 2) {
 			//plot_3data16(_gFOC_Ctrl.in.s_motRPM, FtoS16x10(_gFOC_Ctrl.out.s_RealIdq.d), FtoS16x10(_gFOC_Ctrl.out.s_RealIdq.q));
 			//plot_3data16(_gFOC_Ctrl.out.n_Duty[0], _gFOC_Ctrl.out.n_Duty[1], _gFOC_Ctrl.out.n_Duty[2]);
 			//plot_3data16(_gFOC_Ctrl.in.s_motRPM, FtoS16x10(_gFOC_Ctrl.in.s_iABC[1]), FtoS16x10(_gFOC_Ctrl.out.s_RealIdq.q));
 			//plot_2data16(_gFOC_Ctrl.in.s_iABC[0], _gFOC_Ctrl.in.s_iABCFilter[0]);
 			//plot_3data16(_gFOC_Ctrl.in.s_motRPM, _gFOC_Ctrl.idq_ctl[1].s_Cp * 10, FtoS16x10(_gFOC_Ctrl.out.s_RealIdq.q));
-			plot_3data16(_gFOC_Ctrl.in.s_motRPM, FtoS16x10(_gFOC_Ctrl.in.s_vDC), FtoS16x10(get_throttle_float()));
-		}
+			//plot_3data16(_gFOC_Ctrl.in.s_motRPM, FtoS16x10(_gFOC_Ctrl.in.s_vDC), FtoS16x10(get_throttle_float()));
+		plot_3data16(FtoS16x10(_gFOC_Ctrl.out.s_OutVdq.q), FtoS16x10(_gFOC_Ctrl.out.s_RealVdq.q), FtoS16x10(_gFOC_Ctrl.out.s_FilteriDC));
+		//}
 		//plot_1data16(FtoS16(_gFOC_Ctrl.in.s_hallAngle));
 		//plot_1data16(_gFOC_Ctrl.in.s_motRPM);
 	}
@@ -236,6 +258,7 @@ void PMSM_FOC_Schedule(void) {
 #else
 	float *iabc = _gFOC_Ctrl.in.s_iABC;
 #endif
+
 	_gFOC_Ctrl.ctrl_count++;
 
 	PMSM_FOC_Update_Hardware();
@@ -261,6 +284,7 @@ void PMSM_FOC_Schedule(void) {
 		_gFOC_Ctrl.in.s_targetVdq.d = FOC_Get_DqRamp(&_gFOC_Ctrl.vdq_ctl[0]);
 		_gFOC_Ctrl.in.s_targetVdq.q = FOC_Get_DqRamp(&_gFOC_Ctrl.vdq_ctl[1]);	
 	}
+
 	_gFOC_Ctrl.out.f_vdqRation = Circle_Limitation(&_gFOC_Ctrl.in.s_targetVdq, _gFOC_Ctrl.in.s_vDC, _gFOC_Ctrl.params.n_modulation, &_gFOC_Ctrl.out.s_OutVdq);
 	
 	RevPark(&_gFOC_Ctrl.out.s_OutVdq, _gFOC_Ctrl.in.s_motAngle, &vAB);
@@ -321,6 +345,11 @@ u8 PMSM_FOC_CtrlMode(void) {
 }
 
 /* MPTA, 弱磁, 功率限制,主要是分配DQ轴电流 */
+static __INLINE float PMSM_FOC_Limit_Power(float maxTrq) {
+	PI_Ctrl_Power.max = maxTrq;
+	float errRef = _gFOC_Ctrl.in.s_LimitiDC - _gFOC_Ctrl.out.s_FilteriDC;
+	return PI_Controller_run(_gFOC_Ctrl.pi_ctl_power, errRef);
+}
 static __INLINE void PMSM_FOC_idq_Assign(void) {
 	if (_gFOC_Ctrl.out.n_RunMode == CTRL_MODE_CURRENT || _gFOC_Ctrl.out.n_RunMode == CTRL_MODE_CURRENT_BRK) {
 		if (_gFOC_Ctrl.in.b_MTPA_calibrate && (_gFOC_Ctrl.in.s_manualAngle != INVALID_ANGLE)) {
@@ -342,6 +371,7 @@ static __INLINE void PMSM_FOC_idq_Assign(void) {
 
 /*called in media task */
 void PMSM_FOC_idqCalc(void) {
+	PMSM_FOC_Get_iDC();
 	if (_gFOC_Ctrl.in.b_motLock) {
 		float vel_count = motor_encoder_get_vel_count();
 		float errRef = 0 - vel_count;
@@ -349,24 +379,24 @@ void PMSM_FOC_idqCalc(void) {
 		PMSM_FOC_idq_Assign();
 		return;
 	}
-	if (_gFOC_Ctrl.out.n_RunMode == CTRL_MODE_CURRENT || _gFOC_Ctrl.out.n_RunMode == CTRL_MODE_CURRENT_BRK) {
+	if ((_gFOC_Ctrl.out.n_RunMode == CTRL_MODE_CURRENT) || (_gFOC_Ctrl.out.n_RunMode == CTRL_MODE_CURRENT_BRK)) {
 		_gFOC_Ctrl.in.s_targetCurrent = eCtrl_get_RefCurrent();
 		if (_gFOC_Ctrl.out.n_RunMode == CTRL_MODE_CURRENT_BRK) {
 			if (eCtrl_get_FinalCurrent() < 0.0001f && _gFOC_Ctrl.in.s_motRPM < MIN_RPM_EXIT_EBRAKE) {
-				_gFOC_Ctrl.in.s_targetCurrent = 0.0f;
-				eCtrl_enable_eBrake(false);
+				_gFOC_Ctrl.in.s_targetCurrent = 0;
 			}
 		}
 	}else if (_gFOC_Ctrl.out.n_RunMode == CTRL_MODE_TRQ) {
 		float refTorque = eCtrl_get_FinalTorque();
 		_gFOC_Ctrl.pi_ctl_trq->max = refTorque;
 		_gFOC_Ctrl.pi_ctl_trq->min = -refTorque;
-		if ((eCtrl_get_FinalTorque() <= 0.0001f) && _gFOC_Ctrl.in.s_motRPM < MIN_RPM_EXIT_EBRAKE) {
+		if ((eCtrl_get_FinalTorque() <= 0.0001f) && (_gFOC_Ctrl.in.s_motRPM < MIN_RPM_EXIT_EBRAKE)) {
 			_gFOC_Ctrl.pi_ctl_trq->max = 0;
 			_gFOC_Ctrl.pi_ctl_trq->min = 0; //防止倒转
 		}
 		float errRef = _gFOC_Ctrl.params.s_maxRPM - _gFOC_Ctrl.in.s_motRPM;
-		_gFOC_Ctrl.in.s_targetTorque = PI_Controller_RunSat(_gFOC_Ctrl.pi_ctl_trq, errRef, _gFOC_Ctrl.params.n_TrqVelLimGain);
+		float maxTrq = PI_Controller_RunSat(_gFOC_Ctrl.pi_ctl_trq, errRef, _gFOC_Ctrl.params.n_TrqVelLimGain);
+		_gFOC_Ctrl.in.s_targetTorque = PMSM_FOC_Limit_Power(maxTrq);
 	}else if (_gFOC_Ctrl.out.n_RunMode == CTRL_MODE_SPD){
 		_gFOC_Ctrl.pi_ctl_spd->max = _gFOC_Ctrl.params.s_maxIdq;
 		_gFOC_Ctrl.pi_ctl_spd->min = _gFOC_Ctrl.params.s_minIdq;
@@ -374,12 +404,13 @@ void PMSM_FOC_idqCalc(void) {
 		if (_gFOC_Ctrl.in.b_cruiseEna) {
 			refSpeed = _gFOC_Ctrl.in.s_cruiseRPM;
 		}
-		if ((eCtrl_get_FinalSpeed() == 0) && _gFOC_Ctrl.in.s_motRPM < MIN_RPM_EXIT_EBRAKE) {
+		if ((eCtrl_get_FinalSpeed() == 0) && (_gFOC_Ctrl.in.s_motRPM < MIN_RPM_EXIT_EBRAKE)) {
 			_gFOC_Ctrl.pi_ctl_spd->max = 0;
 			_gFOC_Ctrl.pi_ctl_spd->min = 0; //防止倒转
 		}
 		float errRef = refSpeed - _gFOC_Ctrl.in.s_motRPM;
-		_gFOC_Ctrl.in.s_targetTorque = PI_Controller_RunSat(_gFOC_Ctrl.pi_ctl_spd, errRef, _gFOC_Ctrl.params.n_TrqVelLimGain);		
+		float maxTrq = PI_Controller_RunSat(_gFOC_Ctrl.pi_ctl_spd, errRef, _gFOC_Ctrl.params.n_TrqVelLimGain);
+		_gFOC_Ctrl.in.s_targetTorque = PMSM_FOC_Limit_Power(maxTrq);
 	}
 	PMSM_FOC_idq_Assign();
 }
@@ -439,6 +470,11 @@ void PMSM_FOC_SetCtrlMode(u8 mode) {
 	_gFOC_Ctrl.in.n_ctlMode = mode;
 }
 
+u8 PMSM_FOC_GetCtrlMode(void) {
+	return _gFOC_Ctrl.in.n_ctlMode;
+}
+
+
 void PMSM_FOC_SetOpenVdq(float vd, float vq) {
 	FOC_Set_vDqRamp(&_gFOC_Ctrl.vdq_ctl[0], vd);
 	FOC_Set_vDqRamp(&_gFOC_Ctrl.vdq_ctl[1], vq);
@@ -607,7 +643,8 @@ float PMSM_FOC_Get_iDC(void) {
 		iDC x vDC = 2/3(iq x vq + id x vd);
 	*/
 	float m_pow = (vd * id + vq * iq); //s32q10
-	_gFOC_Ctrl.out.s_FilteriDC = m_pow / _gFOC_Ctrl.in.s_vDC / 0.667f; //s16q5
+	float raw_idc = m_pow / _gFOC_Ctrl.in.s_vDC * 1.5f; //s16q5
+	LowPass_Filter(_gFOC_Ctrl.out.s_FilteriDC, raw_idc, 0.1f);
 	return _gFOC_Ctrl.out.s_FilteriDC;
 }
 

+ 8 - 0
Applications/foc/core/PMSM_FOC_Core.h

@@ -37,6 +37,7 @@ typedef struct {
 typedef struct {
 	float 	s_iABC[3];
 	float 	s_iABCFilter[3];
+	float   s_vABC[3];
 	float   s_motRPM;   //from hall or encoder
 	float 	s_motAngle; //from hall or encoder
 	float 	s_hallAngle;//from hall or encoder
@@ -47,6 +48,7 @@ typedef struct {
 	DQ_t    s_targetVdq;
 	float   s_targetTorque; //限速后的实际扭矩
 	float 	s_vDC;
+	float   s_LimitiDC; //母线限流
 	EPM_Dir_t epmDirection;
 	u8      n_ctlMode;
 	bool    b_motEnable;
@@ -68,12 +70,16 @@ typedef struct {
 	u16   n_Sample2;
 	u8    n_RunMode;
 	DQ_t  s_OutVdq;
+	DQ_t  s_preOutVdq;
 	DQ_t  s_RealIdq;
+	DQ_t  s_RealVdq;
 	DQ_t  s_FilterIdq;
 	float s_FilteriDC;
 	float f_vdqRation;
 	s16   test_sample;
 	float test_targetIQ;
+	float sin;
+	float cos;
 	u8    n_Error;
 }FOC_OutP;
 
@@ -92,6 +98,7 @@ typedef struct {
 	PI_Controller *pi_ctl_fw;
 	PI_Controller *pi_ctl_trq;
 	PI_Controller *pi_ctl_lock;
+	PI_Controller *pi_ctl_power;
 	dq_Rctrl      idq_ctl[2];
 	dq_Rctrl      vdq_ctl[2];	
 	FOC_InP       in;
@@ -159,6 +166,7 @@ void PMSM_FOC_SpeedLimit(float speedLimit);
 float PMSM_FOC_GetSpeedLimit(void);
 void PMSM_FOC_VbusVoltage(float vbusVol);
 void PMSM_FOC_SetCtrlMode(u8 mode);
+u8 PMSM_FOC_GetCtrlMode(void);
 void PMSM_FOC_SetOpenVdq(float vd, float vq);
 bool PMSM_FOC_EnableCruise(bool enable);
 bool PMSM_FOC_Set_Speed(float rpm);

+ 10 - 0
Applications/foc/core/PMSM_FOC_Params.h

@@ -51,6 +51,16 @@ static PI_Controller PI_Ctrl_fw = {
 	.Ui = 0,
 };
 
+static PI_Controller PI_Ctrl_Power = {
+	.kp = (0.5f),
+	.ki = (100.0f),
+	.max = (0),
+	.min = 0,
+	.DT  = (1.0f/(float)SPD_CTRL_TS),
+	.Ui = 0,
+};
+
+
 static PI_Controller PI_Ctrl_lock = {
 	.kp = (0.0001f),
 	.ki = (0.01f),

+ 6 - 3
Applications/foc/core/e_ctrl.c

@@ -55,10 +55,13 @@ void eCtrl_enable_eBrake(bool enable) {
 }
 
 void _eCtrl_process_eBrake(void) {
+	eRamp_init(&g_eCtrl.current);
+	eRamp_init(&g_eCtrl.speed);
+	eRamp_init(&g_eCtrl.torque);
+	g_eCtrl.current_shadow = 0.0f;
+	g_eCtrl.torque_shadow = 0.0f;
+	g_eCtrl.speed_shadow = 0.0f;
 	if (g_eCtrl.is_ebrake) {
-		eRamp_init(&g_eCtrl.current);
-		eRamp_init(&g_eCtrl.speed);
-		eRamp_init(&g_eCtrl.torque);
 		PMSM_FOC_SetCtrlMode(CTRL_MODE_CURRENT_BRK);
 		eCtrl_set_TgtCurrent(-nv_get_foc_params()->s_maxBrkCurrent);
 	}else {

+ 1 - 1
Applications/foc/core/torque.c

@@ -60,7 +60,7 @@ void torque_speed_target(u8 run_mode, float f_throttle) {
 			PMSM_FOC_Set_Torque(torque);
 		}
 	}else if (run_mode == CTRL_MODE_CURRENT_BRK) {
-		if (!mc_throttle_released()) {
+		if (!mc_throttle_released() || (mc_throttle_released() && (PMSM_FOC_GetSpeed() == 0.0f))) {
 			eCtrl_enable_eBrake(false);
 		}
 	}

+ 4 - 4
Applications/foc/motor/encoder.c

@@ -132,7 +132,7 @@ float encoder_get_theta(void) {
     bool snap_to_zero_vel = encoder_run_pll((float)(cnt));
 
 	if (snap_to_zero_vel) {
-		g_encoder.interpolation = 0.5f;
+		g_encoder.interpolation = 0.1f;
 	}else {
 		if (cnt == g_encoder.last_cnt) {
 			g_encoder.interpolation += g_encoder.est_vel_counts * FOC_CTRL_US;
@@ -227,17 +227,17 @@ bool encoder_detect_finish(void) {
 static void _detect_off_finished(void) {
 	for (int i = 0; i < 1024; i++) {
 		float angle_off = g_encoder.encoder_off_map[i] / (((g_encoder.encoder_off_count[i] >> 4)&0xF) + (g_encoder.encoder_off_count[i]&0xF));
-		plot_1data16((s16)angle_off);
+		plot_3data16(0, 0, (s16)angle_off);
 		delay_ms(2);
 	}
 	for (int i = 0; i < 1024; i++) {
 		float angle_off =  g_encoder.encoder_off_map[i] / (((g_encoder.encoder_off_count[i] >> 4)&0xF) + (g_encoder.encoder_off_count[i]&0xF));
-		plot_1data16((s16)angle_off);
+		plot_3data16(0, 0, (s16)angle_off);
 		delay_ms(2);
 	}
 	for (int i = 0; i < 1024; i++) {
 		float angle_off =  g_encoder.encoder_off_map[i] / (((g_encoder.encoder_off_count[i] >> 4)&0xF) + (g_encoder.encoder_off_count[i]&0xF));
-		plot_1data16((s16)angle_off);
+		plot_3data16(0, 0, (s16)angle_off);
 		delay_ms(2);
 	}	
 }

+ 104 - 104
Applications/foc/motor/encoder_off.h

@@ -5,109 +5,109 @@
 /* angle_in is the data, by plot MC_tools */
 /* Use angle_out=single(angle_off) convert double to float */
 
-#define FIR_PHASE_SHIFT 542
+#define FIR_PHASE_SHIFT 477
 const static s16q10_t _encoder_off_map[] = {
--119,-112,-105,-99,-92,-85,-78,-72,-65,-59,-52,-46,-40,-34,-28,-22,
--16,-10,-4,0,6,11,17,22,27,32,37,42,47,51,56,60,65,69,73,77,
-80,84,88,91,94,98,101,104,106,109,111,114,116,118,120,122,124,125,126,128,
-129,130,130,131,132,132,132,132,132,131,131,130,129,128,127,126,124,123,121,119,
-116,114,112,109,106,103,99,96,92,88,84,80,76,71,66,61,56,51,45,40,
-34,28,21,15,8,1,-5,-12,-20,-27,-35,-43,-52,-60,-69,-78,-87,-96,-106,-116,
--126,-136,-146,-157,-167,-178,-189,-201,-212,-224,-236,-248,-261,-273,-286,-299,-312,-326,-339,-353,
--367,-382,-396,-411,-425,-441,-456,-471,-487,-503,-519,-535,-552,-568,-585,-602,-620,-637,-655,-673,
--691,-709,-727,-746,-765,-784,-803,-822,-842,-862,-882,-902,-922,-943,-963,-984,-1005,-1027,-1048,-1070,
--1091,-1113,-1135,-1158,-1180,-1203,-1225,-1248,-1271,-1295,-1318,-1342,-1365,-1389,-1413,-1437,-1462,-1486,-1511,-1535,
--1560,-1585,-1611,-1636,-1661,-1687,-1712,-1738,-1764,-1790,-1816,-1843,-1869,-1895,-1922,-1949,-1976,-2002,-2029,-2057,
--2084,-2111,-2138,-2166,-2193,-2221,-2249,-2276,-2304,-2332,-2360,-2388,-2416,-2444,-2473,-2501,-2529,-2558,-2586,-2615,
--2643,-2672,-2700,-2729,-2757,-2786,-2815,-2843,-2872,-2901,-2930,-2958,-2987,-3016,-3045,-3073,-3102,-3131,-3159,-3188,
--3217,-3245,-3274,-3303,-3331,-3360,-3388,-3417,-3445,-3473,-3502,-3530,-3558,-3586,-3614,-3642,-3670,-3698,-3726,-3754,
--3781,-3809,-3836,-3864,-3891,-3918,-3945,-3972,-3999,-4026,-4052,-4079,-4105,-4132,-4158,-4184,-4210,-4236,-4261,-4287,
--4312,-4338,-4363,-4388,-4413,-4437,-4462,-4486,-4511,-4535,-4559,-4582,-4606,-4629,-4653,-4676,-4699,-4721,-4744,-4766,
--4788,-4810,-4832,-4854,-4875,-4896,-4917,-4938,-4959,-4979,-4999,-5019,-5039,-5058,-5078,-5097,-5116,-5134,-5153,-5171,
--5189,-5207,-5224,-5242,-5259,-5276,-5292,-5309,-5325,-5341,-5356,-5372,-5387,-5402,-5417,-5431,-5445,-5459,-5473,-5486,
--5499,-5512,-5525,-5537,-5549,-5561,-5573,-5584,-5595,-5606,-5617,-5627,-5637,-5647,-5656,-5665,-5674,-5683,-5691,-5700,
--5708,-5715,-5722,-5729,-5736,-5743,-5749,-5755,-5761,-5766,-5771,-5776,-5781,-5785,-5789,-5793,-5796,-5799,-5802,-5805,
--5807,-5809,-5811,-5813,-5814,-5815,-5815,-5816,-5816,-5816,-5815,-5815,-5814,-5813,-5811,-5809,-5807,-5805,-5802,-5799,
--5796,-5793,-5789,-5785,-5781,-5776,-5771,-5766,-5761,-5755,-5750,-5743,-5737,-5730,-5724,-5716,-5709,-5701,-5693,-5685,
--5677,-5668,-5659,-5650,-5640,-5630,-5620,-5610,-5600,-5589,-5578,-5567,-5555,-5544,-5532,-5520,-5507,-5494,-5482,-5468,
--5455,-5442,-5428,-5414,-5399,-5385,-5370,-5355,-5340,-5325,-5309,-5293,-5277,-5261,-5245,-5228,-5211,-5194,-5177,-5160,
--5142,-5124,-5106,-5088,-5070,-5051,-5032,-5013,-4994,-4975,-4956,-4936,-4916,-4896,-4876,-4856,-4835,-4815,-4794,-4773,
--4752,-4731,-4709,-4688,-4666,-4644,-4622,-4600,-4578,-4556,-4533,-4511,-4488,-4465,-4442,-4419,-4396,-4373,-4349,-4326,
--4302,-4279,-4255,-4231,-4207,-4183,-4159,-4135,-4110,-4086,-4061,-4037,-4012,-3988,-3963,-3938,-3913,-3888,-3863,-3838,
--3813,-3788,-3763,-3738,-3713,-3688,-3662,-3637,-3612,-3586,-3561,-3536,-3510,-3485,-3459,-3434,-3408,-3383,-3358,-3332,
--3307,-3281,-3256,-3231,-3205,-3180,-3155,-3129,-3104,-3079,-3054,-3029,-3003,-2978,-2953,-2928,-2903,-2879,-2854,-2829,
--2804,-2780,-2755,-2730,-2706,-2682,-2657,-2633,-2609,-2585,-2561,-2537,-2513,-2489,-2466,-2442,-2418,-2395,-2372,-2349,
--2326,-2303,-2280,-2257,-2234,-2212,-2189,-2167,-2145,-2123,-2101,-2079,-2057,-2036,-2014,-1993,-1972,-1951,-1930,-1909,
--1888,-1868,-1847,-1827,-1807,-1787,-1767,-1747,-1728,-1708,-1689,-1670,-1651,-1632,-1614,-1595,-1577,-1559,-1541,-1523,
--1505,-1488,-1470,-1453,-1436,-1419,-1402,-1386,-1369,-1353,-1337,-1321,-1305,-1290,-1274,-1259,-1244,-1229,-1214,-1200,
--1185,-1171,-1157,-1143,-1130,-1116,-1103,-1089,-1076,-1064,-1051,-1038,-1026,-1014,-1002,-990,-978,-967,-956,-944,
--934,-923,-912,-902,-891,-881,-871,-862,-852,-843,-833,-824,-815,-806,-798,-789,-781,-773,-765,-757,
--750,-742,-735,-728,-721,-714,-708,-701,-695,-689,-683,-677,-671,-665,-660,-655,-650,-645,-640,-635,
--631,-627,-622,-618,-614,-611,-607,-603,-600,-597,-594,-591,-588,-585,-583,-580,-578,-576,-574,-572,
--570,-569,-567,-566,-565,-563,-562,-561,-561,-560,-559,-559,-559,-558,-558,-558,-558,-558,-559,-559,
--560,-560,-561,-562,-562,-563,-564,-566,-567,-568,-569,-571,-572,-574,-576,-578,-579,-581,-583,-585,
--587,-590,-592,-594,-597,-599,-602,-604,-607,-610,-612,-615,-618,-621,-624,-627,-630,-633,-636,-639,
--642,-645,-648,-652,-655,-658,-662,-665,-668,-672,-675,-678,-682,-685,-689,-692,-696,-699,-703,-706,
--710,-713,-717,-720,-723,-727,-730,-734,-737,-741,-744,-747,-751,-754,-757,-761,-764,-767,-770,-773,
--777,-780,-783,-786,-789,-792,-795,-798,-800,-803,-806,-808,-811,-814,-816,-819,-821,-823,-826,-828,
--830,-832,-834,-836,-838,-840,-842,-843,-845,-847,-848,-850,-851,-852,-853,-854,-855,-856,-857,-858,
--859,-859,-860,-860,-861,-861,-861,-861,-861,-861,-861,-861,-860,-860,-859,-859,-858,-857,-856,-855,
--854,-853,-852,-850,-849,-847,-845,-844,-842,-840,-838,-836,-833,-831,-828,-826,-823,-821,-818,-815,
--812,-809,-805,-802,-799,-795,-791,-788,-784,-780,-776,-772,-768,-763,-759,-755,-750,-746,-741,-736,
--731,-726,-721,-716,-711,-705,-700,-695,-689,-683,-678,-672,-666,-660,-654,-648,-642,-636,-630,-623,
--617,-610,-604,-597,-591,-584,-577,-571,-564,-557,-550,-543,-536,-529,-521,-514,-507,-500,-492,-485,
--478,-470,-463,-455,-448,-440,-433,-425,-417,-410,-402,-394,-387,-379,-371,-364,-356,-348,-341,-333,
--325,-317,-310,-302,-294,-286,-279,-271,-263,-256,-248,-241,-233,-225,-218,-210,-203,-196,-188,-181,
--173,-166,-159,-152,-145,-138,-130,-123,-116,-110,-103,-96,-89,-83,-76,-70,-63,-57,-50,-44,
--38,-32,-26,-20,-14,-8,-3,2,7,13,18,23,28,33,38,43,47,52,57,61,
-65,69,73,77,81,85,88,91,95,98,101,104,107,109,112,114,116,118,120,122,
-124,125,127,128,129,130,131,131,132,132,132,132,132,131,131,130,129,128,127,126,
-124,123,121,119,116,114,112,109,106,103,99,96,92,88,84,80,76,71,66,61,
-56,51,45,40,34,28,21,15,8,1,-5,-12,-20,-27,-35,-43,-52,-60,-69,-78,
--87,-96,-106,-116,-126,-136,-146,-157,-167,-178,-189,-201,-212,-224,-236,-248,-261,-273,-286,-299,
--312,-326,-339,-353,-367,-382,-396,-411,-425,-441,-456,-471,-487,-503,-519,-535,-552,-568,-585,-602,
--620,-637,-655,-673,-691,-709,-727,-746,-765,-784,-803,-822,-842,-862,-882,-902,-922,-943,-963,-984,
--1005,-1027,-1048,-1070,-1091,-1113,-1135,-1158,-1180,-1203,-1225,-1248,-1271,-1295,-1318,-1342,-1365,-1389,-1413,-1437,
--1462,-1486,-1511,-1535,-1560,-1585,-1611,-1636,-1661,-1687,-1712,-1738,-1764,-1790,-1816,-1843,-1869,-1895,-1922,-1949,
--1976,-2002,-2029,-2057,-2084,-2111,-2138,-2166,-2193,-2221,-2249,-2276,-2304,-2332,-2360,-2388,-2416,-2444,-2473,-2501,
--2529,-2558,-2586,-2615,-2643,-2672,-2700,-2729,-2757,-2786,-2815,-2843,-2872,-2901,-2930,-2958,-2987,-3016,-3045,-3073,
--3102,-3131,-3159,-3188,-3217,-3245,-3274,-3303,-3331,-3360,-3388,-3417,-3445,-3473,-3502,-3530,-3558,-3586,-3614,-3642,
--3670,-3698,-3726,-3754,-3781,-3809,-3836,-3864,-3891,-3918,-3945,-3972,-3999,-4026,-4052,-4079,-4105,-4132,-4158,-4184,
--4210,-4236,-4261,-4287,-4312,-4338,-4363,-4388,-4413,-4437,-4462,-4486,-4511,-4535,-4559,-4582,-4606,-4629,-4653,-4676,
--4699,-4721,-4744,-4766,-4788,-4810,-4832,-4854,-4875,-4896,-4917,-4938,-4959,-4979,-4999,-5019,-5039,-5058,-5078,-5097,
--5116,-5134,-5153,-5171,-5189,-5207,-5224,-5242,-5259,-5276,-5292,-5309,-5325,-5341,-5356,-5372,-5387,-5402,-5417,-5431,
--5445,-5459,-5473,-5486,-5499,-5512,-5525,-5537,-5549,-5561,-5573,-5584,-5595,-5606,-5617,-5627,-5637,-5647,-5656,-5665,
--5674,-5683,-5691,-5700,-5708,-5715,-5722,-5729,-5736,-5743,-5749,-5755,-5761,-5766,-5771,-5776,-5781,-5785,-5789,-5793,
--5796,-5799,-5802,-5805,-5807,-5809,-5811,-5813,-5814,-5815,-5815,-5816,-5816,-5816,-5815,-5815,-5814,-5813,-5811,-5809,
--5807,-5805,-5802,-5799,-5796,-5793,-5789,-5785,-5781,-5776,-5771,-5766,-5761,-5755,-5750,-5743,-5737,-5730,-5724,-5716,
--5709,-5701,-5693,-5685,-5677,-5668,-5659,-5650,-5640,-5630,-5620,-5610,-5600,-5589,-5578,-5567,-5555,-5544,-5532,-5520,
--5507,-5494,-5482,-5468,-5455,-5442,-5428,-5414,-5399,-5385,-5370,-5355,-5340,-5325,-5309,-5293,-5277,-5261,-5245,-5228,
--5211,-5194,-5177,-5160,-5142,-5124,-5106,-5088,-5070,-5051,-5032,-5013,-4994,-4975,-4956,-4936,-4916,-4896,-4876,-4856,
--4835,-4815,-4794,-4773,-4752,-4731,-4709,-4688,-4666,-4644,-4622,-4600,-4578,-4556,-4533,-4511,-4488,-4465,-4442,-4419,
--4396,-4373,-4349,-4326,-4302,-4279,-4255,-4231,-4207,-4183,-4159,-4135,-4110,-4086,-4061,-4037,-4012,-3988,-3963,-3938,
--3913,-3888,-3863,-3838,-3813,-3788,-3763,-3738,-3713,-3688,-3662,-3637,-3612,-3586,-3561,-3536,-3510,-3485,-3459,-3434,
--3408,-3383,-3358,-3332,-3307,-3281,-3256,-3231,-3205,-3180,-3155,-3129,-3104,-3079,-3054,-3029,-3003,-2978,-2953,-2928,
--2903,-2879,-2854,-2829,-2804,-2780,-2755,-2730,-2706,-2682,-2657,-2633,-2609,-2585,-2561,-2537,-2513,-2489,-2466,-2442,
--2418,-2395,-2372,-2349,-2326,-2303,-2280,-2257,-2234,-2212,-2189,-2167,-2145,-2123,-2101,-2079,-2057,-2036,-2014,-1993,
--1972,-1951,-1930,-1909,-1888,-1868,-1847,-1827,-1807,-1787,-1767,-1747,-1728,-1708,-1689,-1670,-1651,-1632,-1614,-1595,
--1577,-1559,-1541,-1523,-1505,-1488,-1470,-1453,-1436,-1419,-1402,-1386,-1369,-1353,-1337,-1321,-1305,-1290,-1274,-1259,
--1244,-1229,-1214,-1200,-1185,-1171,-1157,-1143,-1130,-1116,-1103,-1089,-1076,-1064,-1051,-1038,-1026,-1014,-1002,-990,
--978,-967,-956,-944,-934,-923,-912,-902,-891,-881,-871,-862,-852,-843,-833,-824,-815,-806,-798,-789,
--781,-773,-765,-757,-750,-742,-735,-728,-721,-714,-708,-701,-695,-689,-683,-677,-671,-665,-660,-655,
--650,-645,-640,-635,-631,-627,-622,-618,-614,-611,-607,-603,-600,-597,-594,-591,-588,-585,-583,-580,
--578,-576,-574,-572,-570,-569,-567,-566,-565,-563,-562,-561,-561,-560,-559,-559,-559,-558,-558,-558,
--558,-558,-559,-559,-560,-560,-561,-562,-562,-563,-564,-566,-567,-568,-569,-571,-572,-574,-576,-578,
--579,-581,-583,-585,-587,-590,-592,-594,-597,-599,-602,-604,-607,-610,-612,-615,-618,-621,-624,-627,
--630,-633,-636,-639,-642,-645,-648,-652,-655,-658,-662,-665,-668,-672,-675,-678,-682,-685,-689,-692,
--696,-699,-703,-706,-710,-713,-717,-720,-723,-727,-730,-734,-737,-741,-744,-747,-751,-754,-757,-761,
--764,-767,-770,-773,-777,-780,-783,-786,-789,-792,-795,-798,-800,-803,-806,-808,-811,-814,-816,-819,
--821,-823,-826,-828,-830,-832,-834,-836,-838,-840,-842,-843,-845,-847,-848,-850,-851,-852,-853,-854,
--855,-856,-857,-858,-859,-859,-860,-860,-861,-861,-861,-861,-861,-861,-861,-861,-860,-860,-859,-859,
--858,-857,-856,-855,-854,-853,-852,-850,-849,-847,-845,-844,-842,-840,-838,-836,-833,-831,-828,-826,
--823,-821,-818,-815,-812,-809,-805,-802,-799,-795,-791,-788,-784,-780,-776,-772,-768,-763,-759,-755,
--750,-746,-741,-736,-731,-726,-721,-716,-711,-705,-700,-695,-689,-683,-678,-672,-666,-660,-654,-648,
--642,-636,-630,-623,-617,-610,-604,-597,-591,-584,-577,-571,-564,-557,-550,-543,-536,-529,-521,-514,
--507,-500,-492,-485,-478,-470,-463,-455,-448,-440,-433,-425,-417,-410,-402,-394,-387,-379,-371,-364,
--356,-348,-341,-333,-325,-317,-310,-302,-294,-286,-279,-271,-263,-256,-248,-241,-233,-225,-218,-210,
--203,-196,-188,-181,-173,-166,-159,-152,-145,-138,-130,-123,
+1645,1646,1648,1649,1649,1650,1651,1651,1651,1651,1651,1651,1651,1650,1650,1649,
+1648,1647,1646,1644,1643,1641,1639,1637,1635,1632,1630,1627,1624,1621,1618,1615,1611,1607,1603,1599,
+1595,1591,1586,1581,1576,1571,1565,1560,1554,1548,1542,1536,1529,1523,1516,1509,1502,1494,1487,1479,
+1471,1463,1455,1446,1437,1428,1419,1410,1400,1391,1381,1371,1360,1350,1339,1328,1317,1306,1294,1283,
+1271,1259,1246,1234,1221,1208,1195,1182,1169,1155,1141,1127,1113,1099,1084,1069,1054,1039,1024,1008,
+992,976,960,944,927,910,894,876,859,842,824,806,788,770,751,732,714,695,676,656,
+637,617,597,577,557,537,516,495,475,453,432,411,389,368,346,324,301,279,257,234,
+211,188,165,142,118,95,71,47,23,0,-24,-48,-73,-97,-122,-147,-172,-197,-222,-248,
+-273,-298,-324,-350,-376,-402,-428,-454,-480,-506,-533,-559,-586,-612,-639,-666,-693,-720,-747,-774,
+-801,-828,-855,-883,-910,-938,-965,-993,-1020,-1048,-1075,-1103,-1130,-1158,-1186,-1214,-1241,-1269,-1297,-1325,
+-1352,-1380,-1408,-1436,-1463,-1491,-1519,-1547,-1574,-1602,-1630,-1657,-1685,-1713,-1740,-1768,-1795,-1823,-1850,-1878,
+-1905,-1932,-1959,-1986,-2013,-2040,-2067,-2094,-2121,-2147,-2174,-2200,-2227,-2253,-2279,-2305,-2331,-2357,-2383,-2409,
+-2434,-2460,-2485,-2510,-2535,-2560,-2585,-2610,-2635,-2659,-2683,-2708,-2732,-2756,-2779,-2803,-2826,-2850,-2873,-2896,
+-2919,-2941,-2964,-2986,-3008,-3030,-3052,-3074,-3095,-3116,-3137,-3158,-3179,-3200,-3220,-3240,-3260,-3280,-3299,-3319,
+-3338,-3357,-3376,-3394,-3412,-3431,-3448,-3466,-3484,-3501,-3518,-3535,-3551,-3567,-3583,-3599,-3615,-3630,-3646,-3661,
+-3675,-3690,-3704,-3718,-3732,-3745,-3758,-3771,-3784,-3797,-3809,-3821,-3833,-3844,-3855,-3866,-3877,-3888,-3898,-3908,
+-3918,-3927,-3936,-3945,-3954,-3962,-3970,-3978,-3986,-3993,-4000,-4007,-4014,-4020,-4026,-4032,-4037,-4042,-4047,-4052,
+-4056,-4061,-4064,-4068,-4071,-4074,-4077,-4080,-4082,-4084,-4085,-4087,-4088,-4089,-4089,-4090,-4090,-4090,-4089,-4088,
+-4087,-4086,-4084,-4082,-4080,-4078,-4075,-4072,-4069,-4065,-4062,-4057,-4053,-4049,-4044,-4039,-4033,-4027,-4021,-4015,
+-4009,-4002,-3995,-3988,-3981,-3973,-3965,-3957,-3948,-3939,-3930,-3921,-3911,-3902,-3891,-3881,-3871,-3860,-3849,-3837,
+-3826,-3814,-3802,-3790,-3777,-3764,-3751,-3738,-3725,-3711,-3697,-3683,-3669,-3654,-3639,-3624,-3609,-3594,-3578,-3562,
+-3546,-3530,-3513,-3496,-3480,-3462,-3445,-3427,-3410,-3392,-3373,-3355,-3337,-3318,-3299,-3280,-3261,-3241,-3221,-3202,
+-3182,-3161,-3141,-3121,-3100,-3079,-3058,-3037,-3016,-2994,-2973,-2951,-2929,-2907,-2885,-2863,-2840,-2818,-2795,-2772,
+-2749,-2726,-2703,-2680,-2656,-2633,-2609,-2585,-2562,-2538,-2514,-2490,-2465,-2441,-2417,-2392,-2368,-2343,-2318,-2294,
+-2269,-2244,-2219,-2194,-2169,-2144,-2119,-2094,-2068,-2043,-2018,-1993,-1967,-1942,-1916,-1891,-1865,-1840,-1814,-1789,
+-1763,-1737,-1712,-1686,-1661,-1635,-1610,-1584,-1559,-1533,-1507,-1482,-1456,-1431,-1405,-1380,-1355,-1329,-1304,-1279,
+-1254,-1229,-1203,-1178,-1153,-1129,-1104,-1079,-1054,-1029,-1005,-980,-956,-931,-907,-882,-858,-834,-810,-786,
+-762,-739,-715,-691,-668,-645,-621,-598,-575,-552,-529,-507,-484,-461,-439,-417,-395,-373,-351,-329,
+-308,-286,-265,-244,-222,-201,-181,-160,-139,-119,-99,-78,-59,-39,-19,0,19,38,57,76,
+95,114,132,151,169,187,205,222,240,257,274,291,308,325,341,358,374,390,406,422,
+437,453,468,483,498,513,527,542,556,570,584,597,611,624,637,650,663,676,688,700,
+713,724,736,748,759,770,781,792,803,814,824,834,844,854,864,874,883,892,901,910,
+919,927,936,944,952,960,968,975,983,990,997,1004,1011,1017,1024,1030,1036,1042,1048,1053,
+1059,1064,1069,1074,1079,1084,1088,1093,1097,1101,1105,1109,1112,1116,1119,1122,1125,1128,1131,1134,
+1136,1139,1141,1143,1145,1147,1149,1150,1152,1153,1154,1155,1156,1157,1157,1158,1158,1159,1159,1159,
+1159,1159,1159,1158,1158,1157,1157,1156,1155,1154,1153,1152,1151,1149,1148,1146,1145,1143,1141,1139,
+1137,1135,1133,1130,1128,1126,1123,1120,1118,1115,1112,1109,1107,1104,1100,1097,1094,1091,1088,1084,
+1081,1078,1074,1070,1067,1063,1060,1056,1052,1048,1044,1041,1037,1033,1029,1025,1021,1017,1012,1008,
+1004,1000,996,992,988,983,979,975,971,967,962,958,954,950,946,942,937,933,929,925,
+921,917,913,909,905,901,897,893,889,885,881,877,874,870,866,863,859,855,852,848,
+845,842,838,835,832,829,826,823,820,817,814,811,809,806,803,801,798,796,794,792,
+789,787,785,784,782,780,778,777,775,774,772,771,770,769,768,767,766,766,765,765,
+764,764,764,764,764,764,764,764,765,765,766,766,767,768,769,770,771,773,774,775,
+777,779,780,782,784,786,788,791,793,796,798,801,804,807,809,813,816,819,822,826,
+829,833,837,840,844,848,852,857,861,865,870,874,879,883,888,893,898,903,908,913,
+918,923,929,934,940,945,951,957,963,968,974,980,986,993,999,1005,1011,1018,1024,1030,
+1037,1043,1050,1057,1063,1070,1077,1083,1090,1097,1104,1111,1118,1125,1132,1139,1146,1153,1160,1167,
+1174,1181,1189,1196,1203,1210,1217,1224,1231,1239,1246,1253,1260,1267,1274,1282,1289,1296,1303,1310,
+1317,1324,1331,1338,1345,1352,1358,1365,1372,1379,1385,1392,1399,1405,1412,1418,1425,1431,1438,1444,
+1450,1456,1462,1468,1474,1480,1486,1492,1497,1503,1509,1514,1519,1525,1530,1535,1540,1545,1550,1554,
+1559,1564,1568,1572,1577,1581,1585,1589,1593,1597,1600,1604,1607,1610,1614,1617,1620,1623,1625,1628,
+1630,1633,1635,1637,1639,1641,1642,1644,1645,1646,1648,1649,1649,1650,1651,1651,1651,1651,1651,1651,
+1651,1650,1650,1649,1648,1647,1646,1644,1643,1641,1639,1637,1635,1632,1630,1627,1624,1621,1618,1615,
+1611,1607,1603,1599,1595,1591,1586,1581,1576,1571,1565,1560,1554,1548,1542,1536,1529,1523,1516,1509,
+1502,1494,1487,1479,1471,1463,1455,1446,1437,1428,1419,1410,1400,1391,1381,1371,1360,1350,1339,1328,
+1317,1306,1294,1283,1271,1259,1246,1234,1221,1208,1195,1182,1169,1155,1141,1127,1113,1099,1084,1069,
+1054,1039,1024,1008,992,976,960,944,927,910,894,876,859,842,824,806,788,770,751,732,
+714,695,676,656,637,617,597,577,557,537,516,495,475,453,432,411,389,368,346,324,
+301,279,257,234,211,188,165,142,118,95,71,47,23,0,-24,-48,-73,-97,-122,-147,
+-172,-197,-222,-248,-273,-298,-324,-350,-376,-402,-428,-454,-480,-506,-533,-559,-586,-612,-639,-666,
+-693,-720,-747,-774,-801,-828,-855,-883,-910,-938,-965,-993,-1020,-1048,-1075,-1103,-1130,-1158,-1186,-1214,
+-1241,-1269,-1297,-1325,-1352,-1380,-1408,-1436,-1463,-1491,-1519,-1547,-1574,-1602,-1630,-1657,-1685,-1713,-1740,-1768,
+-1795,-1823,-1850,-1878,-1905,-1932,-1959,-1986,-2013,-2040,-2067,-2094,-2121,-2147,-2174,-2200,-2227,-2253,-2279,-2305,
+-2331,-2357,-2383,-2409,-2434,-2460,-2485,-2510,-2535,-2560,-2585,-2610,-2635,-2659,-2683,-2708,-2732,-2756,-2779,-2803,
+-2826,-2850,-2873,-2896,-2919,-2941,-2964,-2986,-3008,-3030,-3052,-3074,-3095,-3116,-3137,-3158,-3179,-3200,-3220,-3240,
+-3260,-3280,-3299,-3319,-3338,-3357,-3376,-3394,-3412,-3431,-3448,-3466,-3484,-3501,-3518,-3535,-3551,-3567,-3583,-3599,
+-3615,-3630,-3646,-3661,-3675,-3690,-3704,-3718,-3732,-3745,-3758,-3771,-3784,-3797,-3809,-3821,-3833,-3844,-3855,-3866,
+-3877,-3888,-3898,-3908,-3918,-3927,-3936,-3945,-3954,-3962,-3970,-3978,-3986,-3993,-4000,-4007,-4014,-4020,-4026,-4032,
+-4037,-4042,-4047,-4052,-4056,-4061,-4064,-4068,-4071,-4074,-4077,-4080,-4082,-4084,-4085,-4087,-4088,-4089,-4089,-4090,
+-4090,-4090,-4089,-4088,-4087,-4086,-4084,-4082,-4080,-4078,-4075,-4072,-4069,-4065,-4062,-4057,-4053,-4049,-4044,-4039,
+-4033,-4027,-4021,-4015,-4009,-4002,-3995,-3988,-3981,-3973,-3965,-3957,-3948,-3939,-3930,-3921,-3911,-3902,-3891,-3881,
+-3871,-3860,-3849,-3837,-3826,-3814,-3802,-3790,-3777,-3764,-3751,-3738,-3725,-3711,-3697,-3683,-3669,-3654,-3639,-3624,
+-3609,-3594,-3578,-3562,-3546,-3530,-3513,-3496,-3480,-3462,-3445,-3427,-3410,-3392,-3373,-3355,-3337,-3318,-3299,-3280,
+-3261,-3241,-3221,-3202,-3182,-3161,-3141,-3121,-3100,-3079,-3058,-3037,-3016,-2994,-2973,-2951,-2929,-2907,-2885,-2863,
+-2840,-2818,-2795,-2772,-2749,-2726,-2703,-2680,-2656,-2633,-2609,-2585,-2562,-2538,-2514,-2490,-2465,-2441,-2417,-2392,
+-2368,-2343,-2318,-2294,-2269,-2244,-2219,-2194,-2169,-2144,-2119,-2094,-2068,-2043,-2018,-1993,-1967,-1942,-1916,-1891,
+-1865,-1840,-1814,-1789,-1763,-1737,-1712,-1686,-1661,-1635,-1610,-1584,-1559,-1533,-1507,-1482,-1456,-1431,-1405,-1380,
+-1355,-1329,-1304,-1279,-1254,-1229,-1203,-1178,-1153,-1129,-1104,-1079,-1054,-1029,-1005,-980,-956,-931,-907,-882,
+-858,-834,-810,-786,-762,-739,-715,-691,-668,-645,-621,-598,-575,-552,-529,-507,-484,-461,-439,-417,
+-395,-373,-351,-329,-308,-286,-265,-244,-222,-201,-181,-160,-139,-119,-99,-78,-59,-39,-19,0,
+19,38,57,76,95,114,132,151,169,187,205,222,240,257,274,291,308,325,341,358,
+374,390,406,422,437,453,468,483,498,513,527,542,556,570,584,597,611,624,637,650,
+663,676,688,700,713,724,736,748,759,770,781,792,803,814,824,834,844,854,864,874,
+883,892,901,910,919,927,936,944,952,960,968,975,983,990,997,1004,1011,1017,1024,1030,
+1036,1042,1048,1053,1059,1064,1069,1074,1079,1084,1088,1093,1097,1101,1105,1109,1112,1116,1119,1122,
+1125,1128,1131,1134,1136,1139,1141,1143,1145,1147,1149,1150,1152,1153,1154,1155,1156,1157,1157,1158,
+1158,1159,1159,1159,1159,1159,1159,1158,1158,1157,1157,1156,1155,1154,1153,1152,1151,1149,1148,1146,
+1145,1143,1141,1139,1137,1135,1133,1130,1128,1126,1123,1120,1118,1115,1112,1109,1107,1104,1100,1097,
+1094,1091,1088,1084,1081,1078,1074,1070,1067,1063,1060,1056,1052,1048,1044,1041,1037,1033,1029,1025,
+1021,1017,1012,1008,1004,1000,996,992,988,983,979,975,971,967,962,958,954,950,946,942,
+937,933,929,925,921,917,913,909,905,901,897,893,889,885,881,877,874,870,866,863,
+859,855,852,848,845,842,838,835,832,829,826,823,820,817,814,811,809,806,803,801,
+798,796,794,792,789,787,785,784,782,780,778,777,775,774,772,771,770,769,768,767,
+766,766,765,765,764,764,764,764,764,764,764,764,765,765,766,766,767,768,769,770,
+771,773,774,775,777,779,780,782,784,786,788,791,793,796,798,801,804,807,809,813,
+816,819,822,826,829,833,837,840,844,848,852,857,861,865,870,874,879,883,888,893,
+898,903,908,913,918,923,929,934,940,945,951,957,963,968,974,980,986,993,999,1005,
+1011,1018,1024,1030,1037,1043,1050,1057,1063,1070,1077,1083,1090,1097,1104,1111,1118,1125,1132,1139,
+1146,1153,1160,1167,1174,1181,1189,1196,1203,1210,1217,1224,1231,1239,1246,1253,1260,1267,1274,1282,
+1289,1296,1303,1310,1317,1324,1331,1338,1345,1352,1358,1365,1372,1379,1385,1392,1399,1405,1412,1418,
+1425,1431,1438,1444,1450,1456,1462,1468,1474,1480,1486,1492,1497,1503,1509,1514,1519,1525,1530,1535,
+1540,1545,1550,1554,1559,1564,1568,1572,1577,1581,1585,1589,1593,1597,1600,1604,1607,1610,1614,1617,
+1620,1623,1625,1628,1630,1633,1635,1637,1639,1641,1642,1644,
 };

+ 27 - 8
Applications/foc/motor/motor.c

@@ -68,6 +68,7 @@ bool mc_start(u8 mode) {
 		err_add_record(FOC_Throttle_Err, get_throttle_float() * 10);
 		return false;
 	}
+	motor.mode = mode;
 	eCtrl_init(200, 3000);
 	motor_encoder_start(motor.s_direction);
 	PMSM_FOC_Start(mode);
@@ -96,7 +97,8 @@ bool mc_stop(void) {
 		PMSM_FOC_SetErrCode(FOC_Throttle_Err);
 		err_add_record(FOC_Throttle_Err, get_throttle_float() * 10);
 		return false;
-	}	
+	}
+	motor.mode = CTRL_MODE_OPEN;
 	adc_stop_convert();
 	pwm_stop();
 	PMSM_FOC_Stop();
@@ -293,18 +295,35 @@ static void _debug_angle(void) {
 }
 #endif
 /*FOC 的部分处理,比如速度环,状态机,转把采集等*/
+measure_time_t g_meas_MCTask;
 void Sched_MC_mTask(void) {
+	time_measure_start(&g_meas_MCTask);
 	u8 runMode = PMSM_FOC_CtrlMode();
 #if ANGLE_TEST
 	_debug_angle();
 #endif
-	if (runMode != CTRL_MODE_OPEN) {
-		eCtrl_Running();
-		float f_throttle = get_throttle_float();
-		if (f_throttle != motor.throttle) {
-			motor.throttle = f_throttle;
-			//torque_speed_target(runMode, f_throttle);
+	if ((runMode != CTRL_MODE_OPEN) || (motor.mode != CTRL_MODE_OPEN)) {
+		if (motor.mode != CTRL_MODE_OPEN) {
+			if (mc_throttle_released() && PMSM_FOC_GetSpeed() == 0.0f) {
+				os_disable_irq();
+				PMSM_FOC_Stop();
+				pwm_disable_channel();
+				os_enable_irq();
+			}else {
+				os_disable_irq();
+				PMSM_FOC_Start(motor.mode);
+				pwm_enable_channel();
+				os_enable_irq();
+			}
+		}
+		if (runMode != CTRL_MODE_OPEN) {
+			eCtrl_Running();
+			float f_throttle = get_throttle_float();
+			if (f_throttle != motor.throttle) {
+				motor.throttle = f_throttle;
+				torque_speed_target(runMode, f_throttle);
+			}
+			PMSM_FOC_idqCalc();
 		}
-		PMSM_FOC_idqCalc();
 	}
 }

+ 1 - 0
Applications/foc/motor/motor.h

@@ -13,6 +13,7 @@ typedef struct {
 	s32    s_targetFix;
 	s8     s_direction;
 	u32    n_brake_errors;
+	u8     mode;
 }motor_t;
 
 void mc_init(void);

+ 33 - 6
Applications/foc/samples.c

@@ -15,30 +15,44 @@ typedef struct {
 
 static void sample_vbus(void);
 static void sample_throttle(void);
-
+static void sample_uvw_phase(void);
 static u32 sample_task(void *);
 static samples_t _vbus;
 #ifdef THROTTLE_CHAN
 static samples_t _throttle;
 #endif
+#ifdef U_VOL_ADC_CHAN
+static samples_t _uvw_phase[3];
+#endif
 void samples_init(void){
 	_vbus.filted_value = (MAX_vDC);
 	_vbus.value = (MAX_vDC);
-	_vbus.lowpass = (0.01f); 
-
+	_vbus.lowpass = (0.001f); 
+	sample_vbus();
 #ifdef THROTTLE_CHAN
 	_throttle.filted_value = (0);
 	_throttle.value = (0);
 	_throttle.lowpass = (0.01f); 
-
 	sample_throttle();
 #endif
-	sample_vbus();
-
+#ifdef U_VOL_ADC_CHAN
+	_uvw_phase[0].value = _uvw_phase[0].filted_value = 0;
+	_uvw_phase[0].lowpass = 0.01f;
+	_uvw_phase[1].value = _uvw_phase[1].filted_value = 0;
+	_uvw_phase[1].lowpass = 0.01f;
+	_uvw_phase[2].value = _uvw_phase[2].filted_value = 0;
+	_uvw_phase[2].lowpass = 0.01f;
+	sample_uvw_phase();
+#endif
 	shark_task_create(sample_task, NULL);
 }
 
 
+void get_phase_vols(float *uvw) {
+	uvw[0] = _uvw_phase[0].filted_value;
+	uvw[1] = _uvw_phase[1].filted_value;
+	uvw[2] = _uvw_phase[2].filted_value;
+}
 
 float get_vbus_float(void) {
 	return (_vbus.filted_value);
@@ -59,6 +73,7 @@ float get_throttle_float(void) {
 static u32 sample_task(void *param) {
 	sample_vbus();
 	sample_throttle();
+	sample_uvw_phase();
 	return 0;
 }
 u32 sapmple_delta;
@@ -77,5 +92,17 @@ static void sample_throttle(void){
 	LowPass_Filter(_throttle.filted_value, _throttle.value, _throttle.lowpass);
 #endif
 }
+static void sample_uvw_phase(void) {
+#ifdef U_VOL_ADC_CHAN
+	u16 uvw[3];
+	adc_get_uvw_phaseV(uvw);
+	_uvw_phase[0].value = (float)uvw[0] * UVW_VOL_CEOF;
+	LowPass_Filter(_uvw_phase[0].filted_value, _uvw_phase[0].value, _uvw_phase[0].lowpass);
+	_uvw_phase[1].value = (float)uvw[1] * UVW_VOL_CEOF;
+	LowPass_Filter(_uvw_phase[1].filted_value, _uvw_phase[1].value, _uvw_phase[1].lowpass);
+	_uvw_phase[2].value = (float)uvw[2] * UVW_VOL_CEOF;
+	LowPass_Filter(_uvw_phase[2].filted_value, _uvw_phase[2].value, _uvw_phase[2].lowpass);
 
+#endif
+}
 

+ 1 - 0
Applications/foc/samples.h

@@ -9,6 +9,7 @@ s16 get_vbus_sfix5(void);
 float get_vbus_float(void);
 float get_throttle_sfix5(void);
 float get_throttle_float(void);
+void get_phase_vols(float *uvw);
 
 #endif /* _SAMPLES_H__ */
 

+ 15 - 1
Project/MC100.uvoptx

@@ -120,7 +120,6 @@
         <SetRegEntry>
           <Number>0</Number>
           <Key>DLGUARM</Key>
-          <Name>8蘌
0</Name>
         </SetRegEntry>
         <SetRegEntry>
           <Number>0</Number>
@@ -190,6 +189,21 @@
           <WinNumber>1</WinNumber>
           <ItemText>adc_buffer,0x0A</ItemText>
         </Ww>
+        <Ww>
+          <count>8</count>
+          <WinNumber>1</WinNumber>
+          <ItemText>_encoder_off_map,0x0A</ItemText>
+        </Ww>
+        <Ww>
+          <count>9</count>
+          <WinNumber>1</WinNumber>
+          <ItemText>g_eCtrl</ItemText>
+        </Ww>
+        <Ww>
+          <count>10</count>
+          <WinNumber>1</WinNumber>
+          <ItemText>g_meas_MCTask,0x0A</ItemText>
+        </Ww>
       </WatchWindow1>
       <Tracepoint>
         <THDelay>0</THDelay>

+ 1 - 1
Project/MC100.uvprojx

@@ -313,7 +313,7 @@
           </ArmAdsMisc>
           <Cads>
             <interw>1</interw>
-            <Optim>1</Optim>
+            <Optim>4</Optim>
             <oTime>1</oTime>
             <SplitLS>0</SplitLS>
             <OneElfS>1</OneElfS>

+ 3 - 3
Simulink/Fir_angle.m

@@ -2,8 +2,8 @@ function Hd = Fir_angle
 %FIR_ANGLE 返回离散时间滤波器对象。
 
 % MATLAB Code
-% Generated by MATLAB(R) 9.9 and DSP System Toolbox 9.11.
-% Generated on: 04-Oct-2022 16:35:03
+% Generated by MATLAB(R) 9.9 and Signal Processing Toolbox 8.5.
+% Generated on: 09-Oct-2022 15:50:58
 
 % Equiripple Lowpass filter designed using the FIRPM function.
 
@@ -12,7 +12,7 @@ Fs = 500;  % Sampling Frequency
 
 Fpass = 0.5;               % Passband Frequency
 Fstop = 3;                 % Stopband Frequency
-Dpass = 5.7564627324e-06;  % Passband Ripple
+Dpass = 5.7564627261e-05;  % Passband Ripple
 Dstop = 0.0001;            % Stopband Attenuation
 dens  = 20;                % Density Factor
 

+ 3072 - 3072
Simulink/angle.csv

@@ -1,3072 +1,3072 @@
--289
--309
--250
--170
--140
--181
--134
--41
--31
--73
--115
--112
--102
--131
--147
--153
--148
--203
--209
--168
--153
--246
--282
--225
--244
--302
--324
--320
--320
--395
--410
--408
--423
--476
--454
--365
--333
--333
--302
--234
--182
--183
--173
--131
--133
--174
--204
--197
--197
--260
--316
--298
--312
--330
--349
--320
--322
--354
--346
--309
--329
--353
--377
--326
--329
--365
--387
--359
--321
--311
--292
--230
--183
--169
--131
--79
--19
--39
--57
--66
--38
--74
--76
--79
--81
--98
--98
--46
--37
--64
--65
--52
--52
--55
--83
--62
--91
--139
--160
--151
--174
--199
--199
--153
--112
--106
--96
--30
-20
-38
-23
-61
-88
-39
--24
--17
--59
--85
--162
--187
--200
--220
--247
--233
--250
--266
--273
--236
--226
--256
--284
--272
--228
--273
--295
--307
--300
--300
--276
--212
--161
--164
--144
--48
--33
--32
--23
--27
--45
--49
--72
--32
--78
--96
--110
--78
--42
--87
--85
--71
--67
--124
--125
--99
--149
--177
--192
--149
--202
--243
--239
--186
--157
--152
--125
--55
-8
--12
-27
-98
-124
-72
-79
-81
-86
-51
-23
-27
-25
-0
--26
-38
-41
-5
-15
-63
-63
-17
-30
-44
-7
--16
--45
--52
--60
--82
--59
-7
-29
-24
-41
-130
-161
-137
-161
-205
-144
-112
-97
-138
-73
-53
-8
-42
-34
--11
--44
--3
--51
--95
--86
--62
--103
--152
--180
--171
--178
--228
--264
--198
--174
--177
--144
--79
--51
--71
--25
-59
-83
-0
--23
-15
-10
--39
--82
--74
--130
--171
--176
--154
--201
--221
--223
--191
--176
--231
--265
--211
--211
--245
--244
--228
--259
--304
--251
--168
--151
--156
--133
--43
--3
--43
--23
-7
--4
--67
--53
--51
--36
--107
--105
--47
--35
--89
--81
--16
-2
--77
--53
--2
--50
--103
--129
--73
--101
--163
--164
--110
--114
--106
--87
-7
-29
-12
-28
-121
-132
-73
-58
-61
-63
-19
--16
--7
--13
--91
--80
--54
--93
--140
--154
--80
--98
--147
--127
--147
--145
--183
--186
--186
--229
--266
--229
--136
--120
--160
--98
--19
-8
--12
-29
-70
-56
-19
--5
-48
-47
--34
--49
--40
--34
--95
--84
--75
--63
--99
--107
--75
--108
--144
--183
--175
--195
--281
--286
--237
--237
--248
--190
--115
--96
--115
--52
-18
-51
-12
-16
-44
-21
--20
--33
--14
--42
--95
--90
--38
--47
--95
--72
--40
--33
--55
--37
--44
--45
--71
--80
--42
--84
--120
--101
--26
-1
--12
-33
-109
-137
-117
-158
-199
-168
-91
-92
-103
-109
-33
-12
-12
-35
--28
--34
--19
--40
--76
--83
--36
--104
--142
--158
--157
--182
--215
--255
--219
--200
--232
--189
--104
--88
--97
--46
-15
-42
-4
--9
-5
--7
--74
--101
--97
--131
--195
--220
--191
--208
--248
--257
--223
--199
--239
--235
--215
--213
--256
--225
--169
--223
--260
--223
--158
--136
--154
--85
--21
-12
-11
-60
-119
-114
-63
-49
-112
-102
-80
-80
-118
-108
-90
-118
-169
-154
-94
-152
-184
-174
-119
-125
-117
-81
-53
-58
-57
-22
-12
-57
-112
-133
-140
-176
-232
-265
-258
-280
-317
-261
-201
-194
-168
-164
-142
-98
-107
-59
-7
-10
-20
-9
--43
--25
--7
--30
--78
--86
--66
--118
--174
--178
--132
--126
--157
--90
--24
-2
--8
-32
-101
-127
-99
-41
-97
-90
-31
-11
-18
-2
--54
--36
--17
--15
--61
--73
--37
--51
--84
--123
--124
--125
--190
--188
--156
--186
--185
--153
--65
--50
--68
--20
-68
-93
-87
-83
-120
-111
-63
-33
-63
--4
--57
--41
-12
-20
--43
--26
--3
--2
--43
--33
--7
--17
--70
--56
--24
--55
--131
--113
--58
--41
--47
--20
-64
-89
-72
-107
-158
-163
-113
-58
-66
-67
--5
--48
--49
--55
--96
--126
--104
--124
--162
--163
--144
--145
--192
--204
--215
--234
--256
--277
--277
--279
--305
--252
--190
--174
--155
--109
--60
--28
--40
--30
--25
--46
--93
--84
--93
--136
--197
--188
--174
--211
--220
--232
--213
--210
--225
--218
--210
--247
--280
--255
--227
--295
--313
--286
--256
--247
--216
--163
--122
--116
--82
--16
-1
--16
--34
--39
--27
--37
--48
--35
--61
--66
--55
--27
--39
--46
--47
--33
--44
--69
--101
--131
--161
--191
--213
--218
--272
--273
--242
--216
--180
--182
--140
--91
--78
--69
--43
--58
--87
--124
--143
--157
--191
--252
--279
--285
--312
--343
--359
--371
--379
--393
--383
--402
--448
--467
--465
--464
--525
--560
--532
--514
--482
--461
--427
--391
--372
--342
--313
--267
--299
--326
--323
--341
--350
--372
--413
--422
--459
--447
--443
--452
--495
--501
--488
--492
--524
--561
--590
--585
--604
--626
--638
--646
--657
--640
--582
--547
--547
--504
--454
--421
--425
--416
--380
--400
--473
--480
--479
--506
--564
--561
--540
--566
--587
--566
--538
--537
--541
--531
--505
--510
--563
--570
--540
--554
--600
--596
--555
--534
--524
--492
--443
--397
--398
--364
--320
--311
--361
--368
--374
--386
--406
--416
--428
--442
--467
--459
--451
--475
--534
--520
--493
--512
--539
--565
--595
--599
--643
--654
--660
--672
--692
--649
--605
--577
--554
--524
--460
--442
--432
--400
--408
--425
--462
--465
--454
--493
--529
--580
--587
--587
--622
--632
--644
--652
--634
--625
--627
--653
--676
--683
--666
--711
--731
--748
--737
--703
--669
--621
--590
--556
--518
--478
--458
--426
--429
--446
--454
--437
--457
--474
--490
--480
--470
--462
--475
--466
--432
--435
--449
--441
--438
--493
--512
--526
--523
--545
--576
--587
--542
--517
--525
--494
--416
--391
--407
--381
--303
--282
--318
--342
--360
--390
--449
--451
--468
--493
--534
--584
--559
--591
--633
--633
--596
--589
--642
--637
--625
--667
--689
--680
--702
--719
--780
--723
--638
--612
--638
--588
--517
--481
--498
--488
--473
--469
--507
--537
--487
--525
--570
--614
--574
--575
--624
--642
--602
--599
--625
--622
--575
--621
--662
--681
--616
--653
--713
--723
--645
--649
--672
--603
--511
--477
--495
--451
--350
--317
--353
--375
--348
--338
--389
--370
--354
--339
--427
--402
--333
--315
--348
--361
--293
--295
--346
--317
--258
--286
--356
--335
--288
--331
--380
--387
--297
--289
--309
--250
--170
--140
--181
--134
--41
--31
--73
--115
--112
--102
--131
--147
--153
--148
--203
--209
--168
--153
--246
--282
--225
--244
--302
--324
--320
--320
--395
--410
--408
--423
--476
--454
--365
--333
--333
--302
--234
--182
--183
--173
--131
--133
--174
--204
--197
--197
--260
--316
--298
--312
--330
--349
--320
--322
--354
--346
--309
--329
--353
--377
--326
--329
--365
--387
--359
--321
--311
--292
--230
--183
--169
--131
--79
--19
--39
--57
--66
--38
--74
--76
--79
--81
--98
--98
--46
--37
--64
--65
--52
--52
--55
--83
--62
--91
--139
--160
--151
--174
--199
--199
--153
--112
--106
--96
--30
-20
-38
-23
-61
-88
-39
--24
--17
--59
--85
--162
--187
--200
--220
--247
--233
--250
--266
--273
--236
--226
--256
--284
--272
--228
--273
--295
--307
--300
--300
--276
--212
--161
--164
--144
--48
--33
--32
--23
--27
--45
--49
--72
--32
--78
--96
--110
--78
--42
--87
--85
--71
--67
--124
--125
--99
--149
--177
--192
--149
--202
--243
--239
--186
--157
--152
--125
--55
-8
--12
-27
-98
-124
-72
-79
-81
-86
-51
-23
-27
-25
-0
--26
-38
-41
-5
-15
-63
-63
-17
-30
-44
-7
--16
--45
--52
--60
--82
--59
-7
-29
-24
-41
-130
-161
-137
-161
-205
-144
-112
-97
-138
-73
-53
-8
-42
-34
--11
--44
--3
--51
--95
--86
--62
--103
--152
--180
--171
--178
--228
--264
--198
--174
--177
--144
--79
--51
--71
--25
-59
-83
-0
--23
-15
-10
--39
--82
--74
--130
--171
--176
--154
--201
--221
--223
--191
--176
--231
--265
--211
--211
--245
--244
--228
--259
--304
--251
--168
--151
--156
--133
--43
--3
--43
--23
-7
--4
--67
--53
--51
--36
--107
--105
--47
--35
--89
--81
--16
-2
--77
--53
--2
--50
--103
--129
--73
--101
--163
--164
--110
--114
--106
--87
-7
-29
-12
-28
-121
-132
-73
-58
-61
-63
-19
--16
--7
--13
--91
--80
--54
--93
--140
--154
--80
--98
--147
--127
--147
--145
--183
--186
--186
--229
--266
--229
--136
--120
--160
--98
--19
-8
--12
-29
-70
-56
-19
--5
-48
-47
--34
--49
--40
--34
--95
--84
--75
--63
--99
--107
--75
--108
--144
--183
--175
--195
--281
--286
--237
--237
--248
--190
--115
--96
--115
--52
-18
-51
-12
-16
-44
-21
--20
--33
--14
--42
--95
--90
--38
--47
--95
--72
--40
--33
--55
--37
--44
--45
--71
--80
--42
--84
--120
--101
--26
-1
--12
-33
-109
-137
-117
-158
-199
-168
-91
-92
-103
-109
-33
-12
-12
-35
--28
--34
--19
--40
--76
--83
--36
--104
--142
--158
--157
--182
--215
--255
--219
--200
--232
--189
--104
--88
--97
--46
-15
-42
-4
--9
-5
--7
--74
--101
--97
--131
--195
--220
--191
--208
--248
--257
--223
--199
--239
--235
--215
--213
--256
--225
--169
--223
--260
--223
--158
--136
--154
--85
--21
-12
-11
-60
-119
-114
-63
-49
-112
-102
-80
-80
-118
-108
-90
-118
-169
-154
-94
-152
-184
-174
-119
-125
-117
-81
-53
-58
-57
-22
-12
-57
-112
-133
-140
-176
-232
-265
-258
-280
-317
-261
-201
-194
-168
-164
-142
-98
-107
-59
-7
-10
-20
-9
--43
--25
--7
--30
--78
--86
--66
--118
--174
--178
--132
--126
--157
--90
--24
-2
--8
-32
-101
-127
-99
-41
-97
-90
-31
-11
-18
-2
--54
--36
--17
--15
--61
--73
--37
--51
--84
--123
--124
--125
--190
--188
--156
--186
--185
--153
--65
--50
--68
--20
-68
-93
-87
-83
-120
-111
-63
-33
-63
--4
--57
--41
-12
-20
--43
--26
--3
--2
--43
--33
--7
--17
--70
--56
--24
--55
--131
--113
--58
--41
--47
--20
-64
-89
-72
-107
-158
-163
-113
-58
-66
-67
--5
--48
--49
--55
--96
--126
--104
--124
--162
--163
--144
--145
--192
--204
--215
--234
--256
--277
--277
--279
--305
--252
--190
--174
--155
--109
--60
--28
--40
--30
--25
--46
--93
--84
--93
--136
--197
--188
--174
--211
--220
--232
--213
--210
--225
--218
--210
--247
--280
--255
--227
--295
--313
--286
--256
--247
--216
--163
--122
--116
--82
--16
-1
--16
--34
--39
--27
--37
--48
--35
--61
--66
--55
--27
--39
--46
--47
--33
--44
--69
--101
--131
--161
--191
--213
--218
--272
--273
--242
--216
--180
--182
--140
--91
--78
--69
--43
--58
--87
--124
--143
--157
--191
--252
--279
--285
--312
--343
--359
--371
--379
--393
--383
--402
--448
--467
--465
--464
--525
--560
--532
--514
--482
--461
--427
--391
--372
--342
--313
--267
--299
--326
--323
--341
--350
--372
--413
--422
--459
--447
--443
--452
--495
--501
--488
--492
--524
--561
--590
--585
--604
--626
--638
--646
--657
--640
--582
--547
--547
--504
--454
--421
--425
--416
--380
--400
--473
--480
--479
--506
--564
--561
--540
--566
--587
--566
--538
--537
--541
--531
--505
--510
--563
--570
--540
--554
--600
--596
--555
--534
--524
--492
--443
--397
--398
--364
--320
--311
--361
--368
--374
--386
--406
--416
--428
--442
--467
--459
--451
--475
--534
--520
--493
--512
--539
--565
--595
--599
--643
--654
--660
--672
--692
--649
--605
--577
--554
--524
--460
--442
--432
--400
--408
--425
--462
--465
--454
--493
--529
--580
--587
--587
--622
--632
--644
--652
--634
--625
--627
--653
--676
--683
--666
--711
--731
--748
--737
--703
--669
--621
--590
--556
--518
--478
--458
--426
--429
--446
--454
--437
--457
--474
--490
--480
--470
--462
--475
--466
--432
--435
--449
--441
--438
--493
--512
--526
--523
--545
--576
--587
--542
--517
--525
--494
--416
--391
--407
--381
--303
--282
--318
--342
--360
--390
--449
--451
--468
--493
--534
--584
--559
--591
--633
--633
--596
--589
--642
--637
--625
--667
--689
--680
--702
--719
--780
--723
--638
--612
--638
--588
--517
--481
--498
--488
--473
--469
--507
--537
--487
--525
--570
--614
--574
--575
--624
--642
--602
--599
--625
--622
--575
--621
--662
--681
--616
--653
--713
--723
--645
--649
--672
--603
--511
--477
--495
--451
--350
--317
--353
--375
--348
--338
--389
--370
--354
--339
--427
--402
--333
--315
--348
--361
--293
--295
--346
--317
--258
--286
--356
--335
--288
--331
--380
--387
--297
--289
--309
--250
--170
--140
--181
--134
--41
--31
--73
--115
--112
--102
--131
--147
--153
--148
--203
--209
--168
--153
--246
--282
--225
--244
--302
--324
--320
--320
--395
--410
--408
--423
--476
--454
--365
--333
--333
--302
--234
--182
--183
--173
--131
--133
--174
--204
--197
--197
--260
--316
--298
--312
--330
--349
--320
--322
--354
--346
--309
--329
--353
--377
--326
--329
--365
--387
--359
--321
--311
--292
--230
--183
--169
--131
--79
--19
--39
--57
--66
--38
--74
--76
--79
--81
--98
--98
--46
--37
--64
--65
--52
--52
--55
--83
--62
--91
--139
--160
--151
--174
--199
--199
--153
--112
--106
--96
--30
-20
-38
-23
-61
-88
-39
--24
--17
--59
--85
--162
--187
--200
--220
--247
--233
--250
--266
--273
--236
--226
--256
--284
--272
--228
--273
--295
--307
--300
--300
--276
--212
--161
--164
--144
--48
--33
--32
--23
--27
--45
--49
--72
--32
--78
--96
--110
--78
--42
--87
--85
--71
--67
--124
--125
--99
--149
--177
--192
--149
--202
--243
--239
--186
--157
--152
--125
--55
-8
--12
-27
-98
-124
-72
-79
-81
-86
-51
-23
-27
-25
-0
--26
-38
-41
-5
-15
-63
-63
-17
-30
-44
-7
--16
--45
--52
--60
--82
--59
-7
-29
-24
-41
-130
-161
-137
-161
-205
-144
-112
-97
-138
-73
-53
-8
-42
-34
--11
--44
--3
--51
--95
--86
--62
--103
--152
--180
--171
--178
--228
--264
--198
--174
--177
--144
--79
--51
--71
--25
-59
-83
-0
--23
-15
-10
--39
--82
--74
--130
--171
--176
--154
--201
--221
--223
--191
--176
--231
--265
--211
--211
--245
--244
--228
--259
--304
--251
--168
--151
--156
--133
--43
--3
--43
--23
-7
--4
--67
--53
--51
--36
--107
--105
--47
--35
--89
--81
--16
-2
--77
--53
--2
--50
--103
--129
--73
--101
--163
--164
--110
--114
--106
--87
-7
-29
-12
-28
-121
-132
-73
-58
-61
-63
-19
--16
--7
--13
--91
--80
--54
--93
--140
--154
--80
--98
--147
--127
--147
--145
--183
--186
--186
--229
--266
--229
--136
--120
--160
--98
--19
-8
--12
-29
-70
-56
-19
--5
-48
-47
--34
--49
--40
--34
--95
--84
--75
--63
--99
--107
--75
--108
--144
--183
--175
--195
--281
--286
--237
--237
--248
--190
--115
--96
--115
--52
-18
-51
-12
-16
-44
-21
--20
--33
--14
--42
--95
--90
--38
--47
--95
--72
--40
--33
--55
--37
--44
--45
--71
--80
--42
--84
--120
--101
--26
-1
--12
-33
-109
-137
-117
-158
-199
-168
-91
-92
-103
-109
-33
-12
-12
-35
--28
--34
--19
--40
--76
--83
--36
--104
--142
--158
--157
--182
--215
--255
--219
--200
--232
--189
--104
--88
--97
--46
-15
-42
-4
--9
-5
--7
--74
--101
--97
--131
--195
--220
--191
--208
--248
--257
--223
--199
--239
--235
--215
--213
--256
--225
--169
--223
--260
--223
--158
--136
--154
--85
--21
-12
-11
-60
-119
-114
-63
-49
-112
-102
-80
-80
-118
-108
-90
-118
-169
-154
-94
-152
-184
-174
-119
-125
-117
-81
-53
-58
-57
-22
-12
-57
-112
-133
-140
-176
-232
-265
-258
-280
-317
-261
-201
-194
-168
-164
-142
-98
-107
-59
-7
-10
-20
-9
--43
--25
--7
--30
--78
--86
--66
--118
--174
--178
--132
--126
--157
--90
--24
-2
--8
-32
-101
-127
-99
-41
-97
-90
-31
-11
-18
-2
--54
--36
--17
--15
--61
--73
--37
--51
--84
--123
--124
--125
--190
--188
--156
--186
--185
--153
--65
--50
--68
--20
-68
-93
-87
-83
-120
-111
-63
-33
-63
--4
--57
--41
-12
-20
--43
--26
--3
--2
--43
--33
--7
--17
--70
--56
--24
--55
--131
--113
--58
--41
--47
--20
-64
-89
-72
-107
-158
-163
-113
-58
-66
-67
--5
--48
--49
--55
--96
--126
--104
--124
--162
--163
--144
--145
--192
--204
--215
--234
--256
--277
--277
--279
--305
--252
--190
--174
--155
--109
--60
--28
--40
--30
--25
--46
--93
--84
--93
--136
--197
--188
--174
--211
--220
--232
--213
--210
--225
--218
--210
--247
--280
--255
--227
--295
--313
--286
--256
--247
--216
--163
--122
--116
--82
--16
-1
--16
--34
--39
--27
--37
--48
--35
--61
--66
--55
--27
--39
--46
--47
--33
--44
--69
--101
--131
--161
--191
--213
--218
--272
--273
--242
--216
--180
--182
--140
--91
--78
--69
--43
--58
--87
--124
--143
--157
--191
--252
--279
--285
--312
--343
--359
--371
--379
--393
--383
--402
--448
--467
--465
--464
--525
--560
--532
--514
--482
--461
--427
--391
--372
--342
--313
--267
--299
--326
--323
--341
--350
--372
--413
--422
--459
--447
--443
--452
--495
--501
--488
--492
--524
--561
--590
--585
--604
--626
--638
--646
--657
--640
--582
--547
--547
--504
--454
--421
--425
--416
--380
--400
--473
--480
--479
--506
--564
--561
--540
--566
--587
--566
--538
--537
--541
--531
--505
--510
--563
--570
--540
--554
--600
--596
--555
--534
--524
--492
--443
--397
--398
--364
--320
--311
--361
--368
--374
--386
--406
--416
--428
--442
--467
--459
--451
--475
--534
--520
--493
--512
--539
--565
--595
--599
--643
--654
--660
--672
--692
--649
--605
--577
--554
--524
--460
--442
--432
--400
--408
--425
--462
--465
--454
--493
--529
--580
--587
--587
--622
--632
--644
--652
--634
--625
--627
--653
--676
--683
--666
--711
--731
--748
--737
--703
--669
--621
--590
--556
--518
--478
--458
--426
--429
--446
--454
--437
--457
--474
--490
--480
--470
--462
--475
--466
--432
--435
--449
--441
--438
--493
--512
--526
--523
--545
--576
--587
--542
--517
--525
--494
--416
--391
--407
--381
--303
--282
--318
--342
--360
--390
--449
--451
--468
--493
--534
--584
--559
--591
--633
--633
--596
--589
--642
--637
--625
--667
--689
--680
--702
--719
--780
--723
--638
--612
--638
--588
--517
--481
--498
--488
--473
--469
--507
--537
--487
--525
--570
--614
--574
--575
--624
--642
--602
--599
--625
--622
--575
--621
--662
--681
--616
--653
--713
--723
--645
--649
--672
--603
--511
--477
--495
--451
--350
--317
--353
--375
--348
--338
--389
--370
--354
--339
--427
--402
--333
--315
--348
--361
--293
--295
--346
--317
--258
--286
--356
--335
--288
--331
--380
--387
--297
+-219 
+-182 
+-175 
+-121 
+-38 
+0 
+-4 
+45 
+118 
+160 
+101 
+88 
+129 
+133 
+101 
+94 
+123 
+103 
+78 
+80 
+95 
+78 
+-14 
+-17 
+5 
+-8 
+-76 
+-104 
+-104 
+-121 
+-194 
+-216 
+-223 
+-237 
+-270 
+-252 
+-204 
+-180 
+-185 
+-151 
+-103 
+-55 
+-65 
+-63 
+-31 
+-30 
+-101 
+-117 
+-101 
+-116 
+-200 
+-255 
+-236 
+-246 
+-295 
+-318 
+-308 
+-308 
+-313 
+-304 
+-280 
+-275 
+-291 
+-298 
+-258 
+-251 
+-265 
+-290 
+-243 
+-201 
+-177 
+-144 
+-78 
+-25 
+7 
+47 
+102 
+153 
+166 
+155 
+157 
+167 
+170 
+157 
+166 
+171 
+159 
+169 
+201 
+219 
+208 
+179 
+193 
+195 
+175 
+141 
+118 
+106 
+71 
+52 
+41 
+23 
+-9 
+-13 
+25 
+53 
+59 
+82 
+114 
+140 
+153 
+157 
+174 
+181 
+122 
+64 
+62 
+40 
+-24 
+-101 
+-109 
+-118 
+-173 
+-207 
+-202 
+-210 
+-219 
+-215 
+-197 
+-181 
+-206 
+-219 
+-189 
+-175 
+-201 
+-219 
+-204 
+-168 
+-152 
+-116 
+-54 
+2 
+22 
+59 
+119 
+171 
+174 
+175 
+200 
+217 
+188 
+188 
+227 
+227 
+183 
+163 
+210 
+230 
+183 
+159 
+175 
+187 
+138 
+127 
+143 
+120 
+48 
+37 
+61 
+36 
+-31 
+-44 
+1 
+28 
+20 
+57 
+114 
+150 
+148 
+167 
+231 
+245 
+207 
+177 
+207 
+213 
+144 
+124 
+150 
+116 
+70 
+82 
+133 
+108 
+47 
+55 
+107 
+117 
+69 
+59 
+91 
+86 
+32 
+52 
+76 
+43 
+10 
+64 
+132 
+188 
+164 
+221 
+305 
+340 
+328 
+375 
+436 
+405 
+341 
+346 
+406 
+381 
+306 
+310 
+351 
+341 
+258 
+264 
+288 
+252 
+177 
+169 
+205 
+161 
+61 
+60 
+79 
+45 
+-44 
+-32 
+19 
+15 
+-8 
+35 
+106 
+113 
+88 
+139 
+210 
+202 
+127 
+108 
+159 
+106 
+9 
+-10 
+19 
+-34 
+-151 
+-107 
+-70 
+-154 
+-250 
+-185 
+-133 
+-167 
+-253 
+-226 
+-157 
+-190 
+-274 
+-241 
+-222 
+-197 
+-331 
+-343 
+-704 
+599 
+104 
+254 
+367 
+309 
+275 
+254 
+394 
+293 
+233 
+232 
+333 
+257 
+187 
+195 
+269 
+266 
+199 
+223 
+259 
+246 
+170 
+198 
+246 
+162 
+88 
+105 
+161 
+101 
+7 
+34 
+90 
+87 
+49 
+100 
+171 
+175 
+144 
+192 
+246 
+256 
+183 
+187 
+214 
+175 
+85 
+84 
+104 
+43 
+-38 
+-13 
+22 
+-31 
+-138 
+-95 
+-39 
+-45 
+-121 
+-96 
+-52 
+-76 
+-126 
+-108 
+-68 
+-103 
+-138 
+-89 
+0 
+25 
+10 
+86 
+163 
+204 
+178 
+232 
+303 
+279 
+198 
+240 
+301 
+286 
+204 
+222 
+253 
+240 
+188 
+197 
+224 
+186 
+112 
+133 
+167 
+102 
+21 
+30 
+42 
+2 
+-81 
+-73 
+-46 
+-58 
+-86 
+-37 
+20 
+44 
+31 
+81 
+144 
+149 
+116 
+121 
+147 
+107 
+53 
+49 
+67 
+12 
+-35 
+-23 
+19 
+-11 
+-72 
+-33 
+11 
+-4 
+-33 
+-9 
+7 
+-10 
+-35 
+-17 
+3 
+-20 
+-52 
+9 
+70 
+102 
+118 
+173 
+247 
+271 
+289 
+335 
+392 
+379 
+315 
+317 
+354 
+341 
+276 
+278 
+296 
+286 
+244 
+245 
+252 
+205 
+153 
+159 
+177 
+112 
+42 
+50 
+55 
+21 
+-46 
+-55 
+-34 
+-54 
+-43 
+-13 
+31 
+43 
+49 
+91 
+132 
+157 
+98 
+100 
+105 
+63 
+9 
+-5 
+-33 
+-105 
+-160 
+-149 
+-154 
+-212 
+-246 
+-217 
+-180 
+-173 
+-214 
+-187 
+-153 
+-157 
+-174 
+-145 
+-128 
+-143 
+-151 
+-105 
+-39 
+-12 
+7 
+74 
+145 
+183 
+196 
+259 
+319 
+326 
+277 
+293 
+330 
+351 
+318 
+347 
+393 
+356 
+352 
+394 
+419 
+406 
+360 
+387 
+415 
+383 
+331 
+315 
+316 
+286 
+238 
+235 
+229 
+205 
+195 
+226 
+282 
+284 
+282 
+319 
+363 
+373 
+365 
+394 
+392 
+356 
+291 
+283 
+304 
+235 
+159 
+148 
+160 
+102 
+43 
+34 
+44 
+32 
+10 
+32 
+39 
+13 
+-43 
+-14 
+11 
+-29 
+-104 
+-59 
+-5 
+4 
+18 
+75 
+144 
+167 
+180 
+241 
+310 
+316 
+273 
+275 
+320 
+310 
+274 
+281 
+303 
+254 
+231 
+246 
+273 
+222 
+159 
+177 
+219 
+173 
+116 
+98 
+120 
+77 
+19 
+14 
+40 
+14 
+-18 
+25 
+87 
+107 
+96 
+137 
+196 
+217 
+201 
+214 
+240 
+201 
+144 
+130 
+156 
+96 
+19 
+32 
+60 
+63 
+7 
+10 
+43 
+51 
+9 
+31 
+49 
+24 
+-17 
+11 
+61 
+44 
+-44 
+-2 
+67 
+87 
+91 
+147 
+215 
+248 
+255 
+302 
+365 
+365 
+306 
+286 
+323 
+308 
+255 
+232 
+261 
+224 
+192 
+186 
+210 
+166 
+93 
+102 
+121 
+106 
+39 
+25 
+37 
+10 
+-64 
+-66 
+-48 
+-62 
+-83 
+-55 
+1 
+11 
+19 
+58 
+101 
+114 
+101 
+114 
+134 
+81 
+24 
+23 
+34 
+-19 
+-91 
+-92 
+-72 
+-101 
+-152 
+-152 
+-153 
+-160 
+-150 
+-155 
+-138 
+-156 
+-164 
+-133 
+-128 
+-147 
+-167 
+-142 
+-106 
+-74 
+-36 
+20 
+67 
+98 
+144 
+200 
+245 
+242 
+220 
+241 
+247 
+238 
+248 
+251 
+240 
+231 
+248 
+278 
+281 
+261 
+245 
+250 
+238 
+212 
+167 
+132 
+107 
+56 
+42 
+11 
+-41 
+-49 
+-33 
+-3 
+9 
+12 
+46 
+70 
+89 
+93 
+99 
+98 
+62 
+19 
+0 
+-17 
+-79 
+-139 
+-156 
+-178 
+-211 
+-256 
+-280 
+-280 
+-309 
+-315 
+-303 
+-320 
+-337 
+-354 
+-325 
+-340 
+-374 
+-391 
+-378 
+-338 
+-320 
+-280 
+-236 
+-182 
+-158 
+-127 
+-74 
+-39 
+-45 
+-59 
+-63 
+-68 
+-73 
+-90 
+-94 
+-113 
+-139 
+-141 
+-127 
+-138 
+-177 
+-216 
+-211 
+-221 
+-268 
+-304 
+-332 
+-344 
+-373 
+-401 
+-421 
+-428 
+-433 
+-418 
+-382 
+-363 
+-361 
+-333 
+-291 
+-267 
+-262 
+-264 
+-250 
+-292 
+-330 
+-356 
+-366 
+-392 
+-459 
+-460 
+-452 
+-462 
+-498 
+-507 
+-489 
+-476 
+-468 
+-460 
+-450 
+-462 
+-476 
+-466 
+-449 
+-448 
+-482 
+-471 
+-434 
+-391 
+-369 
+-324 
+-270 
+-234 
+-201 
+-160 
+-108 
+-96 
+-95 
+-115 
+-110 
+-102 
+-119 
+-116 
+-124 
+-133 
+-141 
+-146 
+-132 
+-167 
+-212 
+-230 
+-224 
+-237 
+-274 
+-313 
+-337 
+-357 
+-392 
+-420 
+-444 
+-461 
+-460 
+-449 
+-411 
+-388 
+-371 
+-331 
+-299 
+-280 
+-269 
+-263 
+-272 
+-291 
+-322 
+-328 
+-354 
+-400 
+-446 
+-477 
+-490 
+-516 
+-531 
+-573 
+-595 
+-569 
+-562 
+-561 
+-569 
+-589 
+-585 
+-577 
+-593 
+-585 
+-606 
+-606 
+-596 
+-552 
+-498 
+-462 
+-426 
+-376 
+-316 
+-268 
+-251 
+-215 
+-196 
+-224 
+-225 
+-211 
+-179 
+-185 
+-233 
+-215 
+-173 
+-170 
+-184 
+-180 
+-164 
+-192 
+-212 
+-212 
+-189 
+-255 
+-318 
+-323 
+-296 
+-353 
+-413 
+-406 
+-360 
+-349 
+-367 
+-320 
+-269 
+-254 
+-267 
+-241 
+-173 
+-174 
+-234 
+-257 
+-252 
+-286 
+-390 
+-410 
+-396 
+-456 
+-534 
+-510 
+-502 
+-555 
+-617 
+-599 
+-544 
+-563 
+-632 
+-610 
+-581 
+-586 
+-645 
+-617 
+-573 
+-617 
+-638 
+-579 
+-499 
+-471 
+-481 
+-408 
+-329 
+-297 
+-329 
+-274 
+-220 
+-241 
+-321 
+-300 
+-231 
+-270 
+-350 
+-351 
+-304 
+-309 
+-388 
+-385 
+-335 
+-361 
+-434 
+-399 
+-354 
+-414 
+-503 
+-475 
+-418 
+-454 
+-551 
+-522 
+-467 
+-471 
+-500 
+-437 
+-356 
+-339 
+-364 
+-319 
+-242 
+-226 
+-269 
+-267 
+-213 
+-236 
+-303 
+-314 
+-277 
+-287 
+-358 
+-337 
+-280 
+-273 
+-355 
+-331 
+-280 
+-281 
+-304 
+-282 
+-231 
+-259 
+-308 
+-274 
+-228 
+-242 
+-316 
+-282 
+-219 
+-182 
+-175 
+-121 
+-38 
+0 
+-4 
+45 
+118 
+160 
+101 
+88 
+129 
+133 
+101 
+94 
+123 
+103 
+78 
+80 
+95 
+78 
+-14 
+-17 
+5 
+-8 
+-76 
+-104 
+-104 
+-121 
+-194 
+-216 
+-223 
+-237 
+-270 
+-252 
+-204 
+-180 
+-185 
+-151 
+-103 
+-55 
+-65 
+-63 
+-31 
+-30 
+-101 
+-117 
+-101 
+-116 
+-200 
+-255 
+-236 
+-246 
+-295 
+-318 
+-308 
+-308 
+-313 
+-304 
+-280 
+-275 
+-291 
+-298 
+-258 
+-251 
+-265 
+-290 
+-243 
+-201 
+-177 
+-144 
+-78 
+-25 
+7 
+47 
+102 
+153 
+166 
+155 
+157 
+167 
+170 
+157 
+166 
+171 
+159 
+169 
+201 
+219 
+208 
+179 
+193 
+195 
+175 
+141 
+118 
+106 
+71 
+52 
+41 
+23 
+-9 
+-13 
+25 
+53 
+59 
+82 
+114 
+140 
+153 
+157 
+174 
+181 
+122 
+64 
+62 
+40 
+-24 
+-101 
+-109 
+-118 
+-173 
+-207 
+-202 
+-210 
+-219 
+-215 
+-197 
+-181 
+-206 
+-219 
+-189 
+-175 
+-201 
+-219 
+-204 
+-168 
+-152 
+-116 
+-54 
+2 
+22 
+59 
+119 
+171 
+174 
+175 
+200 
+217 
+188 
+188 
+227 
+227 
+183 
+163 
+210 
+230 
+183 
+159 
+175 
+187 
+138 
+127 
+143 
+120 
+48 
+37 
+61 
+36 
+-31 
+-44 
+1 
+28 
+20 
+57 
+114 
+150 
+148 
+167 
+231 
+245 
+207 
+177 
+207 
+213 
+144 
+124 
+150 
+116 
+70 
+82 
+133 
+108 
+47 
+55 
+107 
+117 
+69 
+59 
+91 
+86 
+32 
+52 
+76 
+43 
+10 
+64 
+132 
+188 
+164 
+221 
+305 
+340 
+328 
+375 
+436 
+405 
+341 
+346 
+406 
+381 
+306 
+310 
+351 
+341 
+258 
+264 
+288 
+252 
+177 
+169 
+205 
+161 
+61 
+60 
+79 
+45 
+-44 
+-32 
+19 
+15 
+-8 
+35 
+106 
+113 
+88 
+139 
+210 
+202 
+127 
+108 
+159 
+106 
+9 
+-10 
+19 
+-34 
+-151 
+-107 
+-70 
+-154 
+-250 
+-185 
+-133 
+-167 
+-253 
+-226 
+-157 
+-190 
+-274 
+-241 
+-222 
+-197 
+-331 
+-343 
+-704 
+599 
+104 
+254 
+367 
+309 
+275 
+254 
+394 
+293 
+233 
+232 
+333 
+257 
+187 
+195 
+269 
+266 
+199 
+223 
+259 
+246 
+170 
+198 
+246 
+162 
+88 
+105 
+161 
+101 
+7 
+34 
+90 
+87 
+49 
+100 
+171 
+175 
+144 
+192 
+246 
+256 
+183 
+187 
+214 
+175 
+85 
+84 
+104 
+43 
+-38 
+-13 
+22 
+-31 
+-138 
+-95 
+-39 
+-45 
+-121 
+-96 
+-52 
+-76 
+-126 
+-108 
+-68 
+-103 
+-138 
+-89 
+0 
+25 
+10 
+86 
+163 
+204 
+178 
+232 
+303 
+279 
+198 
+240 
+301 
+286 
+204 
+222 
+253 
+240 
+188 
+197 
+224 
+186 
+112 
+133 
+167 
+102 
+21 
+30 
+42 
+2 
+-81 
+-73 
+-46 
+-58 
+-86 
+-37 
+20 
+44 
+31 
+81 
+144 
+149 
+116 
+121 
+147 
+107 
+53 
+49 
+67 
+12 
+-35 
+-23 
+19 
+-11 
+-72 
+-33 
+11 
+-4 
+-33 
+-9 
+7 
+-10 
+-35 
+-17 
+3 
+-20 
+-52 
+9 
+70 
+102 
+118 
+173 
+247 
+271 
+289 
+335 
+392 
+379 
+315 
+317 
+354 
+341 
+276 
+278 
+296 
+286 
+244 
+245 
+252 
+205 
+153 
+159 
+177 
+112 
+42 
+50 
+55 
+21 
+-46 
+-55 
+-34 
+-54 
+-43 
+-13 
+31 
+43 
+49 
+91 
+132 
+157 
+98 
+100 
+105 
+63 
+9 
+-5 
+-33 
+-105 
+-160 
+-149 
+-154 
+-212 
+-246 
+-217 
+-180 
+-173 
+-214 
+-187 
+-153 
+-157 
+-174 
+-145 
+-128 
+-143 
+-151 
+-105 
+-39 
+-12 
+7 
+74 
+145 
+183 
+196 
+259 
+319 
+326 
+277 
+293 
+330 
+351 
+318 
+347 
+393 
+356 
+352 
+394 
+419 
+406 
+360 
+387 
+415 
+383 
+331 
+315 
+316 
+286 
+238 
+235 
+229 
+205 
+195 
+226 
+282 
+284 
+282 
+319 
+363 
+373 
+365 
+394 
+392 
+356 
+291 
+283 
+304 
+235 
+159 
+148 
+160 
+102 
+43 
+34 
+44 
+32 
+10 
+32 
+39 
+13 
+-43 
+-14 
+11 
+-29 
+-104 
+-59 
+-5 
+4 
+18 
+75 
+144 
+167 
+180 
+241 
+310 
+316 
+273 
+275 
+320 
+310 
+274 
+281 
+303 
+254 
+231 
+246 
+273 
+222 
+159 
+177 
+219 
+173 
+116 
+98 
+120 
+77 
+19 
+14 
+40 
+14 
+-18 
+25 
+87 
+107 
+96 
+137 
+196 
+217 
+201 
+214 
+240 
+201 
+144 
+130 
+156 
+96 
+19 
+32 
+60 
+63 
+7 
+10 
+43 
+51 
+9 
+31 
+49 
+24 
+-17 
+11 
+61 
+44 
+-44 
+-2 
+67 
+87 
+91 
+147 
+215 
+248 
+255 
+302 
+365 
+365 
+306 
+286 
+323 
+308 
+255 
+232 
+261 
+224 
+192 
+186 
+210 
+166 
+93 
+102 
+121 
+106 
+39 
+25 
+37 
+10 
+-64 
+-66 
+-48 
+-62 
+-83 
+-55 
+1 
+11 
+19 
+58 
+101 
+114 
+101 
+114 
+134 
+81 
+24 
+23 
+34 
+-19 
+-91 
+-92 
+-72 
+-101 
+-152 
+-152 
+-153 
+-160 
+-150 
+-155 
+-138 
+-156 
+-164 
+-133 
+-128 
+-147 
+-167 
+-142 
+-106 
+-74 
+-36 
+20 
+67 
+98 
+144 
+200 
+245 
+242 
+220 
+241 
+247 
+238 
+248 
+251 
+240 
+231 
+248 
+278 
+281 
+261 
+245 
+250 
+238 
+212 
+167 
+132 
+107 
+56 
+42 
+11 
+-41 
+-49 
+-33 
+-3 
+9 
+12 
+46 
+70 
+89 
+93 
+99 
+98 
+62 
+19 
+0 
+-17 
+-79 
+-139 
+-156 
+-178 
+-211 
+-256 
+-280 
+-280 
+-309 
+-315 
+-303 
+-320 
+-337 
+-354 
+-325 
+-340 
+-374 
+-391 
+-378 
+-338 
+-320 
+-280 
+-236 
+-182 
+-158 
+-127 
+-74 
+-39 
+-45 
+-59 
+-63 
+-68 
+-73 
+-90 
+-94 
+-113 
+-139 
+-141 
+-127 
+-138 
+-177 
+-216 
+-211 
+-221 
+-268 
+-304 
+-332 
+-344 
+-373 
+-401 
+-421 
+-428 
+-433 
+-418 
+-382 
+-363 
+-361 
+-333 
+-291 
+-267 
+-262 
+-264 
+-250 
+-292 
+-330 
+-356 
+-366 
+-392 
+-459 
+-460 
+-452 
+-462 
+-498 
+-507 
+-489 
+-476 
+-468 
+-460 
+-450 
+-462 
+-476 
+-466 
+-449 
+-448 
+-482 
+-471 
+-434 
+-391 
+-369 
+-324 
+-270 
+-234 
+-201 
+-160 
+-108 
+-96 
+-95 
+-115 
+-110 
+-102 
+-119 
+-116 
+-124 
+-133 
+-141 
+-146 
+-132 
+-167 
+-212 
+-230 
+-224 
+-237 
+-274 
+-313 
+-337 
+-357 
+-392 
+-420 
+-444 
+-461 
+-460 
+-449 
+-411 
+-388 
+-371 
+-331 
+-299 
+-280 
+-269 
+-263 
+-272 
+-291 
+-322 
+-328 
+-354 
+-400 
+-446 
+-477 
+-490 
+-516 
+-531 
+-573 
+-595 
+-569 
+-562 
+-561 
+-569 
+-589 
+-585 
+-577 
+-593 
+-585 
+-606 
+-606 
+-596 
+-552 
+-498 
+-462 
+-426 
+-376 
+-316 
+-268 
+-251 
+-215 
+-196 
+-224 
+-225 
+-211 
+-179 
+-185 
+-233 
+-215 
+-173 
+-170 
+-184 
+-180 
+-164 
+-192 
+-212 
+-212 
+-189 
+-255 
+-318 
+-323 
+-296 
+-353 
+-413 
+-406 
+-360 
+-349 
+-367 
+-320 
+-269 
+-254 
+-267 
+-241 
+-173 
+-174 
+-234 
+-257 
+-252 
+-286 
+-390 
+-410 
+-396 
+-456 
+-534 
+-510 
+-502 
+-555 
+-617 
+-599 
+-544 
+-563 
+-632 
+-610 
+-581 
+-586 
+-645 
+-617 
+-573 
+-617 
+-638 
+-579 
+-499 
+-471 
+-481 
+-408 
+-329 
+-297 
+-329 
+-274 
+-220 
+-241 
+-321 
+-300 
+-231 
+-270 
+-350 
+-351 
+-304 
+-309 
+-388 
+-385 
+-335 
+-361 
+-434 
+-399 
+-354 
+-414 
+-503 
+-475 
+-418 
+-454 
+-551 
+-522 
+-467 
+-471 
+-500 
+-437 
+-356 
+-339 
+-364 
+-319 
+-242 
+-226 
+-269 
+-267 
+-213 
+-236 
+-303 
+-314 
+-277 
+-287 
+-358 
+-337 
+-280 
+-273 
+-355 
+-331 
+-280 
+-281 
+-304 
+-282 
+-231 
+-259 
+-308 
+-274 
+-228 
+-242 
+-316 
+-282 
+-219 
+-182 
+-175 
+-121 
+-38 
+0 
+-4 
+45 
+118 
+160 
+101 
+88 
+129 
+133 
+101 
+94 
+123 
+103 
+78 
+80 
+95 
+78 
+-14 
+-17 
+5 
+-8 
+-76 
+-104 
+-104 
+-121 
+-194 
+-216 
+-223 
+-237 
+-270 
+-252 
+-204 
+-180 
+-185 
+-151 
+-103 
+-55 
+-65 
+-63 
+-31 
+-30 
+-101 
+-117 
+-101 
+-116 
+-200 
+-255 
+-236 
+-246 
+-295 
+-318 
+-308 
+-308 
+-313 
+-304 
+-280 
+-275 
+-291 
+-298 
+-258 
+-251 
+-265 
+-290 
+-243 
+-201 
+-177 
+-144 
+-78 
+-25 
+7 
+47 
+102 
+153 
+166 
+155 
+157 
+167 
+170 
+157 
+166 
+171 
+159 
+169 
+201 
+219 
+208 
+179 
+193 
+195 
+175 
+141 
+118 
+106 
+71 
+52 
+41 
+23 
+-9 
+-13 
+25 
+53 
+59 
+82 
+114 
+140 
+153 
+157 
+174 
+181 
+122 
+64 
+62 
+40 
+-24 
+-101 
+-109 
+-118 
+-173 
+-207 
+-202 
+-210 
+-219 
+-215 
+-197 
+-181 
+-206 
+-219 
+-189 
+-175 
+-201 
+-219 
+-204 
+-168 
+-152 
+-116 
+-54 
+2 
+22 
+59 
+119 
+171 
+174 
+175 
+200 
+217 
+188 
+188 
+227 
+227 
+183 
+163 
+210 
+230 
+183 
+159 
+175 
+187 
+138 
+127 
+143 
+120 
+48 
+37 
+61 
+36 
+-31 
+-44 
+1 
+28 
+20 
+57 
+114 
+150 
+148 
+167 
+231 
+245 
+207 
+177 
+207 
+213 
+144 
+124 
+150 
+116 
+70 
+82 
+133 
+108 
+47 
+55 
+107 
+117 
+69 
+59 
+91 
+86 
+32 
+52 
+76 
+43 
+10 
+64 
+132 
+188 
+164 
+221 
+305 
+340 
+328 
+375 
+436 
+405 
+341 
+346 
+406 
+381 
+306 
+310 
+351 
+341 
+258 
+264 
+288 
+252 
+177 
+169 
+205 
+161 
+61 
+60 
+79 
+45 
+-44 
+-32 
+19 
+15 
+-8 
+35 
+106 
+113 
+88 
+139 
+210 
+202 
+127 
+108 
+159 
+106 
+9 
+-10 
+19 
+-34 
+-151 
+-107 
+-70 
+-154 
+-250 
+-185 
+-133 
+-167 
+-253 
+-226 
+-157 
+-190 
+-274 
+-241 
+-222 
+-197 
+-331 
+-343 
+-704 
+599 
+104 
+254 
+367 
+309 
+275 
+254 
+394 
+293 
+233 
+232 
+333 
+257 
+187 
+195 
+269 
+266 
+199 
+223 
+259 
+246 
+170 
+198 
+246 
+162 
+88 
+105 
+161 
+101 
+7 
+34 
+90 
+87 
+49 
+100 
+171 
+175 
+144 
+192 
+246 
+256 
+183 
+187 
+214 
+175 
+85 
+84 
+104 
+43 
+-38 
+-13 
+22 
+-31 
+-138 
+-95 
+-39 
+-45 
+-121 
+-96 
+-52 
+-76 
+-126 
+-108 
+-68 
+-103 
+-138 
+-89 
+0 
+25 
+10 
+86 
+163 
+204 
+178 
+232 
+303 
+279 
+198 
+240 
+301 
+286 
+204 
+222 
+253 
+240 
+188 
+197 
+224 
+186 
+112 
+133 
+167 
+102 
+21 
+30 
+42 
+2 
+-81 
+-73 
+-46 
+-58 
+-86 
+-37 
+20 
+44 
+31 
+81 
+144 
+149 
+116 
+121 
+147 
+107 
+53 
+49 
+67 
+12 
+-35 
+-23 
+19 
+-11 
+-72 
+-33 
+11 
+-4 
+-33 
+-9 
+7 
+-10 
+-35 
+-17 
+3 
+-20 
+-52 
+9 
+70 
+102 
+118 
+173 
+247 
+271 
+289 
+335 
+392 
+379 
+315 
+317 
+354 
+341 
+276 
+278 
+296 
+286 
+244 
+245 
+252 
+205 
+153 
+159 
+177 
+112 
+42 
+50 
+55 
+21 
+-46 
+-55 
+-34 
+-54 
+-43 
+-13 
+31 
+43 
+49 
+91 
+132 
+157 
+98 
+100 
+105 
+63 
+9 
+-5 
+-33 
+-105 
+-160 
+-149 
+-154 
+-212 
+-246 
+-217 
+-180 
+-173 
+-214 
+-187 
+-153 
+-157 
+-174 
+-145 
+-128 
+-143 
+-151 
+-105 
+-39 
+-12 
+7 
+74 
+145 
+183 
+196 
+259 
+319 
+326 
+277 
+293 
+330 
+351 
+318 
+347 
+393 
+356 
+352 
+394 
+419 
+406 
+360 
+387 
+415 
+383 
+331 
+315 
+316 
+286 
+238 
+235 
+229 
+205 
+195 
+226 
+282 
+284 
+282 
+319 
+363 
+373 
+365 
+394 
+392 
+356 
+291 
+283 
+304 
+235 
+159 
+148 
+160 
+102 
+43 
+34 
+44 
+32 
+10 
+32 
+39 
+13 
+-43 
+-14 
+11 
+-29 
+-104 
+-59 
+-5 
+4 
+18 
+75 
+144 
+167 
+180 
+241 
+310 
+316 
+273 
+275 
+320 
+310 
+274 
+281 
+303 
+254 
+231 
+246 
+273 
+222 
+159 
+177 
+219 
+173 
+116 
+98 
+120 
+77 
+19 
+14 
+40 
+14 
+-18 
+25 
+87 
+107 
+96 
+137 
+196 
+217 
+201 
+214 
+240 
+201 
+144 
+130 
+156 
+96 
+19 
+32 
+60 
+63 
+7 
+10 
+43 
+51 
+9 
+31 
+49 
+24 
+-17 
+11 
+61 
+44 
+-44 
+-2 
+67 
+87 
+91 
+147 
+215 
+248 
+255 
+302 
+365 
+365 
+306 
+286 
+323 
+308 
+255 
+232 
+261 
+224 
+192 
+186 
+210 
+166 
+93 
+102 
+121 
+106 
+39 
+25 
+37 
+10 
+-64 
+-66 
+-48 
+-62 
+-83 
+-55 
+1 
+11 
+19 
+58 
+101 
+114 
+101 
+114 
+134 
+81 
+24 
+23 
+34 
+-19 
+-91 
+-92 
+-72 
+-101 
+-152 
+-152 
+-153 
+-160 
+-150 
+-155 
+-138 
+-156 
+-164 
+-133 
+-128 
+-147 
+-167 
+-142 
+-106 
+-74 
+-36 
+20 
+67 
+98 
+144 
+200 
+245 
+242 
+220 
+241 
+247 
+238 
+248 
+251 
+240 
+231 
+248 
+278 
+281 
+261 
+245 
+250 
+238 
+212 
+167 
+132 
+107 
+56 
+42 
+11 
+-41 
+-49 
+-33 
+-3 
+9 
+12 
+46 
+70 
+89 
+93 
+99 
+98 
+62 
+19 
+0 
+-17 
+-79 
+-139 
+-156 
+-178 
+-211 
+-256 
+-280 
+-280 
+-309 
+-315 
+-303 
+-320 
+-337 
+-354 
+-325 
+-340 
+-374 
+-391 
+-378 
+-338 
+-320 
+-280 
+-236 
+-182 
+-158 
+-127 
+-74 
+-39 
+-45 
+-59 
+-63 
+-68 
+-73 
+-90 
+-94 
+-113 
+-139 
+-141 
+-127 
+-138 
+-177 
+-216 
+-211 
+-221 
+-268 
+-304 
+-332 
+-344 
+-373 
+-401 
+-421 
+-428 
+-433 
+-418 
+-382 
+-363 
+-361 
+-333 
+-291 
+-267 
+-262 
+-264 
+-250 
+-292 
+-330 
+-356 
+-366 
+-392 
+-459 
+-460 
+-452 
+-462 
+-498 
+-507 
+-489 
+-476 
+-468 
+-460 
+-450 
+-462 
+-476 
+-466 
+-449 
+-448 
+-482 
+-471 
+-434 
+-391 
+-369 
+-324 
+-270 
+-234 
+-201 
+-160 
+-108 
+-96 
+-95 
+-115 
+-110 
+-102 
+-119 
+-116 
+-124 
+-133 
+-141 
+-146 
+-132 
+-167 
+-212 
+-230 
+-224 
+-237 
+-274 
+-313 
+-337 
+-357 
+-392 
+-420 
+-444 
+-461 
+-460 
+-449 
+-411 
+-388 
+-371 
+-331 
+-299 
+-280 
+-269 
+-263 
+-272 
+-291 
+-322 
+-328 
+-354 
+-400 
+-446 
+-477 
+-490 
+-516 
+-531 
+-573 
+-595 
+-569 
+-562 
+-561 
+-569 
+-589 
+-585 
+-577 
+-593 
+-585 
+-606 
+-606 
+-596 
+-552 
+-498 
+-462 
+-426 
+-376 
+-316 
+-268 
+-251 
+-215 
+-196 
+-224 
+-225 
+-211 
+-179 
+-185 
+-233 
+-215 
+-173 
+-170 
+-184 
+-180 
+-164 
+-192 
+-212 
+-212 
+-189 
+-255 
+-318 
+-323 
+-296 
+-353 
+-413 
+-406 
+-360 
+-349 
+-367 
+-320 
+-269 
+-254 
+-267 
+-241 
+-173 
+-174 
+-234 
+-257 
+-252 
+-286 
+-390 
+-410 
+-396 
+-456 
+-534 
+-510 
+-502 
+-555 
+-617 
+-599 
+-544 
+-563 
+-632 
+-610 
+-581 
+-586 
+-645 
+-617 
+-573 
+-617 
+-638 
+-579 
+-499 
+-471 
+-481 
+-408 
+-329 
+-297 
+-329 
+-274 
+-220 
+-241 
+-321 
+-300 
+-231 
+-270 
+-350 
+-351 
+-304 
+-309 
+-388 
+-385 
+-335 
+-361 
+-434 
+-399 
+-354 
+-414 
+-503 
+-475 
+-418 
+-454 
+-551 
+-522 
+-467 
+-471 
+-500 
+-437 
+-356 
+-339 
+-364 
+-319 
+-242 
+-226 
+-269 
+-267 
+-213 
+-236 
+-303 
+-314 
+-277 
+-287 
+-358 
+-337 
+-280 
+-273 
+-355 
+-331 
+-280 
+-281 
+-304 
+-282 
+-231 
+-259 
+-308 
+-274 
+-228 
+-242 
+-316 
+-282 

+ 8 - 0
Simulink/myfilter.m

@@ -0,0 +1,8 @@
+Fir=Fir_angle;
+angle_off=filter(Fir.Numerator, 1, in);
+out=single(angle_off);
+t=0:3071;
+plot(t, in);
+hold;
+plot(t-477, out);
+out_off=out';