Go to Post The only teams who have no chance of winning are those who believe they can't win. To quote the greatest athlete of our generation: "Limits like fears are often just an illusion." -- Michael Jordan - Karthik [more]
Home
Go Back   Chief Delphi > Technical > Programming
CD-Media   CD-Spy  
portal register members calendar search Today's Posts Mark Forums Read FAQ rules

 
 
 
Thread Tools Rate Thread Display Modes
Prev Previous Post   Next Post Next
  #1   Spotlight this post!  
Unread 13-02-2008, 15:14
TerranCoder TerranCoder is offline
Registered Coder from Earth
FRC #2538 (Plaid Pillagers)
Team Role: Programmer
 
Join Date: Feb 2008
Rookie Year: 2008
Location: Morris, Minnesota
Posts: 5
TerranCoder is an unknown quantity at this point
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;
  }
Temp, MAXI, and MINI are all global variables first initialized in User_Initialization(). XDelta is a local variable unused elsewhere.

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;
  }
TempY is also a global variable initialized in User_Initialization(). TempTemp is a local variable not used anywhere else.

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
 


Thread Tools
Display Modes Rate This Thread
Rate This Thread:

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Forum Jump

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


All times are GMT -5. The time now is 09:44.

The Chief Delphi Forums are sponsored by Innovation First International, Inc.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Copyright © Chief Delphi