Procházet zdrojové kódy

1. start stop 指令加入设置挡位信息
2. motor runtime 设置加入刹车断电

Signed-off-by: huhui <huhui@sharkgulf.com>

huhui před 2 roky
rodič
revize
901d0c4ffd

+ 13 - 0
Applications/foc/commands.c

@@ -169,6 +169,19 @@ static void process_foc_command(foc_cmd_body_t *command) {
 			}
 			if (!success) {
 				erroCode = PMSM_FOC_GetErrCode();
+			}else {
+				if (command->len > sizeof(foc_start_cmd_t)) {
+					u8 *p = (u8 *)command->data + sizeof(foc_start_cmd_t);
+					s8 ext_gear = decode_u8(p);
+					sys_debug("gear %d\n", ext_gear);
+					if (ext_gear >= 1 && ext_gear <= 4) {
+						if (ext_gear == 4) {
+							mc_set_gear(3);
+						}else {
+							mc_set_gear(ext_gear - 1);
+						}
+					}
+				}
 			}
 			sys_debug("start motor %d\n", erroCode);
 			break;

+ 1 - 1
Applications/foc/core/e_ctrl.c

@@ -143,7 +143,7 @@ void eCtrl_set_accl_time(u16 time) {
 }
 
 static bool _eCtrl_isHwBrk_shutPower(void) {
-	return (g_eCtrl.hw_brake && nv_get_foc_params()->n_brkShutPower);
+	return (g_eCtrl.hw_brake && mc_hwbrk_can_shutpower());
 }
 
 static void _eCtrl_set_TgtCurrent(float c) {

+ 9 - 0
Applications/foc/motor/motor.c

@@ -46,6 +46,7 @@ static motor_t motor = {
 	.u_set.idc_lim = IDC_USER_LIMIT_NONE,
 	.u_set.ebrk_torque = IDC_USER_LIMIT_NONE,
 	.u_set.ebrk_time = MAX_U16,
+	.u_set.n_brkShutPower = MAX_U8,
 };
 /* 无感运行的挡位,限制速度,母线电流,最大扭矩 */
 static mc_gear_t sensorless_gear = {
@@ -396,6 +397,14 @@ u8 mc_get_internal_gear(void) {
 	return motor.n_gear;
 }
 
+
+bool mc_hwbrk_can_shutpower(void) {
+	if (motor.u_set.n_brkShutPower != MAX_U8) {
+		return (motor.u_set.n_brkShutPower != 0);
+	}
+	return (nv_get_foc_params()->n_brkShutPower != 0);
+}
+
 bool mc_enable_cruise(bool enable) {
 	if (enable == motor.b_cruise) {
 		return true;

+ 2 - 0
Applications/foc/motor/motor.h

@@ -20,6 +20,7 @@ typedef struct {
 	s16 idc_lim;
 	s16 ebrk_torque;
 	u16 ebrk_time;
+	u8  n_brkShutPower;
 }user_rt_set;
 
 typedef struct {
@@ -103,6 +104,7 @@ void mc_set_ebrk_level(s16 trq, u16 time);
 s16 mc_get_ebrk_torque(void);
 u16 mc_get_ebrk_time(void);
 bool mc_critical_err_is_set(u8 err);
+bool mc_hwbrk_can_shutpower(void);
 
 static __INLINE float motor_encoder_get_angle(void) {
 #ifdef USE_ENCODER_HALL

+ 1 - 1
Applications/os/os_types.h

@@ -53,7 +53,7 @@ typedef unsigned int	uint32;
 
 #define MAX_S16 (0x7FFF)
 #define MAX_U16 (0xFFFF)
-
+#define MAX_U8  (0xFF)
 extern void *pvPortMalloc( size_t xWantedSize );
 #define os_alloc pvPortMalloc
 extern void vPortFree(void *);