SimpleFOC:力矩控制调参实践

目录

  • 背景介绍
  • 1 电压控制 [voltage control](https://docs.simplefoc.com/voltage_torque_mode)
  • 1.1 pure voltage:不需电机参数
  • 1.2 voltage + current estimation:需要相电阻
  • 1.3 voltage + current estimation + back-EMF compensation:需要相电阻+KV值
  • 2 电流控制 [DC current control](https://docs.simplefoc.com/dc_current_torque_mode)
  • 3 FOC电流控制 [FOC current](https://docs.simplefoc.com/foc_current_torque_mode)
  • 4. 三种不同控制方式对比
  • 4.1 voltage
  • 4.2 DC current
  • 4.3 FOC current
  • 5. 调试过程中问题
  • 5.1 问题1:驱动电流单次变化太大时,电机会出现震荡,
  • 背景介绍

    FOC作为直流无刷电机控制最常用的算法,得到广泛应用。在开源社区最常用的FOC项目有:simpleFOCODriveVESC等。其中simpleFOC因其简单易用,支持多种硬件平台,很适合新手入门。我在用simpleFOC的过程中踩了不少坑,在此记录学习调试过程中的一些心得。

    硬件平台:开始最好直接购买套件,熟悉后再自己搭配,我这里直接买的灯哥开源的套件
    电机:2204
    驱动器:L6234
    磁编码器:AS5600
    电流检测:INA240
    主控MCU:ESP32

    软件平台:Arduino,simpleFOC库,simpleFOC studio图形化调试工具

    IDE工具PlatforIO,也可以使用Arduino IDE(编译、下载速度很慢,所以我才找到了替代工具platforIO)

    FOC控制方式有两种:

  • 开环控制:只需要电机、驱动器,不需要编码器、电流检测。算法简单,但是控制效果差,驱动效率差。驱动器、电机很容易过热烧坏,我就烧过一个驱动器,好几个电机。
  • 闭环控制:需要编码器、电流检测,算法复杂,控制效果好,驱动效率高。初学者一定要用闭环控制,等熟悉了之后再玩开环控制。
  • 这里主要总结闭环控制的几种控制方式:力矩控制,速度控制,角度控制。这里只总结了我自己调试的各种参数及图形化含义。具体程序和方法参考simpleFOC官方文档,里面有详细介绍。由于篇幅较长,分为两篇来写,本篇只总结力矩控制,下篇总结速度控制、位置控制

    1 电压控制 voltage control

    这种控制方式类似于直流有刷电机的控制,通过设置目标电压Uq,同时读取电机角度angle(a),经过FOC算法得到相电压Ua、Ub、Uc,FOC算法保障线圈产生的磁场方向与永磁铁磁场方向垂直90°,从而保障扭矩最大。相电压通过驱动器BLDC Driver驱动电机转动。

    电压控制只用到了磁编码器检测到的角度,电机参数(相电阻、KV值等),没有PID参数设置,所以各个PID都是用默认参数,不会对控制效果产生影响

    1.1 pure voltage:不需电机参数


    因为电机线圈产生的电流与扭矩成正比,而电流又与电压成正比,所以有:

    其中Uq:设定电压值,I:相电流,k:比例系数,T:扭矩。因为没有电流反馈,只能根据角度反馈来预估实际电压U,所以实际电压会不稳定。
    注意:这个公式只适用于低速情况,在高速情况下,I = (Uq – EMF) /R,电机线圈中的反向电动势会产生显著的影响,等式不再成立。

    1.2 voltage + current estimation:需要相电阻


    如果设置了电机相电阻参数,那么:

    这种控制方式比pure voltage控制更精准一些。因为知道了相电阻,可以很容易的计算出驱动电流。对应的电压波动也要小很多。同样只在低速情况下有效,高速时仍然受反向电动势影响。

    1.3 voltage + current estimation + back-EMF compensation:需要相电阻+KV值


    在simpleFOC最新版(V2.2.2)中增加了一个电机参数,KV值。在相电阻的基础上,又增加了反向电动势的反馈。通过角度传感器检测角度,角度微分后得到速度velocity(v),在经过低通滤波后除以KV值,可以预估出反向电动势(BEMF),Ubemf = v/KV,可以用作近似计算,二者不完全相等。


    增加了KV值后,当输入目标值0.2时,电压会把BEMF一起计算进去。
    当输入目标值设为0时,给一个启动速度,电机就会转动(因为有BEMF产生)。加一个负载很容易停止(强制BEMF为0)。

    由于电压控制没有用到PID调节器,所以修改所有PID参数都不会对结果产生影响。

    2 电流控制 DC current control


    电流控制除了需要检测角度之外,还需要同时检测相电流,从而能够直接控制电流大小,控制效果比电压控制好很多,算法要复杂一些,需要用到1个低通滤波(low pass filter),1个current q PID调节器。
    假设电机产生的扭矩与驱动电流成正比,可以通过控制电流来控制扭矩。这个假设的前提是在低速情况下iDC=iq,id分量可以忽略不计,在高速情况下,id分量无法忽略,iDC=iq不再成立,此时就需要用到下一节总结的FOC电流控制了。

    如下图所示,simpleFOC studio通过串口把所有参数都显示出来。左上方区域显示传感器参数:

  • angle:磁编码器检测到的角度,单位:弧度
  • velocity:根据angle计算出来的角速度,单位:rad/s
  • current:电流检测电路检测到的电流,单位:A
  • target:用户设定的目标值
  • 右上方区域实时绘制监测变量:target,Vq,Vd,Cq,Cd,Vel,Angle
    右下方区域是串口命令行

    左下方列出了simpleFOC可以调整的参数:

  • motion config:运动方式配置
  • motion control type:torque,velocity, angle,velocity openloop, angle openloop
  • torque control type: voltage, DC current, FOC current
  • motion downsample:1000, 采样率/1000,频繁采用会对FOC控制造成影响,所以要downsample
  • velocity PID:速度环PID控制,在下一篇SimpleFOC调参2-速度控制中介绍
  • angle PID:位置环PID控制,在另一篇SimpleFOC调参3-位置控制中介绍
  • current q PID:本节详细介绍各参数含义及对应图形显示
  • current d PID:下节详细介绍各参数含义及对应图形显示
  • limits:电机极限参数限制
  • velocity limi: 速度限制
  • voltage limit:电压限制
  • current limit:电流限制
  • States:电机状态参数
  • target:目标值
  • voltage q:电压q分量
  • voltage d:电压d分量
  • current q:电流q分量
  • current d:电流d分量
  • velocity:速度
  • angle:角度
  • sensor config:传感配置
  • zero angle offset:零角度偏移量,单位:弧度
  • electrical zero offset:电零角度偏移量,单位:弧度
  • general settings:通用配置
  • phase resistance:电机相电阻
  • motor status:电机状态 enabled,disabled
  • PWM modulation: PWM调制方式 sine PWM, space vector PWM, trapezoidal 120, trapezoidal 150
  • modulation center: 调制中心对齐 enabled, disabled

    motion control type 是torque力矩控制时,选择torque control type为DCcurrent时,只用到了current q PID调节器。设置target为0.2,目标是把驱动电路控制在0.2A,各参数含义及对应波形图如下:
  • proportional gain: 比例增益,影响PID控制的响应速度,P值越大响应速度越快
  • Integral gain:积分增益,累积误差的响应速度,I值为0时,current出现很大偏差,不会纠偏。I=300、500时响应见下图
  • Derivative gain:微分增益,未使用
  • output ramp:输出斜率?含义不清楚
  • output limit:输出限制,限制电压
  • low pass filter: 低通滤波器 Tf 滤波时间常数。影响滤波效果。


  • 3 FOC电流控制 FOC current

    这种控制方式是真正的完全版FOC控制。需要用到磁编码器,电流检测。将同时同时电流的q分量和d分量。目标是使desired current Id与q分量相等,d分量等于零。这样无论在低速、高速的情况下都会有比较好的控制效果,不会受d分量影响。这里用到2个PID控制器,2个low pass filter滤波器。

    FOC电流控制与DC电流控制最大的区别是增加了current d控制,同样设置target=0.2,同样空载情况下,角速度可以达到175作用,而DC电流控制角速度只有80左右。用手去挡电机,让电机停止后,明显感觉力变大了。这也说明:torque扭矩控制,控制的是驱动电流大小,而不是真实的电机扭矩

    Current d PID个参数含义与Current q PID相同,只是作用对象不同了。current q = target value, current d = 0

  • proportional gain: 比例增益,影响PID控制的响应速度,P值越大响应速度越快
  • Integral gain:积分增益,累积误差的响应速度,I值为0时,current出现很大偏差,不会纠偏。
  • Derivative gain:微分增益,未使用
  • output ramp:输出斜率?含义不清楚
  • output limit:输出限制,限制电压
  • low pass filter: 低通滤波器 Tf 滤波时间常数。影响滤波效果。
  • 4. 三种不同控制方式对比

    4.1 voltage

    下图中可以看到voltage控制时电流只是估计值,空载和负载时电流变化很大。

    4.2 DC current

    下图可以看出DC current直接控制电流,控制效果比voltage好很多,但是还是有一部分能量浪费在了current d上

    4.3 FOC current

    FOC控制做到了高低速情况下都使current q=target value, current d=0,能量利用率最高,转速也最快

    5. 调试过程中问题

    5.1 问题1:驱动电流单次变化太大时,电机会出现震荡,

    参数设置:

  • motion control type:Torque
  • torque control type:FOC current
  • Current q PID: P=5, I=1000, D=0
  • Current d PID: P=5, I=1000, D=0
  • 现象:设置目标值由低到高时一切正常,比如M0—M0.5,M0.5–M1.0。但是设置目标值由高到底时,单次变化过大会出现过冲,电流current q直接到-2A左右,系统在此处达到平衡并震荡。

    过冲值与比例因子P相关,设置current q、d的比例因子为10,结果如下图

    设置current q的比例因子为20,current d的比例因子为10,结果如下图

    最终如下图,可以得到比较好的结果。但是当M1.5—M0时优惠出现震荡。要想获得稳定的加减速过程,需要逐步加速、减速,不能让力矩控制环中的电流current q、d发生巨变,如果发生巨变很可能引起电机震荡,甚至损坏电机、驱动电路。

    物联沃分享整理
    物联沃-IOTWORD物联网 » SimpleFOC:力矩控制调参实践

    发表评论