You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nuttx.apache.org by xi...@apache.org on 2024/10/18 02:43:55 UTC
(nuttx-apps) 04/07: examples/foc: fix option that disable motor controller
This is an automated email from the ASF dual-hosted git repository.
xiaoxiang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/nuttx-apps.git
commit 103bf836081b43c22f78b684afe73cc4f5cf2f1e
Author: raiden00pl <ra...@railab.me>
AuthorDate: Mon Sep 30 12:30:17 2024 +0200
examples/foc: fix option that disable motor controller
fix some compiler error when EXAMPLES_FOC_RUN_DISABLE is enabled
---
examples/foc/Kconfig | 20 +++++++++++++-------
examples/foc/foc_motor_b16.c | 15 ++++++++++++++-
examples/foc/foc_motor_f32.c | 20 +++++++++++++-------
3 files changed, 40 insertions(+), 15 deletions(-)
diff --git a/examples/foc/Kconfig b/examples/foc/Kconfig
index 285870259..02a8188ec 100644
--- a/examples/foc/Kconfig
+++ b/examples/foc/Kconfig
@@ -112,19 +112,29 @@ config EXAMPLES_FOC_STATE_USE_MODEL_PMSM
Use PMSM model instead of real hardware
choice
- prompt "FOC sensored or sensorless configuration"
+ prompt "FOC motor controller type"
default EXAMPLES_FOC_SENSORLESS
config EXAMPLES_FOC_SENSORLESS
- bool "FOC example sensorless configuration"
+ bool "FOC example sensorless motor controller"
select EXAMPLES_FOC_ANGOBS
+ ---help---
+ Use sensorless controller, no angle sensor required.
config EXAMPLES_FOC_SENSORED
- bool "FOC example sensored configuration"
+ bool "FOC example sensored motor controller"
select EXAMPLES_FOC_HAVE_ALIGN
+ ---help---
+ Use sensored controller, angle sensor for motor required.
endchoice #
+config EXAMPLES_FOC_RUN_DISABLE
+ bool "FOC Disable motor controller"
+ ---help---
+ Disable motor controller logic. Requested dq is always [0, 0].
+ Useful for testing and benchmarking.
+
menu "Motor phy"
config EXAMPLES_FOC_MOTOR_POLES
@@ -674,10 +684,6 @@ config EXAMPLES_FOC_HAVE_RUN
bool
default !EXAMPLES_FOC_RUN_DISABLE
-config EXAMPLES_FOC_RUN_DISABLE
- bool "FOC Disable FOC motor controller"
- default n
-
config EXAMPLES_FOC_NXSCOPE
bool "FOC nxscope support"
depends on LOGGING_NXSCOPE
diff --git a/examples/foc/foc_motor_b16.c b/examples/foc/foc_motor_b16.c
index aeee136a0..5cb25f610 100644
--- a/examples/foc/foc_motor_b16.c
+++ b/examples/foc/foc_motor_b16.c
@@ -581,6 +581,8 @@ errout:
return ret;
}
+#if defined(CONFIG_EXAMPLES_FOC_HAVE_OPENLOOP) || \
+ defined(CONFIG_EXAMPLES_FOC_VELOBS)
/****************************************************************************
* Name: foc_motor_vel_reset
****************************************************************************/
@@ -614,6 +616,7 @@ static int foc_motor_vel_reset(FAR struct foc_motor_b16_s *motor)
#endif
return ret;
}
+#endif
/****************************************************************************
* Name: foc_motor_state
@@ -1071,6 +1074,7 @@ static int foc_motor_ang_get(FAR struct foc_motor_b16_s *motor)
#ifdef CONFIG_EXAMPLES_FOC_HAVE_VEL
ain.vel = motor->vel.set;
#endif
+ ain.state = &motor->foc_state;
ain.angle = motor->angle_now;
ain.dir = motor->dir;
@@ -1125,6 +1129,14 @@ static int foc_motor_ang_get(FAR struct foc_motor_b16_s *motor)
motor->angle_obs = aout.angle;
#endif
+#ifndef CONFIG_EXAMPLES_FOC_HAVE_RUN
+ /* Dummy value when motor controller disabled */
+
+ UNUSED(ain);
+ aout.type = FOC_ANGLE_TYPE_ELE;
+ aout.angle = 0;
+#endif
+
/* Store electrical angle from sensor or observer */
if (aout.type == FOC_ANGLE_TYPE_ELE)
@@ -1247,7 +1259,8 @@ static int foc_motor_vel_get(FAR struct foc_motor_b16_s *motor)
/* Get motor electrical velocity now */
#if defined(CONFIG_EXAMPLES_FOC_HAVE_OPENLOOP) && \
- !defined(CONFIG_EXAMPLES_FOC_VELOBS)
+ !defined(CONFIG_EXAMPLES_FOC_VELOBS) || \
+ !defined(CONFIG_EXAMPLES_FOC_HAVE_RUN)
/* No velocity feedback - assume that electical velocity is velocity set
* in a open-loop contorller.
*/
diff --git a/examples/foc/foc_motor_f32.c b/examples/foc/foc_motor_f32.c
index be9abca0e..5ede5cb14 100644
--- a/examples/foc/foc_motor_f32.c
+++ b/examples/foc/foc_motor_f32.c
@@ -559,6 +559,8 @@ errout:
return ret;
}
+#if defined(CONFIG_EXAMPLES_FOC_HAVE_OPENLOOP) || \
+ defined(CONFIG_EXAMPLES_FOC_VELOBS)
/****************************************************************************
* Name: foc_motor_vel_reset
****************************************************************************/
@@ -592,6 +594,7 @@ static int foc_motor_vel_reset(FAR struct foc_motor_f32_s *motor)
#endif
return ret;
}
+#endif
/****************************************************************************
* Name: foc_motor_state
@@ -1108,6 +1111,14 @@ static int foc_motor_ang_get(FAR struct foc_motor_f32_s *motor)
motor->angle_obs = aout.angle;
#endif
+#ifndef CONFIG_EXAMPLES_FOC_HAVE_RUN
+ /* Dummy value when motor controller disabled */
+
+ UNUSED(ain);
+ aout.type = FOC_ANGLE_TYPE_ELE;
+ aout.angle = 0.0f;
+#endif
+
/* Store electrical angle from sensor or observer */
if (aout.type == FOC_ANGLE_TYPE_ELE)
@@ -1233,7 +1244,8 @@ static int foc_motor_vel_get(FAR struct foc_motor_f32_s *motor)
/* Get motor electrical velocity now */
#if defined(CONFIG_EXAMPLES_FOC_HAVE_OPENLOOP) && \
- !defined(CONFIG_EXAMPLES_FOC_VELOBS)
+ !defined(CONFIG_EXAMPLES_FOC_VELOBS) || \
+ !defined(CONFIG_EXAMPLES_FOC_HAVE_RUN)
/* No velocity feedback - assume that electical velocity is
* velocity set
*/
@@ -1958,12 +1970,6 @@ int foc_motor_control(FAR struct foc_motor_f32_s *motor)
{
motor->foc_mode = FOC_HANDLER_MODE_IDLE;
-#ifndef CONFIG_EXAMPLES_FOC_HAVE_RUN
- /* Terminate */
-
- motor->ctrl_state += 1;
-#endif
-
break;
}