高创伺服电机飞车问题
兜兜转转又回到了伺服电机上,此次遇到的伺服电机飞车问题困扰了我有好长一段时间。在飞车发生时,除了电机飞速转动使设备抖动带来的物理冲击,也有身边其他人你一言我一语的情绪冲击。希望这个办法可以解决你的飞车问题。
一、简介
单片机通过CAN与伺服电机驱动器建立通信,用的CANOPEN协议。当设备上电后,伺服驱动器上一直闪“8”。用单片机给驱动器发送复位指令(让伺服电机找到觉得零点)后,伺服电机会偶尔出现飞车事故。飞车仅发生在设备上完电后,第一次用单片机给伺服驱动器发复位指令的时候,如果第一次没有飞车,后再发是不会发送飞车的。
二、硬件
stm32f103zet6 + CAN芯片(TJA 1050)系统板
高创伺服驱动器+伺服电机
三、问题原因
让伺服电机进行复位运动的指令是按照手册CDHD_EtherCAT_CANopen_fw上Homing 模式的例子写的,让我们先看一下这个例子:
因为用到CANopen协议,涉及SDO和PDO的内容,说实话SDO还能看懂,PDO是真没看懂。我们不看指令,就看指令上面的注释。可以看到,在进行复位运动时,会先让驱动器进行使能(Enable power stage with R_PDO1那),然后再进行后面的复位动作。
然后在驱动器的另一个手册上有些,当驱动器上数码管的字符闪烁时,说明有报警,字符后面的点不亮时,说明驱动器没有使能;点常亮时,说明驱动器使能。还有一句话:当字符闪烁时给驱动器使能,可能使电机运动。
所以刚开始一度以为要先清除报警,才可以给驱动器使能。后来发现也不是,而是在上面的Homing 模式中,其实包含两部分动作:驱动器使能和复位运动。在驱动器使能的过程中,是不能马上给驱动器又发送电机运动的指令的,这才是导致我们这个电机飞车的罪魁祸首! 后面电机厂商的技术人员也验证了这一点。
设备上完点后,驱动器数码管上的字符闪烁,小数点未亮,说明此时驱动器未使能。所以此时如果按照Homing 模式的例子给驱动器发指令,驱动器在使能过程中,马上又收到了让伺服电机动的指令,这时大概率会发生飞车。但是如果在驱动器数码管的小数点亮时,即驱动器使能的时候,按照Homing 模式的例子给驱动器发指令,伺服电机是不会跑飞的。
四、解决办法
在设备上完电后,伺服驱动器处于未使能状态,先给伺服驱动器使能。在使能的过程中,不要给驱动器发任何让电机运动的指令,时间大概要6、7s。在伺服驱动器使能完成之后,再按Homing 模式的例子给驱动器发指令,伺服电机是不会跑飞的。