Jelajahi Sumber

add board_xxx.h 定义板子相关的硬件资源

Signed-off-by: huhui <huhui@sharkgulf.com>
huhui 3 tahun lalu
induk
melakukan
6f8a0ecc96

+ 0 - 1
Applications/app/app.c

@@ -63,7 +63,6 @@ static void mc_exec_log(void) {
 void app_start(void){
 	set_log_level(MOD_SYSTEM, L_debug);
 	can_message_init();
-	restore_config();
 	mc_init();
 #ifdef GD32_FOC_DEMO	
 	extern void key_init(void);

+ 54 - 34
Applications/app/nv_storage.c

@@ -2,55 +2,75 @@
 #include "bsp/fmc_flash.h"
 #include "libs/crc16.h"
 
-static void mc_config_default(void);
 
-static mc_config_t g_config;
+static motor_params_t m_params;
+static foc_params_t   foc_params;
 
-void config_set_hall_offset(s16 offset) {
-	g_config.hall_offset = offset;
+motor_params_t *nv_get_motor_params(void) {
+	return &m_params;
 }
-
-mc_config_t *mc_config_get(void) {
-	return &g_config;
+foc_params_t *nv_get_foc_params(void) {
+	return &foc_params;
 }
 
-void store_hall_table(s32 *hall_table) {
-	memcpy((char *)g_config.hall_table, (char *)hall_table, sizeof(g_config.hall_table));
-	store_config();
-}
 
-void store_hall_offset(s16 offset) {
-	g_config.hall_offset = offset;
-	store_config();
+void nv_save_hall_table(s32 *hall_table) {
+	memcpy((char *)m_params.hall_table, (char *)hall_table, sizeof(m_params.hall_table));
+	nv_save_motor_params();
 }
 
-void store_config(void) {
-	u16 crc = crc16_get((u8 *)&g_config, sizeof(g_config) - 2);
-	g_config.crc16 = crc;
-	fmc_write_data(0, (u8 *)&g_config, sizeof(g_config));
-	fmc_write_data(1, (u8 *)&g_config, sizeof(g_config));
+void nv_save_hall_offset(s16 offset) {
+	m_params.hall_offset = offset;
+	nv_save_motor_params();
 }
 
-void restore_config(void) {
-	fmc_read_data(0, (u8 *)&g_config, sizeof(g_config));
-	u16 crc0 = crc16_get((u8 *)&g_config, sizeof(g_config) - 2);
-	if (crc0 != g_config.crc16) {
-		fmc_read_data(1, (u8 *)&g_config, sizeof(g_config));
-		crc0 = crc16_get((u8 *)&g_config, sizeof(g_config) - 2);
-		if (crc0 != g_config.crc16) {
-			mc_config_default();
+
+void nv_save_motor_params(void) {
+	u16 crc = crc16_get((u8 *)&m_params, sizeof(m_params) - 2);
+	m_params.crc16 = crc;
+	fmc_write_data(0, (u8 *)&m_params, sizeof(m_params));
+	fmc_write_data(1, (u8 *)&m_params, sizeof(m_params));
+	m_params.valid = true;
+}
+void nv_read_motor_params(void) {
+	fmc_read_data(0, (u8 *)&m_params, sizeof(m_params));
+	u16 crc0 = crc16_get((u8 *)&m_params, sizeof(m_params) - 2);
+	if (crc0 != m_params.crc16) {
+		fmc_read_data(1, (u8 *)&m_params, sizeof(m_params));
+		crc0 = crc16_get((u8 *)&m_params, sizeof(m_params) - 2);
+		if (crc0 != m_params.crc16) {
+			m_params.valid = false;
 			return;
 		}
-		fmc_write_data(0, (u8 *)&g_config, sizeof(g_config));
+		fmc_write_data(0, (u8 *)&m_params, sizeof(m_params));
 	}else {
-		fmc_write_data(1, (u8 *)&g_config, sizeof(g_config));
+		fmc_write_data(1, (u8 *)&m_params, sizeof(m_params));
 	}
+	m_params.valid = true;
+}
+void nv_save_foc_params(void) {
+	u16 crc = crc16_get((u8 *)&foc_params, sizeof(foc_params) - 2);
+	foc_params.crc16 = crc;
+	fmc_write_data(0, (u8 *)&foc_params, sizeof(foc_params));
+	fmc_write_data(1, (u8 *)&foc_params, sizeof(foc_params));
+	foc_params.valid = true;
 }
 
-static void mc_config_default(void) {
-	g_config.hall_offset = 0;
-	for (int i = 0; i < 3; i++) {
-		g_config.phase_op[i].op_i_k = 1;
-		g_config.phase_op[i].op_i_offset = 0;;
+void nv_read_foc_params(void) {
+	fmc_read_data(0, (u8 *)&foc_params, sizeof(foc_params));
+	u16 crc0 = crc16_get((u8 *)&foc_params, sizeof(foc_params) - 2);
+	if (crc0 != foc_params.crc16) {
+		fmc_read_data(1, (u8 *)&foc_params, sizeof(foc_params));
+		crc0 = crc16_get((u8 *)&foc_params, sizeof(foc_params) - 2);
+		if (crc0 != foc_params.crc16) {
+			foc_params.valid = false;
+			return;
+		}
+		fmc_write_data(0, (u8 *)&foc_params, sizeof(foc_params));
+	}else {
+		fmc_write_data(1, (u8 *)&foc_params, sizeof(foc_params));
 	}
+	foc_params.valid = true;
 }
+
+

+ 48 - 13
Applications/app/nv_storage.h

@@ -5,24 +5,59 @@
 #pragma  pack (push,1)
 
 typedef struct {
-	int op_i_k; /* 斜率 */
-	int op_i_offset; /* 截距 */
-}op_cali_t;
+	float s_maxIdq;
+	float s_minIdq;
+	float s_maxiDC;
+	float s_maxvDC;
+	float s_maxRPM;
+	float n_modulation;
+	float n_PhaseFilterCeof;
+	float n_currentBand; //电流环带宽
+	float spd_kp;
+	float spd_ki;
+	float trq_kp;
+	float trq_ki;
+	float fw_baseSpd;   //弱磁基速
+	float fw_kp;
+	float fw_ki;
+	u16   crc16;
+	bool  valid;
+}foc_params_t;
 
 typedef struct {
-	s16 hall_offset; /* hall 和A相之间的电角度偏移量 */
+	u8 poles;
+	float r;
+	float ld;
+	float lq;
+	float flux_lingage;
+	float back_emf;
+	s16   hall_offset;
 	s32 hall_table[8];
-	op_cali_t phase_op[3]; /* 三相电流采集的校准系数 */
-	u16 crc16;
-}mc_config_t;
+	u16   encoder_cpr;
+	float est_pll_band;
+	u16   crc16;
+	bool  valid;
+}motor_params_t;
+
+#define MAX_TRQ_POINTS 60
+#define MAX_SPD_POINTS 100
+
+typedef struct {
+	s16  d[MAX_TRQ_POINTS][MAX_SPD_POINTS];
+	s16  q[MAX_TRQ_POINTS][MAX_SPD_POINTS];
+	u16  crc16;
+}torque_lut_t;
+
 #pragma pack(pop)
 
-mc_config_t *mc_config_get(void);
-void config_set_hall_offset(s16 offset);
-void store_config(void);
-void restore_config(void);
-void store_hall_table(s32 *hall_table);
-void store_hall_offset(s16 offset);
+motor_params_t *nv_get_motor_params(void);
+foc_params_t *nv_get_foc_params(void);
+void nv_save_hall_offset(s16 offset);
+void nv_save_motor_params(void);
+void nv_read_motor_params(void);
+void nv_save_foc_params(void);
+void nv_read_foc_params(void);
+void nv_save_hall_table(s32 *hall_table);
 
 #endif /* _NV_Storage_H__ */
 

+ 14 - 14
Applications/bsp/adc.c

@@ -124,24 +124,24 @@ static void adc1_init(void){
 }
 
 static void adc_gpio_init(void) {
-	rcu_periph_clock_enable(RCU_GPIOA);
-	rcu_periph_clock_enable(RCU_GPIOB);
+	rcu_periph_clock_enable(U_PHASE_ADC_RCU);
+	rcu_periph_clock_enable(V_PHASE_ADC_RCU);
+	rcu_periph_clock_enable(W_PHASE_ADC_RCU);
 	rcu_periph_clock_enable(RCU_AF);
-#ifdef GD32_FOC_DEMO
+#ifdef VBUS_V_ADC_GROUP
+	rcu_periph_clock_enable(VBUS_V_ADC_RCU);
 	/* configure ADC pin, bus voltage sampling -- ADC_IN0(PA0) */
-	gpio_init(GPIOA, GPIO_MODE_AIN, GPIO_OSPEED_50MHZ, GPIO_PIN_0);
-
+	gpio_init(VBUS_V_ADC_GROUP, VBUS_V_ADC_MODE, GPIO_OSPEED_50MHZ, VBUS_V_ADC_PIN);
+#endif
+#ifdef TEMP_V_ADC_GROUP
+	rcu_periph_clock_enable(TEMP_V_ADC_GROUP);
 	/* configure ADC pin, temperature sampling -- ADC_IN11(PC1) */
-	gpio_init(GPIOC, GPIO_MODE_AIN, GPIO_OSPEED_50MHZ, GPIO_PIN_1);
-
+	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) */
-	gpio_init(GPIOA, GPIO_MODE_AIN, GPIO_OSPEED_50MHZ, GPIO_PIN_1);
-	gpio_init(GPIOC, GPIO_MODE_AIN, GPIO_OSPEED_50MHZ, GPIO_PIN_2);
-	gpio_init(GPIOC, GPIO_MODE_AIN, GPIO_OSPEED_50MHZ, GPIO_PIN_3);
-#else
-	gpio_init(GPIOA, GPIO_MODE_AIN, GPIO_OSPEED_50MHZ, GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7);
-	gpio_init(GPIOB, GPIO_MODE_AIN, GPIO_OSPEED_50MHZ, GPIO_PIN_0|GPIO_PIN_1);
-#endif	
+	gpio_init(U_PHASE_ADC_GROUP, U_PHASE_ADC_MODE, GPIO_OSPEED_50MHZ, U_PHASE_ADC_PIN);
+	gpio_init(V_PHASE_ADC_GROUP, V_PHASE_ADC_MODE, GPIO_OSPEED_50MHZ, V_PHASE_ADC_PIN);
+	gpio_init(W_PHASE_ADC_GROUP, W_PHASE_ADC_MODE, GPIO_OSPEED_50MHZ, W_PHASE_ADC_PIN);	
 }
 
 void adc_init(void) {

+ 0 - 20
Applications/bsp/adc.h

@@ -8,26 +8,6 @@ inserted ADC 由timer0 ch3触发,
 注意:adc所有外部触发都是下降沿触发 
 */
 
-#ifdef GD32_FOC_DEMO
-#define U_PHASE_I_CHAN  ADC_CHANNEL_1
-#define V_PHASE_I_CHAN  ADC_CHANNEL_12
-#define W_PHASE_I_CHAN  ADC_CHANNEL_13
-
-#define MOTOR_TEMP_CHAN ADC_CHANNEL_11
-#define VBUS_V_CHAN 	ADC_CHANNEL_0
-#define THROTTLE_CHAN   ADC_CHANNEL_2 
-#else
-#define MOTOR_TEMP_CHAN ADC_CHANNEL_0
-#define THROTTLE_CHAN ADC_CHANNEL_1 //转把信号
-#define VBUS_V_CHAN 	ADC_CHANNEL_2
-#define W_PHASE_V_CHAN  ADC_CHANNEL_3
-#define V_PHASE_V_CHAN  ADC_CHANNEL_4
-#define U_PHASE_V_CHAN  ADC_CHANNEL_5
-#define W_PHASE_I_CHAN  ADC_CHANNEL_6
-#define V_PHASE_I_CHAN  ADC_CHANNEL_7
-#define U_PHASE_I_CHAN  ADC_CHANNEL_8
-#define VBUS_I_CHAN     ADC_CHANNEL_9
-#endif
 #define ISQ2_OFFSET 10
 #define ISO3_OFFSET 15
 #define IL_OFFSET   20

+ 142 - 0
Applications/bsp/board_gd32demo.h

@@ -0,0 +1,142 @@
+#ifndef _BOARD_GD32DEMO_H__
+#define _BOARD_GD32DEMO_H__
+#if defined (GD32F30X_HD) || defined (GD32F30X_XD) || defined (GD32F30X_CL)
+#include "gd32f30x.h"
+#elif defined GD32E10x
+#include "gd32e10x.h"
+#endif
+
+/* mos 参数,电流采集需要 */
+#define MOSDEV_DLY      550U
+#define MOSDRV_DT_NS     400U
+#define HW_DEAD_TIME_NS  (MOSDEV_DLY+MOSDRV_DT_NS)
+#define HW_RISE_TIME_NS  500u
+#define HW_NOISE_TIME_NS 500u
+
+#define TDead NS_2_TCLK(HW_DEAD_TIME_NS)/* ����ʱ�� */ 
+#define TRise NS_2_TCLK(HW_RISE_TIME_NS)/* MOS ����ʱ��*/
+#define TNoise NS_2_TCLK(HW_NOISE_TIME_NS)/* MOS��������Ŀ�������ʱ�� */
+#define TADC  ((uint16_t)((ADC_TRIG_CONV_LATENCY_CYCLES + ADC_SAMPLING_CYCLES) * TIM_CLOCK_MHz) / ADC_CLOCK_MHz + 1u)/* ADC ����ʱ�� */
+#define TSampleMIN (TDead + TRise + TADC) //采样需要的总时间
+#define TSampleBefore (TDead + TRise) //采样开始前需要等待的时间
+
+#define ADC_REFERENCE_VOLTAGE  (3.3F)
+
+/* MOS 驱动 */
+#define pwm_timer TIMER0
+#define PWM_U_P_GROUP 	GPIOA
+#define PWM_U_P_PIN 	GPIO_PIN_8
+#define PWM_U_P_RCU 	RCU_GPIOA
+#define PWM_U_P_MODE 	GPIO_MODE_AF_PP
+
+#define PWM_U_N_GROUP 	GPIOB
+#define PWM_U_N_PIN 	GPIO_PIN_13
+#define PWM_U_N_RCU 	RCU_GPIOB
+#define PWM_U_N_MODE 	GPIO_MODE_AF_PP
+
+#define PWM_V_P_GROUP 	GPIOA
+#define PWM_V_P_PIN 	GPIO_PIN_9
+#define PWM_V_P_RCU 	RCU_GPIOA
+#define PWM_V_P_MODE 	GPIO_MODE_AF_PP
+
+#define PWM_V_N_GROUP 	GPIOB
+#define PWM_V_N_PIN 	GPIO_PIN_14
+#define PWM_V_N_RCU 	RCU_GPIOB
+#define PWM_V_N_MODE 	GPIO_MODE_AF_PP
+
+#define PWM_W_P_GROUP 	GPIOA
+#define PWM_W_P_PIN 	GPIO_PIN_10
+#define PWM_W_P_RCU 	RCU_GPIOA
+#define PWM_W_P_MODE 	GPIO_MODE_AF_PP
+
+#define PWM_W_N_GROUP 	GPIOB
+#define PWM_W_N_PIN 	GPIO_PIN_15
+#define PWM_W_N_RCU 	RCU_GPIOB
+#define PWM_W_N_MODE 	GPIO_MODE_AF_PP
+
+/* 三电阻采样 */
+#define SHUNT_NUM 			THREE_SHUNTS_SAMPLE
+#define U_PHASE_I_CHAN  	ADC_CHANNEL_1
+#define V_PHASE_I_CHAN  	ADC_CHANNEL_12
+#define W_PHASE_I_CHAN  	ADC_CHANNEL_13
+
+#define U_PHASE_ADC_GROUP 	GPIOA
+#define U_PHASE_ADC_PIN 	GPIO_PIN_1
+#define U_PHASE_ADC_RCU 	RCU_GPIOA
+#define U_PHASE_ADC_MODE 	GPIO_MODE_AIN
+
+#define V_PHASE_ADC_GROUP 	GPIOC
+#define V_PHASE_ADC_PIN 	GPIO_PIN_2
+#define V_PHASE_ADC_RCU 	RCU_GPIOC
+#define V_PHASE_ADC_MODE 	GPIO_MODE_AIN
+
+#define W_PHASE_ADC_GROUP 	GPIOC
+#define W_PHASE_ADC_PIN 	GPIO_PIN_3
+#define W_PHASE_ADC_RCU 	RCU_GPIOC
+#define W_PHASE_ADC_MODE 	GPIO_MODE_AIN
+
+/* 温度,母线,油门等采集*/
+#define MOTOR_TEMP_CHAN 	ADC_CHANNEL_11
+
+#define VBUS_V_CHAN 		ADC_CHANNEL_0
+#define VBUS_V_ADC_GROUP 	GPIOA
+#define VBUS_V_ADC_PIN 		GPIO_PIN_0
+#define VBUS_V_ADC_RCU 		RCU_GPIOA
+#define VBUS_V_ADC_MODE 	GPIO_MODE_AIN
+
+#define THROTTLE_CHAN   ADC_CHANNEL_2 
+
+/* 是否有目前电流采集 */
+#define NO_SAMPLE_IDC //如果硬件没有采集母线电流,定义一下
+
+/* ADC 的电压系数 */
+#define ADC_TO_CURR_ceof (0.008f)
+#define VBUS_VOL_CEOF (ADC_REFERENCE_VOLTAGE*16/4096.0f)
+#define THROTTLE_VOL_CEOF (1)
+
+/* 是否用编码器 */
+#define USE_ENCODER_ABI
+
+#define USER_ITMER_BRAKE 0
+
+/* 编码器 */
+#define ENC_A_GROUP GPIOA
+#define ENC_A_PIN GPIO_PIN_6
+#define ENC_A_RCU RCU_GPIOA
+#define ENC_A_MODE GPIO_MODE_IN_FLOATING
+
+#define ENC_B_GROUP GPIOA
+#define ENC_B_PIN GPIO_PIN_7
+#define ENC_B_RCU RCU_GPIOA
+#define ENC_B_MODE GPIO_MODE_IN_FLOATING
+
+#define ENC_PWM_GROUP GPIOB
+#define ENC_PWM_PIN GPIO_PIN_6
+#define ENC_PWM_RCU RCU_GPIOB
+#define ENC_PWM_MODE GPIO_MODE_IN_FLOATING
+
+#define ENC_I_GROUP GPIOB     /*测量编码器的ABI的I信号,360度同步一次*/
+#define ENC_I_PIN GPIO_PIN_0
+#define ENC_I_RCU RCU_GPIOB
+#define ENC_I_MODE GPIO_MODE_IPU
+#define ENC_I_IRQ  EXTI0_IRQn
+#define ENC_I_EXTI EXTI_0
+#define ENC_I_EXIT_SRC_GROUP GPIO_PORT_SOURCE_GPIOB
+#define ENC_I_EXIT_SRC_PIN GPIO_PIN_SOURCE_0
+
+#define ENC_TIMER TIMER2  /* 测量编码器的ABI信号的AB信号 */
+#define ENC_TIMER_RCU RCU_TIMER2
+#define ENC_TIMER_IRQ TIMER2_IRQn
+#define ENC_TIMER_IRQHandler TIMER2_IRQHandler
+
+#define ENC_PWM_TIMER TIMER3    /* 测量绝对编码器PWM输出的占空比,获取转子angle*/
+#define ENC_PWM_TIMER_RCU RCU_TIMER3
+#define ENC_PWM_TIMER_IRQ TIMER3_IRQn
+#define ENC_PWM_TIMER_CHAN  TIMER_CH_0
+#define ENC_PWM_TIMER_IRQ_CH TIMER_INT_CH0
+#define ENC_PWM_TIMER_INT_FLG TIMER_INT_FLAG_CH0
+#define ENC_PWM_IRQHandler TIMER3_IRQHandler
+
+
+#endif /*_BOARD_GD32DEMO_H__ */
+

+ 46 - 0
Applications/bsp/board_mc_v1.h

@@ -0,0 +1,46 @@
+#ifndef _BOARD_MC_V1_H__
+#define _BOARD_MC_V1_H__
+#if defined (GD32F30X_HD) || defined (GD32F30X_XD) || defined (GD32F30X_CL)
+#include "gd32f30x.h"
+#elif defined GD32E10x
+#include "gd32e10x.h"
+#endif
+
+#define HW_DEAD_TIME_NS  1200u
+#define HW_RISE_TIME_NS  500u
+#define HW_NOISE_TIME_NS 500u
+
+#define TDead NS_2_TCLK(HW_DEAD_TIME_NS)/* ����ʱ�� */ 
+#define TRise NS_2_TCLK(HW_RISE_TIME_NS)/* MOS ����ʱ��*/
+#define TNoise NS_2_TCLK(HW_NOISE_TIME_NS)/* MOS��������Ŀ�������ʱ�� */
+#define TADC  ((uint16_t)((ADC_TRIG_CONV_LATENCY_CYCLES + ADC_SAMPLING_CYCLES) * TIM_CLOCK_MHz) / ADC_CLOCK_MHz + 1u)/* ADC ����ʱ�� */
+#define TSampleMIN (TDead + TRise + TADC) //采样需要的总时间
+#define TSampleBefore (TDead + TRise) //采样开始前需要等待的时间
+
+#define ADC_REFERENCE_VOLTAGE  (3.3F)
+
+#define pwm_timer TIMER0
+
+/* 三电阻采样 */
+#define SHUNT_NUM THREE_SHUNTS_SAMPLE
+#define W_PHASE_I_CHAN  ADC_CHANNEL_6
+#define V_PHASE_I_CHAN  ADC_CHANNEL_7
+#define U_PHASE_I_CHAN  ADC_CHANNEL_8
+
+/* 温度,母线,油门等采集*/
+#define MOTOR_TEMP_CHAN ADC_CHANNEL_0
+#define THROTTLE_CHAN ADC_CHANNEL_1 //转把信号
+#define VBUS_V_CHAN 	ADC_CHANNEL_2
+#define W_PHASE_V_CHAN  ADC_CHANNEL_3
+#define V_PHASE_V_CHAN  ADC_CHANNEL_4
+#define U_PHASE_V_CHAN  ADC_CHANNEL_5
+#define VBUS_I_CHAN     ADC_CHANNEL_9
+
+#define ADC_TO_CURR_ceof (0.0942f)
+#define VBUS_VOL_CEOF (ADC_REFERENCE_VOLTAGE*45/4096.0f)
+#define THROTTLE_VOL_CEOF (1)
+
+#define USE_ENCODER_HALL
+
+#endif /*_BOARD_MC_V1_H__ */
+

+ 2 - 47
Applications/bsp/bsp.h

@@ -13,8 +13,6 @@
 #include "bsp/fmc_flash.h"
 #include "bsp/can.h"
 
-//#define GD32_FOC_DEMO
-#define USER_ITMER_BRAKE 0
 
 #define SYSTEM_CLOCK (120000000u) //system clk 120M Hz
 #define TIM_CLOCK (SYSTEM_CLOCK) /*SystemClock_Config��TIM1��clk��sys PLL �������̶�2����PLLƵ��*/
@@ -32,35 +30,6 @@
 #define ADC_TRIG_CONV_LATENCY_CYCLES 12.5f
 #define ADC_SAMPLING_CYCLES 7.5f
 
-#ifdef GD32_FOC_DEMO
-#define MOSDEV_DLY      550U
-#define MOSDRV_DT_NS     400U
-#define HW_DEAD_TIME_NS  (MOSDEV_DLY+MOSDRV_DT_NS)
-#define HW_RISE_TIME_NS  500u
-#define HW_NOISE_TIME_NS 500u
-#else
-#define HW_DEAD_TIME_NS  1200u
-#define HW_RISE_TIME_NS  500u
-#define HW_NOISE_TIME_NS 500u
-#endif
-#define TDead NS_2_TCLK(HW_DEAD_TIME_NS)/* ����ʱ�� */ 
-#define TRise NS_2_TCLK(HW_RISE_TIME_NS)/* MOS ����ʱ��*/
-#define TNoise NS_2_TCLK(HW_NOISE_TIME_NS)/* MOS��������Ŀ�������ʱ�� */
-#define TADC  ((uint16_t)((ADC_TRIG_CONV_LATENCY_CYCLES + ADC_SAMPLING_CYCLES) * TIM_CLOCK_MHz) / ADC_CLOCK_MHz + 1u)/* ADC ����ʱ�� */
-#define TSampleMIN (TDead + TRise + TADC) //采样需要的总时间
-#define TSampleBefore (TDead + TRise) //采样开始前需要等待的时间
-
-
-#define START_RAMP_DURATION (2000)//ms
-#define SPEED_SAMPLE_INVAL (100) //ת�Ѳɼ��ļ��,ms
-#define SPEED_RAMP_DURATION SPEED_SAMPLE_INVAL //�����ٶȵ�б��ʱ�䣬�ٶ�ƽ���������½�
-
-#define ADC_REFERENCE_VOLTAGE  (3.3F)
-
-#define pwm_timer TIMER0
-#define adc_timer TIMER1
-#define aux_timer TIMER2
-
 #define TIMER_UP_IRQ_PRIORITY 0
 #define ADC_IRQ_PRIORITY 1
 #define HALL_IRQ_PRIORITY 2
@@ -72,29 +41,15 @@
 #define ENC_TIMER_IRQ_PRIORITY 2
 #define ENC_PWM_IRQ_PRIORITY 2
 #define ENC_I_EXIT_IRQ_PRIORITY 2
-//#define ENABLE_PWM_UP_IRQ 1
 
 #define THREE_SHUNTS_SAMPLE 1
 #define ONE_SHUNT_SAMPLE 2
 
-#define SHUNT_NUM THREE_SHUNTS_SAMPLE
-
-//#define ENABLE_AUX_TIMER 1
-
-#define NO_SAMPLE_IDC //如果硬件没有采集母线电流,定义一下
-
 #ifdef GD32_FOC_DEMO
-#define ADC_TO_CURR_ceof (0.008f)
-#define VBUS_VOL_CEOF (ADC_REFERENCE_VOLTAGE*16/4096.0f)
+#include "bsp/board_gd32demo.h"
 #else
-#define ADC_TO_CURR_ceof (0.0942f)
-#define VBUS_VOL_CEOF (ADC_REFERENCE_VOLTAGE*45/4096.0f)
-#define THROTTLE_VOL_CEOF (1)
+#include "bsp/board_mc_v1.h"
 #endif
-
-#define USE_ENCODER_ABI
-//#define USE_ENCODER_HALL
-
 void bsp_init(void);
 void wdog_reload(void);
 void system_reboot(void);

+ 0 - 46
Applications/bsp/enc_intf.h

@@ -5,52 +5,6 @@
 
 #define PWM_TIME_CLK 10000000U
 
-#ifdef GD32_FOC_DEMO
-#define ENC_A_GROUP GPIOA
-#define ENC_A_PIN GPIO_PIN_6
-#define ENC_A_RCU RCU_GPIOA
-#define ENC_A_MODE GPIO_MODE_IN_FLOATING
-
-#define ENC_B_GROUP GPIOA
-#define ENC_B_PIN GPIO_PIN_7
-#define ENC_B_RCU RCU_GPIOA
-#define ENC_B_MODE GPIO_MODE_IN_FLOATING
-
-#define ENC_PWM_GROUP GPIOB
-#define ENC_PWM_PIN GPIO_PIN_6
-#define ENC_PWM_RCU RCU_GPIOB
-#define ENC_PWM_MODE GPIO_MODE_IN_FLOATING
-
-#define ENC_I_GROUP GPIOB     /*测量编码器的ABI的I信号,360度同步一次*/
-#define ENC_I_PIN GPIO_PIN_0
-#define ENC_I_RCU RCU_GPIOB
-#define ENC_I_MODE GPIO_MODE_IPU
-#define ENC_I_IRQ  EXTI0_IRQn
-#define ENC_I_EXTI EXTI_0
-#define ENC_I_EXIT_SRC_GROUP GPIO_PORT_SOURCE_GPIOB
-#define ENC_I_EXIT_SRC_PIN GPIO_PIN_SOURCE_0
-
-#define ENC_TIMER TIMER2  /* 测量编码器的ABI信号的AB信号 */
-#define ENC_TIMER_RCU RCU_TIMER2
-#define ENC_TIMER_IRQ TIMER2_IRQn
-#define ENC_TIMER_IRQHandler TIMER2_IRQHandler
-
-#define ENC_PWM_TIMER TIMER3    /* 测量绝对编码器PWM输出的占空比,获取转子angle*/
-#define ENC_PWM_TIMER_RCU RCU_TIMER3
-#define ENC_PWM_TIMER_IRQ TIMER3_IRQn
-#define ENC_PWM_TIMER_CHAN  TIMER_CH_0
-#define ENC_PWM_TIMER_IRQ_CH TIMER_INT_CH0
-#define ENC_PWM_TIMER_INT_FLG TIMER_INT_FLAG_CH0
-#define ENC_PWM_IRQHandler TIMER3_IRQHandler
-
-#else
-#define ENC_A_GROUP GPIOB
-#define ENC_A_PIN GPIO_PIN_8
-#define ENC_B_GROUP GPIOB
-#define ENC_B_PIN GPIO_PIN_7
-#define ENC_PWM_GROUP GPIOB
-#define ENC_PWM_PIN GPIO_PIN_6
-#endif
 
 #define ENC_DIR_UP 1
 #define ENC_DIR_DOWN 2

+ 14 - 10
Applications/bsp/pwm.c

@@ -58,20 +58,24 @@ static rcu_periph_enum _rcu_clk(u32 timer) {
 
 static void _pwm_gpio_config(void)
 {
-    rcu_periph_clock_enable(RCU_GPIOA);
-    rcu_periph_clock_enable(RCU_GPIOB);
+    rcu_periph_clock_enable(PWM_U_P_RCU);
+    rcu_periph_clock_enable(PWM_V_P_RCU);
+	rcu_periph_clock_enable(PWM_W_P_RCU);
+    rcu_periph_clock_enable(PWM_U_N_RCU);
+    rcu_periph_clock_enable(PWM_V_N_RCU);
+	rcu_periph_clock_enable(PWM_W_N_RCU);	
     rcu_periph_clock_enable(RCU_AF);
-	//gpio_pin_remap_config(GPIO_TIMER0_PARTIAL_REMAP, ENABLE);
-	//gpio_pin_remap_config(GPIO_TIMER0_FULL_REMAP, DISABLE);
+
     /*configure PA8 PA9 PA10(TIMER0 CH0 CH1 CH2) as alternate function*/
-    gpio_init(GPIOA,GPIO_MODE_AF_PP,GPIO_OSPEED_50MHZ,GPIO_PIN_8);
-    gpio_init(GPIOA,GPIO_MODE_AF_PP,GPIO_OSPEED_50MHZ,GPIO_PIN_9);
-    gpio_init(GPIOA,GPIO_MODE_AF_PP,GPIO_OSPEED_50MHZ,GPIO_PIN_10);
+    gpio_init(PWM_U_P_GROUP,PWM_U_P_MODE,GPIO_OSPEED_50MHZ,PWM_U_P_PIN);
+    gpio_init(PWM_V_P_GROUP,PWM_V_P_MODE,GPIO_OSPEED_50MHZ,PWM_V_P_PIN);
+    gpio_init(PWM_W_P_GROUP,PWM_W_P_MODE,GPIO_OSPEED_50MHZ,PWM_W_P_PIN);
 
     /*configure PB13 PB14 PB15(TIMER0 CH0N CH1N CH2N) as alternate function*/
-    gpio_init(GPIOB,GPIO_MODE_AF_PP,GPIO_OSPEED_50MHZ,GPIO_PIN_13);
-    gpio_init(GPIOB,GPIO_MODE_AF_PP,GPIO_OSPEED_50MHZ,GPIO_PIN_14);
-    gpio_init(GPIOB,GPIO_MODE_AF_PP,GPIO_OSPEED_50MHZ,GPIO_PIN_15);
+    gpio_init(PWM_U_N_GROUP,PWM_U_N_MODE,GPIO_OSPEED_50MHZ,PWM_U_N_PIN);
+    gpio_init(PWM_V_N_GROUP,PWM_V_N_MODE,GPIO_OSPEED_50MHZ,PWM_V_N_PIN);
+    gpio_init(PWM_W_N_GROUP,PWM_W_N_MODE,GPIO_OSPEED_50MHZ,PWM_W_N_PIN);
+
 	/*configure BRAKE IN*/
 #if USER_ITMER_BRAKE==1
 #ifdef GD32_FOC_DEMO

+ 0 - 16
Applications/foc/motor/encoder.h

@@ -26,22 +26,6 @@ typedef struct {
 	float rpm;
 }encoder_t;
 
-#define ENC_MAX_RES  4096
-/*min. 490 Hz, max 603 Hz*/
-#define ENC_PWM_Max_P (1.0f/490.0f)
-#define ENC_PWM_Min_P (1.0f/603.0f)
-
-#define ENC_PWM_MAX_RES 4119.0F
-#define ENC_PWM_INIT_WIDTH 12.0F //PWM 起始宽度
-#define ENC_PWM_ERROR_WIDTH 4.0f //PWM 指示错误的宽度
-#define ENC_PWM_END_WIDTH   0.0F
-#define ENC_PWM_Error_P (ENC_PWM_INIT_WIDTH/ENC_PWM_MAX_RES)
-#define ENC_PWM_MIN_duty ((ENC_PWM_INIT_WIDTH + ENC_PWM_ERROR_WIDTH + ENC_PWM_END_WIDTH)/ENC_PWM_MAX_RES)
-
-#define ENC_Duty_2_Pluse_Nr(duty) (duty * ENC_PWM_MAX_RES - (ENC_PWM_INIT_WIDTH + ENC_PWM_ERROR_WIDTH + ENC_PWM_END_WIDTH)) //通过占空比计算有几个脉冲
-#define ENC_Pluse_Nr_2_angle(Nr) (360.0f/(float)ENC_MAX_RES * (Nr))
-
-
 void encoder_init(void);
 void encoder_init_clear(s8 direction);
 float encoder_get_theta(void);

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

@@ -88,7 +88,7 @@ static void hall_sensor_default(s8 direction) {
 	memset(&_sensor_hander, 0, sizeof(_sensor_hander));
 	_sensor_hander.phase_offset = HALL_PLACE_OFFSET;//mc_config_get()->hall_offset;
 	for (int i = 0; i < 8; i++) {
-		_sensor_hander.angle_table[i] = (mc_config_get()->hall_table[i]);
+		_sensor_hander.angle_table[i] = (nv_get_motor_params()->hall_table[i]);
 	}
 	_sensor_hander.manual_angle = 0x3FF;
 	_sensor_hander.direction = direction;
@@ -219,7 +219,7 @@ bool hall_detect_angle_finish(void) {
 		}
 	}
 	if (fails == 2) {
-		store_hall_table(_sensor_hander.angle_table);
+		nv_save_hall_table(_sensor_hander.angle_table);
 	}
 	memset(sin_hall, 0, sizeof(sin_hall));
 	memset(cos_hall, 0, sizeof(cos_hall));

+ 18 - 14
Applications/foc/motor/motor_param.h

@@ -12,19 +12,23 @@
 #define MOTOR_Ld 0.000032f
 #define MOTOR_Lq 0.000032f
 #define MOTOR_POLES  10
-
-/*
-#define MOTOR_R   0.67f//0.33F
-#define MOTOR_Ld   0.00149f//0.00136F
-#define MOTOR_Lq   0.00149f//0.00136F
-#define MOTOR_POLES     2
-*/
 #endif
-/*
-编码器电机 3505
-#define MOTOR_R 0.08f
-#define MOTOR_Ld 0.000032f
-#define MOTOR_Lq 0.000032f
-#define MOTOR_POLES  10
-*/
+
+/* 编码器参数      */
+#define ENC_MAX_RES  4096
+/*min. 490 Hz, max 603 Hz*/
+#define ENC_PWM_Max_P (1.0f/490.0f)
+#define ENC_PWM_Min_P (1.0f/603.0f)
+
+#define ENC_PWM_MAX_RES 4119.0F
+#define ENC_PWM_INIT_WIDTH 12.0F //PWM 起始宽度
+#define ENC_PWM_ERROR_WIDTH 4.0f //PWM 指示错误的宽度
+#define ENC_PWM_END_WIDTH   0.0F
+#define ENC_PWM_Error_P (ENC_PWM_INIT_WIDTH/ENC_PWM_MAX_RES)
+#define ENC_PWM_MIN_duty ((ENC_PWM_INIT_WIDTH + ENC_PWM_ERROR_WIDTH + ENC_PWM_END_WIDTH)/ENC_PWM_MAX_RES)
+
+#define ENC_Duty_2_Pluse_Nr(duty) (duty * ENC_PWM_MAX_RES - (ENC_PWM_INIT_WIDTH + ENC_PWM_ERROR_WIDTH + ENC_PWM_END_WIDTH)) //通过占空比计算有几个脉冲
+#define ENC_Pluse_Nr_2_angle(Nr) (360.0f/(float)ENC_MAX_RES * (Nr))
+
+
 #endif /* _MOTOR_PARAM_H__ */

+ 1 - 2
Project/GD32_DEMO.uvoptx

@@ -120,8 +120,7 @@
         <SetRegEntry>
           <Number>0</Number>
           <Key>DLGUARM</Key>
-          <Name>
-</Name>        </SetRegEntry>
+        </SetRegEntry>
         <SetRegEntry>
           <Number>0</Number>
           <Key>ARMRTXEVENTFLAGS</Key>