Просмотр исходного кода

V3 update

Signed-off-by: huhui <huhui@sharkgulf.com>
huhui 3 лет назад
Родитель
Сommit
ec49c1222f

+ 1 - 1
Applications/app/app.c

@@ -132,7 +132,7 @@ static u32 _app_report_task(void *p) {
 		sys_debug("acc vol %d\n", get_acc_vol());
 		sys_debug("throttle %f\n", get_throttle_float());
 		sys_debug("deadtime 0x%x\n", get_deadtime());
-		//sys_debug("ADC Vref %f, %f\n", get_adc_vref(), adc_5vref_compesion());
+		sys_debug("ADC Vref %f, %f\n", get_adc_vref(), adc_5vref_compesion());
 		//sys_debug("Vdq in %f, %f\n", PMSM_FOC_Get()->in.s_targetVdq.d, PMSM_FOC_Get()->in.s_targetVdq.q);
 		//sys_debug("Vdq out %f, %f\n", PMSM_FOC_Get()->out.s_OutVdq.d, PMSM_FOC_Get()->out.s_OutVdq.q);
 		//sys_debug("target current %f\n", PMSM_FOC_Get()->in.s_targetCurrent);

+ 4 - 2
Applications/bsp/board_mc105_v3.h

@@ -141,7 +141,7 @@
 #define VBUS_I_ADC_RCU 		RCU_GPIOA
 #define VBUS_I_ADC_MODE 	GPIO_MODE_AIN
 #define VBUS_I_CEOF         (HALL_SENSOR_CEOF)
-
+#define VBUS_I_POSITIVE     1
 
 /* MOS 温度采集 */
 #define MOS_TEMP_ADC_CHAN    ADC_CHANNEL_8
@@ -227,6 +227,7 @@
 #define ZERO_ADC_MODE 	GPIO_MODE_AIN
 
 /* 刹车手把输入 */
+#define GPIO_BREAK_MODE GPIO_LOW_BRK_MODE
 #define GPIO_BRAKE_IN_GROUP 	GPIOB
 #define GPIO_BRAKE_IN_PIN 	GPIO_PIN_3
 #define GPIO_BRAKE_IN_RCU 	RCU_GPIOB
@@ -235,6 +236,7 @@
 #define GPIO_BRAKE_EXTI EXTI_3
 #define GPIO_BRAKE_EXIT_SRC_GROUP GPIO_PORT_SOURCE_GPIOB
 #define GPIO_BRAKE_EXIT_SRC_PIN GPIO_PIN_SOURCE_3
+#define GPIO_BRAKE_PIN_REMAP GPIO_SWJ_SWDPENABLE_REMAP
 
 /* 锁电机线,  使用查询模式 */
 #define GPIO_MLOCK_IN_GROUP GPIOC
@@ -361,7 +363,7 @@
 #endif
 #define DEBUG_PORT_UART2
 
-#define CONFIG_MOT_TYPE MOTOR_BLUESHARK_A1
+#define CONFIG_MOT_TYPE MOTOR_BLUESHARK_ZD_100
 
 //#define CONFIG_DQ_STEP_RESPONSE
 

+ 3 - 0
Applications/bsp/gpio.c

@@ -58,6 +58,9 @@ void gpio_beep(u32 ms) {
 void gpio_mc_brk_init(void) {
 #ifdef GPIO_BRAKE_IN_GROUP
 	rcu_periph_clock_enable(GPIO_BRAKE_IN_RCU);
+#ifdef GPIO_BRAKE_PIN_REMAP
+	gpio_pin_remap_config(GPIO_BRAKE_PIN_REMAP, ENABLE);
+#endif
 	gpio_init(GPIO_BRAKE_IN_GROUP, GPIO_BRAKE_IN_MODE, GPIO_OSPEED_50MHZ, GPIO_BRAKE_IN_PIN);
 	
 	gpio_exti_source_select(GPIO_BRAKE_EXIT_SRC_GROUP, GPIO_BRAKE_EXIT_SRC_PIN);

+ 1 - 0
Applications/foc/commands.c

@@ -429,6 +429,7 @@ static void process_foc_command(foc_cmd_body_t *command) {
 		case Foc_Set_Plot_Type:
 		{
 			plot_type = (int)decode_u8((u8 *)command->data);
+			sys_debug("plot type %d\n", plot_type);
 			break;
 		}
 		case Foc_Set_Throttle_throld:

+ 7 - 5
Applications/foc/core/PMSM_FOC_Core.c

@@ -218,6 +218,7 @@ void PMSM_FOC_CoreInit(void) {
 	gFoc_Ctrl.params.n_modulation = CONFIG_SVM_MODULATION;//SVM_Modulation;
 	gFoc_Ctrl.params.n_PhaseFilterCeof = CONFIG_CURR_LP_CEOF;
 	gFoc_Ctrl.params.n_poles = nv_get_motor_params()->poles;//MOTOR_POLES;
+	gFoc_Ctrl.params.lq = nv_get_motor_params()->lq;
 	gFoc_Ctrl.in.s_manualAngle = INVALID_ANGLE;
 	gFoc_Ctrl.in.b_fwEnable = nv_get_foc_params()->n_FwEnable;
 	gFoc_Ctrl.in.s_vDC = nv_get_foc_params()->s_maxDCVol;//(CONFIG_RATED_DC_VOL);
@@ -301,7 +302,7 @@ static u32 PMSM_FOC_Debug_Task(void *p) {
 	}
 	return 1;
 }
-
+//#define UPDATE_Lq_By_iq
 void PMSM_FOC_Schedule(void) {
 
 	gFoc_Ctrl.ctrl_count++;
@@ -321,12 +322,13 @@ void PMSM_FOC_Schedule(void) {
 	#endif
 		float err = target_d - gFoc_Ctrl.out.s_RealIdq.d;
 		gFoc_Ctrl.in.s_targetVdq.d = PI_Controller_RunSerial(&gFoc_Ctrl.pi_id, err);
-
+#ifdef UPDATE_Lq_By_iq
 		/* update kp&ki from lq for iq PI controller */
 		float lq = motor_get_lq_from_iq((s16)gFoc_Ctrl.out.s_FilterIdq.q);
-		gFoc_Ctrl.pi_iq.kp = ((float)nv_get_foc_params()->n_currentBand * lq);
-		gFoc_Ctrl.pi_iq.ki = (nv_get_motor_params()->r/lq);
-
+		LowPass_Filter(gFoc_Ctrl.params.lq, lq, 0.01f);
+		gFoc_Ctrl.pi_iq.kp = ((float)nv_get_foc_params()->n_currentBand * gFoc_Ctrl.params.lq);
+		gFoc_Ctrl.pi_iq.ki = (nv_get_motor_params()->r/gFoc_Ctrl.params.lq);
+#endif
 		/* limiter Vq output for PI controller */
 		float max_vq = sqrtf(SQ(max_vd) - SQ(gFoc_Ctrl.in.s_targetVdq.d));
 		gFoc_Ctrl.pi_iq.max = max_vq;

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

@@ -122,7 +122,7 @@ static void thro_torque_request(void) {
 				u16 start_time = mc_get_gear_config()->n_zero_accl;
 				if (start_time == 0) {
 					start_time = 1;
-				}
+				}
 				step_towards(&_torque.torque_req, ref_torque, ref_torque/(float)start_time);
 			}else {
 				_torque.torque_req = ref_torque;

+ 2 - 2
Applications/foc/motor/current_ics.c

@@ -146,11 +146,11 @@ void phase_current_get(float *iABC){
 #ifdef CONFIG_PWM_UV_SWAP
 	iABC[1] = -cs->adc_ib * ADC_TO_CURR_ceof1;
 	iABC[0] = -cs->adc_ic * ADC_TO_CURR_ceof2;
-	iABC[2] = -(iABC[1] + iABC[2]);
+	iABC[2] = -(iABC[1] + iABC[0]);
 #else
 	iABC[1] = -cs->adc_ib * ADC_TO_CURR_ceof1;
 	iABC[2] = -cs->adc_ic * ADC_TO_CURR_ceof2;
-	iABC[0] = -(iABC[1] + iABC[0]);
+	iABC[0] = -(iABC[1] + iABC[2]);
 #endif
 #else
 #ifdef CONFIG_PWM_UV_SWAP

+ 12 - 12
Applications/foc/motor/motor.c

@@ -28,7 +28,7 @@ extern float target_d;
 extern float target_q;
 #endif
 
-static bool mc_is_hwbrake(void);
+static bool mc_detect_hwbrake(void);
 static bool mc_is_gpio_mlock(void);
 static void _pwm_brake_prot_timer_handler(shark_timer_t *);
 static shark_timer_t _brake_prot_timer = TIMER_INIT(_brake_prot_timer, _pwm_brake_prot_timer_handler);
@@ -305,7 +305,7 @@ bool mc_start(u8 mode) {
 		mc_stop();
 		return false;
 	}
-	if (mc_is_hwbrake()) {
+	if (mc_detect_hwbrake()) {
 		PMSM_FOC_Brake(true);
 	}
 	gpio_beep(200);
@@ -598,7 +598,7 @@ void mc_force_run_open(s16 vd, s16 vq) {
 	pwm_enable_channel();
 	phase_current_calibrate_wait();
 	PMSM_FOC_Set_Angle(0);
-	PMSM_FOC_SetOpenVdq(vd, 0);
+	PMSM_FOC_SetOpenVdq((float)vd * 0.7f, 0);
 	_force_wait = 2000;
 	motor.b_force_run = true;
 }
@@ -827,11 +827,11 @@ static bool mc_is_gpio_mlock(void) {
 	return false;
 }
 
-static bool mc_is_hwbrake(void) {
+static bool _mc_is_hwbrake(void) {
 	int count = 50;
 	int settimes = 0;
 	while(count-- > 0) {
-		bool b1 = mc_get_gpio_brake() && mc_get_gpio_brake1();
+		bool b1 = mc_get_gpio_brake() || mc_get_gpio_brake1();
 		if (b1) {
 			settimes ++;
 		}
@@ -855,6 +855,11 @@ static bool mc_is_hwbrake(void) {
 	return false;
 }
 
+static bool mc_detect_hwbrake(void) {
+	motor.b_break = _mc_is_hwbrake();
+	return motor.b_break;
+}
+
 static void _fan_det_timer_handler(shark_timer_t *t) {
 	if (t == &_fan_det_timer1) {
 		motor.fan[0].rpm = 0;
@@ -881,12 +886,7 @@ void Fan_IRQHandler(int idx) {
 }
 
 void MC_Brake_IRQHandler(void) {
-
-	if (mc_is_hwbrake()) {
-		motor.b_break = true;
-	}else {
-		motor.b_break = false;
-	}
+	mc_detect_hwbrake();
 
 	if (!motor.b_start) {
 		return;
@@ -1048,7 +1048,7 @@ static bool mc_process_force_running(void) {
 			if (_force_wait > 0) {
 				--_force_wait;
 			}else {
-				_force_angle += 1.0f;
+				_force_angle += 1.5f;
 				rand_angle(_force_angle);
 				PMSM_FOC_Set_Angle(_force_angle);
 			}

+ 4 - 0
Applications/foc/samples.c

@@ -171,7 +171,11 @@ void sample_vbus(void){
 
 void sample_ibus(void) {
 #ifdef VBUS_I_CHAN
+	#ifdef VBUS_I_POSITIVE
+	s16 vadc = adc_get_ibus() - _ibus.adc_offset;
+	#else
 	s16 vadc = _ibus.adc_offset - adc_get_ibus();
+	#endif
 	_ibus.value = (float)vadc * VBUS_I_CEOF;
 	LowPass_Filter(_ibus.filted_value, _ibus.value, _ibus.lowpass);
 #endif