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/incubator-nuttx-apps.git

commit 5ae5ab7f443603f2a4a8b934dafaef86581126bf
Author: zouboan <[email protected]>
AuthorDate: Sat May 28 21:05:50 2022 +0800

    industry/foc foc_ident: improving the measuring of resistance
---
 industry/foc/float/foc_ident.c | 14 +++++++++++++-
 1 file changed, 13 insertions(+), 1 deletion(-)

diff --git a/industry/foc/float/foc_ident.c b/industry/foc/float/foc_ident.c
index f0a61170c..99e824acd 100644
--- a/industry/foc/float/foc_ident.c
+++ b/industry/foc/float/foc_ident.c
@@ -164,6 +164,8 @@ int foc_ident_res_run_f32(FAR struct foc_ident_f32_s *ident,
   int   ret  = FOC_ROUTINE_RUN_NOTDONE;
   float err  = 0.0f;
   float vref = 0.0f;
+  static float curr_sum  = 0.0f;
+  static float volt_sum  = 0.0f;
 
   /* Initialize PI controller */
 
@@ -193,12 +195,17 @@ int foc_ident_res_run_f32(FAR struct foc_ident_f32_s 
*ident,
   /* Increase counter */
 
   ident->cntr += 1;
+  if (ident->cntr > (ident->cfg.res_steps / 3))
+    {
+      volt_sum += vector2d_mag(in->foc_state->vdq.q, in->foc_state->vdq.d);
+      curr_sum += vector2d_mag(in->foc_state->idq.q, in->foc_state->idq.d);
+    }
 
   if (ident->cntr > ident->cfg.res_steps)
     {
       /* Get resistance */
 
-      ident->final.res = vref / ident->cfg.res_current;
+      ident->final.res = (2.0f / 3.0f) * volt_sum / curr_sum;
 
       /* Force IDLE state */
 
@@ -216,6 +223,11 @@ int foc_ident_res_run_f32(FAR struct foc_ident_f32_s 
*ident,
       /* Reset counter */
 
       ident->cntr = 0;
+
+      /* Reset static data */
+
+      curr_sum = 0.0f;
+      volt_sum = 0.0f;
     }
 
   return ret;

Reply via email to