[电机控制专用MCU] 基于M3101无感FOC - 调试步骤(开环启动模式)

[复制链接]
153|6
lc115647 发表于 2026-3-3 14:45 | 显示全部楼层 |阅读模式

1. 关键参数设置

与原先M3514软件算法有所差异,新版本把各个软件配制参数做了分离,主要的系统的配置主要分为4个,分别是

  1. parameter.h:

包括系统层参数配置、硬件参数配置、电机运行状态参数配置、电机异常状态检测参数配置、各个PI环路参数整定及设定、功率环控制等;

  1. user_motor_parameter_config.h:

电机核心电气参数配置、电机参数统一标定配置。

  1. user_obs_mode_config.h:

低速观测器参数配置、高速观测器参数配置、顺逆风参数配置。

  1. user_work_mode_config.h:

电机启动方式设定、顺逆风启动使能设定、IPD初始位置检测启动使能设定等。

2. 运行模式

与原先软件算法相比,新版本支持闭环启动,在user_work_mode_config.h文件中修改宏定义START_MODE_SET 可设置为 START_OPENLOOP_MODE(开环启动) 和 START_CLOSELOOP_MODE (闭环启动)

3. 程序基本参数设置

3.1. 测量

此部分主要涉及到电机的相关参数(可通过电桥及万用表等设备),包括相电阻、电感、极对数等,并在user_motor_parameter_config.h文件中修改相关参数。**默认使用开发板调试,因此不介绍其他与硬件电路相关参数。

  • 相电阻:

数字万用表欧姆档,探头两端夹在任意两相之间测量,然后调换顺序,测量出三组值,平均后结果除2。

  • 相电感:

数字电桥(Ls-Rs Freq:10K V:0.3V)两端夹在任意两相之间测量,转动电机,找出电感的最大最小值,然后调换顺序,测量出三组值,平均后结果除2。Lq = L_max / 2;Ld = L_Min / 2。

  • 极对数:

可将电机其中两相,接入一个低电压,低电流电源,手动转动电机转子,感受电机顿挫感,一个顿挫感代表一个极对数。

3.2. 电压设置

此部分主要设置:

在parameter.h中,设置电机电压工作范围,可参考电机规格书设置,保证电机工作时不会出现过压损坏或欠压无法正常工作。

3.3. 电流设置

此部分需要设置:

在parameter.h中,设置软件过流保护值,可参考电机规格书设置,保证电机工作时不会出现过流保护,速度PI调节电流值限制可以设置比保护值略小。

3.4. 电机参数设置

此部分主要涉及到电机的转速设定:包括额定转速,转速标幺量程,旋钮控制时转速的最大、最小值等,并在user_motor_parameter_config.h文件中修改相关参数。额定转速(MOTOT_SPEED_RPM_RATED)一般根据电机规格书设定,标幺转速(SPEED_CALIBRATION)需要一般建议设置为125%左右即可。过大会导致控制精度偏低,过小会导致异常。

同时在parameter.h中设置电机保护最小转速和电机保护最大转速,防止电机启动时因为速度过大产生保护。

3.5. 电机状态机切换速度阈值设置

parameter.h文件中找到下面几个宏定义:

**STOP_TO_RUN_RPM(**停止到运行切换速度阈值):

这个阈值应该足够小,以便快速响应启动命令,但又不能太小,避免噪声误触发;建议:最大转速的1-2%。

STARTUP_TO_SPIN_SPEED(开环到闭环切换速度阈值):

观测器能够可靠工作的最低速度,低于这个速度,观测器估算的角度和速度不可靠,高于这个速度,才能从开环切换到闭环;建议:额定转速的5-10%。

考虑因素:

  • 电机类型:PMSM通常可以更低,BLDC需要更高
  • 负载特性:重载时需要更高速度
  • 观测器性能:滑模观测器通常需要100RPM以上

FREEWHEEL_SPEED (自由轮速度):

当速度低于此值时进入自由轮状态,应该比停止到运行阈值稍高,形成迟滞,建议:最大转速的2-3%。

3.6. 电机工作模式设定

user_work_mode_config.h中设定电机工作模式,建议先使用开环启动模式(START_OPENLOOP_MODE)

同时如果不是风机应用,关闭顺逆风启动**(#define WIND_ENABLE (0));**

4. 调试步骤

此时调试方式可参考M3514 V1.0版本调试步骤:

4.1. 先预定位调节电流环PI

由状态机切换逻辑可以了解到,预定位到开环切换逻辑在慢环速度环中实现的,因此修改慢环预定位代码如下所示,屏蔽预定位到开环的判断逻辑。

 */
static void M1_RunAlignSlow(void)
{
    stc_FocCtrl.stc_IdqCmd.s16q15_D = 0;
    if(stc_FocCtrl.s16_SpdCmd > 0)
    {
        stc_FocCtrl.stc_IdqCmd.s16q15_Q = ramp_s16(CUR_ALIGN,&stc_IdRamp);
    }
//    if(abs(stc_FocCtrl.stc_IdqCmd.s16q15_Q) == CUR_ALIGN)
//    {
//        M1_SwitchRunAlignStartup();
//        stc_IdRamp.s32q20_OutTemp = 0;
//    }
      if(abs(stc_FocCtrl.s16_SpdCmd) < STOP_TO_RUN_SPEED)
      {
          /* Switch from Stop to Run state*/
            ATMR_PWMOutput(DISABLE);
            eM1_MainState = MainState_Stop;
            eM1_RunSubState = RunState_Calib;
            /*复位参数*/
            variable_reset();
      }
}

修改合适的预定位电流值:

下载代码进入开发板,观察电机是否动一下;

新版本程序在原先基础上添加了电流环参数自动计算功能,但对于部分电机来说,靠计算的PI参数,可能会出现低速情况下能正常运行,在高速运行下,容易出现电流波动较大的情况,建议实际使用手动调整最佳。

**ELECT_CUT_OFF_FREQ:**基于电机电气换算的截至频率(自动计算)

**FORCE_CUT_OFF_FREQ:**自行设定的截至频率,需手动配置,自行设定的截至频率 2pi*f 单位rad/s

**FINAL_CUT_OFF_FREQ:**选取截止频率的方式,可选取ELECT_CUT_OFF_FREQ或 FORCE_CUT_OFF_FREQ

可在parameter.h文件中找到下面几个宏定义进行修改:

下图是使用 ELECT_CUT_OFF_FREQ 自动计算调节出的电流环D、Q轴电流。电流跟随比较好,有点部分震荡,如追求较好效果,建议手动调试优化PI参数。

4.2. 开环状态调节锁向环PI以及观测器增益和误差范围

  • 不开启SOFT_SWITCH_SPIN:

  • 开启SOFT_SWITCH_SPIN:

屏蔽下面两段代码

parameter.h文件中找到下面几个关于锁相环PI参数宏定义进行修改:

user_obs_mode_config.h文件中,主要修改高速观测器误差范围和高速观测器增益范围这两项值,此处建议使用手动配置--手动填写观测器增益系数。如对滑膜观测器有较深理解可以采用观测器增益自计算。

此部分主要调节观测器速度能否快速收敛到设定的斜坡速度上,具体效果可结合实际,

在此处我们引入了一个叫PLL归一化使能(HOBS_NORMALIZED_PLL_ENABLE)的参数。默认不开启,在部分应用场合开启会有一定优化效果。

4.2.1. 什么是PLL归一化处理?

4.2.1.1. 基本原理

  • 反电动势特性:反电动势幅值与转速成正比

我们知道滑模观测器主要靠反电动势估算转子角度,计算速度值,但是在低速区域会有性能严重退化问题。

  • 归一化目的
    • 消除转速变化对位置估算的影响
    • 高速时反电动势幅值大
    • 低速时反电动势幅值小
    • 直接使用会影响PLL的收敛性和精度

4.2.2. PLL归一化处理的主要作用

  1. 提高位置估算精度
  • 消除转速变化引起的估算误差
  • 使PLL在整个速度范围内保持一致的动态性能
  • 降低高速和低速时的位置估算偏差

2. 增强系统鲁棒性

  • 参数变化适应:减弱电机参数变化(如磁链变化)的影响
  • 抗扰动能力:对负载变化和外部干扰具有更好的适应性
  • 稳定性提升:避免因幅值波动导致的PLL失锁

3. 改善动态响应

  • 快速收敛:PLL能更快地锁定转子位置
  • 减小超调:位置跟踪过程更加平稳
  • 宽速域性能:从零速到高速都能保持良好性能

4. 简化PLL设计

  • 参数整定简化:PLL参数不需要随速度调整
  • 标准化处理:统一的处理方式简化了算法实现
  • 可移植性:便于在不同功率等级电机上应用

4.2.3. 归一化处理在PLL中的工作流程

部分参考代码实现如下所示:

// 典型归一化处理代码示例
void Normalize_BackEMF(float *e_alpha, float *e_beta)
{
    // 计算反电动势幅值
    float E_amplitude = sqrtf(*e_alpha * *e_alpha + *e_beta * *e_beta);
  
    // 归一化处理(避免除零)
    if(E_amplitude > EPSILON) {
        *e_alpha = *e_alpha / E_amplitude;
        *e_beta = *e_beta / E_amplitude;
    } else {
        *e_alpha = 0;
        *e_beta = 0;
    }
}

4.2.4. 技术优势与注意事项

优势

  1. 全速域一致性:高速和低速性能均衡
  2. 降低对精确参数的依赖:对电机参数变化不敏感
  3. 易于实现:计算量小,适合嵌入式系统

注意事项

  1. 低速处理:接近零速时反电动势幅值很小,需要特殊处理
  2. 除零保护:必须加入幅值阈值判断
  3. 噪声影响:归一化可能放大测量噪声,需要适当滤波

实际应用效果

  1. 位置估算误差:通常可降低30%-50%。
  2. 速度估算范围:扩展至更低速度(可达额定转速的1%-2%)
  3. 动态响应:转速突变时的恢复时间缩短20%-40%

**总结:**归一化处理是提升滑模观测器PLL性能的关键技术之一,特别适用于对低速性能和全速域稳定性要求较高的FOC应用场合

4.3. 闭环调节速度环PI,即可正常运行。

在parameter.h文件中找到下面几个关于速度环PI参数宏定义进行修改:

若出现停机的最后时刻电机异常抖动,说明 FREEWHEEL_SPEED 阈值设置不对,观测器最后速度观测异常,可找到改点速度值,计算出速度阈值。

至此如无报错信息,电机基本可正常运行,可做后续测试,再结合实际调整参数。

幻影书记 发表于 2026-3-4 18:44 | 显示全部楼层
我一直以为电机控制就是输出PWM波就可以了。
lvyunhua 发表于 2026-3-6 17:35 | 显示全部楼层
路过学习了
葡萄又绿江南岸 发表于 2026-3-14 09:39 | 显示全部楼层
M3101 无感 FOC 开环启动调试:1. 初始化电机参数(极对数、相电阻等),配置 PWM、ADC 采样;2. 关闭闭环,设置开环启动频率 / 电压,输出 SPWM 驱动电机;3. 逐步提升频率至电机同步转速,监测相电流 / 电压;4. 确认电机无堵转、异响,转速平稳后,再切换闭环。核心是低频率起步,缓慢升频,验证硬件与基础驱动逻辑。
总结
先配置电机参数与底层硬件(PWM/ADC);
开环模式下低频率起步,逐步升频;
监测电机状态,验证基础驱动逻辑正常。
葡萄又绿江南岸 发表于 2026-3-19 09:42 | 显示全部楼层
M3101 无感 FOC 开环启动调试:1. 初始化电机参数(极对数、相电阻)及硬件(PWM、ADC 采样);2. 关闭闭环,设置低初始频率 / 电压输出 SPWM,驱动电机低速运转;3. 逐步提升频率至同步转速,监测相电流、电压无异常;4. 确认电机无堵转、异响,转速平稳,验证基础驱动逻辑。
总结
先完成电机参数与底层硬件配置;
低频率起步,逐步升频避免电机异常;
监测电气参数,验证基础驱动有效性。
桃乐丝 发表于 2026-3-26 14:37 | 显示全部楼层
硬件校准:确认电机相序、电流采样电路与驱动电路接线无误;2. 参数配置:写入电机额定电压、极对数等基础参数,配置开环启动频率 / 加速斜率;3. 运行调试:先低频率开环启动,监测母线电流与电机转速,逐步提升频率至平稳运行;4. 优化:调整加速斜率,避免过流或启动抖动。
总结
核心步骤:硬件校准→参数配置→低频启动→参数优化;
关键要点:先低频验证,逐步提频,重点监测电流与转速。
快乐制造机 发表于 2026-5-15 22:51 | 显示全部楼层
文章中提到的参数设置和调试步骤非常详细,对于新手来说是个很好的学习资料。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

31

主题

44

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部
0