v5 overheating [RobotMesh Studio Python] tips?

Hi, my motors are overheating after about 5-6 minutes of driving. This was determined by reading brain log and by the fact that the motors drop to half performance. It happens simultaneously on all 4 motors (we get 4 red warnings at a time in the log) so it is not a faulty v5 motor, faulty port or some mechanical issue like extra friction, wheels spin freely w/o motor). I think it is normal, because the robot is a 4 wheel drive, getting on the heavy-ish side, with semi-locked Omnis (so we don’t get pushed sideways from platforms) so there is a lot of friction at turns to be overcome. Motors are v5 with 200 rpm gearboxes driven by chain 1:1, no exotic gearing.

Question is this: while during autonomous the built in PIDs are essential (and quite awesome) and the HOLD function is super useful, we are concerned that during driver control those same features are straining the motors. During aggressive driving the motors overheat and chains constantly snap. We don’t want to give up the speed of the 200rpm, instead is there a way to make the acceleration/deceleration around zero stick a bit smoother and gentler? We use exponential drive which helps a bit, but still, whenever direction is changed abruptly or the sticks are released (I know it’s a matter of training driving properly, easier said…), the robot comes to a stop too abruptly and the robot is visibly stressed. Also we found that RobotMesh Python has a built in “vex.controller.deadband” class, but not sure how to use it and what it does. Does it COAST or it simply sends “Spin motor at 0” or it sends “stop motor”?

Essentially, any programming tips to make it easier on the motors and overheat them less and make driver control a bit smoother?

Here is the basic joystick code we use. Thanks in advance!!

    while True:
        axis_3 = con.axis3.position(vex.PercentUnits.PCT)*abs(con.axis3.position(vex.PercentUnits.PCT))/100
        axis_1 = con.axis1.position(vex.PercentUnits.PCT)*abs(con.axis1.position(vex.PercentUnits.PCT))/100
        motor_fl.spin(vex.DirectionType.FWD, axis_3 + axis_1,vex.VelocityUnits.PCT)
        motor_bl.spin(vex.DirectionType.FWD, axis_3 + axis_1,vex.VelocityUnits.PCT)
        motor_fr.spin(vex.DirectionType.FWD, axis_3 - axis_1,vex.VelocityUnits.PCT)
        motor_br.spin(vex.DirectionType.FWD, axis_3 - axis_1,vex.VelocityUnits.PCT)

All that the deadband method does is implement a deadband for you. If the absolute value of the joystick is below the threshold set by deadband, the joystick reports 0 instead. That’s all it is.

I’d recommend not using hold or brake during driver control. Hold causes the motors to constantly work if they are even slightly off of the position they were told to hold at when you stop. Brake mode uses the motor to stop the robot, dumping its kinetic energy into heat. If you use coast, most of the kinetic energy will be eaten up by the substantial friction from your chain instead. I’d bet (small amounts of) money that switching to coast braking mode will help.

@John TYler:
Thanks, that’s what we were thinking too. I think what happened was the team had it on coast originally when they did the driver control, then we combined everything into a competition template and the hold comes from autonomous now (where we do use it on purpose) so we forgot to reset to coast. Easy thing to fix, thanks! And thanks for explaining the RMS deadband. We don’t really need it as the expo gives sufficient deadband as a byproduct.