9.0脱离WorkBench直接修改电路及电机的参数实现调试

9.0脱离WorkBench直接修改电路及电机的参数实现调试

  WorkBench生成代码工程,以及设定参数非常方便。但是由于workbench生成再由cubeMX生成代码,最后由Keil执行编译这个过程太麻烦,或许还会生成或编译出错;所以,采用直接修改源代码的方式来调试或更改电机的参数,效率更高。
  或者,在作为产品发布使用时,需要动态的配置这些参数,更需要清晰的知道这些参数的原理、修改位置和影响的工作状态。
所修改的源码位置,我记录出所在的文件及行数,再贴出关键的几行代码。

1. 修改电机的参数内容

在workbench中的位置是这个界面:
9.0脱离WorkBench直接修改电路及电机的参数实现调试_第1张图片
pmsm_motor_parameters.h 整个文件都是电机的参数相关

/**************************
 *** Motor 1 Parameters ***
 **************************/

/***************** MOTOR ELECTRICAL PARAMETERS  ******************************/
#define POLE_PAIR_NUM          2 /* Number of motor pole pairs *//*电机的极对数*/
#define RS                     3.50 /* Stator resistance , ohm*/
#define LS                     0.001650 /* Stator inductance, H
                                                 For I-PMSM it is equal to Lq */

/* When using Id = 0, NOMINAL_CURRENT is utilized to saturate the output of the
   PID for speed regulation (i.e. reference torque).
   Transformation of real currents (A) into int16_t format must be done accordingly with
   formula:
   Phase current (int16_t 0-to-peak) = (Phase current (A 0-to-peak)* 32767 * Rshunt *
                                   *Amplifying network gain)/(MCU supply voltage/2)
*/

#define NOMINAL_CURRENT         3038
#define MOTOR_MAX_SPEED_RPM     3000 /*!< Maximum rated speed  */
#define MOTOR_VOLTAGE_CONSTANT  7.5 /*!< Volts RMS ph-ph /kRPM */
#define ID_DEMAG                -3038 /*!< Demagnetization current */

/***************** MOTOR SENSORS PARAMETERS  ******************************/
/* Motor sensors parameters are always generated but really meaningful only
   if the corresponding sensor is actually present in the motor         */

/*** Hall sensors ***/
#define HALL_SENSORS_PLACEMENT  DEGREES_120 /*!

#define HALL_PHASE_SHIFT        300 /*!< Define here in degrees
                                                 the electrical phase shift between
                                                 the low to high transition of
                                                 signal H1 and the maximum of
                                                 the Bemf induced on phase A */
/*** Quadrature encoder ***/
#define M1_ENCODER_PPR             1024  /*!< Number of pulses per
                                            revolution */

2. 修改电机的驱动参数

  改完电机的机械及电气参数后,电机还不能正确的控制,因为还有驱动参数没有做调整。
  drive_parameters.h文件中,全是电机的驱动参数。在调整电机的参数之后,workbench会自动计算调整在控制电流环、力矩环、速度环的PID参数。我们在脱离workbench修改这些参数时,最好从workbench的Drive Setting里面Copy过来。

  • 图1 Workbench中的DriveSettings
    9.0脱离WorkBench直接修改电路及电机的参数实现调试_第2张图片
  • drive_parameters.h文件中 69行代码开始
/* Gains values for torque and flux control loops */
#define PID_TORQUE_KP_DEFAULT         2650       
#define PID_TORQUE_KI_DEFAULT         1988
#define PID_TORQUE_KD_DEFAULT         100
#define PID_FLUX_KP_DEFAULT           2650
#define PID_FLUX_KI_DEFAULT           1988
#define PID_FLUX_KD_DEFAULT           100

/* Torque/Flux control loop gains dividers*/
#define TF_KPDIV                      512
#define TF_KIDIV                      16384
#define TF_KDDIV                      8192
#define TF_KPDIV_LOG                  LOG2(512)
#define TF_KIDIV_LOG                  LOG2(16384)
#define TF_KDDIV_LOG                  LOG2(8192)
#define TFDIFFERENTIAL_TERM_ENABLING  DISABLE

/* Speed control loop */ 
#define SPEED_LOOP_FREQUENCY_HZ       500 /*!
#define PID_SPEED_KP_DEFAULT          2506/(SPEED_UNIT/10) /* Workbench compute the gain for 01Hz unit*/
#define PID_SPEED_KI_DEFAULT          403/(SPEED_UNIT/10) /* Workbench compute the gain for 01Hz unit*/
#define PID_SPEED_KD_DEFAULT          0/(SPEED_UNIT/10) /* Workbench compute the gain for 01Hz unit*/
/* Speed PID parameter dividers */
#define SP_KPDIV                      512
#define SP_KIDIV                      16384
#define SP_KDDIV                      16
#define SP_KPDIV_LOG                  LOG2(512)
#define SP_KIDIV_LOG                  LOG2(16384)
#define SP_KDDIV_LOG                  LOG2(16)

/* USER CODE BEGIN PID_SPEED_INTEGRAL_INIT_DIV */
#define PID_SPEED_INTEGRAL_INIT_DIV 1 /*  */
/* USER CODE END PID_SPEED_INTEGRAL_INIT_DIV */

#define SPD_DIFFERENTIAL_TERM_ENABLING DISABLE
#define IQMAX                          8102

  代码中的参数都是来自于workbench中的数据,这部分数据是根据特定计算方法生成的,在workbench的使用手册中有单独介绍。大致的思路是根据电机的机械电气特性参数,控制系统的传递函数,最后简化出的一个公式,计算出来一个数据。但是这个数据可能会含有小数,MCU计算小数的能力有限,所以直接用一个分数的形式来表示这个数字。分母都是2的几次方数,在计算的时候可以直接用移位的方法进行除法运算。这样做了之后,MCU计算速度可以加快很多,计算结果的精度也能符合需求。
  如果要自行改动,最好也是遵循这个思路来进行。具体的计算公式,在后续整理时,会补充到文章里来。

在代码里面改完如上两张图片里的设置内容,就能让电机正常旋转起来了。
电机的机械电气参数,如何测得可以参考 4.电机参数的含义及测量方法电机驱动文章在CSDN的分享计划

你可能感兴趣的:(ST,FOC永磁同步电机)