|
|
@@ -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();
|
|
|
+}
|
|
|
+
|