Speed test.
I wanted to see how fast the GlideWheel-M could go before it broke, or started to lose encoder counts. Also how well it handled different motors directly connected to it, as well as PWM. It's probably better explained in the video;
So, it handles most motors pretty well. PF-XL seems to be the best, with RC motor (obviously) doing worst. The GlideWheel-M can easily handle speed exceeding 1000 RPMs, though I don't really see a application that would be using that
Just some pics of the setup and motors.
Programs are in RobotC.
Code: Select all
task SpeedAdjust();
task main()
{
nxtDisplayCenteredTextLine(0, "Do you want");
nxtDisplayCenteredTextLine(1, "PID control?");
nxtDisplayCenteredTextLine(2, "This will give");
nxtDisplayCenteredTextLine(3, "speeds like the");
nxtDisplayCenteredTextLine(4, "MindStorms NXT");
nxtDisplayCenteredTextLine(5, "Servo Motor.");
nxtDisplayCenteredTextLine(7, "No. Yes.");
while(nNxtButtonPressed == kNoButton);
if(nNxtButtonPressed == kLeftButton) nMotorPIDSpeedCtrl[motorA] = mtrNoReg;
else nMotorPIDSpeedCtrl[motorA] = mtrSpeedReg;
while(nNxtButtonPressed != kNoButton);
eraseDisplay();
nxtDisplayCenteredTextLine(7, "DEC INC");
StartTask(SpeedAdjust);
while(true)
{
time1[T1] = 0;
nMotorEncoder[motorA] = 0;
while(nMotorEncoder[motorA] < 360 && nMotorEncoder[motorA] > -360);
nxtDisplayCenteredTextLine(2, "Mtr RPM = %d", 60000 / time1[T1]);
nxtDisplayCenteredTextLine(3, "Mtr RPS = %d", 1000 / time1[T1]);
}
}
task SpeedAdjust()
{
int speed = 0;
while(true)
{
if(nNxtButtonPressed == kLeftButton) speed -= 1;
if(nNxtButtonPressed == kRightButton) speed += 1;
if(speed > 100) speed = 100;
if(speed < -100) speed = -100;
nxtDisplayCenteredTextLine(0, "Mtr speed = %d", speed);
nxtDisplayCenteredTextLine(1, "Mtr PWM = %d", motorPWMLevel[motorA]);
motor[motorA] = speed;
wait1Msec(100);
}
}
Encoder test.
Not much to this one. Run a NXT motor and PF-XL with the GlideWheel-M for 1000 revolutions, and see how much they drifted.
GlideWheel-M encoder accuracy is equal to, or better than the NXT motor.
Code: Select all
#pragma config(Motor, motorC, , tmotorNormal, PIDControl, reversed, encoder)
//*!!Code automatically generated by 'ROBOTC' configuration wizard !!*//
task main()
{
long MtrBTtlEncdr = 0;
long MtrCTtlEncdr = 0;
for(int i = 1; i <= 1000; i++)
{
nMotorEncoder[motorB] = 0;
nMotorEncoder[motorC] = 0;
nMotorEncoderTarget[motorB] = 360;
nMotorEncoderTarget[motorC] = 360;
motor[motorB] = 50;
motor[motorC] = 50;
while(nMotorRunState[motorB] != runStateIdle && nMotorRunState[motorC] != runStateIdle);
motor[motorB] = 0;
motor[motorC] = 0;
MtrBTtlEncdr += nMotorEncoder[motorB];
MtrCTtlEncdr += nMotorEncoder[motorC];
nxtDisplayCenteredTextLine(2, "NXT Encdr: %d", MtrBTtlEncdr);
nxtDisplayCenteredTextLine(3, "PF Encdr: %d", MtrCTtlEncdr);
nxtDisplayCenteredTextLine(5, "Revolutions: %d", i);
}
}