@@ -195,7 +195,6 @@ static void terminal_plot_hfi(int argc, const char **argv);
195
195
static void timer_update (volatile motor_all_state_t * motor , float dt );
196
196
static void input_current_offset_measurement ( void );
197
197
static void hfi_update (volatile motor_all_state_t * motor );
198
- static void apply_mtpa (float * id , float * iq , volatile motor_all_state_t * motor );
199
198
200
199
// Threads
201
200
static THD_WORKING_AREA (timer_thread_wa , 1024 ) ;
@@ -2547,7 +2546,14 @@ void mcpwm_foc_adc_int_handler(void *p, uint32_t flags) {
2547
2546
motor_now -> m_motor_state .phase = motor_now -> m_phase_now_override ;
2548
2547
}
2549
2548
2550
- apply_mtpa (& id_set_tmp , & iq_set_tmp , motor_now );
2549
+ // Apply MTPA. See: https://github.com/vedderb/bldc/pull/179
2550
+ float ld_lq_diff = conf_now -> foc_motor_ld_lq_diff ;
2551
+ if (ld_lq_diff != 0.0 ) {
2552
+ float lambda = conf_now -> foc_motor_flux_linkage ;
2553
+
2554
+ id_set_tmp = (lambda - sqrtf (SQ (lambda ) + 8.0 * SQ (ld_lq_diff ) * SQ (iq_set_tmp ))) / (4.0 * ld_lq_diff );
2555
+ iq_set_tmp = SIGN (iq_set_tmp ) * sqrtf (SQ (iq_set_tmp ) - SQ (id_set_tmp ));
2556
+ }
2551
2557
2552
2558
// Apply current limits
2553
2559
// TODO: Consider D axis current for the input current as well.
@@ -3989,14 +3995,3 @@ static void terminal_plot_hfi(int argc, const char **argv) {
3989
3995
commands_printf ("This command requires one argument.\n" );
3990
3996
}
3991
3997
}
3992
-
3993
- static void apply_mtpa (float * id , float * iq , volatile motor_all_state_t * motor ) {
3994
- float ld_lq_diff = motor -> m_conf -> foc_motor_ld_lq_diff ;
3995
-
3996
- if (ld_lq_diff != 0.0 ){
3997
- float lambda = motor -> m_conf -> foc_motor_flux_linkage ;
3998
-
3999
- * id = (lambda - sqrtf (SQ (lambda ) + 8.0 * SQ (ld_lq_diff ) * SQ (* iq ))) / (4.0 * ld_lq_diff );
4000
- * iq = SIGN (* iq ) * sqrtf (SQ (* iq ) - SQ (* id ));
4001
- }
4002
- }
0 commit comments