1212
1313#define TLM_FILE "/tmp/pm-TLM"
1414#define PWM_FILE "/tmp/pm-PWM"
15+ #define MLD_FILE "/tmp/pm-mldata"
1516#define AGP_FILE "/tmp/pm-auto.gp"
1617
1718#define TLM_SIZE 100
@@ -27,6 +28,7 @@ typedef struct {
2728
2829 FILE * fd_tlm ;
2930 FILE * fd_pwm ;
31+ FILE * fd_mld ;
3032 FILE * fd_gp ;
3133}
3234tlm_t ;
@@ -215,6 +217,31 @@ tlm_plot_grab()
215217 if (tlm .fd_gp != NULL ) { fclose (tlm .fd_gp ); tlm .fd_gp = NULL ; }
216218
217219 fwrite (tlm .y , sizeof (float ), TLM_SIZE , tlm .fd_tlm );
220+
221+ if (tlm .fd_mld != NULL ) {
222+
223+ D = cos (m .state [3 ]);
224+ Q = sin (m .state [3 ]);
225+
226+ C = (m .pwm_A + m .pwm_B + m .pwm_C ) / 3. ;
227+ A = (m .pwm_A - C ) * m .state [6 ] / (double ) m .pwm_resolution ;
228+ B = (m .pwm_B - C ) * m .state [6 ] / (double ) m .pwm_resolution ;
229+
230+ B = 0.577350269189626 * A + 1.15470053837925 * B ;
231+
232+ tlm .y [0 ] = D * m .state [0 ] + Q * m .state [1 ]; /* iX */
233+ tlm .y [1 ] = D * m .state [1 ] - Q * m .state [0 ]; /* iY */
234+ tlm .y [2 ] = A ; /* uX */
235+ tlm .y [3 ] = B ; /* uY */
236+ tlm .y [4 ] = D ; /* cos(\th) */
237+ tlm .y [5 ] = Q ; /* sin(\th) */
238+ tlm .y [6 ] = m .state [2 ]; /* \omega */
239+ tlm .y [7 ] = m .state [4 ]; /* Tc */
240+ tlm .y [8 ] = 0 ;
241+ tlm .y [9 ] = 0 ;
242+
243+ fwrite (tlm .y , sizeof (float ), 10 , tlm .fd_mld );
244+ }
218245}
219246
220247static void
@@ -435,6 +462,61 @@ void bench_script()
435462 tlm_PWM_grab ();
436463}
437464
465+ void mld_script ()
466+ {
467+ blm_enable (& m );
468+ blm_restart (& m );
469+
470+ tlm_restart ();
471+
472+ m .Rs = 14.e-3 ;
473+ m .Ld = 10.e-6 ;
474+ m .Lq = 15.e-6 ;
475+ m .Udc = 22. ;
476+ m .Rdc = 0.1 ;
477+ m .Zp = 14 ;
478+ m .lambda = blm_Kv_lambda (& m , 270. );
479+ m .Jm = 4.e-4 ;
480+
481+ ts_script_default ();
482+ ts_script_base ();
483+ blm_restart (& m );
484+
485+ pm .config_LU_ESTIMATE = PM_FLUX_KALMAN ;
486+ pm .config_HFI_WAVETYPE = PM_HFI_SINE ;
487+
488+ pm .fsm_req = PM_STATE_LU_STARTUP ;
489+ ts_wait_IDLE ();
490+
491+ pm .s_setpoint_speed = 60.f ;
492+ sim_runtime (1.0 );
493+
494+ tlm .fd_mld = fopen (MLD_FILE , "wb" );
495+
496+ if (tlm .fd_mld == NULL ) {
497+
498+ fprintf (stderr , "fopen: %s\n" , strerror (errno ));
499+ abort ();
500+ }
501+
502+ pm .s_setpoint_speed = 60.f ;
503+ sim_runtime (1.0 );
504+
505+ pm .s_setpoint_speed = 900.f ;
506+ sim_runtime (1.0 );
507+
508+ pm .s_setpoint_speed = - 60.f ;
509+ sim_runtime (1.0 );
510+
511+ pm .s_setpoint_speed = - 900.f ;
512+ sim_runtime (1.0 );
513+
514+ pm .s_setpoint_speed = 5500.f ;
515+ sim_runtime (2.0 );
516+
517+ fclose (tlm .fd_mld );
518+ }
519+
438520int main (int argc , char * argv [])
439521{
440522 if (argc < 2 ) {
@@ -452,6 +534,10 @@ int main(int argc, char *argv[])
452534
453535 bench_script ();
454536 }
537+ else if (strcmp (argv [1 ], "data" ) == 0 ) {
538+
539+ mld_script ();
540+ }
455541
456542 if (tlm .fd_tlm != NULL ) {
457543
0 commit comments