基于英飞凌MCU实现BLDC无感正弦波FOC控制
一、硬件架构设计
1.1 硬件组成
// 英飞凌XMC1300系列MCU资源分配
#define PWM_FREQ 16000 // PWM频率16kHz
#define ADC_SAMPLING 1000 // 1kHz采样率
#define VDC 24.0f // 直流母线电压
// 引脚定义
#define PWM_UH P1_0 // PWM_U高电平
#define PWM_UL P1_1 // PWM_U低电平
#define PWM_VH P1_2 // PWM_V高电平
#define PWM_VL P1_3 // PWM_V低电平
#define PWM_WH P1_4 // PWM_W高电平
#define PWM_WL P1_5 // PWM_W低电平
// 电流采样电路
#define ISENSE_GAIN 20.0f // 电流采样增益(20mV/A)
#define SHUNT_RESISTOR 0.001f // 1mΩ采样电阻
1.2 关键外设配置
-
CCU6定时器:用于生成空间矢量PWM波形
CCU60.T12PR = (SystemCoreClock / (PWM_FREQ * 2)) - 1; // 设置周期 CCU60.T12 = 0; // 初始计数值 CCU60.T12M = CCU6_T12M_PWM; // PWM模式 -
ADC模块:三通道差分输入
ADC0.CH0.CHS = ADC_CH0; // 通道0配置 ADC0.CH1.CHS = ADC_CH1; ADC0.CH2.CHS = ADC_CH2; ADC0.ADCFG.Bits.TSSEL = 0x03; // 温度传感器禁用
二、核心算法实现
2.1 FOC控制流程
void FOC_Control_Loop() {
// 1. 电流采样
float Ia = Read_Current(ADC_CH0);
float Ib = Read_Current(ADC_CH1);
// 2. Clarke-Park变换
float Iα = Ia;
float Iβ = (Ia + 2*Ib)/3.0f;
float Id = Iα*cosθ + Iβ*sinθ;
float Iq = -Iα*sinθ + Iβ*cosθ;
// 3. PI调节
static float integral_id = 0;
static float integral_iq = 0;
float Vd = PI_Controller(Id_ref, Id, &integral_id);
float Vq = PI_Controller(Iq_ref, Iq, &integral_iq);
// 4. 逆Park变换
float Valpha = Vd*cosθ - Vq*sinθ;
float Vbeta = Vd*sinθ + Vq*cosθ;
// 5. SVPWM生成
Generate_SVPWM(Valpha, Vbeta);
}
2.2 无传感器位置估算
// 反电动势观测器
float Estimate_BackEMF() {
float Vbus = Read_Voltage(ADC_CH3);
float Vd = (Vbus - Vq - R*Id)/Kt;
return (Vd * 60)/(Pole_Pairs * Vdc);
}
// 滑动平均滤波
#define FILTER_SIZE 5
float speed_buf[FILTER_SIZE] = {0};
uint8_t index = 0;
float Filter_Speed() {
speed_buf[index++] = Estimate_BackEMF();
if(index >= FILTER_SIZE) index = 0;
float sum = 0;
for(int i=0; i<FILTER_SIZE; i++) {
sum += speed_buf[i];
}
return sum / FILTER_SIZE;
}
三、中断服务程序
3.1 PWM中断处理
void CCU60_ISR() {
// 清除中断标志
CCU60.INTCLR.Bits.T12IF = 1;
// 电流采样触发
ADC0.CH0.CAL = 1; // 启动ADC转换
ADC0.CH1.CAL = 1;
// 位置更新
theta += 0.01f; // 假设速度为1000rpm
}
3.2 ADC中断处理
void ADC0_ISR() {
// 读取采样值
float Ia = (ADC0.CH0.RESULT.all * 3.3f * ISENSE_GAIN) / 4095.0f;
float Ib = (ADC0.CH1.RESULT.all * 3.3f * ISENSE_GAIN) / 4095.0f;
// 电流重构
float Ic = -Ia - Ib;
// 存储全局变量
global_Ia = Ia;
global_Ib = Ib;
global_Ic = Ic;
}
四、关键参数配置
4.1 电机参数
| 参数 | 数值 | 配置位置 |
|---|---|---|
| 极对数 | 4 | POLE_PAIRS=4 |
| 额定电流 | 5A | NOM_CUR=5.0 |
| 直流母线电压 | 24V | VDC=24.0 |
| 死区时间 | 1.5μs | DEAD_TIME=150 |
4.2 PI参数整定
// 电流环参数
#define KP_CURRENT 0.3f
#define KI_CURRENT 0.05f
// 速度环参数
#define KP_SPEED 0.1f
#define KI_SPEED 0.02f
五、调试与优化
5.1 实时监控
// SCI调试输出
void Debug_Log(float* data) {
UART_SendChar(0xAA); // 帧头
for(int i=0; i<3; i++) {
UART_SendFloat(data[i]);
}
}
// 主循环中调用
Debug_Log(&theta);
5.2 性能优化
-
电流重构优化:
// 低通滤波器 float LowPassFilter(float new_val) { static float prev_val = 0; return 0.7*prev_val + 0.3*new_val; } -
动态死区补偿:
float DeadTime_Compensation(float duty) { if(duty > 0.5) { return (1.0 - duty) * (VDC / 24.0f); } else { return duty * (VDC / 24.0f); } }
参考代码 BLDC无感正弦波代码 FOC 采用英飞凌MCU www.youwenfan.com/contentcnk/69775.html
六、典型应用场景
- 空调压缩机控制 实现宽电压范围(180-264VAC)无传感器驱动 支持PWM频率16kHz@24VDC
- 工业风机控制 无级调速范围100-12000rpm 噪声<35dB(A) @5000rpm
- 电动汽车冷却泵 支持CAN总线通信(CANopen协议) 效率>92%@额定负载
七、保护机制
-
三重保护系统
void Check_Protection() { // 过流保护 if(ADC_Current > MAX_CURRENT) { Disable_PWM(); Set_Fault_LED(RED); } // 过温保护 if(Temp_Sensor > MAX_TEMP) { Reduce_Duty_Cycle(50%); Activate_Heatsink_Fan(); } }

浙公网安备 33010602011771号