湖南网站建设平台,嘉兴在线 官网,怎么注册网自己的网站,湛江论坛建站模板文章目录#x1f680; 电机控制中的标幺化#xff08;Per Unit#xff09;全面解析#xff1a;从理论到代码实践✨ 标幺化技术概述#x1f50c; 电机模型标幺化#x1f3ae; 电流PI控制器标幺化#x1f504; 锁相环#xff08;PLL#xff09;标幺化#x1f4bb; 完整…
文章目录 电机控制中的标幺化Per Unit全面解析从理论到代码实践✨ 标幺化技术概述 电机模型标幺化 电流PI控制器标幺化 锁相环PLL标幺化 完整系统集成示例 标幺化系统的调试技巧 总结与实践建议电机控制中的标幺化Per Unit全面解析从理论到代码实践
✨ 标幺化技术概述
标幺化是电机控制系统中至关重要的基础技术它通过将物理量转换为相对值来实现系统归一化处理。这种处理方式特别适用于数字信号处理器DSP和微控制器MCU实现的电机控制系统能有效防止数据溢出、提高计算精度并增强算法在不同功率等级电机间的通用性。
核心思想将物理量的实际值除以一个同单位的基准值通常为额定值或系统最大值得到无量纲的标幺值pu。例如电压标幺值表示为 V_pu V_actual / V_base 。 基准值选择原则
电压基准值通常采用额定相电压或系统最大允许电压电流基准值通常采用额定电流或ADC最大测量范围频率基准值根据控制系统采样频率或电机额定频率确定 电机模型标幺化
理论基础 电机模型标幺化的核心是将电压方程、磁链方程等转换为标幺形式。以永磁同步电机PMSM在d-q坐标系下的电压方程为例 原始方程
u_d R_s*i_d L_d*d(i_d)/dt - ω_e*L_q*i_q
u_q R_s*i_q L_q*d(i_q)/dt ω_e*(L_d*i_d ψ_f)标幺化后
u_d_pu R_s_pu*i_d_pu (1/ω_base)*d(i_d_pu)/dt - ω_e_pu*L_q_pu*i_q_pu
u_q_pu R_s_pu*i_q_pu (1/ω_base)*d(i_q_pu)/dt ω_e_pu*(L_d_pu*i_d_pu ψ_f_pu)基准值计算 基准值的选择需要满足电机方程的内在关系
// 基准值计算示例代码
// 假设电机额定参数
#define V_RATED 380.0f // 额定电压(V)
#define I_RATED 10.0f // 额定电流(A)
#define F_RATED 50.0f // 额定频率(Hz)
#define P_POLES 4 // 极对数// 计算基准值
float V_base V_RATED / sqrt(3.0f); // 相电压基准值
float I_base I_RATED; // 电流基准值
float ω_base 2 * PI * F_RATED; // 电角速度基准值
float Z_base V_base / I_base; // 阻抗基准值
float L_base Z_base / ω_base; // 电感基准值
float ψ_base V_base / ω_base; // 磁链基准值// 实际参数标幺化
float R_actual 0.5f; // 实际电阻(Ω)
float Ld_actual 0.001f; // d轴实际电感(H)
float ψf_actual 0.1f; // 永磁体磁链(Wb)float R_pu R_actual / Z_base;
float Ld_pu Ld_actual / L_base;
float ψf_pu ψf_actual / ψ_base;标幺化模型的优势
数值稳定性标幺化后电机参数通常在0~1附近避免了极大/极小数值运算参数无关性同一套控制代码可适用于不同功率的电机只需调整基准值保护逻辑简化过流/过压保护可直接比较标幺值如I_pu 1.2触发保护 电流PI控制器标幺化
标幺化原理 电流环PI控制器在dq坐标系下的离散表达式为 连续时间域
u_out Kp * e(t) Ki * ∫e(t)dt离散时间域标幺化前
u_out[k] Kp * e[k] Ki * Σe[i] * Ts标幺化后
u_out_pu[k] Kp_pu * e_pu[k] Ki_pu * Σe_pu[i] * Ts_pu标幺化PI控制器代码实现:
// 电流PI控制器结构体定义
typedef struct {float Kp_pu; // 比例系数(标幺)float Ki_pu; // 积分系数(标幺)float integral_pu; // 积分项(标幺)float output_limit_pu; // 输出限幅(标幺通常为1.0)float Ts_pu; // 采样时间(标幺)float I_base; // 电流基准值(A)float V_base; // 电压基准值(V)
} Current_PI_Controller;// PI控制器初始化
void PI_Current_Init(Current_PI_Controller *pi, float Kp, float Ki, float Ts, float I_base, float V_base) {pi-Kp_pu Kp * (I_base / V_base); // 比例系数标幺化pi-Ki_pu Ki * (I_base / V_base) * Ts; // 积分系数标幺化pi-Ts_pu Ts; pi-I_base I_base;pi-V_base V_base;pi-integral_pu 0.0f;pi-output_limit_pu 1.0f; // 标幺系统通常限幅在±1
}// PI控制器执行函数标幺化版本
float PI_Current_Execute_PU(Current_PI_Controller *pi, float error_pu) {// 比例项float proportional_pu pi-Kp_pu * error_pu;// 积分项带抗饱和pi-integral_pu pi-Ki_pu * error_pu;// 积分限幅if (pi-integral_pu pi-output_limit_pu) {pi-integral_pu pi-output_limit_pu;} else if (pi-integral_pu -pi-output_limit_pu) {pi-integral_pu -pi-output_limit_pu;}// 输出计算float output_pu proportional_pu pi-integral_pu;// 输出限幅if (output_pu pi-output_limit_pu) {output_pu pi-output_limit_pu;} else if (output_pu -pi-output_limit_pu) {output_pu -pi-output_limit_pu;}return output_pu;
}// 标幺值转换为实际电压
float PU_to_Voltage(float value_pu, float V_base) {return value_pu * V_base;
}抗饱和Anti-Windup处理 在实际系统中积分饱和是常见问题需要特殊处理
// 改进的PI控制器带抗饱和处理
float PI_Current_Execute_AntiWindup(Current_PI_Controller *pi, float error_pu, float actual_output_pu) {// 比例项float proportional_pu pi-Kp_pu * error_pu;// 积分项pi-integral_pu pi-Ki_pu * error_pu;// 抗饱和处理当输出饱和时停止积分float output_pu proportional_pu pi-integral_pu;if (output_pu pi-output_limit_pu) {output_pu pi-output_limit_pu;// 输出饱和时停止积分增长if (error_pu 0) {pi-integral_pu - pi-Ki_pu * error_pu; // 回退本次积分}} else if (output_pu -pi-output_limit_pu) {output_pu -pi-output_limit_pu;// 输出饱和时停止积分增长if (error_pu 0) {pi-integral_pu - pi-Ki_pu * error_pu; // 回退本次积分}}return output_pu;
}锁相环PLL标幺化
PLL标幺化原理 锁相环在电机控制中用于精确跟踪电机反电动势相位其标幺化处理重点在环路滤波器参数。
PLL基本方程
dθ/dt ω_base Kp*e_θ Ki*∫e_θdt其中e_θ是相位误差。
标幺化后
dθ_pu/dt 1 Kp_pu*e_θ_pu Ki_pu*∫e_θ_pudt标幺化PLL代码实现:
// 标幺化PLL结构体
typedef struct {float Kp_pu; // 比例系数(标幺)float Ki_pu; // 积分系数(标幺)float integral_pu; // 积分项(标幺)float theta_pu; // 输出相位(标幺0~1对应0~2π)float omega_pu; // 输出频率(标幺)float omega_base; // 基准频率(rad/s)float Ts_pu; // 采样时间(标幺)float output_limit_pu; // 输出限幅
} PLL_Controller;// PLL初始化
void PLL_Init(PLL_Controller *pll, float Kp, float Ki, float Ts, float omega_base) {pll-Kp_pu Kp / omega_base; // 比例系数标幺化pll-Ki_pu Ki / omega_base * Ts; // 积分系数标幺化pll-omega_base omega_base;pll-Ts_pu Ts;pll-integral_pu 0.0f;pll-theta_pu 0.0f;pll-omega_pu 1.0f; // 初始化为基准频率pll-output_limit_pu 0.2f; // 频率变化限幅
}// PLL相位检测基于q轴电压
float PLL_Phase_Detector(float u_alpha, float u_beta, float theta_est) {// 计算q轴分量在估计的d-q坐标系下float sin_theta sinf(2 * PI * theta_est);float cos_theta cosf(2 * PI * theta_est);// q轴电压 -u_alpha*sinθ u_beta*cosθfloat u_q -u_alpha * sin_theta u_beta * cos_theta;return u_q; // 作为相位误差
}// 标幺化PLL执行函数
void PLL_Execute_PU(PLL_Controller *pll, float u_alpha, float u_beta) {// 1. 相位检测获取相位误差float phase_error PLL_Phase_Detector(u_alpha, u_beta, pll-theta_pu);// 标幺化相位误差归一化到±1范围内float phase_error_pu phase_error / pll-omega_base;// 2. PI控制器处理相位误差float proportional pll-Kp_pu * phase_error_pu;pll-integral_pu pll-Ki_pu * phase_error_pu;// 积分限幅if (pll-integral_pu pll-output_limit_pu) {pll-integral_pu pll-output_limit_pu;} else if (pll-integral_pu -pll-output_limit_pu) {pll-integral_pu -pll-output_limit_pu;}// 3. 频率调整float delta_omega_pu proportional pll-integral_pu;pll-omega_pu 1.0f delta_omega_pu; // 1pu对应基准频率// 4. 相位积分pll-theta_pu pll-omega_pu * pll-Ts_pu;// 相位归一化0~1范围if (pll-theta_pu 1.0f) {pll-theta_pu - 1.0f;} else if (pll-theta_pu 0.0f) {pll-theta_pu 1.0f;}
}// 获取实际频率值(Hz)
float PLL_Get_Frequency_Hz(PLL_Controller *pll) {return (pll-omega_pu * pll-omega_base) / (2 * PI);
}// 获取实际相位值(rad)
float PLL_Get_Phase_Rad(PLL_Controller *pll) {return pll-theta_pu * 2 * PI;
}PLL参数整定建议 根据PLL带宽通常设置为同步频率的10倍左右
// PLL参数整定示例
float sync_freq 50.0f; // Hz
float pll_bandwidth 10.0f * sync_freq; // 500Hz
float omega_base 2 * PI * sync_freq;// 根据带宽计算PI参数
float Kp 2 * PI * pll_bandwidth;
float Ki (2 * PI * pll_bandwidth) * (2 * PI * pll_bandwidth) / 4;PLL_Init(pll_controller, Kp, Ki, 0.0001f, omega_base); // Ts100us 完整系统集成示例
下面展示一个完整的FOC系统标幺化集成示例
// FOC系统标幺化集成示例
typedef struct {// 电机参数标幺float R_s_pu;float Ld_pu;float Lq_pu;float psi_f_pu;// 控制器Current_PI_Controller id_pi;Current_PI_Controller iq_pi;PLL_Controller pll;// 基准值float I_base;float V_base;float Omega_base;float Psi_base;// 系统状态标幺float id_ref_pu;float iq_ref_pu;float theta_pu;float omega_pu;
} FOC_System;// FOC系统初始化
void FOC_System_Init(FOC_System *foc, Motor_Params *params) {// 计算基准值foc-I_base params-I_rated;foc-V_base params-V_rated / sqrt(3.0f);foc-Omega_base 2 * PI * params-f_rated;foc-Psi_base foc-V_base / foc-Omega_base;// 电机参数标幺化foc-R_s_pu params-R_s / (foc-V_base / foc-I_base);foc-Ld_pu params-Ld / foc-Psi_base * foc-I_base;foc-Lq_pu params-Lq / foc-Psi_base * foc-I_base;foc-psi_f_pu params-psi_f / foc-Psi_base;// 控制器初始化PI_Current_Init(foc-id_pi, 0.5f, 100.0f, 0.0001f, foc-I_base, foc-V_base);PI_Current_Init(foc-iq_pi, 0.5f, 100.0f, 0.0001f, foc-I_base, foc-V_base);float pll_bandwidth 10.0f * params-f_rated;float Kp_pll 2 * PI * pll_bandwidth;float Ki_pll (Kp_pll * Kp_pll) / 4;PLL_Init(foc-pll, Kp_pll, Ki_pll, 0.0001f, foc-Omega_base);
}// FOC主循环函数
void FOC_Execute(FOC_System *foc, float ia, float ib, float u_dc) {// 1. Clarke变换float i_alpha ia;float i_beta (ia 2.0f * ib) / sqrt(3.0f);// 2. 位置估算通过PLLfloat u_alpha, u_beta; // 需从ADC获取或估算PLL_Execute_PU(foc-pll, u_alpha, u_beta);foc-theta_pu foc-pll.theta_pu;// 3. Park变换使用估算的角度float sin_theta sinf(2 * PI * foc-theta_pu);float cos_theta cosf(2 * PI * foc-theta_pu);float id i_alpha * cos_theta i_beta * sin_theta;float iq -i_alpha * sin_theta i_beta * cos_theta;// 标幺化电流float id_pu id / foc-I_base;float iq_pu iq / foc-I_base;// 4. 电流环PI控制float id_error_pu foc-id_ref_pu - id_pu;float iq_error_pu foc-iq_ref_pu - iq_pu;float ud_pu PI_Current_Execute_PU(foc-id_pi, id_error_pu);float uq_pu PI_Current_Execute_PU(foc-iq_pi, iq_error_pu);// 5. 前馈解耦标幺化版本ud_pu -foc-omega_pu * foc-Lq_pu * iq_pu;uq_pu foc-omega_pu * (foc-Ld_pu * id_pu foc-psi_f_pu);// 6. 反Park变换float u_alpha_ref ud_pu * cos_theta - uq_pu * sin_theta;float u_beta_ref ud_pu * sin_theta uq_pu * cos_theta;// 7. SVM调制将标幺电压转换为占空比// ... SVM算法实现
}标幺化系统的调试技巧
基准值选择策略 根据基准值选择需注意
电压基准通常采用额定相电压或ADC最大测量范围电流基准采用额定电流或最大允许电流特殊处理当电感值很小时G系数Ts/L可能大于1需左移处理
// 小电感特殊处理
float L_actual 0.00001f; // 10uH
float G_actual Ts / L_actual; // 可能远大于1// 左移处理
int shift_bits 0;
while (G_actual 1.0f shift_bits 16) {G_actual / 2.0f;shift_bits;
}
// 计算时需考虑左移补偿Q格式与标幺化结合 在定点DSP中标幺化常与Q格式结合
// Q15格式标幺值处理定点DSP
#define Q15_SCALE (32767.0f)// 标幺值转换为Q15
short voltage_pu_q15 (short)(voltage_pu * Q15_SCALE);// Q15转换为标幺值
float voltage_pu (float)voltage_pu_q15 / Q15_SCALE;// Q15格式PI运算
long proportional_q15 (long)(Kp_q15 * error_q15) 15;
integral_q15 (long)(Ki_q15 * error_q15) 15; 总结与实践建议
电机控制系统标幺化是提升代码可移植性、数值稳定性和系统可靠性的关键技术。通过本文的详细分析和代码示例可以看到
电机模型标幺化使得同一套代码可适配不同功率等级的电机PI控制器标幺化简化了参数整定增强了系统稳定性PLL标幺化确保了相位同步精度和系统动态响应
实践建议
新项目开发时优先采用标幺化系统架构基准值选择要兼顾测量范围和精度需求在定点处理器中结合Q格式实现高效运算通过仿真验证标幺化系统的动态响应如提到的Simulink仿真
标幺化技术虽增加了前期理解成本但长期看显著提升代码复用性和系统维护性是现代电机控制工程师必备的核心技能。