DIY伺服驱动器方案,某成熟量产型号,基于TMS320F28 DIY伺服驱动器方案,某成熟量产型号
DIY伺服驱动器方案,某成熟量产型号,基于TMS320F28 DIY伺服驱动器方案,某成熟量产型号,基于TMS320F28069设计开发。 原理图和PCB源格式(AD打开) -控制板/驱动板/电源板/滤波板 基于TMS320F28069的控制源代码 产品资料,代码注释少,需要有一定基础,建议小白不要拿
最近在搞伺服驱动器DIY的朋友注意了,分享个基于TMS320F28069的量产级方案。这个方案最香的地方在于整套硬件设计文件(AD格式)和控制源码都流出来了,虽然代码注释少得让人想摔键盘,但跑起来是真稳。
先看硬件架构,四层板设计把控制、驱动、电源、滤波分得明明白白。驱动板上的IGBT选型挺有意思,用的是FD3006FR,这玩意儿在120V供电时能扛30A峰值电流。重点看下PWM输出部分的硬件滤波电路:
// PWM配置代码片段
EPwm1Regs.TBPRD = SYSTEM_FREQUENCY / 2 / PWM_FREQ; // 20kHz载波
EPwm1Regs.CMPA.half.CMPA = EPwm1Regs.TBPRD * 0.1; // 初始占空比10%
EPwm1Regs.AQCTLA.bit.CAU = AQ_SET; // 计数增时触发SET
EPwm1Regs.AQCTLA.bit.CAD = AQ_CLEAR; // 计数减时触发CLEAR
这段代码配置了ePWM模块,亮点在计数增/减时的动作设置。注意那个SYSTEM_FREQUENCY需要根据实际时钟树配置,新手容易在这里翻车。硬件上对应的死区电路用了SN74LVC1G123单稳态触发器,实测死区时间能控制在120ns左右。
电流环采样部分用了双电阻采样方案,代码里这个骚操作值得注意:
AdcRegs.ADCSOC0CTL.bit.CHSEL = 3; // 选择ADCIN3通道
AdcRegs.ADCSOC0CTL.bit.TRIGSEL = 5; // 由ePWM1 SOCA触发
AdcRegs.ADCINTSOCSEL1.bit.SOC0 = 1; // 中断触发模式
这种硬件触发采样和PWM波形严格同步的设计,实测能降低约30%的电流谐波。不过PCB布局时ADC走线必须远离功率地,有老哥反馈说没做这点导致采样值漂得像心电图。
DIY伺服驱动器方案,某成熟量产型号,基于TMS320F28 DIY伺服驱动器方案,某成熟量产型号,基于TMS320F28069设计开发。 原理图和PCB源格式(AD打开) -控制板/驱动板/电源板/滤波板 基于TMS320F28069的控制源代码 产品资料,代码注释少,需要有一定基础,建议小白不要拿
说到PID算法,代码里藏着个trick:
void UpdatePID(PID_Obj *pid) {
float d = (pid->Err - pid->LastErr) * pid->Kd / pid->Ts;
pid->Out = pid->Kp * pid->Err + pid->Ki * pid->Integral + d;
// 抗积分饱和处理
if(fabsf(pid->Integral) > pid->MaxIntegral) {
pid->Integral = (pid->Integral > 0) ? pid->MaxIntegral : -pid->MaxIntegral;
}
}
这个不完全微分结构比常规PID省了30%计算量,实测在3000rpm时转速波动控制在±0.2%以内。不过注意Ts参数必须严格对应中断周期,之前有人手贱改了定时器配置没调这里,结果电机抖成筛子。
开发板有个彩蛋设计——在电源板背面偷偷藏了个0Ω电阻位。量产版本这里是短接的,但调试时拆掉它可以直接注入故障信号,实测过流保护响应时间从6μs缩短到2μs。不过小白千万别乱动这地方,烧过驱动芯片的哥们现在还在电子市场门口哭呢。
最后给想复现的朋友几个忠告:别看原理图上有四个运放就随便换型号,原厂用的OPA2188是经过20次迭代选的;代码里那个神秘的0x3D3A3D35不是魔法数字,是Q格式转换的定标系数;还有最重要的一点——别在没接电机时开环运行超过3秒,驱动芯片会表演烟花秀的。

更多推荐
所有评论(0)