基于英飞凌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 关键外设配置

  1. CCU6定时器:用于生成空间矢量PWM波形

    CCU60.T12PR = (SystemCoreClock / (PWM_FREQ * 2)) - 1;  // 设置周期
    CCU60.T12 = 0;          // 初始计数值
    CCU60.T12M = CCU6_T12M_PWM;  // PWM模式
    
  2. 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 性能优化

  1. 电流重构优化

    // 低通滤波器
    float LowPassFilter(float new_val) {
        static float prev_val = 0;
        return 0.7*prev_val + 0.3*new_val;
    }
    
  2. 动态死区补偿

    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

六、典型应用场景

  1. 空调压缩机控制 实现宽电压范围(180-264VAC)无传感器驱动 支持PWM频率16kHz@24VDC
  2. 工业风机控制 无级调速范围100-12000rpm 噪声<35dB(A) @5000rpm
  3. 电动汽车冷却泵 支持CAN总线通信(CANopen协议) 效率>92%@额定负载

七、保护机制

  1. 三重保护系统

    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();
        }
    }
    
posted @ 2025-10-30 15:48  老夫写代码  阅读(5)  评论(0)    收藏  举报