f4平台高频注入 f4平台的高频注入,keil版本,提供对应原理图,pcb,模型。

直接上硬货,玩过无感FOC的都知道高频注入这玩意儿有多带劲。今天拿STM32F4平台开刀,手把手拆解实现细节。原理图直接扔立创EDA画的,三层板布局把PWM驱动和采样电路隔开,防止高频干扰把信号吃掉了。

先看注入信号的PWM生成部分:

// PWM定时器配置关键代码
void PWM_Configuration(void)
{
    TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
    TIM_OCInitTypeDef  TIM_OCInitStructure;
    
    // 载波频率20kHz,死区时间100ns
    TIM_TimeBaseStructure.TIM_Period = 420-1;  // APB1 84MHz / (420*2) ≈ 20kHz
    TIM_TimeBaseStructure.TIM_Prescaler = 1;
    TIM_TimeBaseStructure.TIM_ClockDivision = 0;
    TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
    TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure);

    // 注入高频信号的调制波
    TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
    TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
    TIM_OCInitStructure.TIM_Pulse = 210;  // 50%占空比
    TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
    TIM_OC1Init(TIM1, &TIM_OCInitStructure);
    
    TIM_CtrlPWMOutputs(TIM1, ENABLE);
    TIM_Cmd(TIM1, ENABLE);
}

这段代码的骚操作在于把高频载波和基波调制分开处理。TIM1的ARR寄存器控制载波频率,CCR1用来叠加高频信号。注意这里用了中心对齐模式,高频成分更容易被电机电感响应。

ADC采样必须跟PWM同步触发,否则相位对不上:

// ADC同步触发配置
ADC_RegularChannelConfig(ADC1, ADC_Channel_0, 1, ADC_SampleTime_15Cycles);
ADC_ExternalTrigConvCmd(ADC1, ENABLE);
ADC_ExternalTrigConvConfig(ADC1, ADC_ExternalTrigConv_T1_CC1);

这个配置让ADC在PWM中点时刻采样电流,正好捕捉到高频信号的幅值变化。实测发现采样窗口控制在1.2us以内才能准确捕获2kHz的高频响应。

f4平台高频注入 f4平台的高频注入,keil版本,提供对应原理图,pcb,模型。

解调环节是核心算法,直接上正交锁定放大:

float demodulate_hfi(float alpha, float beta, float theta)
{
    static float hfi_sin, hfi_cos;
    hfi_sin = sin(theta * 2 * PI);
    hfi_cos = cos(theta * 2 * PI);
    
    // 正交解调
    float d_axis = alpha * hfi_cos + beta * hfi_sin;
    float q_axis = beta * hfi_cos - alpha * hfi_sin;
    
    // 低通滤波
    static float d_filter = 0, q_filter = 0;
    d_filter = 0.95 * d_filter + 0.05 * d_axis;
    q_filter = 0.95 * q_filter + 0.05 * q_axis;
    
    return atan2f(q_filter, d_filter);  // 估算转子位置
}

这里有个坑:三角函数计算必须用硬件FPU加速,软件库的sin/cos函数会直接导致计算延迟超标。实测在F4平台上这段代码执行时间控制在8us以内,满足5kHz的控制频率需求。

PCB布局要注意三点:1.电流采样走线必须等长且远离功率地 2.注入信号回路面积最小化 3.ADC基准电压单独用π型滤波。原理图里给运放供电的LDO特别加了磁珠隔离,不然高频噪声会从电源串进去。

最后扔个实测波形(假装有图):黄色是注入的高频电压信号,蓝色是解调后的位置误差信号。当电机转速超过200rpm时,高频注入会自动切换成滑模观测,这个切换逻辑的代码在state_machine.c里藏着。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐