启动策略

← 返回 FOC MOC | ← 返回主页


引言:为什么需要专门的启动策略?

在无刷电机(BLDC/PMSM)的磁场定向控制(FOC)中, 启动过程是算法成功的关键 。电机静止时,转子位置未知,且静摩擦力较大,直接进入闭环FOC可能导致启动失败、抖动甚至反转。因此,必须设计稳健的启动策略,确保电机从静止平滑过渡到高速闭环运行。

本讲将详细剖析三个核心阶段: 对齐与预定位 、 开环启动(I-F控制) 和 向闭环FOC平滑切换 。

一、对齐与预定位 (Alignment & Pre-positioning)

此阶段目标:在电机启动前,将转子强制拉到一个已知的初始位置,为后续开环启动建立基准。

预定位阶段流程图

1.1 实现方法

  • 固定矢量法 :在-坐标系下,施加一个固定的电压矢量(例如 = 额定电压,),将转子磁极吸引到预定方向(通常定义为0电角度)。
  • 持续时间 :通常持续100ms~500ms,确保转子稳定对齐。
  • 电流限制 :需限制电流,防止过流。
// 预定位函数示例 (C语言)
void Motor_Alignment(uint32_t duration_ms) {
    // 设定对齐角度为0度 (电角度)
    float theta_elec = 0.0f;
    // 设定一个较小的对齐电流,避免过流
    float id_ref = 0.0f;
    float iq_ref = ALIGNMENT_CURRENT; // 例如 20% 额定电流
 
    // 持续施加固定矢量
    uint32_t start_tick = HAL_GetTick();
    while(HAL_GetTick() - start_tick < duration_ms) {
        // Clark & Park 变换 (略)
        // 计算并输出SVPWM
        FOC_CurrentControl(id_ref, iq_ref, theta_elec);
        // 等待下一个控制周期
        osDelay(1);
    }
}

**注意:**对于某些带负载或摩擦较大的场合,可能需要小幅来回摆动转子以“挣脱”静摩擦,这称为“振荡预定位”。

二、开环启动 - I-F 控制

在对齐完成后,转子处于已知位置。此时仍无法使用位置传感器(或无传感器观测器),因此采用 开环递增频率(I-F)控制 。

核心思想 :给定一个电流幅值 ,并让电压矢量的角度 按照一个逐渐增大的频率 匀速旋转,从而“牵引”转子跟着旋转起来。 1

设定初始参数

设定起始频率 (如 1 Hz)、目标频率、电流幅值 (通常为额定电流的20%-50%) 和加速度 (Hz/s)。 2

角度积分

在每个控制周期 (如 100μs),对当前频率进行积分,得到当前的电角度 。 3

输出矢量

以 为角度,以 为电流指令,运行FOC的电流环(或直接进行电压模式V-F控制)。 4

频率斜坡

按照设定的加速度,逐渐增加旋转频率 ,直到达到切换条件。

2.1 I-F 控制关键参数表

参数典型值说明调整影响
起始频率 ()1 - 5 Hz开环启动的初始旋转频率过低可能无法克服静摩擦,过高可能导致失步
电流幅值 ()20% - 50% 开环阶段给定的q轴电流决定启动转矩,过大可能过流,过小可能带不动负载
加速度 (Ramp Rate)10 - 100 Hz/s频率上升的斜率影响启动快慢,过快易失步,过慢启动时间长
切换频率 ()5% - 15% 额定频率切换到闭环FOC的频率点需确保观测器已能可靠工作
// I-F 开环启动核心代码示例
typedef struct {
    float freq_hz;      // 当前电频率 (Hz)
    float theta_elec;   // 当前电角度 (rad)
    float iq_ref;       // q轴电流设定
    float accel;        // 加速度 (Hz/s)
    float freq_target;  // 目标频率 (Hz)
} IF_OpenLoop_t;
 
void IF_OpenLoop_Step(IF_OpenLoop_t* loop, float delta_t) {
    // 1. 更新频率 (斜坡上升)
    if(loop->freq_hz < loop->freq_target) {
        loop->freq_hz += loop->accel * delta_t;
    }
    // 2. 积分得到角度
    loop->theta_elec += 2.0f * PI * loop->freq_hz * delta_t;
    // 归一化到 [0, 2π)
    if(loop->theta_elec > 2.0f * PI) {
        loop->theta_elec -= 2.0f * PI;
    }
    // 3. 使用当前角度和设定电流进行“开环FOC”
    // id_ref = 0, iq_ref = loop->iq_ref
    FOC_CurrentControl(0.0f, loop->iq_ref, loop->theta_elec);
}

三、向闭环FOC平滑切换

这是启动过程中 最精细、最关键的环节 。当开环I-F将电机加速到一定速度(通常为额定速度的5%-15%)后,无传感器观测器(如滑模观测器、龙伯格观测器、磁链观测器)已能估算出可靠的转子位置和速度。此时需要从开环强制角度切换到闭环观测角度。

3.1 切换策略

  1. 条件检测 :判断观测器输出是否稳定可靠(例如,估算反电动势幅值超过阈值,且速度波动小于容差)。
  2. 角度渐变 : 切忌 瞬间切换角度源!应采用加权平均或锁相环(PLL)渐入方式,在数十毫秒内,将控制角度从开环积分角 平滑过渡到观测器角 。 公式:,其中 从0线性增加到1。
  3. 频率同步 :将开环积分器的频率与观测器估算的频率同步,避免切换瞬间产生转矩脉动。
  4. 切换后处理 :完全切换到观测器角度后,关闭开环积分器,将电流环完全交由闭环FOC控制,并可逐步将电流指令提升到运行设定值。

角度平滑切换示意图:开环角度逐渐过渡到观测器角度

3.2 切换逻辑伪代码

// 切换状态机
typedef enum {
    STATE_ALIGNMENT,
    STATE_OPENLOOP_IF,
    STATE_TRANSITION,
    STATE_CLOSEDLOOP_FOC
} Motor_State_t;
 
// 平滑切换函数
float SmoothTransition(float theta_open, float theta_obs, float *alpha) {
    // alpha 从0到1线性增加
    if(*alpha < 1.0f) {
        *alpha += TRANSITION_STEP; // 例如每周期增加0.01
    } else {
        *alpha = 1.0f;
    }
    // 加权混合
    return (1.0f - (*alpha)) * theta_open + (*alpha) * theta_obs;
}
 
// 在主控制循环中
void Motor_Control_Loop(void) {
    switch(motor.state) {
        case STATE_OPENLOOP_IF:
            // ... 执行I-F控制 ...
            if(IsObserverReliable() && motor.freq_hz > SWITCH_FREQ_THRESHOLD) {
                motor.state = STATE_TRANSITION;
                motor.alpha = 0.0f; // 初始化混合系数
            }
            break;
        case STATE_TRANSITION:
            theta_open = ...; // 开环积分角度
            theta_obs = ...;  // 观测器估算角度
            // 平滑混合
            theta_control = SmoothTransition(theta_open, theta_obs, &motor.alpha);
            // 用混合角度进行FOC控制
            FOC_CurrentControl(id_ref, iq_ref, theta_control);
            // 检查切换是否完成
            if(motor.alpha >= 1.0f) {
                motor.state = STATE_CLOSEDLOOP_FOC;
                LOG("已成功切入闭环FOC!");
            }
            break;
        case STATE_CLOSEDLOOP_FOC:
            // 完全使用观测器角度进行闭环控制
            FOC_CurrentControl(id_ref, iq_ref, GetObserverTheta());
            break;
    }
}

四、总结与要点回顾

阶段核心目标关键操作成功标志
对齐预定位建立已知的转子初始角施加固定电压矢量,持续一定时间转子被牢牢吸到0°(或预定角度)
开环I-F启动将转子平稳加速到可观速范围电流恒定,频率斜坡上升,角度积分电机平稳加速,无失步,达到切换频率
平滑切换无扰动地切换到传感器/观测器闭环角度混合、频率同步、状态切换切换过程转矩平稳,速度无波动,观测器锁定
调试建议:
  • 使用示波器或上位机同时监控开环角度、观测器角度、q轴电流和速度。
  • 先空载调试,再逐步增加负载。
  • 切换点的选择和过渡时间需要根据具体电机和负载反复调试优化。
  • 对于高惯性负载,可能需要更长的开环加速时间和更大的启动电流。

掌握稳健的启动策略,是实现高性能无刷电机FOC控制的基石。通过精心设计的对齐、开环牵引和平滑切换,你的电机将能够从容地从静止迈向高速精准的闭环运行。