三相两相步进方案矢量控制超前角控制内置微控制器最近在搞步进电机控制方案选型发现三相和两相系统的选择特别有意思。两种方案看似差不多实际调起来完全是两个世界。今天咱们直接上干货聊聊这两种方案的实现套路重点看看矢量控制和超前角这对冤家怎么配合。先说两相步进的老司机玩法。传统开环控制简单粗暴但遇到负载突变就嗝屁。这时候矢量控制FOC就派上用场了。看这段STM32的PWM配置代码// 六步换相配置 TIM_OC_InitTypeDef sConfigOC { .OCMode TIM_OCMODE_PWM1, .Pulse 0, .OCPolarity TIM_OCPOLARITY_HIGH, .OCFastMode TIM_OCFAST_DISABLE }; HAL_TIM_PWM_ConfigChannel(htim1, sConfigOC, TIM_CHANNEL_1); // 类似配置其他通道...这代码看着平平无奇但关键在电流矢量的计算。实际项目中我习惯用q格式定点数来优化性能比浮点运算快三倍不止。特别是当电机转速超过2000rpm时用查表法提前计算好的sin/cos值比实时计算稳得多。三相两相步进方案矢量控制超前角控制内置微控制器三相系统就比较骚气了超前角控制是它的本命。之前调一个带编码器的42步进电机发现角度补偿算法直接决定系统刚度。看看这个角度预测算法float predict_lead_angle(float current_speed, float acceleration) { static float prev_angle 0.0f; float delta 0.0012 * current_speed 0.00015 * acceleration; delta constrain(delta, 0, MAX_LEAD_ANGLE); // 硬件保护 prev_angle 0.95*prev_angle 0.05*delta; // 低通滤波 return prev_angle; }这个滤波系数0.95可不是随便写的是拿示波器抓了三天波形试出来的最优值。特别注意constrain函数实际调试中发现不加这个的话高速时超前角会飞掉导致失步。现在内置微控制器的驱动芯片是真香。像TMC5160这种货色直接硬件实现矢量控制。配置它的寄存器时有个坑// 配置斩波参数 WRITE_REG(TMC5160_IHOLD_IRUN, (10 16) | // IHOLD 10ms (24 8) | // IRUN 24/32最大值 (5 0)); // IHOLDDELAY 5这个配置字节顺序反人类第一次调的时候烧了两块驱动板才搞明白。后来发现用它的SpreadCycle模式结合内置的斜坡发生器低速共振问题直接消失比软件实现省心多了。最后说个实战经验三相方案在高速场景下效率能比两相高15%但低速时扭矩波动更大。上次做3D打印机挤出机驱动用两相方案超前角补偿0.1r/min的超低速下还能保持0.5%的精度这就是软硬件配合的魔力。