diff --git a/examples/foc/foc_cfg.h b/examples/foc/foc_cfg.h index 4874aed58..d80ff25b9 100644 --- a/examples/foc/foc_cfg.h +++ b/examples/foc/foc_cfg.h @@ -210,4 +210,32 @@ # endif #endif +/**************************************************************************** + * Public Type Definition + ****************************************************************************/ + +struct foc_thr_cfg_s +{ + int fmode; /* FOC control mode */ + int mmode; /* Motor control mode */ +#ifdef CONFIG_EXAMPLES_FOC_HAVE_OPENLOOP + int qparam; /* Open-loop Q setting (x1000) */ +#endif + +#ifdef CONFIG_EXAMPLES_FOC_CONTROL_PI + uint32_t foc_pi_kp; /* FOC PI Kp (x1000) */ + uint32_t foc_pi_ki; /* FOC PI Ki (x1000) */ +#endif + +#ifdef CONFIG_EXAMPLES_FOC_HAVE_TORQ + uint32_t torqmax; /* Torque max (x1000) */ +#endif +#ifdef CONFIG_EXAMPLES_FOC_HAVE_VEL + uint32_t velmax; /* Velocity max (x1000) */ +#endif +#ifdef CONFIG_EXAMPLES_FOC_HAVE_POS + uint32_t posmax; /* Position max (x1000) */ +#endif +}; + #endif /* __APPS_EXAMPLES_FOC_FOC_CFG_H */ diff --git a/examples/foc/foc_main.c b/examples/foc/foc_main.c index d9965ec51..7ab3eb3b3 100644 --- a/examples/foc/foc_main.c +++ b/examples/foc/foc_main.c @@ -62,40 +62,43 @@ struct args_s g_args = { .time = CONFIG_EXAMPLES_FOC_TIME_DEFAULT, - .fmode = CONFIG_EXAMPLES_FOC_FMODE, - .mmode = CONFIG_EXAMPLES_FOC_MMODE, + .state = CONFIG_EXAMPLES_FOC_STATE_INIT, + .en = INST_EN_DEFAULT, + .cfg = + { + .fmode = CONFIG_EXAMPLES_FOC_FMODE, + .mmode = CONFIG_EXAMPLES_FOC_MMODE, #ifdef CONFIG_EXAMPLES_FOC_HAVE_OPENLOOP - .qparam = CONFIG_EXAMPLES_FOC_OPENLOOP_Q, + .qparam = CONFIG_EXAMPLES_FOC_OPENLOOP_Q, #endif #ifdef CONFIG_EXAMPLES_FOC_CONTROL_PI - .foc_pi_kp = CONFIG_EXAMPLES_FOC_IDQ_KP, - .foc_pi_ki = CONFIG_EXAMPLES_FOC_IDQ_KI, + .foc_pi_kp = CONFIG_EXAMPLES_FOC_IDQ_KP, + .foc_pi_ki = CONFIG_EXAMPLES_FOC_IDQ_KI, #endif - .state = CONFIG_EXAMPLES_FOC_STATE_INIT, - .en = INST_EN_DEFAULT, #ifdef CONFIG_EXAMPLES_FOC_SETPOINT_CONST # ifdef CONFIG_EXAMPLES_FOC_HAVE_TORQ - .torqmax = CONFIG_EXAMPLES_FOC_SETPOINT_CONST_VALUE, + .torqmax = CONFIG_EXAMPLES_FOC_SETPOINT_CONST_VALUE, # endif # ifdef CONFIG_EXAMPLES_FOC_HAVE_VEL - .velmax = CONFIG_EXAMPLES_FOC_SETPOINT_CONST_VALUE, + .velmax = CONFIG_EXAMPLES_FOC_SETPOINT_CONST_VALUE, # endif # ifdef CONFIG_EXAMPLES_FOC_HAVE_POS - .posmax = CONFIG_EXAMPLES_FOC_SETPOINT_CONST_VALUE, + .posmax = CONFIG_EXAMPLES_FOC_SETPOINT_CONST_VALUE, # endif #else # ifdef CONFIG_EXAMPLES_FOC_HAVE_TORQ - .torqmax = CONFIG_EXAMPLES_FOC_SETPOINT_MAX, + .torqmax = CONFIG_EXAMPLES_FOC_SETPOINT_MAX, # endif # ifdef CONFIG_EXAMPLES_FOC_HAVE_VEL - .velmax = CONFIG_EXAMPLES_FOC_SETPOINT_MAX, + .velmax = CONFIG_EXAMPLES_FOC_SETPOINT_MAX, # endif # ifdef CONFIG_EXAMPLES_FOC_HAVE_POS - .posmax = CONFIG_EXAMPLES_FOC_SETPOINT_MAX, + .posmax = CONFIG_EXAMPLES_FOC_SETPOINT_MAX, # endif #endif + } }; /**************************************************************************** @@ -113,7 +116,7 @@ static int validate_args(FAR struct args_s *args) #ifdef CONFIG_EXAMPLES_FOC_CONTROL_PI /* Current PI controller */ - if (args->foc_pi_kp == 0 && args->foc_pi_ki == 0) + if (args->cfg.foc_pi_kp == 0 && args->cfg.foc_pi_ki == 0) { PRINTF("ERROR: missing FOC Kp/Ki configuration\n"); goto errout; @@ -122,11 +125,11 @@ static int validate_args(FAR struct args_s *args) /* FOC operation mode */ - if (args->fmode != FOC_FMODE_IDLE && - args->fmode != FOC_FMODE_VOLTAGE && - args->fmode != FOC_FMODE_CURRENT) + if (args->cfg.fmode != FOC_FMODE_IDLE && + args->cfg.fmode != FOC_FMODE_VOLTAGE && + args->cfg.fmode != FOC_FMODE_CURRENT) { - PRINTF("Invalid op mode value %d s\n", args->fmode); + PRINTF("Invalid op mode value %d s\n", args->cfg.fmode); goto errout; } @@ -134,23 +137,23 @@ static int validate_args(FAR struct args_s *args) if ( #ifdef CONFIG_EXAMPLES_FOC_HAVE_TORQ - args->mmode != FOC_MMODE_TORQ && + args->cfg.mmode != FOC_MMODE_TORQ && #endif #ifdef CONFIG_EXAMPLES_FOC_HAVE_VEL - args->mmode != FOC_MMODE_VEL && + args->cfg.mmode != FOC_MMODE_VEL && #endif #ifdef CONFIG_EXAMPLES_FOC_HAVE_POS - args->mmode != FOC_MMODE_POS && + args->cfg.mmode != FOC_MMODE_POS && #endif #ifdef CONFIG_EXAMPLES_FOC_HAVE_ALIGN - args->mmode != FOC_MMODE_ALIGN_ONLY && + args->cfg.mmode != FOC_MMODE_ALIGN_ONLY && #endif #ifdef CONFIG_EXAMPLES_FOC_HAVE_IDENT - args->mmode != FOC_MMODE_IDENT_ONLY && + args->cfg.mmode != FOC_MMODE_IDENT_ONLY && #endif 1) { - PRINTF("Invalid ctrl mode value %d s\n", args->mmode); + PRINTF("Invalid ctrl mode value %d s\n", args->cfg.mmode); goto errout; } @@ -341,22 +344,22 @@ int main(int argc, char *argv[]) /* Get configuration */ #ifdef CONFIG_EXAMPLES_FOC_HAVE_OPENLOOP - foc[i].qparam = g_args.qparam; + foc[i].qparam = g_args.cfg.qparam; #endif - foc[i].fmode = g_args.fmode; - foc[i].mmode = g_args.mmode; + foc[i].fmode = g_args.cfg.fmode; + foc[i].mmode = g_args.cfg.mmode; #ifdef CONFIG_EXAMPLES_FOC_CONTROL_PI - foc[i].foc_pi_kp = g_args.foc_pi_kp; - foc[i].foc_pi_ki = g_args.foc_pi_ki; + foc[i].foc_pi_kp = g_args.cfg.foc_pi_kp; + foc[i].foc_pi_ki = g_args.cfg.foc_pi_ki; #endif #ifdef CONFIG_EXAMPLES_FOC_HAVE_TORQ - foc[i].torqmax = g_args.torqmax; + foc[i].torqmax = g_args.cfg.torqmax; #endif #ifdef CONFIG_EXAMPLES_FOC_HAVE_VEL - foc[i].velmax = g_args.velmax; + foc[i].velmax = g_args.cfg.velmax; #endif #ifdef CONFIG_EXAMPLES_FOC_HAVE_POS - foc[i].posmax = g_args.posmax; + foc[i].posmax = g_args.cfg.posmax; #endif if (g_args.en & (1 << i)) diff --git a/examples/foc/foc_parseargs.c b/examples/foc/foc_parseargs.c index 338c8eb90..9859e49a8 100644 --- a/examples/foc/foc_parseargs.c +++ b/examples/foc/foc_parseargs.c @@ -156,13 +156,13 @@ void parse_args(FAR struct args_s *args, int argc, FAR char **argv) #ifdef CONFIG_EXAMPLES_FOC_CONTROL_PI case OPT_FKP: { - args->foc_pi_kp = atoi(optarg); + args->cfg.foc_pi_kp = atoi(optarg); break; } case OPT_FKI: { - args->foc_pi_ki = atoi(optarg); + args->cfg.foc_pi_ki = atoi(optarg); break; } #endif @@ -181,20 +181,20 @@ void parse_args(FAR struct args_s *args, int argc, FAR char **argv) case 'f': { - args->fmode = atoi(optarg); + args->cfg.fmode = atoi(optarg); break; } case 'm': { - args->mmode = atoi(optarg); + args->cfg.mmode = atoi(optarg); break; } #ifdef CONFIG_EXAMPLES_FOC_HAVE_TORQ case 'r': { - args->torqmax = atoi(optarg); + args->cfg.torqmax = atoi(optarg); break; } #endif @@ -202,7 +202,7 @@ void parse_args(FAR struct args_s *args, int argc, FAR char **argv) #ifdef CONFIG_EXAMPLES_FOC_HAVE_VEL case 'v': { - args->velmax = atoi(optarg); + args->cfg.velmax = atoi(optarg); break; } #endif @@ -210,7 +210,7 @@ void parse_args(FAR struct args_s *args, int argc, FAR char **argv) #ifdef CONFIG_EXAMPLES_FOC_HAVE_POS case 'x': { - args->posmax = atoi(optarg); + args->cfg.posmax = atoi(optarg); break; } #endif @@ -230,7 +230,7 @@ void parse_args(FAR struct args_s *args, int argc, FAR char **argv) #ifdef CONFIG_EXAMPLES_FOC_HAVE_OPENLOOP case 'o': { - args->qparam = atoi(optarg); + args->cfg.qparam = atoi(optarg); break; } #endif diff --git a/examples/foc/foc_parseargs.h b/examples/foc/foc_parseargs.h index ad3759f9c..43b137d4f 100644 --- a/examples/foc/foc_parseargs.h +++ b/examples/foc/foc_parseargs.h @@ -28,6 +28,7 @@ #include #include "foc_device.h" +#include "foc_cfg.h" /**************************************************************************** * Pre-processor Definitions @@ -41,29 +42,10 @@ struct args_s { - int time; /* Run time limit in sec, -1 if forever */ - int fmode; /* FOC control mode */ - int mmode; /* Motor control mode */ -#ifdef CONFIG_EXAMPLES_FOC_HAVE_OPENLOOP - int qparam; /* Open-loop Q setting (x1000) */ -#endif - -#ifdef CONFIG_EXAMPLES_FOC_CONTROL_PI - uint32_t foc_pi_kp; /* FOC PI Kp (x1000) */ - uint32_t foc_pi_ki; /* FOC PI Ki (x1000) */ -#endif - - int state; /* Example state (FREE, CW, CCW, STOP) */ - int8_t en; /* Enabled instances (bit-encoded) */ -#ifdef CONFIG_EXAMPLES_FOC_HAVE_TORQ - uint32_t torqmax; /* Torque max (x1000) */ -#endif -#ifdef CONFIG_EXAMPLES_FOC_HAVE_VEL - uint32_t velmax; /* Velocity max (x1000) */ -#endif -#ifdef CONFIG_EXAMPLES_FOC_HAVE_POS - uint32_t posmax; /* Position max (x1000) */ -#endif + int time; /* Run time limit in sec, -1 if forever */ + int state; /* Example state (FREE, CW, CCW, STOP) */ + int8_t en; /* Enabled instances (bit-encoded) */ + struct foc_thr_cfg_s cfg; /* Control thread configuration */ }; /****************************************************************************