Przeglądaj źródła

105 V4的支持

Signed-off-by: huhui <huhui@sharkgulf.com>
huhui 3 lat temu
rodzic
commit
adb5bc67cf

+ 1 - 2
Applications/app/app.c

@@ -129,7 +129,7 @@ static u32 _app_report_task(void *p) {
 		sys_debug("Slow: %d - %d\n", g_meas_MCTask.intval_time, g_meas_MCTask.exec_time);
 		sys_debug("Fast: %d - %d, err: %d-%d-%d\n", g_meas_foc.intval_time, g_meas_foc.exec_time, g_meas_foc.intval_hi_err, g_meas_foc.intval_low_err, g_meas_foc.exec_max_error_time);
 		//sys_debug("FOC time err %d %d\n", g_meas_foc.intval_time_h_error, g_meas_foc.intval_time_l_error);
-		sys_debug("acc vol %d\n", get_acc_vol());
+		sys_debug("acc vol %d, bid %d\n", get_acc_vol(), gpio_board_id());
 		sys_debug("throttle %f\n", get_throttle_float());
 		sys_debug("ADC Vref %f, %f\n", get_adc_vref(), adc_5vref_compesion());
 		//sys_debug("dead time %d\n", get_deadtime());
@@ -138,7 +138,6 @@ static u32 _app_report_task(void *p) {
 		//sys_debug("target current %f\n", PMSM_FOC_Get()->in.s_targetCurrent);
 		//thro_torque_log();
 		sys_debug("_>%f, %f, %f\n", ladrc_observer_get()->ld, ladrc_observer_get()->lq, ladrc_observer_get()->poles);
-		sys_debug("> %f, %f\n", ladrc_observer_get()->Ealpha, ladrc_observer_get()->Ebeta);
 		encoder_log();
 		//sample_log();
 		PMSM_FOC_LogDebug();

+ 10 - 2
Applications/bsp/gd32/adc.c

@@ -509,7 +509,11 @@ u16 adc_get_ibus(void) {
 }
 
 u16 adc_get_throttle(void) {
-	return adc_buffer[THROTTLE_BUFF_IDX] * VREF_3V3_COMPESTION();
+	if (gpio_board_id() == BOARD_105_VERSION_3) {
+		return adc_buffer[THROTTLE_BUFF_IDX] * VREF_3V3_COMPESTION();
+	}else {
+		return adc_buffer[MOTOR_TEMP_BUFF_IDX];
+	}
 }
 
 u16 adc_get_throttle2(void) {
@@ -547,7 +551,11 @@ u16 adc_get_mos_temp(void) {
 }
 
 u16 adc_get_motor_temp(void) {
-	return adc_buffer[MOTOR_TEMP_BUFF_IDX];
+	if (gpio_board_id() == BOARD_105_VERSION_3) {
+		return adc_buffer[MOTOR_TEMP_BUFF_IDX];
+	}else {
+		return adc_buffer[THROTTLE_BUFF_IDX];
+	}
 }
 
 u16 adc_get_vref(void) {

+ 15 - 0
Applications/bsp/gd32/board_mc105_v3.h

@@ -302,6 +302,12 @@
 #define GPIO_BRAKE_LIGHT_OUT_RCU 	RCU_GPIOD
 #define GPIO_BRAKE_LIGHT_OUT_MODE 	GPIO_MODE_OUT_PP
 
+/* 一键修复,低电平有效 */
+#define REPEAR_IN_GROUP 	GPIOC
+#define REPEAR_IN_PIN 	GPIO_PIN_10
+#define REPEAR_IN_RCU 	RCU_GPIOC
+#define REPEAR_IN_MODE 	GPIO_MODE_IN_FLOATING
+
 /* CAN 定义 */
 #define CAN_TX_GROUP GPIOB
 #define CAN_TX_PIN   GPIO_PIN_9
@@ -362,6 +368,15 @@
 #define ENC_PWM_TIMER_INT_FLG TIMER_INT_FLAG_CH0
 #define ENC_PWM_IRQHandler TIMER1_IRQHandler
 
+/* board id, 0x01=>v3, 0x02=>v4 */
+#define BOOT_PIN_0_GROUP GPIOC 
+#define BOOT_PIN_0_PIN   GPIO_PIN_6
+#define BOOT_PIN_1_GROUP GPIOC 
+#define BOOT_PIN_1_PIN   GPIO_PIN_7
+
+#define BOARD_105_VERSION_3 1
+#define BOARD_105_VERSION_4 2
+
 #define ENC_MAX_interpolation 1.0F
 
 #define ENC_FILTER_NR          15

+ 45 - 0
Applications/bsp/gd32/gpio.c

@@ -143,14 +143,54 @@ void gpio_brk_light_init(void) {
 #endif
 }
 
+void gpio_board_id_init(void) {
+#ifdef BOOT_PIN_0_GROUP
+	gpio_init(BOOT_PIN_0_GROUP, GPIO_MODE_IPU, GPIO_OSPEED_50MHZ, BOOT_PIN_0_PIN);
+	gpio_init(BOOT_PIN_1_GROUP, GPIO_MODE_IPU, GPIO_OSPEED_50MHZ, BOOT_PIN_1_PIN);
+#endif
+}
+
+u8  gpio_hw_board_id(void) {
+	u8 id = BOARD_105_VERSION_4;
+#ifdef BOOT_PIN_0_GROUP
+	u8 b0 = gpio_input_bit_get(BOOT_PIN_0_GROUP, BOOT_PIN_0_PIN);
+	u8 b1 = gpio_input_bit_get(BOOT_PIN_1_GROUP, BOOT_PIN_1_PIN);
+	id = ((b1 << 1) | b0);
+#endif
+	return id;
+}
+
+void gpio_repear_key_init(void) {
+#ifdef REPEAR_IN_GROUP
+	gpio_init(REPEAR_IN_GROUP, REPEAR_IN_MODE, GPIO_OSPEED_50MHZ, REPEAR_IN_PIN);
+#endif
+}
+static u8 _board_id = BOARD_105_VERSION_4;
 void mc_gpio_init(void) {
 	gpio_mlock_init();
 	gpio_mc_brk_init();
 	gpio_fan_det_init();
 	gpio_led_init();
 	gpio_brk_light_init();
+	gpio_board_id_init();
+	gpio_repear_key_init();
+	int count = 10;
+	do {
+		delay_ms(5);
+		_board_id = gpio_hw_board_id();
+		if (_board_id == BOARD_105_VERSION_3 || _board_id == BOARD_105_VERSION_4) {
+			break;
+		}
+	}while(count-- > 0);
 }
 
+bool gpio_is_repear_mode(void) {
+#ifndef REPEAR_IN_GROUP
+	return false;
+#else
+	return gpio_input_bit_get(REPEAR_IN_GROUP, REPEAR_IN_PIN) == RESET;
+#endif
+}
 
 void gpio_led_enable(bool enable) {
 #ifdef GPIO_LED_OUT_GROUP
@@ -164,6 +204,9 @@ void gpio_brk_light_enable(bool enable) {
 #endif
 }
 
+u8  gpio_board_id(void) {
+	return _board_id;
+}
 
 bool mc_get_gpio_brake(void) {
 	return gpio_input_bit_get(GPIO_BRAKE_IN_GROUP, GPIO_BRAKE_IN_PIN) == SET;
@@ -186,6 +229,8 @@ bool gpio_motor_locked(void) {
 #endif
 }
 
+
+
 void gpio_ir2136_enable(bool enable) {
 #ifdef GD32_FOC_DEMO
 	gpio_bit_write(_pins[IR2136S_Enable_pin].group, _pins[IR2136S_Enable_pin].pin, (enable)?SET:RESET);

+ 2 - 0
Applications/bsp/gd32/gpio.h

@@ -31,5 +31,7 @@ bool gpio_motor_locked(void);
 bool mc_get_gpio_brake1(void);
 void gpio_led_enable(bool enable);
 void gpio_brk_light_enable(bool enable);
+u8  gpio_board_id(void);
+bool gpio_is_repear_mode(void);
 
 #endif /* _GPIO_PIN_H__ */

+ 14 - 4
Applications/foc/motor/current_ics.c

@@ -144,12 +144,22 @@ void phase_current_get(float *iABC){
 #if (CONFIG_HW_VERSION==3)
 #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[0]);
+	if (gpio_board_id() == BOARD_105_VERSION_3) {
+		iABC[0] = -cs->adc_ic * ADC_TO_CURR_ceof2;
+		iABC[2] = -(iABC[1] + iABC[0]);
+	}else {
+		iABC[2] = -cs->adc_ic * ADC_TO_CURR_ceof2;
+		iABC[0] = -(iABC[1] + iABC[2]);
+	}
 #else
 	iABC[1] = -cs->adc_ib * ADC_TO_CURR_ceof1;
-	iABC[2] = -cs->adc_ic * ADC_TO_CURR_ceof2;
-	iABC[0] = -(iABC[1] + iABC[2]);
+	if (gpio_board_id() == BOARD_105_VERSION_3) {
+		iABC[2] = -cs->adc_ic * ADC_TO_CURR_ceof2;
+		iABC[0] = -(iABC[1] + iABC[2]);
+	}else {
+		iABC[0] = -cs->adc_ic * ADC_TO_CURR_ceof2;
+		iABC[2] = -(iABC[1] + iABC[0]);
+	}
 #endif
 #else
 #ifdef CONFIG_PWM_UV_SWAP