ZHCUBZ5A September 2021 – April 2024
图 3-22 展示了固件的工程软件流程图,其中包括一个用于实时电机控制的 ISR、一个主循环用于在后台循环中更新电机控制参数。ISR 将由 ADC 转换结束 (EOC) 触发。
为了简化系统开发和设计,将该软件组织为四个增量构建,这使得学习和熟悉电路板和软件变得更加容易。这个方法对也适用于调试和测试电路板。
表 3-5 列出了要在该实验工程中使用的框架模块。
模块名称 | 说明 | 算法 |
---|---|---|
ANGLE_GEN_run | 用于开环运行的斜坡角度发生器 | eSMO、ENC、HALL |
CLARKE_run | 针对电流或电压的 Clarke 变换 | FAST、eSMO、ENC、HALL |
collectRMSData、calculateRMSData | 收集采样值以计算相电流和电压的 RMS 值 | FAST、eSMO、ENC、HALL |
DAC128S_writeData | 使用 SPI 将软件变量转换并发送到外部 DAC | 所有算法 |
DATALOGIF_update | 将实时值存储到中,以便使用图形工具显示 | 所有算法 |
ENC_run | 根据编码器计算转子角度 | ENC |
ESMO_run | 增强滑模观测器 (eSMO) 以实现无传感器 FOC | eSMO |
EST_run | 适用于无传感器 FOC 的 FAST 估算器 | FAST |
EST_runTraj | 用于电机识别的电流和速度轨迹发生器 | FAST |
EST_setupTrajState | 用于电机识别的电流和速度轨迹发生器设置 | FAST |
HAL_readADCData | 以浮点格式返回 ADC 转换值 | 所有算法 |
HAL_writePWMDACData | 将软件变量转换为 PWM 信号 | 所有算法 |
HAL_writePWMData | 用于电机的 PWM 驱动 | 所有算法 |
HALL_run | 根据霍尔传感器计算转子角度和速度 | HALL |
IPARK_run | Park 逆变换 | FAST、eSMO、ENC、HALL |
PARK_run | Park 变换 | FAST、eSMO、ENC、HALL |
PI_run | 针对电流和速度的 PI 稳压器 | 所有算法 |
SPDCALC_run | 基于来自编码器信号的角度进行速度测量 | ENC |
SPDFR_run | 基于来自观测器的角度测量速度 | eSMO |
SVGEN_run | 具有正交控制的空间矢量 PWM | FAST、eSMO、ENC、HALL |
TRAJ_run | 用于设置速度基准的轨迹 | 所有算法 |
VS_FREQ_run | 生成具有 v/f 曲线的矢量电压 | FAST、eSMO、ENC、HALL |
表 3-6 总结了在每个增量系统构建中测试的模块。
软件模块 | DMC_LEVEL_1 | DMC_LEVEL_2 | DMC_LEVEL_3 | DMC_LEVEL_4 | |
---|---|---|---|---|---|
50% PWM 占空比,验证 ADC 失调电压校准、PWM 输出和相移 | 开环控制,用于验证电机电流和电压检测信号 | 闭合电流环路,用于验证电流 在电路板上检测和使用 PID 控制器进行电流控制 | 采用估算器/观测器的闭环运行 | 使用 FAST 估算器识别电机参数 | |
HAL_readADCData | √√ | √ 1 | √ | √ | √ |
HAL_writePWMData | √√ | √ | √ | √ | √ |
ANGLE_GEN_run | √√ | √ | √(eSMO、ENC、HALL)* | ||
VS_FREQ_run | √√ | ||||
CLARKE_run(电流) | √ | √ | √ | √ | |
CLARKE_run(电压) | √ | √ (FAST)* 2 | √ (FAST)* | √ (FAST)* | |
TRAJ_run | √√ | √ | √√ | ||
EST_run | √(FAST)* | √ (FAST)* | √√ (FAST)* | √√ (FAST)* | |
EST_setupTrajState | √√ (FAST)* | ||||
EST_runTraj | √√ (FAST)* | ||||
ESMO_run | √(eSMO)* | √(eSMO)* | √√ (eSMO)* | ||
SPDFR_run | √(eSMO)* | √(eSMO)* | √√ (eSMO)* | ||
ENC_run | √(ENC)* | √(ENC)* | √√(ENC)* | ||
SPDCALC_run | √(ENC)* | √(ENC)* | √√(ENC)* | ||
HALL_run | √(HALL)* | √(HALL)* | √√(HALL)* | ||
PARK_run | √ | √ | √ | √ | |
PI_run (Id) | √√ | √ | √ | ||
PI_run (Iq) | √√ | √ | √ | ||
PI_run(速度) | √√ | √ | |||
IPARK_run | √√ | √ | √ | √ | |
SVGEN_run | √√ | √ | √ | √ | |
HAL_writePWMDACData | √** 3 | √** | √** | √** | |
DATALOGIF_update | √ | √ | √ | √ | |
DAC128S_writeData | √** | √** | √** | √** |
通用实验工程可以单独使用其中一种 FOC 算法进行电机控制,或同时使用两种 FOC 算法,如表 3-7 所示。如果在实验工程中实现了两种算法,则可以快速平滑地切换正在使用的估算器。
FAST(MOTOR1_FAST) | eSMO (MOTOR1_ESMO) | ENCODER (MOTOR1_ENC) | HALL (MOTOR1_HALL) | ISBLDC (MOTOR1_ISBLDC) | |
---|---|---|---|---|---|
FAST | √ 1 | √ | √ | √ | ✕ |
eSMO | √ | √ | √ | ✕ | ✕ |
编码器 | √ | √ | √ | ✕ | ✕ |
HALL | √ | ✕ | ✕ | √ | ✕ |
ISBLDC | ✕ | ✕ | ✕ | ✕ | √ |