高压无刷 无叶风扇驱动器方案,主控芯片hc32f030,无感方式驱动pmsm永磁同步电机,滑膜观测器算法,量产方案。 包含程序源码、原理图、PCB图。

无叶风扇这玩意儿看着挺酷,但驱动方案玩起来可没那么简单。最近用HC32F030这颗国产MCU折腾了个高压无刷驱动方案,实测带800W电机稳如老狗。别看芯片价格不到三块钱,该有的外设一个不少,PWM定时器直接拿来搞六步换相刚刚好。

硬件上最头疼的是高压驱动部分。原理图里MOS管得扛得住300V直流母线,这里用了个双N管自举电路。PCB布局时特意把高压区和低压控制区用2mm间距隔开,大电流走线直接铺铜加锡。有个坑得注意:自举电容得放在驱动IC旁边,线长了会出鬼畜波形。

高压无刷 无叶风扇驱动器方案,主控芯片hc32f030,无感方式驱动pmsm永磁同步电机,滑膜观测器算法,量产方案。 包含程序源码、原理图、PCB图。

滑膜观测器这块代码最有意思。直接上干货,看这个结构体:

typedef struct {
    float est_theta;    // 估算电角度
    float est_speed;    // 转子上帝视角
    float Kslide;       // 滑膜增益
    float Ls;           // 定子电感
} SMO_TypeDef;

算法核心在于用电流误差搞出滑模面。实测发现beta轴电流的观测值对噪声特别敏感,得在代码里加个移动平均滤波:

#define FILTER_DEPTH 5
float current_filter(FILTER_TypeDef *f, float new_sample) {
    f->sum += new_sample - f->buffer[f->index];
    f->buffer[f->index] = new_sample;
    f->index = (f->index + 1) % FILTER_DEPTH;
    return f->sum / FILTER_DEPTH;
}

PWM中断里最关键的是换相时机判断。这里用了过零检测补偿策略,实测补偿角度得随转速动态调整。看这段中断服务函数:

void PWM_IRQHandler(void) {
    if(PWM_GetStatus(PWM_CH_0)) {
        static uint8_t step = 0;
        PWM_ClearStatus(PWM_CH_0);
        
        // 滑膜观测器更新
        SMO_Update(&motor);
        
        // 速度超过10%切闭环
        if(motor.speed > 300) {
            step = SMO_GetNextStep(&motor);
        }
        PWM_SetOutputPattern(step_table[step]);
    }
}

启动策略用了三段式:先强制拖动到预定转速,等反电动势起来再切滑膜观测。有个骚操作是在启动阶段偷偷给q轴注入高频信号,实测能提升低速观测精度。量产时发现有的风扇叶片动平衡不好,得在代码里加转速波动抑制算法,直接改滑膜增益参数搞定。

整套方案在立创EDA开源了四层板设计,源码里留了个彩蛋——通过按键触发隐藏的螺旋渐变灯效。有老铁在打板时把MOS管方向焊反,结果上演了真人版烟花秀,这故事告诉我们:画封装时千万别省3D模型检查。完整工程文件已打包,评论区自取。

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐