4WD Arduino Compatible Mecanum - Speed Not Changing

Hi!

I require your help regarding a problem I’m encountering.

The robot I am using is the 10011 NEXUS 4WD Mecanum from the Robot Kit. I’ve downloaded the relevant codes from the website concerned:

I’m unable to manipulate the speeds on my robot. The speed can be changed directly at the analog pins at the runPWM function. So, the hardware and the motors do work properly.

We think we have narrowed down the problem to the PID section of the Motor.cpp code. The following are the 2 different PIDRegulate codes that we’ve found online, but none of them allow speed changes.


Code 1:
bool Motor::PIDRegulate(bool doRegulate) {
debug();
if(PIDGetStatus()==false) return false;
if(getPinIRQB()!=PIN_UNDEFINED && getDesiredDir()!=getCurrDir()) {
speedRPMInput=-SPEEDPPS2SPEEDRPM(isr->speedPPS);
} else {
speedRPMInput=SPEEDPPS2SPEEDRPM(isr->speedPPS);
}

PID::Compute();
if(doRegulate && PID::JustCalculated()) {
	speed2DutyCycle+=speedRPMOutput;

	if(speed2DutyCycle>=MAX_SPEEDRPM) speed2DutyCycle=MAX_SPEEDRPM;
	else if(speed2DutyCycle<=-MAX_SPEEDRPM)  speed2DutyCycle=-MAX_SPEEDRPM;
	if(speed2DutyCycle>=0) {
		runPWM(map(speed2DutyCycle,0,MAX_SPEEDRPM,0,MAX_PWM),getDesiredDir(),false);
		
		//runPWM(map(speed2DutyCycle,0,MAX_SPEEDRPM,0,speedPWM),getDesiredDir(),false);
	} else {
		runPWM(map(abs(speed2DutyCycle),0,MAX_SPEEDRPM,0,MAX_PWM),!getDesiredDir(),false);
		//runPWM(map(speed2DutyCycle,0,MAX_SPEEDRPM,0,speedPWM),!getDesiredDir(),false);
	}
	return true;
}
return false;

}

Code 2:

bool Motor::PIDRegulate(bool doRegulate) {
debug();
if(PIDGetStatus()==false) return false;
if(getPinIRQB()!=PIN_UNDEFINED && getDesiredDir()!=getCurrDir()) {
speedRPMInput=-SPEEDPPS2SPEEDRPM(isr->speedPPS);
} else {
speedRPMInput=SPEEDPPS2SPEEDRPM(isr->speedPPS);
}

PID::Compute();
if(doRegulate && PID::JustCalculated()) {
	speed2DutyCycle+=speedRPMOutput;

	if(speed2DutyCycle>=MAX_SPEEDRPM) speed2DutyCycle=MAX_SPEEDRPM;
	else if(speed2DutyCycle<=-MAX_SPEEDRPM)  speed2DutyCycle=-MAX_SPEEDRPM;
	if(speed2DutyCycle>=0) {
		runPWM(float(speed2DutyCycle)/MAX_SPEEDRPM*MAX_PWM,getDesiredDir(),false);
	} else {
		runPWM(float(abs(speed2DutyCycle))/MAX_SPEEDRPM*MAX_PWM,!getDesiredDir(),false);
	}
	return true;
}
return false;

}


Would you be able to assist with the issues that we’re are facing?

Thank you so much in advance for your help!

Hello @Sambhavi,

Welcome back to RobotShop community.

Since the kit includes the Arduino compatible board, it’s best to contact the manufacturer regarding this issue to be able to help you better.

Here are their contact details:

Email:[email protected]
Contact: Philip Chan

Let us know if you need further assistance.

Sincerely,