打印
[电机控制专用MCU]

APM32M3514 FOC算法解析系列——第3篇:FOC算法模块

[复制链接]
108|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 a976209770 于 2024-12-26 23:27 编辑

1. FOC算法模块概述
FOC(无传感器磁场定向控制)是一种高效的电机控制方法,它通过直接控制电机的磁场方向来实现高精度的转速和位置控制。在 APM32M3514 电机控制系统中,FOC算法结合了电流环、速度环、以及SVPWM(空间矢量脉宽调制)技术,从而实现对电机的精确控制。

1.1 关键功能
  • 电流环控制:确保电机输出的力矩与电流成正比。
  • 速度环控制:控制电机的转速,通过调整电流命令值来实现目标速度。
  • SVPWM调制:通过生成合适的PWM信号来控制逆变器,从而实现对电机相电流的精确控制。

2. FOC算法模块的文件结构

2.1 关键文件
  • MOTOR_CONTROL/FOC_Ctrl.c:
    • 该文件实现了FOC算法的核心功能,包括电流环控制、速度环控制、SVPWM调制等。
    • 文件中包括了 PI控制器 的实现和 空间矢量脉宽调制(SVPWM) 的生成函数。
  • MOTOR_CONTROL/inc/FOC_Ctrl.h:
    • 该头文件声明了FOC算法所需要的函数原型。
    • 包含电流环、速度环控制的函数声明,及SVPWM函数的声明。


3. 电流环和速度环控制的实现
3.1 电流环控制
电流环控制是FOC算法的核心部分,电流环的作用是调节电机的转矩。通过测量电机的电流并与参考电流进行比较,PI控制器将调整电流命令,以确保电机产生正确的转矩。
FOC_Ctrl.c 中,电流环的实现代码如下:
// 电流环 PI控制
void CurrentControl(void) {
    // 计算Iq轴电流误差
    Iq_error = IqRef - Iq_actual;
    // 计算电流控制输出
    Iq_control = PI_Calculate(Iq_error, &Iq_PI_Params);
   
    // 计算Id轴电流误差
    Id_error = IdRef - Id_actual;
    // 计算电流控制输出
    Id_control = PI_Calculate(Id_error, &Id_PI_Params);
}
电流环控制流程
  • 误差计算:计算实际电流与目标电流(IqRef 和 IdRef)之间的差值。
  • PI控制:使用PI控制器对误差进行调节,输出控制量(Iq_control 和 Id_control)。
  • 电流命令输出:根据PI控制器的输出,调整电流参考值,控制逆变器的PWM输出。

PI控制器PI控制器通过调节比例(P)和积分(I)参数,确保电流误差最小化。PI控制器的计算代码如下:
// PI计算函数
int16_t PI_Calculate(int16_t error, PI_Params *params) {
    params->integrator += error;  // 积分项
    int16_t output = (params->Kp * error) + (params->Ki * params->integrator);  // 输出项
    return output;
}
KpKi 为比例和积分增益,控制器根据误差调整电流输出。

3.2 速度环控制
速度环控制是FOC算法的另一重要组成部分,其作用是控制电机的转速,确保电机运行在目标速度下。
速度环控制实现的核心思想是:根据目标速度(s16SpdCmd)和实际速度(s16SpeedActual)之间的误差,调整电流(IqRef)来调节电机的转速。
FOC_Ctrl.c 中,速度环的实现代码如下:

// 速度环 PI控制
void SpeedControl(void) {
    // 计算目标速度与实际速度的误差
    speed_error = s16SpdCmd - s16SpeedActual;
   
    // 通过PI控制器调节速度
    speed_control = PI_Calculate(speed_error, &Speed_PI_Params);
   
    // 更新电流参考值
    IqRef = speed_control;  // 将速度环的输出作为电流参考
}
速度环控制流程
  • 误差计算:计算目标速度与实际速度之间的差值。
  • PI控制:通过PI控制器调节速度误差,输出电流参考(IqRef),用于电流环控制。


4. SVPWM(空间矢量脉宽调制)生成逻辑
SVPWM 是一种高效的调制方法,用于控制逆变器输出的三相电压,从而控制电机的转矩和速度。SVPWM 通过选择合适的矢量组合,实现逆变器的PWM信号生成,从而控制电机的相电流。

4.1 SVPWM生成代码
FOC_Ctrl.c 中,SVPWM的实现代码如下:
// SVPWM生成
void SVPWM_Generate(void) {
    // 根据控制目标(Iq_control, Id_control)计算所需的电压矢量
    float V_alpha = Iq_control * cos(Theta) - Id_control * sin(Theta);  // 计算V_alpha
    float V_beta = Iq_control * sin(Theta) + Id_control * cos(Theta);   // 计算V_beta

    // 使用V_alpha和V_beta计算PWM占空比
    CalculatePWM(V_alpha, V_beta);
}
SVPWM生成流程
  • 计算电压矢量:根据电流命令值(Iq_control 和 Id_control)以及转子角度(Theta),计算空间矢量的V_alpha和V_beta分量。
  • 计算PWM占空比:根据电压矢量分量计算PWM占空比,最终生成三相电机驱动的PWM信号。


5. 参考速度(s16SpdCmd)的作用
参考速度 s16SpdCmd 是系统输入的重要参数,表示用户期望的电机转速。通过速度环控制,s16SpdCmd 和实际速度之间的误差被PI控制器调节,生成电流参考(IqRef)。电流参考进一步影响电机的力矩输出。


5.1 参考速度与电流控制的关系
// 更新电流参考
IqRef = speed_control;  // 速度环输出影响电流参考值
功能说明
  • 目标速度 s16SpdCmd 影响 IqRef 的值,最终通过电流控制系统调节电机的转矩。


6. FOC控制算法的整体流程
整个 FOC 控制过程由多个环节和函数协同工作,包含坐标变换、电流控制、速度控制、以及PWM生成。以下是整个算法的整体流程:



流程图详细描述
  • 开始
    • 系统开始执行FOC算法。
  • 读取电流反馈(Iu, Iv, Iw)
    • 从电流传感器获取三相电流反馈。
  • Clarke变换(Iu, Iv 到 Ialpha, Ibeta)
    • Clarke变换将三相电流(Iu, Iv, Iw)转换为 α-β 轴电流(Ialpha, Ibeta)。
    • 变换公式:Ialpha=IuIbeta=(Iu+2∗Iv)/√3Ialpha = IuIbeta = (Iu + 2 * Iv) / √3
  • Park变换(Ialpha, Ibeta 到 Id, Iq)
    • 使用 Park 变换将 α-β 电流转换到 d-q 轴电流(Id, Iq)。
    • 变换公式:Id=Ialpha∗cos(θ)+Ibeta∗sin(θ)Iq=−Ialpha∗sin(θ)+Ibeta∗cos(θ)Id = Ialpha * cos(θ) + Ibeta * sin(θ)Iq = -Ialpha * sin(θ) + Ibeta * cos(θ)
  • 电流环控制 PI
    • 对 Id 和 Iq 进行 PI 控制,确保电机的转矩和磁场方向精确控制。
    • PI 控制函数会计算出新的电流控制命令。
  • 速度环控制 PI
    • 计算目标速度 s16SpdCmd 与实际速度 s16SpeedActual 之间的误差,采用 PI 控制调节速度。
    • 输出控制信号作为电流参考 IqRef。
  • 计算电流参考 IqRef
    • 根据速度环的输出结果调节 IqRef,调整电流参考,以实现目标转速。
  • 滑模观测器估算转子角度和速度
    • 使用滑模观测器或其他无传感器方法估算转子的位置和速度。
    • 结合电流和电压的反馈信息估算转子位置 (Theta) 和转速 (Speed)。
  • 计算电压矢量 Vd, Vq
    • 根据电流参考 IqRef 和 IdRef 计算电机的电压矢量 Vd 和 Vq,这将用来控制逆变器的输出。
  • SVPWM生成
    • 使用 SVPWM(空间矢量脉宽调制)生成逆变器控制的PWM信号,控制电机的相电流。
    • 通过逆变器调整电机相电压,从而实现对电机转速和转矩的控制。
  • 计算PWM占空比
    • 根据 Vd 和 Vq 计算电压矢量的占空比,调节PWM信号。
  • 生成PWM信号
    • 生成适用于逆变器的PWM信号,调整逆变器的开关状态。
  • 控制逆变器输出三相电压
    • 通过控制逆变器的三相电压,最终控制电机的运行。
  • 驱动电机
    • 输出的三相电压驱动电机旋转。
  • 监测电机状态
    • 系统实时监测电机的运行状态,确保电机在正常工况下运行。
  • 状态切换判断
    • 如果检测到停止命令或错误(如过流、过压等),则切换电机的状态。
    • 如果没有错误或停止命令,则继续运行。
  • 切换到新状态
    • 当发生故障或需要停机时,系统会切换到适当的状态,如 RunState_Freewheel(空转状态)或 RunState_Stop(停止状态)。
  • 继续控制电机
    • 如果没有发生状态切换,则系统继续按照FOC算法控制电机。

7. 总结
在本篇文章中,详细介绍了 APM32M3514FOC控制算法 模块的实现,包括电流环控制、速度环控制、SVPWM生成和转子角度估算。通过结合实际代码和流程图,可以更清晰地理解 FOC 算法的工作原理及其实现过程。
FOC 算法的成功实现依赖于多个关键环节的协调工作,包括坐标变换、电流调节、速度控制、转子角度估算和PWM调制等。通过这些步骤,系统能够精确控制电机的转速和转矩。






使用特权

评论回复
沙发
dongnanxibei| | 2024-12-27 08:25 | 只看该作者
太给力了,最近学电机呢

使用特权

评论回复
板凳
dongnanxibei| | 2024-12-27 08:25 | 只看该作者
太给力了,最近学电机呢

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

35

主题

38

帖子

0

粉丝