DSP28335驱动永磁同步电机代码集:融合PI控制算法、双闭环控制与多种感应算法的源代码及原...
DSP28335 永磁同步电机代码 CCS编辑有PI控制算法、速度电流双闭环控制。 有方波有感无感算法无感为3段反电势过零点。 有pmsm有感无感算法有感有hall的foc有磁编码器的有增量编码器的。 无感为滑模观测器的。 提供原理图源代码在工业控制领域玩转永磁同步电机PMSMDSP28335这颗芯片绝对是个狠角色。咱们今天要聊的这套代码方案直接把双闭环控制、有感无感切换这些硬核功能打包实现手把手教你从寄存器配置到算法落地。电流环和速度环这对黄金搭档内核就是PI控制器。别小看这经典结构调参可是门玄学。来看这段电流环核心代码void Current_PI_Calc(PI_Struct *pi) { pi-err pi-ref - pi-fdb; pi-integral pi-err * Ts; pi-output pi-Kp * pi-err pi-Ki * pi-integral; // 抗饱和处理 if(pi-output Umax) pi-integral - pi-err * Ts; }这里的Ts是采样周期Umax对应PWM最大占空比。注意积分分离处理——当输出饱和时回退积分项这招能有效避免windup现象。实际项目中遇到过电机启动时疯狂震荡就是漏了这个处理。霍尔传感器方案里六步换相的实现特别有意思。通过GPIO捕捉霍尔信号跳变沿触发中断配合下面这个状态机switch(Hall_State 0x07) { //取低三位 case 0b001: Set_PWM_PhaseA_High(); break; case 0b011: Set_PWM_PhaseB_High(); break; //...完整换相表 }但遇到霍尔信号受干扰时容易翻车后来在中断服务里加了消抖处理连续三次采样值相同才更新状态毛刺问题迎刃而解。滑模观测器是无感控制的重头戏。核心是反电动势观测方程// 滑模观测器核心计算 e_alpha I_alpha_hat - I_alpha; e_beta I_beta_hat - I_beta; z_alpha Kslide * sign(e_alpha); z_beta Kslide * sign(e_beta); // 反电动势估算 E_alpha z_alpha Ld * e_alpha; E_beta z_beta Ld * e_beta;这个sign()函数直接用查表法实现避免浮点运算。但实际调试发现电机低速时观测器噪声太大后来在速度环前加了移动平均滤波才稳定下来。DSP28335 永磁同步电机代码 CCS编辑有PI控制算法、速度电流双闭环控制。 有方波有感无感算法无感为3段反电势过零点。 有pmsm有感无感算法有感有hall的foc有磁编码器的有增量编码器的。 无感为滑模观测器的。 提供原理图源代码针对不同编码器配置代码里留了多个接口宏。比如磁编码器的角度解析#ifdef AS5047P angle (SPI_Read() 0x3FFF) * ANGLE_SCALE; #endif而增量式编码器则用QEP模块直接捕获脉冲配合下面这行魔法计算speed (int32_t)(QPOSCNT - last_cnt) * SPEED_FACTOR; last_cnt QPOSCNT;注意QPOSCNT是32位计数器处理溢出时要特别小心。之前有个坑是没考虑转速突变时的计数器翻转导致速度计算出现跳变。源码包里最实用的其实是PWM死区配置部分直接关系到功率管安危EPwm1Regs.DBCTL.bit.OUT_MODE 0x3; // 上下管互补 EPwm1Regs.DBCTL.bit.POLSEL 0x2; // 低有效 EPwm1Regs.DBFED 100; // 死区时间ns这个值需要根据驱动芯片参数计算有个快速验证方法用示波器看上下管波形死区时间内必须保证两者都不导通。整套代码跑起来后用CCS的Graph功能实时监控变量变化比万用表好用多了。比如看速度环输出波形是否平滑电流谐波是否超标。记得有一次发现相电流有规律毛刺最后查出是PWM载波频率和采样不同步导致的混叠。项目文件里附带了详细的寄存器配置清单特别是AD采样触发时序一定要对齐PWM周期。这里有个隐藏技巧在EPWM中断里启动AD转换保证采样时刻正好在PWM周期中点避开开关噪声。这套方案经过多个量产项目验证从电动工具到伺服驱动都有应用。想要源码和原理图的老铁可以私信遇到具体问题欢迎评论区开杠——毕竟电机控制这玩意儿调过的人都知道纸上得来终觉浅。