作者 | 主题 |
---|---|
真心便笺 游民 经验值: 64 发帖数: 5 精华帖: 0 |
楼主 2019-12-18 16:14:42
主题:用报文3或报文102读取V90单圈绝对值编码器的绝对位置 需要:前些天做项目,需要完成扭矩控制,及电机轴的绝对位置读取。 采购:买的V90PN的驱动器,单圈绝对值的电机。 方案:更改FB285,V90用速度模式,配102报文。 扭矩控制:102报文中PZD5为扭矩减少,可通过此值限制扭矩,达到恒扭矩的控制。可参考官方文档https://support.industry.siemens.com/cs/document/109745698/-sinamics-v90-pn%E9%80%9F%E5%BA%A6%E6%8E%A7%E5%88%B6%E6%A8%A1%E5%BC%8F%E4%B8%8B%E5%A6%82%E4%BD%95%E5%AE%9E%E7%8E%B0%E8%BD%AC%E7%9F%A9%E9%99%90%E5%B9%85%E5%8A%9F%E8%83%BD?dti=0&lc=zh-CN。 绝对位置读取: 问题 : 由于设备会断电,如断电后,电机轴运动,再次上电,要更新为轴的实际位置。假如电机轴一圈为0-360°,每个位置要始终对应相应的角度。此时读取G1_XIST1中的实际位置就无法实现了。 解决:102报文PZD6为编码器控制字,其中bit13为请求绝对值周期。官方介绍:request of additional cyclic transmission of the absolute actual position in G1_XIST2,if no other data needs to be transferred due to commands or errors the absolute position value will be transmitted automatically.请求额外循环发送G1_XIST2中的绝对实际位置,如果由于命令或错误而无需传输其他数据,则绝对位置值将自动发送。 设置bit13为1,此时读取G1_XIST2,即为编码器的绝对位置。 附更改的FB285。 扭矩控制: #prTorque := (#RefTorque*#TorqueLimit-#TorqueSp)/ (#RefTorque*#TorqueLimit) * 16384.0 #sxSendBuf.MOMRED := INT_TO_WORD(REAL_TO_INT(#prTorque)); 位置转换: #Position := DINT_TO_REAL(DWORD_TO_DINT(#sxRecvBuf.G1_XIST2)); 角度转换: IF #Position <= #TruncatedPosition THEN #ActAngle := ((#TruncatedPosition - #Position) / 2097152.0)*360; ELSE #ActAngle := 360-(((#Position - #TruncatedPosition) / 2097152.0)*360); END_IF; |