EEPROM parameters

PowerTroll control parameters are persisted to eeprom on the Moto board - actually at the top of program slot 2 (immediately under slot 3).

In the discussion that follows I speak of 'rudder' - which you should interpret to mean the position of the trolling motor as it moves in 1/10 second increments of the Electro-Steer steering. The following table describes each parameter:

Parameter Name Parameter Discussion
SerialNum Assigned PowerTroll serial number (comes with your PCBs). Used to prevent wireless remote from accessing wrong PowerTroll(s)! Default is 101, valid for wired use but not accepted by wireless remote.

This should be entered once and p2test9/10 run to set it into eeprom. Thereafter it should not be changed by p2test9/10, so the program line in p2test9 that changes it should be commented out.

BuildNum Software version loaded into Moto. Checked by software at startup to ensure eeprom is correct for software version. If the two do not match the software rewrites eeprom with its internal default values.

A value of 256 should be entered once and p2test9/10 run to set it into eeprom, then the operational software started to set defaults into all other values (including BuildNum. Thereafter it should not be changed by p2test9/10, so the program line in p2test9 that changes it should be commented out.

SwitchBits Pseudo switches used to select PowerTroll options. See following description/table.
RudderMax Time, in 1/10 seconds, for the Electro-Steer to go lock-to-lock. Default value is 40, or 4 seconds, which is what a normal Electro-Steer takes when the Lock bolts are in the outside holes. You should time your Electro-Steer and put in the closest value you can measure. If this is wrong (for example, if you left it at 40 but your Electro-Steer only takes 2.5 seconds so you should have entered 25) the PowerTroll will not be able to establish a 'center' point and will hunt endlessly over the desired course instead of holding that course.
CumRudNumSet Time, in seconds, between halvings of the running average rudder position. At each halving both the sum of the rudder positions and the number summed is halved. If this is done too frequently the average will be over effected by recent changes (like getting back on heading) but if it is not done often enough the average rudder will take to long to assume a new center value after a heading change. Default value is 30 seconds. I recommend setting this to about the time it takes your boat to go all the way around when it is 'hard over' at trolling speed.
PID_P Proportional control (how much rudder is applied based on how far off heading). When value is 100, one degree off heading will generate 1/10 of a second of rudder change off center (all else being equal). In a typical Electro-Steer setup that goes lock to lock in 4 seconds there are 2 seconds, or 20 1/10 of a second of steering to go 'hard over'. So being 20 degrees off heading will generate a 'hard over' steering response. If value was 200 it would only take 10 degrees off heading to do that; if value was 50 it would take 40 degrees off heading to go 'hard over'. An appropriate value depends mostly on how effective helm control is at your trolling speed. The more effective it is the lower the value should be. So of course the faster you troll the lower the value.
PID_I

Integral control (what should the rudder position be when the boat is not off heading - ie - where is the rudder 'center' position?). This is a value that will change; for example your helm is different holding a heading quartering the wind as opposed to going downwind. The value is obtained using a running average of past rudder positions. There are two tuning constants: PID-I specifies how strong the tendency to 'center' will be, and CumRudNumSet defines the period of time used to obtain the average. I leave PID-I at it default value of 100 and tune PID-P and PID-D around it, so the only meaningful integral control is CumRudNumSet, which is described above.

PID_D Derivative control (how much rudder is applied to counter 'swing'). When value is 100, 1 degree off swing will generate 1/10 of a second of rudder change off center (all else being equal). Note that if the boat is swinging away from the desired heading this will add to the proportional input, causing the swing to slow down, stop and go the other way. When the swing is toward the desired heading this will subtract from the proportional input, causing the swing back toward the desired heading to slow down and stop by the time the desired heading is reached. An appropriate value depends mostly on your boat's directional stability. If you boat quickly stops swinging by itself when you center the trolling motor (or kick it out of gear) then some small value (5-10) might be good. If it keeps on swinging awhile after you center the trolling motor you probably need a higher value (30-50). But also note your boat's directional stability probably depends on speed, so the faster you troll the lower the value.
Swing_OK_First Degrees off heading before swinging back to heading is only half suppressed (half PID_D is used). If zero is specified (the default) then the normal value of PID_D is used regardless of how far off heading. Swing-OK-First should be between 0 and Swing-OK-Second.
Swing_OK_Second Degrees off heading before swinging back to heading is completely unsuppressed (PID_D is considered to be zero). If zero is specified (the default) then the normal value of PID_D is used regardless of how far off heading. Swing-OK-Second should be zero or greater than Swing-OK-First. Swing is normally suppressed whether it is away from desired heading or back toward desired heading. Swing-OK-First and Swing-OK-Second provide a mechanism to allow some swing back toward desired heading. This can enable faster heading correction but also tends to exacerbate 'hunting' - a tendency to swing back and forth across the desired heading instead of settling on the desired heading.
Min_Rudder_Change Time, in 1/10 seconds,of the minimum rudder movement allowed. A calculated rudder change of less than this amount will be suppressed. The purpose is to suppress constant meaningless corrections due to slight compass changes when the boat rocks, etc. Should be some small number (1, 2, 3).
Compass_Offset Number of degrees to be added to heading to convert PowerTroll headings to actual boat headings. This is only significant if you have a way (like a wireless remote) to actually see the PowerTroll headings, in which case it is used to coordinate what PowerTroll reports as the heading and what an external compass reports.
Compass_Threshold Time, in seconds, between halvings of the running average compass. Like CumRudNumSet, but for the compass instead of the rudder. Can be considered compass dampening. Dampening is most useful in coaxing useable rough water headings from a 2d (not tilt compensated) compass. If zero is specified (the default) then no running average is used, instead compass headings over one second are averaged and used at the end of that second to determine boat heading. If set non-zero a running average is used over the number of seconds specified, which must still be small enough that the compass tracks what your boat actually does. If you decide to try this I recommend you start with 1, then try 2, etc.
     following parameters are should not be set manually, they are established and altered by compass calibration...
compass_xmax These values are max and min readings obtained during calibration.
compass_xmin They are applied during normal operation to compensate for 'soft iron' errors.
compass_ymax For example: (compensated x reading) = ( (uncompensated x reading) -
compass_ymin                                                                     (xmax + xmin) ) * (ymax - ymin)
   

As defined above, SwitchBits is a collection of binary Pseudo switches used to select PowerTroll options.

The following table describes each presently defined pseudo switch:

Pseudo Switch Value Off (On)
DontUseCal  +256 Apply compass calibration (Don't use calibration info); applies only to tilt compensated compass.
NoCalChanges  +512 Gather new calibration info on-the-fly (Use Static calibration only) applies only to tilt compensated compass.
NoEEpCommit  +1024 Calibration changes commited to eeprom (Calibrations changes temporary, never committed to eeprom). Applies only to on-the-fly calibration of tilt compensated compass.
ImmEEpCommit  +2048 Calibration changes commited to eeprom every 10 minutes (Calibrations changes committed to eeprom immediately). Applies only to on-the-fly calibration of tilt compensated compass when NoEEpCommit not ON.

The pseudo switches are set by adding the "power of two" value into the desired combination.

For example, SwitchBits = 256+512+1024 sets DontUseCal, NoCalChanges, NoEEpCommit and resets ImmEEpCommit (because it's not added in).

Values less than 256 are masked off. Values above 2048 are not presently defined and should always be zero unless I tell you otherwise. Their being undefined does not mean they don't do anything; it just means what they do is sufficiently esoteric that I don't want to try to describe it unless I need to have you set it to help you solve a problem on your PowerTroll.

EEPROM values including pseudo switches can be listed by compiling and running p2test9, and they can be changed by appropriately modifying, compiling and running p2test10. Below, compiling and running p2test9 to display the values:

The wireless remote software can also list and change the values.


Copyright © Mike Noel, 2005, 2006; last updated 1/6/2007