IQ Motor Gets Weird Hot

Short story…

IQ motor on Flex lift arm gets weird hot…almost upon powering on even before driving. I have searched and searched with no resolution. Anyone out there have any wisdom, expertise, or experience to share? The motor obviously under performs when hot like this. Thanks for your help.

Is it using the default program or a custom program in RobotC or Modkit?

Default with the addition of a 2nd motor on the lift.

The students didn’t upload a custom program with Modkit or RobotC to make the 2nd lift motor work?

We modified a sample program for RobotC. Reads like this…

task main()
{
int threshold = 10;

while(true)
{
	//////////////////////////////////TANK DRIVE CONTROL FOR CHASSIS ///////////////////////////////////////


	//If the ChannelA (left Y-Axis) is greater than the threshold value,then we'll set the speed of the motor to vlaue from the joystick.

	if(getJoystickValue(ChA) > threshold || getJoystickValue(ChA) < -threshold)
	{
		setMotorSpeed(leftMotor, getJoystickValue(ChA));
	}
	else  //If less than the threshold, we'll set the motor to zero.
	{
		setMotorSpeed(leftMotor, 0);
	}


	//If the ChannelD (right Y-Axis) is greater than the threshold value, then we'll set the speed of the motor to vlaue from the joystick.

	if(getJoystickValue(ChD) > threshold || getJoystickValue(ChD) < -threshold)
	{
		setMotorSpeed(rightMotor, getJoystickValue(ChD));
	}


	else  //If less than the threshold, we'll set the motor to zero.
	{
		setMotorSpeed(rightMotor, 0);
	}


	/////////////////////////////////// LIFT CONTROLS /////////////////////////////////////////////


	//If Button "L-Up" is pressed in, we'll set the arm motor to run in reverse.
	if(getJoystickValue(BtnLUp) == 1)
	{
		setMotorSpeed(rightArm,-127);
		setMotorSpeed(leftArm, -127);
	}


	//If the "L-Up" isn't pressed, but "L-Down" is, we'll set the motor to run forward.
	else if(getJoystickValue(BtnLDown) == 1)
	{
		setMotorSpeed(rightArm, 127);
		setMotorSpeed(leftArm, 127);
	}


	else  //If neither button is pressed, we'll set the motor off.
	{
		setMotorSpeed(rightArm, 0);
		setMotorSpeed(leftArm, 0);
	}

}

}

The code looks simple, nothing I can see that would cause problems.

Unlikely reason, but Is either the rightArm or leftArm reversed in the motor settings, so they’re not fighting each other?

One is reversed to the other. So, everything is okay there. Odd isn’t it? Can’t figure this one out.

Yeah, that’s a head scratcher.

If not code, maybe it’s the the motor? If you swap the motor, does the new motor do the same thing?

Or swap the cable to the motor, maybe there’s an internal short?

I just ran the VEXos Utility. It did complete an update. We will see if that’s the fix or not. Class just ended so it will be a few days before I can check it out.

1 Like

We lost a couple lift motors this way. From what I can tell, the IQ motors have a current sense built into them to help reduce the current over time to prevent the motors from overheating (not an actual temp sensor). When you practice a lot, reprogram, turn the unit on and off, then practice with short time intervals, the timing used to determine how hot the motor gets is reset so things accumulate and the motors get hot anyway.
This is conjecture on my part, but I stopped our kids from hanging except during actual tournaments and skills. Not worth it when you can’t buy new motors!!
If it weren’t for a local friend loaning us 4 motors, we would have missed the last two tournaments.

We’ve also had this kind of situation.But we thought it might be that the motor was locked.You can try to solve this problem by modifying the program.
The above content is translated by Google

there are 2 bools that you can use that we used to stop our iq lift from overheating while we were practicing:
bool overTemp
bool currentLimitFlag
and use can use this code inside task main

task main () {
while(!overTemp || !currentLimitFlag) {

//your code goes here

};
}
1 Like

So, does this just shut the motor down when temp is too high? Is that the “command” just as you have it expressed? Nothing else I need to include?

Sorry…but this is a bit beyond anything I have done before.

the 2 bool’s are built-in you just have to declare them at the top i forgot to put that in my code and it stop whatever is inside the ‘while’ loop

bool  overTemp
bool currentLimitFlag

task main () {
while(!overTemp || !currentLimitFlag) {

//your code goes here

};
}

to do it another way just for a function or small set of code use an ‘if’ statement like this

if (overTemp || currentLimitFlag) {

//your code here

};