SimpleFOC 取消上电自检方法,也就是不需要每次上电都让无刷电机转一整圈进行校准,避免电机和传感器对准程序,TLE5012B编码器

SimpleFOC 取消上电自检方法,也就是不需要每次上电都让电机转一整圈进行校准,避免电机和传感器对准程序


首先第一步:运行SimpleFOC中的示例代码进行零点标定
SimpleFOC 取消上电自检方法,也就是不需要每次上电都让无刷电机转一整圈进行校准,避免电机和传感器对准程序,TLE5012B编码器_第1张图片
第二步:得出运行结果
SimpleFOC 取消上电自检方法,也就是不需要每次上电都让无刷电机转一整圈进行校准,避免电机和传感器对准程序,TLE5012B编码器_第2张图片
第三步:复制粘贴运行结果

Sensor zero offset is:
0.0000
Sensor natural direction is: 
Direction::CCW
To use these values provide them to the: motor.initFOC(offset, direction)
If motor is not moving the alignment procedure was not successfull!!

其中的0.0000 Direction::CCW
粘贴至motor.initFOC(0.0000, Direction::CCW);
然后运行你的程序,即可避免避免电机和传感器对准程序

这个避免上电校准的方法仅仅适合于绝对值编码器,增量式编码器应该不适用,不过可以试试

我起先寻找这个方法主要是由于机械限位所以不允许上电自校转一圈,查看了SimpleFOC库中的BLDCMotor.cpp如下:

/**
  FOC functions
*/
// FOC initialization function
int  BLDCMotor::initFOC( float zero_electric_offset, Direction sensor_direction ) {
     
  int exit_flag = 1;
  // align motor if necessary
  // alignment necessary for encoders!
  if(zero_electric_offset != NOT_SET){
     
    // abosolute zero offset provided - no need to align
    zero_electric_angle = zero_electric_offset;
    // set the sensor direction - default CW
    sensor->natural_direction = sensor_direction;
  }else{
     
    // sensor and motor alignment
    _delay(500);
    exit_flag = alignSensor();
    _delay(500);
    }
  if(monitor_port) monitor_port->println("MOT: Motor ready.");

  return exit_flag;
}

发现确实是可以传值进去的,我使用的是TLE5012B编码器,这个精度很高了,但是有钱建议上AMT103-V电容式增量式值编码器,抗干扰,比笔者用的这种磁编码器好很多,或者式AMT203绝对值编码器

你可能感兴趣的:(FOC)