|
|
@@ -7,6 +7,7 @@
|
|
|
|
|
|
static motor_params_t m_params;
|
|
|
static foc_params_t foc_params;
|
|
|
+static mc_gear_config_t gear_config;
|
|
|
|
|
|
motor_params_t *nv_get_motor_params(void) {
|
|
|
return &m_params;
|
|
|
@@ -15,6 +16,9 @@ foc_params_t *nv_get_foc_params(void) {
|
|
|
return &foc_params;
|
|
|
}
|
|
|
|
|
|
+mc_gear_config_t *nv_get_gear_configs(void) {
|
|
|
+ return &gear_config;
|
|
|
+}
|
|
|
|
|
|
void nv_save_hall_table(s32 *hall_table) {
|
|
|
memcpy((char *)m_params.hall_table, (char *)hall_table, sizeof(m_params.hall_table));
|
|
|
@@ -86,9 +90,64 @@ static void nv_default_foc_params(void) {
|
|
|
foc_params.pid_conf[PID_FW_id].kp = 0;
|
|
|
foc_params.pid_conf[PID_FW_id].ki = 0.01f;
|
|
|
foc_params.pid_conf[PID_FW_id].kb = 0;
|
|
|
+}
|
|
|
+
|
|
|
+static void nv_default_gear_config(void) {
|
|
|
+ /* 48v 模式 */
|
|
|
+ gear_config.gears_48[0].u_maxRPM = 1430;
|
|
|
+ gear_config.gears_48[0].u_maxTorque = CONFIG_DEFAULT_PHASE_CURR_LIM * 0.5f;
|
|
|
+ gear_config.gears_48[0].u_maxIdc = 25;
|
|
|
+ gear_config.gears_48[0].u_accTime = 50;
|
|
|
+
|
|
|
+ gear_config.gears_48[1].u_maxRPM = 2100;
|
|
|
+ gear_config.gears_48[1].u_maxTorque = CONFIG_DEFAULT_PHASE_CURR_LIM * 0.8f;
|
|
|
+ gear_config.gears_48[1].u_maxIdc = 30;
|
|
|
+ gear_config.gears_48[1].u_accTime = 80;
|
|
|
+
|
|
|
+ gear_config.gears_48[2].u_maxRPM = 2850;
|
|
|
+ gear_config.gears_48[2].u_maxTorque = CONFIG_DEFAULT_PHASE_CURR_LIM;
|
|
|
+ gear_config.gears_48[2].u_maxIdc = 40;
|
|
|
+ gear_config.gears_48[2].u_accTime = 80;
|
|
|
+
|
|
|
+ gear_config.gears_48[3].u_maxRPM = 2850;
|
|
|
+ gear_config.gears_48[3].u_maxTorque = CONFIG_DEFAULT_PHASE_CURR_LIM;
|
|
|
+ gear_config.gears_48[3].u_maxIdc = 40;
|
|
|
+ gear_config.gears_48[3].u_accTime = 80;
|
|
|
|
|
|
+ gear_config.gears_48[4].u_maxRPM = 2850;
|
|
|
+ gear_config.gears_48[4].u_maxTorque = CONFIG_DEFAULT_PHASE_CURR_LIM;
|
|
|
+ gear_config.gears_48[4].u_maxIdc = 40;
|
|
|
+ gear_config.gears_48[4].u_accTime = 80;
|
|
|
+
|
|
|
+ /* 96v 模式 */
|
|
|
+ gear_config.gears_96[0].u_maxRPM = 2850;
|
|
|
+ gear_config.gears_96[0].u_maxTorque = CONFIG_DEFAULT_PHASE_CURR_LIM * 0.5f;
|
|
|
+ gear_config.gears_96[0].u_maxIdc = 25;
|
|
|
+ gear_config.gears_96[0].u_accTime = 50;
|
|
|
+
|
|
|
+ gear_config.gears_96[1].u_maxRPM = 4300;
|
|
|
+ gear_config.gears_96[1].u_maxTorque = CONFIG_DEFAULT_PHASE_CURR_LIM * 0.8f;
|
|
|
+ gear_config.gears_96[1].u_maxIdc = 30;
|
|
|
+ gear_config.gears_96[1].u_accTime = 80;
|
|
|
+
|
|
|
+ gear_config.gears_96[2].u_maxRPM = 5500;
|
|
|
+ gear_config.gears_96[2].u_maxTorque = CONFIG_DEFAULT_PHASE_CURR_LIM;
|
|
|
+ gear_config.gears_96[2].u_maxIdc = 35;
|
|
|
+ gear_config.gears_96[2].u_accTime = 100;
|
|
|
+
|
|
|
+ gear_config.gears_96[3].u_maxRPM = 5500;
|
|
|
+ gear_config.gears_96[3].u_maxTorque = CONFIG_DEFAULT_PHASE_CURR_LIM;
|
|
|
+ gear_config.gears_96[3].u_maxIdc = 45;
|
|
|
+ gear_config.gears_96[3].u_accTime = 100;
|
|
|
+
|
|
|
+ gear_config.gears_96[4].u_maxRPM = 5500;
|
|
|
+ gear_config.gears_96[4].u_maxTorque = CONFIG_DEFAULT_PHASE_CURR_LIM;
|
|
|
+ gear_config.gears_96[4].u_maxIdc = 45;
|
|
|
+ gear_config.gears_96[4].u_accTime = 100;
|
|
|
}
|
|
|
|
|
|
+
|
|
|
+
|
|
|
void nv_save_motor_params(void) {
|
|
|
u16 crc = crc16_get((u8 *)&m_params, sizeof(m_params) - 2);
|
|
|
m_params.crc16 = crc;
|
|
|
@@ -150,6 +209,38 @@ void nv_read_foc_params(void) {
|
|
|
foc_params.s_maxTorque = foc_params.s_PhaseCurrLim;//overwrite
|
|
|
}
|
|
|
|
|
|
+void nv_save_gear_configs(void) {
|
|
|
+ u16 crc = crc16_get((u8 *)&gear_config, sizeof(gear_config) - 2);
|
|
|
+ gear_config.crc16 = crc;
|
|
|
+ fmc_write_data(gear_config_idx_0, (u8 *)&gear_config, sizeof(gear_config));
|
|
|
+ fmc_write_data(gear_config_idx_1, (u8 *)&gear_config, sizeof(gear_config));
|
|
|
+}
|
|
|
+
|
|
|
+void nv_read_gear_configs(void) {
|
|
|
+ fmc_read_data(gear_config_idx_0, (u8 *)&gear_config, sizeof(gear_config));
|
|
|
+ u16 crc0 = crc16_get((u8 *)&gear_config, sizeof(gear_config) - 2);
|
|
|
+ if (crc0 != gear_config.crc16) {
|
|
|
+ sys_debug("gear 0 error\n");
|
|
|
+ fmc_read_data(gear_config_idx_1, (u8 *)&gear_config, sizeof(gear_config));
|
|
|
+ crc0 = crc16_get((u8 *)&gear_config, sizeof(gear_config) - 2);
|
|
|
+ if (crc0 != gear_config.crc16) {
|
|
|
+ nv_default_gear_config();
|
|
|
+ nv_save_gear_configs();
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ fmc_write_data(gear_config_idx_0, (u8 *)&gear_config, sizeof(gear_config));
|
|
|
+ }else {
|
|
|
+ fmc_read_data(gear_config_idx_1, (u8 *)&gear_config, sizeof(gear_config));
|
|
|
+ crc0 = crc16_get((u8 *)&gear_config, sizeof(gear_config) - 2);
|
|
|
+ if (crc0 != gear_config.crc16) {
|
|
|
+ sys_debug("gear 1 error\n");
|
|
|
+ fmc_read_data(gear_config_idx_0, (u8 *)&gear_config, sizeof(gear_config));
|
|
|
+ fmc_write_data(gear_config_idx_1, (u8 *)&gear_config, sizeof(gear_config));
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
void nv_set_pid(u8 id, pid_conf_t *pid) {
|
|
|
foc_params.pid_conf[id] = *pid;
|
|
|
nv_save_foc_params();
|
|
|
@@ -192,6 +283,7 @@ torque_lut_t *nv_get_trq_tlb(void) {
|
|
|
void nv_storage_init(void) {
|
|
|
nv_read_motor_params();
|
|
|
nv_read_foc_params();
|
|
|
+ nv_read_gear_configs();
|
|
|
sys_debug("encoder_off = %f\n", m_params.offset);
|
|
|
if (m_params.mot_nr != MOTOR_NR) {
|
|
|
nv_default_motor_params();
|