|
|
|
![]() |
|
|||||||
|
||||||||
![]() |
|
|
Thread Tools | Rate Thread | Display Modes |
|
|
|
#1
|
|||
|
|||
|
Strange PWM/Motor Behavior!
A bit of prologue background: we're working on rack-and-pinion steering for our robot. As such, I've (supposedly) changed the Default Code to the point where X-axis changes should only be sent to pwm13, the steering motor.
However, it seems that with either of the joysticks sent with the KOP, the x changes are for some reason sent to the drive motors as well as the steering motor and the Y-axis changes are sent to the steering motor as well as the drive motors. Here's the PWM setup: pwm16: Right drive motors pwm15: Left drive motors pwm13: Steering motor Here's the steering code (so far, not sure if it works yet! )Code:
if (p1_x >= MAXI) {
XDelta = MAXI-Temp;
}
else if (p1_x <= MINI)
{
XDelta = MINI - Temp;
}
if (XDelta < 0 && XDelta < -4) {
XDelta *= -1;
for (i = 0; i<(XDelta/4); i++) {
for (j = 0; j < 10; j++) {
pwm13 = 0;
}
pwm13 = 127;
MAXI -= 4;
MINI -= 4;
}
Temp = p1_x;
}
else if (XDelta > 0 && XDelta > 4)
{
for (i = 0; i<(XDelta/4); i++) {
for (j = 0; j<10; j++) {
pwm13 = 255;
}
pwm13 = 127;
MAXI += 4;
MINI += 4;
}
Temp = p1_x;
}
Here is the drive motor code (such as it is) : Code:
if (TempY > p1_y+15)
{
TempTemp = p1_y/2;
pwm15 = Exponential_Grow(TempTemp,0);
pwm16 = Exponential_Grow(TempTemp,0);
TempY = p1_y/2;
}
else if (TempY < p1_y-15)
{
TempTemp = p1_y/2;
pwm15 = Exponential_Grow(TempTemp,0);
pwm16 = Exponential_Grow(TempTemp,0);
TempY = p1_y/2;
}
else
{
pwm15 = Exponential_Grow(p1_y,0);
pwm16 = Exponential_Grow(p1_y,0);
TempY = p1_y;
}
As far as I can tell, it's displaying behavior similar to that of the basic Default code and trying to do the two-wheeled turning using pwms 13-16. Any help would be very, very appreciated! Last edited by TerranCoder : 13-02-2008 at 15:17. Reason: Incorrect variable name: TempT |
|
#2
|
|||
|
|||
|
Re: Strange PWM/Motor Behavior!
First, make sure the pwms are actually connected to the motors you think they are.
If you find the IFI dashboard application, you can connect your computer to the Dashboard port on the OI and look at the pwm outputs directly. Next, I would suggest using "Find in Files" and searching for any other occurances of pwm13, pwm15, or pwm16. Also I don't know what Exponential_Grow contains, but you could check there as well. If all else fails, try temporarily replacing your drive code with something simpler and reintroducing parts of it until you find the problem. You could start with something as simple as this: Code:
pwm13 = p1_x; pwm15 = p1_y; pwm16 = 255-p1_y; |
|
#3
|
|||
|
|||
|
Re: Strange PWM/Motor Behavior!
Find in Files returns only the initialization code (pwm* = 127) and any code that I personally have added, none of which affects two pwms at the same time.
Exponential_Grow takes a value and returns another value, no pwm code at all. I'll give the Dashboard a try and see if that explains anything. Is there any chance that the RC somehow isn't using the new code? The IFI Loader seems to work, but I'm not sure if there has been any actual change in behavior. I'm very positive that the compiled HEX file is the one I'm working on and not the Default. |
|
#4
|
|||||
|
|||||
|
Re: Strange PWM/Motor Behavior!
are you still calling Default_Routine() ? It could just be overwriting anything you do.
|
|
#5
|
|||
|
|||
|
Re: Strange PWM/Motor Behavior!
Yes, I am calling Default_Routine(), but all the code and changes I've talked about where made in there, so if it is working, there shouldn't be an issue with that.
|
|
#6
|
||||
|
||||
|
Re: Strange PWM/Motor Behavior!
If you are calling Default_Routine(), look for this bit of code:
Code:
pwm13 = pwm14 = Limit_Mix(2000 + p1_y + p1_x - 127); pwm15 = pwm16 = Limit_Mix(2000 + p1_y - p1_x + 127); ![]() |
|
#7
|
|||
|
|||
|
Re: Strange PWM/Motor Behavior!
Actually, those were the first two lines of code that I removed from the Default_Routine() code when I changed it. However, I did double check that to make sure and indeed, they are gone from my code.
In fact, I've removed the entire limit mix function. |
|
#8
|
||||
|
||||
|
Re: Strange PWM/Motor Behavior!
Does your system use interrupts, as in, are you using encoders to sample your wheel revolutions?
If so, PWM's 13-15 can get really squirly! If that is the case, look into Kevin Watson's PWM replacement code. It uses the CCP hardware and no interrupts will bother it. |
|
#9
|
|||
|
|||
|
Re: Strange PWM/Motor Behavior!
No interrupts, but I believe I am already using Kevin's code. And that's another strange thing. One would think that the behavior of the robot would change with the change of pwm code, and yet I didn't notice any visible difference.
|
![]() |
| Thread Tools | |
| Display Modes | Rate This Thread |
|
|
Similar Threads
|
||||
| Thread | Thread Starter | Forum | Replies | Last Post |
| Serial PWM motor controller | smartkid | Technical Discussion | 18 | 30-12-2007 12:35 |
| GTS strange behavior | iwdu15 | Programming | 6 | 01-02-2007 18:46 |
| vEx PWM Motor Response | yoyodyne | Control System | 9 | 16-10-2006 00:37 |
| my behavior | lil_longo | General Forum | 1 | 24-02-2006 13:53 |
| Strange Behavior | Gary Bonner | Control System | 17 | 09-11-2005 19:01 |