|
|
|
![]() |
|
|||||||
|
||||||||
![]() |
| Thread Tools | Rate Thread | Display Modes |
|
#1
|
|||
|
|||
|
Hi Everyone --- Rookie coach is stumped...
![]() We're trying to use our encoders. motorD seems to be controlled but motorE acts as if it is not being controlled. Using the code below, MotorD turns 1/4 revolution at what appears to be 50% power. MotorD seems to behave as expected if you change its values for nMotorEncoderTarget[motorD] or motor[motorD]. On the other hand, MotorE ALWAYS runs at 100% power and ALWAYS turns several full revolutions before it stops when it finally reaches the set target value (negative) as seen in the NXT Device Control Display debugger window. If you change motorE's power setting it is ignored. Both encoder wires are plugged into the motor controller so the orange wire faces the motor controller's lettering and are plugged into the motors so orange is left-most when looking at and reading the label on the motor. We have tried swapping motor controllers, the encoder cables, and we've hooked up motorD as mtr_S1_C1_2 and motorE as mtr_S1_C1_1 all with the same result. It does not matter which motor is reversed in the pragma. I've opened up the encoder on motorE and it seems to be installed correctly. We have not swapped the encoders because that would entail pulling off the encoder wheels, which I'm not ready to do. Any suggestions most appreciated! Code:
#pragma config(Hubs, S1, HTMotor, none, none, none)
#pragma config(Sensor, S1, , sensorI2CMuxController)
#pragma config(Motor, mtr_S1_C1_1, motorD, tmotorTetrix, PIDControl, encoder)
#pragma config(Motor, mtr_S1_C1_2, motorE, tmotorTetrix, PIDControl, reversed, encoder)
//*!!Code automatically generated by 'ROBOTC' configuration wizard !!*//
task main()
{
nMotorEncoder[motorD] = 0;
nMotorEncoder[motorE] = 0;
nMotorEncoderTarget[motorD] = 720; //Gearing ratio is 1:2 so one revolution is 2880 encoder ticks
nMotorEncoderTarget[motorE] = 720; //@720 ticks both wheels should turn 1/4 revolution
motor[motorD] = 50;
motor[motorE] = 50;
while (nMotorRunState[motorE] != runStateIdle || nMotorRunState[motorD] != runStateIdle)
{
}
motor[motorD] = 0;
motor[motorE] = 0;
wait1Msec(3000);
}
|
|
#2
|
|||
|
|||
|
Re: [FTC]: One Encoder Works; The Other Ones Does Not
I've done some more online research... This is exactly our problem and first surfaced about a year ago:
http://www.robotc.net/forums/viewtop...=2774&start=15 It was supposedly fixed in ROBOTC 3.54. We are running ROBOTC 3.62 Also, the order of powering up the motor controller and the NXT seems to be important. We are using this order: 1. Power up 12v to motor controller 2. Power up NXT 3. Download and run program |
|
#3
|
||||
|
||||
|
Re: [FTC]: One Encoder Works; The Other Ones Does Not
Hello,
Here is the code that we use for moving motors to a position. We have had problems non-stop with the built in RobotC nMotorEncoderTarget function so we wrote our own. Here it is written to do what your code was supposed to do: Code:
#pragma config(Hubs, S1, HTMotor, none, none, none)
#pragma config(Sensor, S1, , sensorI2CMuxController)
#pragma config(Motor, mtr_S1_C1_1, motorD, tmotorTetrix, PIDControl, encoder)
#pragma config(Motor, mtr_S1_C1_2, motorE, tmotorTetrix, PIDControl, reversed, encoder)
//*!!Code automatically generated by 'ROBOTC' configuration wizard
typedef enum
{
We have different power curves for the target to motor power function because we found that depending on load and backlash in certain applications a single power curve could cause oscillations. We have used this method for controlling everything from arms to our drive base with great success. Play around with this code and see what settings work the best. Best of luck, Team 4211 |
|
#4
|
|||
|
|||
|
Re: [FTC]: One Encoder Works; The Other Ones Does Not
Wow. Terrific! Many thanks!
|
![]() |
| Thread Tools | |
| Display Modes | Rate This Thread |
|
|