从电流闭环到速度闭环的无缝切换示例代码,优化传统三段式启动方式,实现自适应负载的平稳顺滑启动(...
代码通过状态机管理电机运行流程,分阶段完成闭环切换。强制加速启动(STARTUPACCELERATION)→ Iq基准值递减调整(STARTUPIQREFREDUCE)→ 速度闭环运行(RUN_CLOSELOOP),最终实现从依赖强制角度累加,到使用观测器估算角度的平稳过渡。变量分类变量名功能描述状态变量电机运行状态枚举,包含4个阶段:启动定位、启动加速、Iq基准值递减、速度闭环运行角度相关FOC
电流闭环到速度闭环无缝切换__示例代码 ,它特别适合对传统的三段式启动方式 定位——>电流闭环强拖——>速度闭环进行优化,它能够自适应各种负载大小的情况,切换过程中电流和速度连续不突变,启动平稳顺滑。 发送切换的示例代码,代码已经过产品上千次启动验证,注释清楚,完全可以自行理解。

该示例代码的核心功能是实现电机从电流闭环(IF闭环)启动阶段,到速度闭环运行阶段的无缝切换,通过角度误差控制和Iq基准值动态调整,确保切换过程平稳无冲击。
一、核心功能概述
代码通过状态机管理电机运行流程,分阶段完成闭环切换。整体流程为:强制加速启动(STARTUPACCELERATION)→ Iq基准值递减调整(STARTUPIQREFREDUCE)→ 速度闭环运行(RUN_CLOSELOOP),最终实现从依赖强制角度累加,到使用观测器估算角度的平稳过渡。
二、关键变量定义
| 变量分类 | 变量名 | 功能描述 |
|---|---|---|
| 状态变量 | MotorRun_State |
电机运行状态枚举,包含4个阶段:启动定位、启动加速、Iq基准值递减、速度闭环运行 |
| 角度相关 | ParkParm.qAngle |
FOC变换中使用的角度(初始为强制累加角度,切换后结合观测角度) |
| 角度相关 | smc1.Theta |
观测器估算的电机角度 |
| 角度相关 | theta_error |
强制累加角度与观测角度的差值 |
| 速度相关 | MotorParm.end_speed |
由强制累加旋转角度计算的实时速度 |
| 速度相关 | speedloop_ref |
切换到速度闭环时的速度设定值 |
| 电流相关 | CtrlParm.IqRef |
电流环Iq基准值(动态调整) |
| 电流相关 | iq_min |
Iq基准值的最小值限幅(防止过度减小) |
| 计数相关 | Iqrefreduce_counter |
Iq基准值递减的时间间隔计数器 |
| 计数相关 | iqmincounter |
Iq基准值达到最小值后的持续时间计数器 |
三、核心宏定义(参数配置)
| 宏名称 | 数值 | 功能描述 |
|---|---|---|
TRANSFERSPEEDSTART |
600 | 切换启动速度阈值,达到此速度进入Iq基准值递减阶段(建议为额定转速的1/10-1/5) |
TRANSFERSPEEDEND |
1500 | 切换最终速度阈值(目标速度) |
TRANSFERFINISHANGLE |
10 | 切换完成的角度差门槛值(小于10度时判定切换完成) |
ANGLE_BASE |
180 | 角度基准值,用于角度差的标幺化计算 |
IQREFCOUNTER_MAX |
1000 | Iq基准值递减的时间间隔计数最大值(控制调整频率) |
TRANSFER_KP |
550 | Iq基准值递减的比例系数(P系数,误差越大递减越多) |
DEGREEQ15_0POINT025 |
4 | 角度误差渐变步长(最终将误差减小到0.025度) |
IQMINCOUNTER_MAX |
2000 | Iq基准值达到最小值后的最大持续时间(2秒,超时强制切换) |
四、核心函数逻辑(calculate_angle_process)
函数通过状态机分支,实现不同阶段的核心控制逻辑,具体如下:
1. 启动加速阶段(STARTUP_ACCELERATION)
- 核心动作:强制产生累加旋转角度,计算实时速度
MotorParm.end_speed。 - 切换条件:当
MotorParm.endspeed≥TRANSFERSPEEDSTART时,初始化计数器(Iqrefreducecounter、iqmincounter)和Iq最小值(iqmin),并切换到STARTUPIQREFREDUCE阶段。
2. Iq基准值递减阶段(STARTUP_IQREFREDUCE)
- 角度与速度更新:继续累加
ParkParm.qAngle,并通过加速度accret和系数coeff实时计算MotorParm.end_speed。 - 角度差计算:计算
thetaerror(强制角度-观测角度),并取绝对值thetaerror_done。 - 切换判定(满足任一即可):
1. 角度差条件:thetaerrordone< 标幺化后的TRANSFERFINISHANGLE(即小于10度)。
2. 超时条件:iqmincounter≥IQMINCOUNTER_MAX(防止切换卡住,强制进入闭环)。 - Iq基准值调整:
1. 当Iqrefreducecounter达到最大值时,重置计数器,并通过TRANSFERKP和thetaerrordone计算递减量,更新CtrlParm.IqRef。
2. 若CtrlParm.IqRef≤iqmin,强制将其设为iqmin,并累加iqmincounter。
3. 速度闭环运行阶段(RUN_CLOSELOOP)
- 角度切换:
ParkParm.qAngle= 观测角度(smc1.Theta) + 角度误差(theta_error),开始使用观测角度。 - 角度误差渐变:若
thetaerror绝对值大于0.025度,按DEGREEQ150POINT025步长逐步减小误差,最终实现纯观测角度控制。
五、关键技术特点
- 平稳切换机制:通过Iq基准值动态递减(基于角度误差的P控制),避免电流突变导致的电机冲击。
- 双重切换保障:同时设置角度差阈值和超时机制,既保证切换精度,又防止异常卡死。
- 角度渐变过渡:进入速度闭环后,逐步减小角度误差,确保观测角度与实际角度无缝衔接。
六、使用注意事项
- 代码不可直接执行,需根据实际电机参数调整宏定义(如
TRANSFERSPEEDSTART、TRANSFER_KP)和变量(如accret、coeff)。 - Iq最小值
iq_min需根据电机负载能力设定,避免过小导致电机失步。 - 观测器
smc1.Theta的精度直接影响切换效果,需确保观测器算法稳定可靠。
要不要我帮你整理一份关键参数调试建议表?表格会包含各宏定义的调试范围、影响因素及优化方向,方便你根据实际电机快速配置参数。

电流闭环到速度闭环无缝切换__示例代码 ,它特别适合对传统的三段式启动方式 定位——>电流闭环强拖——>速度闭环进行优化,它能够自适应各种负载大小的情况,切换过程中电流和速度连续不突变,启动平稳顺滑。 发送切换的示例代码,代码已经过产品上千次启动验证,注释清楚,完全可以自行理解。

更多推荐



所有评论(0)