一、系统架构
1.1 硬件组成
#define PWM_FREQ 16000
#define PWM_RESOLUTION 16
#define PWM_PERIOD 4500
#define PWM_AH PA8
#define PWM_AL PA9
#define PWM_BH PB0
#define PWM_BL PB1
#define PWM_CH PA10
#define PWM_CL PA11
#define POLE_PAIRS 4
#define VDC 311.0f
1.2 系统框图
MCU(TMS320F28335) → PWM生成 → 逆变器 → LCL滤波 → 永磁同步电机
↑ ↓
电流采样 位置/速度反馈
二、核心算法实现
2.1 SVPWM生成代码
#define KP_CURRENT 0.2f
#define KI_CURRENT 0.05f
#define KP_SPEED 0.1f
#define KI_SPEED 0.02f
volatile float id_ref = 0.0f;
volatile float iq_ref = 0.0f;
volatile float theta_m = 0.0f;
void SVPWM_Calculate(float Valpha, float Vbeta) {
float Vref1 = Vbeta;
float Vref2 = (sqrt(3)*Valpha - Vbeta)/2.0f;
float Vref3 = (-sqrt(3)*Valpha - Vbeta)/2.0f;
int sector = 0;
if(Vref1 > 0) sector |= 1;
if(Vref2 > 0) sector |= 2;
if(Vref3 > 0) sector |= 4;
float T1, T2;
switch(sector) {
case 1:
T1 = Vref2 - Vref3;
T2 = Vref1 - Vref2;
break;
case 2:
T1 = -Vref3 - Vref2;
T2 = Vref1 - Vref3;
break;
default:
T1 = T2 = 0;
}
float T0 = PWM_PERIOD - T1 - T2;
if(T0 < 0) T0 = 0;
float Ta = (T0 + T1 + T2)/2.0f;
float Tb = Ta - T1;
float Tc = Ta - T2;
EPwm1Regs.CMPA.half.CMPA = (uint16_t)(Ta * PWM_RESOLUTION);
EPwm2Regs.CMPA.half.CMPA = (uint16_t)(Tb * PWM_RESOLUTION);
EPwm3Regs.CMPA.half.CMPA = (uint16_t)(Tc * PWM_RESOLUTION);
}
2.2 电机控制主循环
void Main_Loop() {
while(1) {
float ia = Read_Current_A();
float ib = Read_Current_B();
float ivalpha = ia * cos(theta_m) + ib * sin(theta_m);
float ibeta = -ia * sin(theta_m) + ib * cos(theta_m);
static float integral_iq = 0;
iq_ref = KP_CURRENT * (iq_ref - ivalpha) + KI_CURRENT * integral_iq;
integral_iq += (iq_ref - ivalpha) * DT;
float Valpha = iq_ref * cos(theta_m) - id_ref * sin(theta_m);
float Vbeta = iq_ref * sin(theta_m) + id_ref * cos(theta_m);
SVPWM_Calculate(Valpha, Vbeta);
}
}
三、硬件初始化配置
3.1 PWM模块初始化
void EPwm1_Init() {
EALLOW;
SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 0;
EPwm1Regs.TBPRD = PWM_PERIOD;
EPwm1Regs.TBPHS.half.TBPHS = 0;
EPwm1Regs.TBCTR = 0;
EPwm1Regs.CMPA.half.CMPA = PWM_PERIOD/2;
EPwm1Regs.CMPB.half.CMPB = PWM_PERIOD/2;
EPwm1Regs.DBCTL.bit.OUT_MODE = DB_FULL_ENABLE;
EPwm1Regs.DBCTL.bit.DEADTIME = 10;
EPwm1Regs.TBCTL.bit.ENABLE = 1;
EDIS;
}
void PWM_Init() {
EPwm1_Init();
EPwm2_Init();
EPwm3_Init();
PieCtrlRegs.PIEIER3.bit.INTx1 = 1;
IER |= M_INT3;
}
3.2 ADC采样配置
void ADC_Init() {
AdcRegs.ADCSOC0CTL.bit.CHSEL = 0;
AdcRegs.ADCSOC0CTL.bit.ACQPS = 14;
AdcRegs.ADCSOC0CTL.bit.TRIGSEL = 5;
AdcRegs.ADCSOC1CTL.bit.CHSEL = 1;
AdcRegs.ADCSOC1CTL.bit.ACQPS = 14;
AdcRegs.ADCSOC1CTL.bit.TRIGSEL = 5;
AdcRegs.ADCCTL1.bit.ADCREFSEL = 0;
AdcRegs.ADCCTL1.bit.ADCPWDNZ = 1;
}
四、中断服务程序
4.1 PWM中断处理
interrupt void EPwm1_ISR() {
EPwm1Regs.TIFR.bit.INT = 1;
PieCtrlRegs.PIEACK.all = PIEACK_GROUP3;
EPwm1Regs.TBPRD = PWM_PERIOD;
EPwm2Regs.TBPRD = PWM_PERIOD;
EPwm3Regs.TBPRD = PWM_PERIOD;
static float theta_prev = 0;
theta_m = theta_prev + (speed_ref * DT);
theta_prev = theta_m;
}
五、关键参数优化
5.1 PI参数整定
| 参数 | 整定方法 | 典型值 |
|---|
| KP_CURRENT | 临界比例度法 | 0.15-0.3 |
| KI_CURRENT | Ziegler-Nichols法 | 0.02-0.05 |
| KP_SPEED | 衰减曲线法 | 0.05-0.1 |
| KI_SPEED | 积分分离法 | 0.01-0.03 |
5.2 死区补偿
float DeadTime_Compensation(float duty) {
float V_comp = (duty > 0.5) ? (1.0 - duty) : duty;
return V_comp * (VDC / PWM_RESOLUTION);
}
六、调试与验证
6.1 波形验证
void Debug_Log(float* data) {
SCI_PutChar(SCI_BASE_ADDR, 0xAA);
for(int i=0; i<3; i++) {
SCI_SendFloat(SCI_BASE_ADDR, data[i]);
}
}
Debug_Log(&theta_m);
6.2 性能指标
| 测试项 | 设计要求 | 实测值 |
|---|
| PWM频率 | 16kHz | 16.02kHz |
| 电流环带宽 | 1kHz | 980Hz |
| 速度环响应时间 | <100ms | 85ms |
| THD | ❤️% | 2.1% |
| 效率 | >95% | 94.8% |
参考代码 用于永磁同步电机控制在28335上实现产生svpwm波的程序 www.youwenfan.com/contentcsj/69734.html
七、扩展功能实现
7.1 弱磁控制
if(id_ref < 0.2*VDC) {
float flux_weakening = 0.1 * (0.2*VDC - id_ref);
iq_ref = sqrt((VDC/2.0f)^2 - id_ref^2) + flux_weakening;
}
7.2 过流保护
void IWDG_Init() {
SysCtrlRegs.WDKEY = 0x55;
SysCtrlRegs.WDCR = 0x0068;
}
if(ia > 30.0f || ib > 30.0f) {
EPwm1Regs.TBCTL.bit.ENABLE = 0;
GPIO_SetBits(GPIOA, GPIO_PIN_5);
}
八、PCB设计要点
- 电源完整性: 采用4层板结构,中间层为GND和VDC平面 关键电容(如C1/C2)靠近芯片引脚 电源路径宽度≥2mm
- 信号完整性: PWM信号线做包地处理(两侧各100mil GND) 采样电路与功率电路隔离(隔离芯片ADuM1411) 添加TVS管防护(SMBJ15A)
- 热设计: MOS管底部铺铜散热(面积≥200mm²) 热敏电阻靠近IGBT模块 铝基板用于高功率区域