Browse Source

nv storage update

Signed-off-by: huhui <huhui@sharkgulf.com>
huhui 3 years ago
parent
commit
657c9c9b4c

+ 1 - 0
Applications/app/app.c

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

+ 52 - 18
Applications/app/nv_storage.c

@@ -1,6 +1,7 @@
 #include "app/nv_storage.h"
 #include "bsp/fmc_flash.h"
 #include "libs/crc16.h"
+#include "foc/motor/motor_param.h"
 
 
 static motor_params_t m_params;
@@ -25,52 +26,85 @@ void nv_save_hall_offset(s16 offset) {
 }
 
 
+static void nv_default_motor_params(void) {
+	m_params.poles = MOTOR_POLES;
+	m_params.r = MOTOR_R;
+	m_params.ld = MOTOR_Ld;
+	m_params.lq = MOTOR_Lq;
+	m_params.encoder_cpr = 4096;
+	m_params.est_pll_band = 200;
+	m_params.flux_linkage = 0.0f;
+	m_params.hall_offset = 0;
+}
+
+static void nv_default_foc_params(void) {
+	foc_params.s_maxvDC = 16;
+	foc_params.s_maxiDC = 10;
+	foc_params.s_maxIdq = 20;
+	foc_params.s_minIdq = -20;
+	foc_params.s_maxRPM = 8200;
+	foc_params.s_maxTorque = 15;
+	foc_params.n_currentBand = 500;
+	foc_params.n_modulation = 1.0f;
+	foc_params.n_PhaseFilterCeof = 0.2f;
+	foc_params.spd_kp = 0.001f;
+	foc_params.spd_ki = 0.01;
+	foc_params.trq_kp = 0.001f;
+	foc_params.trq_ki = 0.01;
+	foc_params.fw_kp = 0.1f;
+	foc_params.fw_ki = 0.01;
+	foc_params.fw_baseSpd = 5000;
+}
+
 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;
+	fmc_write_data(motorParam_idx_0, (u8 *)&m_params, sizeof(m_params));
+	fmc_write_data(motorParam_idx_1, (u8 *)&m_params, sizeof(m_params));
 }
 void nv_read_motor_params(void) {
-	fmc_read_data(0, (u8 *)&m_params, sizeof(m_params));
+	fmc_read_data(motorParam_idx_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));
+		fmc_read_data(motorParam_idx_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;
+			nv_default_motor_params();
+			nv_save_motor_params();
 			return;
 		}
-		fmc_write_data(0, (u8 *)&m_params, sizeof(m_params));
+		fmc_write_data(motorParam_idx_0, (u8 *)&m_params, sizeof(m_params));
 	}else {
-		fmc_write_data(1, (u8 *)&m_params, sizeof(m_params));
+		fmc_write_data(motorParam_idx_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;
+	fmc_write_data(focParam_idx_0, (u8 *)&foc_params, sizeof(foc_params));
+	fmc_write_data(focParam_idx_1, (u8 *)&foc_params, sizeof(foc_params));
 }
 
 void nv_read_foc_params(void) {
-	fmc_read_data(0, (u8 *)&foc_params, sizeof(foc_params));
+	fmc_read_data(focParam_idx_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));
+		fmc_read_data(focParam_idx_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;
+			nv_default_foc_params();
+			nv_save_foc_params();
 			return;
 		}
-		fmc_write_data(0, (u8 *)&foc_params, sizeof(foc_params));
+		fmc_write_data(focParam_idx_0, (u8 *)&foc_params, sizeof(foc_params));
 	}else {
-		fmc_write_data(1, (u8 *)&foc_params, sizeof(foc_params));
+		fmc_write_data(focParam_idx_1, (u8 *)&foc_params, sizeof(foc_params));
 	}
-	foc_params.valid = true;
 }
 
 
+void nv_storage_init(void) {
+	nv_read_motor_params();
+	nv_read_foc_params();
+}
+

+ 8 - 3
Applications/app/nv_storage.h

@@ -10,6 +10,7 @@ typedef struct {
 	float s_maxiDC;
 	float s_maxvDC;
 	float s_maxRPM;
+	float s_maxTorque;
 	float n_modulation;
 	float n_PhaseFilterCeof;
 	float n_currentBand; //电流环带宽
@@ -21,7 +22,6 @@ typedef struct {
 	float fw_kp;
 	float fw_ki;
 	u16   crc16;
-	bool  valid;
 }foc_params_t;
 
 typedef struct {
@@ -29,14 +29,13 @@ typedef struct {
 	float r;
 	float ld;
 	float lq;
-	float flux_lingage;
+	float flux_linkage;
 	float back_emf;
 	s16   hall_offset;
 	s32 hall_table[8];
 	u16   encoder_cpr;
 	float est_pll_band;
 	u16   crc16;
-	bool  valid;
 }motor_params_t;
 
 #define MAX_TRQ_POINTS 60
@@ -50,6 +49,12 @@ typedef struct {
 
 #pragma pack(pop)
 
+#define motorParam_idx_0 3
+#define motorParam_idx_1 (motorParam_idx_0 + 1)
+#define focParam_idx_0 (motorParam_idx_0 + 2)
+#define focParam_idx_1 (motorParam_idx_0 + 3)
+
+void nv_storage_init(void);
 motor_params_t *nv_get_motor_params(void);
 foc_params_t *nv_get_foc_params(void);
 void nv_save_hall_offset(s16 offset);

+ 4 - 3
Applications/bsp/fmc_flash.c

@@ -8,9 +8,10 @@
 #endif
 
 #define one_page_size 2048
-#define sn_page_index 4
-#define data_bk_page_index 3
-#define data_page_index 2
+
+#define data_bk_page_index 4
+#define data_page_index 3
+#define sn_page_index 2
 #define magic_page_index 1 //must is the last page in 256K eara
 static void _fmc_write_data(uint32_t addr, uint8_t *data, int len);
 static void _fmc_read_data(uint32_t addr, uint8_t *data, int len);

+ 1 - 0
Project/GD32_DEMO.uvoptx

@@ -120,6 +120,7 @@
         <SetRegEntry>
           <Number>0</Number>
           <Key>DLGUARM</Key>
+          <Name>&amp;</Name>
         </SetRegEntry>
         <SetRegEntry>
           <Number>0</Number>