基于TI C28335的电机矢量控制完整工程框架及关键代码
// 主程序框架
#include "F28x_Project.h"
#include "math.h"
// 全局变量定义
struct PI_Obj {
float32 Ref;
float32 Fdb;
float32 Output;
float32 Kp;
float32 Ki;
float32 Km;
float32 Kc;
float32 integral;
};
// 系统参数结构体
typedef struct {
float32 Ld; // d轴电感
float32 Lq; // q轴电感
float32 R; // 定子电阻
float32 pole_pairs; // 极对数
} MOTOR_Params;
// 初始化系统
void System_Init(void) {
InitSysCtrl(); // 系统时钟配置
InitPieCtrl(); // PIE初始化
DINT; // 关闭全局中断
InitPieVectTable();// 初始化中断向量表
InitAdc(); // ADC初始化
InitEPwm(); // EPWM初始化
InitScia(); // SCI初始化
ConfigGpio(); // GPIO配置
}
// CLARKE变换
void Clarke_Transform(float32 ia, float32 ib, float32 ic, float32 *ialpha, float32 *ibeta) {
*ialpha = ia;
*ibeta = (ib - ic)/sqrt(3);
}
// PARK变换
void Park_Transform(float32 ialpha, float32 ibeta, float32 theta, float32 *id, float32 *iq) {
*id = ialpha*cos(theta) + ibeta*sin(theta);
*iq = -ialpha*sin(theta) + ibeta*cos(theta);
}
// 逆PARK变换
void InvPark_Transform(float32 vd, float32 vq, float32 theta, float32 *valpha, float32 *vbeta) {
*valpha = vd*cos(theta) - vq*sin(theta);
*vbeta = vd*sin(theta) + vq*cos(theta);
}
// 逆CLARKE变换
void InvClarke_Transform(float32 valpha, float32 vbeta, float32 *va, float32 *vb) {
*va = valpha;
*vb = -valpha/2 + vbeta*sqrt(3)/2;
}
// PI控制器实现
float32 PI_Controller(struct PI_Obj *pi, float32 ref, float32 fdb) {
float32 error = ref - fdb;
pi->integral += error;
return pi->Kp * error + pi->Ki * pi->integral;
}
// 磁场定向控制主循环
void FOC_Control(void) {
float32 id_ref = 0; // d轴电流参考值
float32 iq_ref = 10; // q轴电流参考值(转矩分量)
// 读取电流传感器数据
float32 ia = Read_Current_A();
float32 ib = Read_Current_B();
float32 ic = Read_Current_C();
// CLARKE变换
float32 ialpha, ibeta;
Clarke_Transform(ia, ib, ic, &ialpha, &ibeta);
// 计算电机角度(编码器或观测器)
float32 theta = Read_Rotor_Position();
// PARK变换
float32 id, iq;
Park_Transform(ialpha, ibeta, theta, &id, &iq);
// 电流环PI控制
float32 vd = PI_Controller(¤t_pi_id, id_ref, id);
float32 vq = PI_Controller(¤t_pi_iq, iq_ref, iq);
// 逆PARK变换
float32 valpha, vbeta;
InvPark_Transform(vd, vq, theta, &valpha, &vbeta);
// 逆CLARKE变换
float32 va, vb;
InvClarke_Transform(valpha, vbeta, &va, &vb);
// 生成PWM波形
Update_PWM_Duty(va, vb);
}
// 参数辨识函数(示例)
void Parameter_Identification(void) {
// 在线辨识定子电阻和电感
// 可采用递推最小二乘法或基于注入信号的辨识方法
}
// V/F控制算法
void V_F_Control(float32 speed_ref) {
float32 freq = speed_ref / MOTOR_Params.pole_pairs;
float32 voltage = V_F_SLOPE * freq;
Set_PWM_Voltage(voltage);
}
// 主函数
void main(void) {
System_Init();
while(1) {
FOC_Control();
Parameter_Identification();
// 处理SCI通信
Scia_RecvData();
Scia_SendData();
}
}
电机矢量磁链控制完整28335工程,PWM口,及V/F算法,参数辨识程序,磁场定向程序,从转速测量、参数辨识方面改善性能,转速PI调节,电流闭环 使用PI函数,串口SCI控制,ADC、DQ、CLARKE、park变换;参考代码
关键功能说明:
- 硬件配置:
- EPWM模块配置:用于生成三相PWM波形
- ADC模块配置:三相电流采样和电压检测
- QEP/编码器接口:转速测量
- SCI模块:实现上位机通信
- 核心算法:
- 坐标变换:CLARKE→PARK→逆PARK→逆CLARKE
- 磁场定向控制(FOC)双闭环结构
- 参数辨识:在线辨识Ld/Lq/R参数
- V/F控制:低速开环控制
- 性能优化:
- 前馈补偿提高动态响应
- 滑模观测器实现无传感器控制
- 自适应PI参数调节
- 磁链观测器增强稳定性
- 通信功能:
- SCI协议实现参数设置和状态监控
- CAN总线扩展接口(可选)
- 安全保护:
- 过流保护
- 过压保护
- 过热保护
- 故障自诊断
实现步骤建议:
- 硬件准备:
C28335开发板
三相逆变器
编码器/霍尔传感器
电流传感器
- 软件配置:
使用CCS开发环境
配置中断向量表
设置ADC采样时序
配置PWM死区时间
- 调试流程:
a) 电流闭环测试
b) 转速闭环测试
c) 参数辨识验证
d) V/F特性测试
e) 整机联调
注意事项:
- 电流采样需要同步采样
- 坐标变换需要实时角度输入
- PI参数需通过临界比例度法整定
- 注意ADC采样延时补偿
- 磁链观测器需要电机参数在线辨识
此框架可根据具体电机参数进行修改,建议结合电机手册进行参数整定和算法优化。实际应用中需要添加故障检测和保护逻辑,确保系统可靠性。