MegaShift™ V5 Settings
V5.1xx MegaShift™ code is the latest release code for controlling automatic transmissions using the GPIO board form Bowling and Grippo. This code has:
The LEDs or LCD display can be set to flash if the transmission is in manual shift mode.
Build Guide | Components | Installation | Set-up | |
4L60E | 4L60E Build Guide | 4L60E BOM | 4L60E Install Guide | Configuration and Tuning Guide |
4L80E | 4L80E Build Guide | 4L80E BOM | 4L80E Install Guide | Configuration and Tuning Guide |
41te | DRAFT 41te | DRAFT 41te BOM | DRAFT 41te Install Guide |
Configuration and Tuning Guide |
Jump to the: Set-Up and Tuning Parameters.
The Windows 9x/ME/XP/Vista software applications you use to tune and configure your MegaShift™ hardware are called TunerStudio by Phil Tobin. You also need a laptop or notebook computer and a conventional serial port (or USB-serial adapter) to communicate with MegaShift™.
To set up TunerStudio to use MShift™ with CANbus from MS-II™:
Activated | Deactivated |
|
|
Note: The way the code and INI handle metric conversions has changed from older (4.122 and earlier) codes. You MUST set your units before loading an old MSQ. When upgrading from older code, be sure to save the old user parameters in a MSQ, load the new code and set up the new INI, change your units (Project -> Project Properties -> Settings: CELSIUS and SI_LENGTHS) to what you used when creating the older MSQ before finally loading the old MSQ file. The defaults are for both settings to be deactivated (i.e. Imperial units). Otherwise the values will be converted again (i.e. twice, so they will be incorrect) when you change the units settings. Once the units are set, you don't have to worry about this anymore.
However, to prevent people accidentally screwing up their comms, it is un-editable in the INI file until you make a small change. Use a text editor and find a line in the INI like:
[pre]field = "!MS-II CANbus ID", ms2canID, { 0 } ; change to { 1 } to make editable[/pre]
and change it to:
[pre]field = "!MS-II CANbus ID", ms2canID, { 1} ; change to { 1 } to make editable[/pre]
Here is a video on setting up CANbus in TunerStudioMS: CANbus set-up video (22 MBytes)
There is more on the CANbus pass-through here: www.msgpio.com/manuals/mshift/cpt.html, including assembly and wiring instructions, etc.
The following is a list of of all the tuning parameters in the MShift™ V4.1xx software, and each has a description of how that parameter is used. Pressing F1 at any menu in the tuning software while connected to the internet will take you directly to the corresponding spot in this file.
Note: DO NOT power off the MShift™/GPIO board while the 'Flash Burn' indicator is active. Doing so *will* corrupt your settings. Wait a second or two for the burn to complete before powering down the board.
TunerStudioMS can store and retrieve set-up files, both entire set-ups (.msq files), and gear or line pressure table files (.vex).
You can see the images 2x larger by right-clicking on them, and selecting 'View Image'.
This is without 'MegaTune Style':
This is with 'MegaTune Style':
The datalogged variables are:
Time | This is the actual time calculated from the PC system time. | |||||||||||||||||||||||||||
Seconds | Clock, time is seconds since last restart, reset, or 'roll-over' of the clock to zero (from 65535 seconds) | |||||||||||||||||||||||||||
Mode | Current shift mode: 0=manual, 1=auto (table), 2=auto (sequential) | |||||||||||||||||||||||||||
Speed | Current vehicle speed (in mph or kph, depending on Metric_Units) | |||||||||||||||||||||||||||
RPM | Current engine rpm (from MS-II™ CANbus or using ISS/tach input circuit or estimated from VSS and gear) | |||||||||||||||||||||||||||
miles/kms | Trip odometer - since the controller's last restart/reset (in the units noted). | |||||||||||||||||||||||||||
load | Engine load reported from your MS-II™ engine controller using CANbus, or determined using local circuit | |||||||||||||||||||||||||||
WOT | This values indicates if the engine has been to WOT status in the last ten seconds. It is zero if it hasn't, and counts up to ten and resets otherwise. | |||||||||||||||||||||||||||
mpg | Fuel efficiency in miles per U.S. gallon | |||||||||||||||||||||||||||
In1adc | Manual gear lever position ADC count for Input1 (processor pin PAD00 on GPIO board circuit EGT4 using Ampseal pin 26) | |||||||||||||||||||||||||||
In2adc | Manual gear lever position ADC count for Input2 (processor pin PAD01 on GPIO board circuit GPI2 using Ampseal pin 6) | |||||||||||||||||||||||||||
In3adc | Manual gear lever position ADC count for Input3 (processor pin PAD03 on GPIO board circuit EGT3 using Ampseal pin 25) | |||||||||||||||||||||||||||
In4 | When 4 input channels are used to determine the shift lever position, this indicates whether that 4th input is high (=1) or low (=0) | |||||||||||||||||||||||||||
solst | The state of Output1 is logged as the first bit of solst. The state of Output2 is logged as the second bit of solst. The state of Output3 is logged as the third bit of solst. The state of Output4 is logged as the 4th bit of solst, and so on. Zero in any position means off, 1 means on. So some examples are:
00000000 = 0 - Output1 off, Output2 off, Output3 off, Output4 through Output8 off | |||||||||||||||||||||||||||
upbutton | Indicates whether the upshift button has been pressed. | |||||||||||||||||||||||||||
downbutton | Indicates whether the downshift button has been pressed. | |||||||||||||||||||||||||||
fUP | Indicates whether an upshift is being forced by the rpm checking option Normally 0, this value will be 1 if a forced upshift is requested based on the current rpm (if 'rpm checking' is enabled). | |||||||||||||||||||||||||||
fDWN | Indicates whether a downshift is being forced by the rpm checking option. Normally 0, this value will be 1 if a forced downshift is requested based on the current rpm (if 'rpm checking' is enabled). | |||||||||||||||||||||||||||
butADC | When a voltage based shifter is used, this gives the current voltage level of the shifter input signal. | |||||||||||||||||||||||||||
cGear | Current selected gear determined from state of shift solenoids and output tables | |||||||||||||||||||||||||||
tGear | This is the gear the controller wants the trans to be in. Normally, it is the gear to shift to determined from shift table (limited by the manual gear lever position as appropriate). On an under-rev or over-rev condition (if rpm checking is enabled), the target gear is set to the current gear ± 1. This value is still reported if shifting manually using the shift buttons, but the auto shift gear table value isn't used, of course | |||||||||||||||||||||||||||
mGear | Manual gear lever position determined from switch manifold (GM style) or switch voltage (Ford style) | |||||||||||||||||||||||||||
TCC | Torque converter clutch state: 0 = unlocked torque converter clutch, 1 = locked clutch | |||||||||||||||||||||||||||
Brake | Brake status: 0 = brakes off, 1 = brakes on | |||||||||||||||||||||||||||
OS | Current output shaft rpm, as determined from the VSS sensor output | |||||||||||||||||||||||||||
IS | Calculated or measured input shaft rpm | |||||||||||||||||||||||||||
slip | Difference in rpm between engine rpm and input shaft rpm | |||||||||||||||||||||||||||
temp | Transmission fluid temperature | |||||||||||||||||||||||||||
line | Line pressure in pounds per square inch or bars | |||||||||||||||||||||||||||
auxCH | Axillary data channel (used for load if no CANbus) | |||||||||||||||||||||||||||
error | error code:
Ex2: error 65 = 1 + 64 = serial comms okay, low voltage. | |||||||||||||||||||||||||||
PC% | Pressure Control valve duty cycle (% for PWM) | |||||||||||||||||||||||||||
Sp0% | This is the spare port 0 PWM percentage (from 0 to 100%). This value is interpolated from the 16x9 PWM Percent table if Sp0 is ON (OFF value if Sp0 is OFF), and then the code picks the closest PWM% based on the number of 0.128 millisecond ticks available at the user specified frequency. So the returned percentage value may not exactly match the value expected from the table, especially if the PWM frequency is high. | |||||||||||||||||||||||||||
Sp1% | Spare port 1 PWM percentage (from 0 to 100%). This value is interpolated from the 12x1 PWM Percent table if Sp1 is ON (OFF value if Sp1 is OFF), and then the code picks the closest PWM% based on the number of 0.128 millisecond ticks available at the user specified frequency. So the returned percentage value may not exactly match the value expected from the table, especially if the PWM frequency is high. Click this link for more information. | |||||||||||||||||||||||||||
Sp2% | Spare port 2 PWM percentage (from 0 to 100%). This value is interpolated from the 12x1 PWM Percent table if Sp2 is ON (OFF value if Sp2 is OFF), and then the code picks the closest PWM% based on the number of 0.128 millisecond ticks available at the user specified frequency. So the returned percentage value may not exactly match the value expected from the table, especially if the PWM frequency is high. Click this link for more information. | |||||||||||||||||||||||||||
Sp3% | Spare port 3 PWM percentage (from 0 to 100%). This value is interpolated from the 16x9 PWM Percent table if Sp3 is ON (OFF value if Sp3 is OFF), and then the code picks the closest PWM% based on the number of 0.128 millisecond ticks available at the user specified frequency. So the returned percentage value may not exactly match the value expected from the table, especially if the PWM frequency is high. Click this link for more information. | |||||||||||||||||||||||||||
sLoad | Short term LOAD average | |||||||||||||||||||||||||||
dbug | Spare debugging variable brought out in TunerStudioMS (default is VSS tooth error count) | |||||||||||||||||||||||||||
burn | Indicates that a burn of users parameters to flash memory is active. | |||||||||||||||||||||||||||
FWD | state of 2WD or 4WD switch for speedometer adjustment if enabled - 0 = 4WD, 1 = 2WD | |||||||||||||||||||||||||||
sp0y | If spare port 0 is not used for a speedo output, this is the index value used for the 9 bin table for looking up the PWM percent for spare port 0.
If spare port 0 is used for a speedo output, this is the TPS value received from the MS-II controller over CANbus. | |||||||||||||||||||||||||||
sp0x | If spare port 0 is not used for a speedo output, this is the index value used for the 16 bin table for looking up the PWM percent for spare port 0.
If spare port 0 is used for a speedo output, this is the raw speedo value before any correction from the speedo correction table. | |||||||||||||||||||||||||||
sp3y | If spare port 3 is not used for a speedo output, this is the index value used for the 9 bin table for looking up the PWM percent for spare port 3. | |||||||||||||||||||||||||||
sp3x | If spare port 3 is not used for a speedo output, this is the index value used for the 16 bin table for looking up the PWM percent for spare port 3. | |||||||||||||||||||||||||||
ptA | Return the state of the port A (PORTA) with each bit indicating the state of input/output [0:7] respectively.
The default pin assignments are:
| |||||||||||||||||||||||||||
ptE | Return the state of the port E (PORTE) with each bit indicating the state of input/output [0:7] respectively.
The default pin assignments are:
| |||||||||||||||||||||||||||
srpm | This is the short-term RPM averaged value (RPM_short) used in the code. | |||||||||||||||||||||||||||
cruz | This is the cruise flag (cruise_flag) used in the code to indicate when the vehicle is cruising (so that the speedometer is assumed to be stable, and the code can detect and eliminate speedo drop-outs. | |||||||||||||||||||||||||||
Vper | This is the period of the vehicle speed sensor signals (VSS_per). | |||||||||||||||||||||||||||
iRat | This is the calculated instantaneous gear ratio (instant_ratio) of the transmission, based on the input and output speeds. | |||||||||||||||||||||||||||
wRPM | This is the calculated wheel revolutions per minute (wheel_rpm). | |||||||||||||||||||||||||||
idlAdj | This is the idle adjustment factor sent to the engine ECU (IdleAdj) over the CANbus. | |||||||||||||||||||||||||||
spkAdj | This is the spark advance adjustment factor (SpkAdj) sent to the engine ECU over the CANbus. | |||||||||||||||||||||||||||
vBatt | The battery voltage over CANbus (vBatt). | |||||||||||||||||||||||||||
INtst | A mirror of the input testing parameter (inpram.test_mode) for detecting if user input values are being substituted for measured values. | |||||||||||||||||||||||||||
shft | The shift status
| |||||||||||||||||||||||||||
rSPD | This is the raw vehicle speed (x10) before any corrections (in mph or kph, depending on your settings). | |||||||||||||||||||||||||||
lvrC | This is the lever error timer (in 10ths of second)
|
More variables are available for datalogging, you can find these in the [OutputChannels] section of the INI.
This parameter lets the controller configure the pull-ups for use with either a GPIO board or a microTCU. When set correctly, it appropriately configures the lever input 5V pull-ups when using the microTCU™ or GPIO using the PPSAD and PERAD registers.
The PPSAD (Pullup Polarity Select for Analog/Digital) and PERAD (Pullup Enable Register Analog/Digital) registers were set in the previous code, but the respective AD pins were not set to be digital inputs, they were left as ADC pins. In order to activate the pull-ups, the appropriate pins had to be switched from ADC to digital (otherwise the pull-up registers have no effect). The code does this by changing the port inputs from ADCs to digital inputs using the ATD0DIEN register when microTCU is set as the hardware AND digital lever inputs is set. Note that changes to the hardware setting (GPIO vrs. microTCU) require a power cycle to take full effect.
In normal operation, this latest code then assigns:
- 1023 to the input 1, 2, or 3's analog-digital count variable when a port pin is 'high' - greater than about 3.25V, and
- 0 when a port pin is 'low' - less than about 1.75V
(but only if 'digital inputs' are selected for the manual lever determination).
These values are reported in TunerStudio as usual. Assigning 'faked' ADC counts simplified the rest of the code, which was built with ADC counts in mind. This is mentioned here because some users might find it odd that such 'perfect' high and low states are achieved.
The idea has been to make set up simpler, but still allow full control over all aspects of the parameters when required (for advanced users or re-purposing circuits when others have been damaged).
The current choices are:
For example, selecting 'General Motors 4L60e' will set the gear ratios (Reverse = 2.290, 1st = 3.060, 2nd = 1.630, 3rd = 1.000, 4th = 0.700), input patterns (swA, swB, swC) and output patterns (SolA, SolB, & 32sol), number of VSS teeth (40). The 4L80e is similar (the gear ratios and output patterns have differences, of course) but also sets the number of ISS teeth (31). There is no practical limit to which parameters could be set using the transmission type setting, but we have to be aware that there may be transmissions families out there that don't all share the same internal gear ratios, for example.
Note that TS may generate a warning when the transmission type is changed because the contents of RAM won't necessarily agree with the local current tune for the affected variables. Once you choose to keep the values on the controller by saving the controller settings as your current tune once or twice this warning should go away.
Finally, note that the settings are only accurate if the controller is wired exactly according to the instructions.
An experimental new parameter called 'Menu Display' has been added (under ''Controller Hardware -> Menu Display'), and has three options: "Show All Menus", "Tuning Menus Only", "Configuration Menus Only". The idea is that some menus (configuration menus) have fixed values and only need to be set initially (internal gear ratios or number of VSS teeth, for example), whereas others ('tuning menus') need to be adjusted to suit circumstances as they arise (shift table, for example).
This parameter can be used to reduce the clutter in the menus. If you uncheck Tuner Studio's 'Show Disabled Menus' under 'Options -> Navigation -> Navigation Options' the inappropriate menus and parameters will not be shown. The parameter setting is only used for TunerStudio, it has no effect in the code at all.
Note: DO NOT power off the MShift™/GPIO board while the 'Flash Burn' indicator is active. Doing so *will* corrupt your settings. Wait a second or two for the burn to complete before powering down the board.
The idea is not to provide another tuning parameter for downshifts, but rather to keep people from over/under-reving their engine (and possibly damaging it) with badly configured shift tables or a mis-timed manual shift.
It is highly recommended that rpm checking be enabled at all times on your vehicle, otherwise an intermittent VSS signal or load signal could potentially cause unexpected and damaging downshifts. The rpm checking can be disabled for use on a trans stim (where the engine speed won't necessarily follow the gear changes).
You must enter the gear ratios built into the transmission.
Enabling burn-out mode effectively makes the trans manually shifted with the lever in the 1st (since the highest gear will be 1st) and 2nd positions (burn-out mode), and then the trans will be automatically shifted according to the shift table if the lever is in 3rd or 4th (or higher if your trans has more gears).
Note that in burnout mode the MShift™ code's rev limiter settings will be ignored.
There is a separate 'shift completion delay' that specifies the period time the controller waits after changing the shift solenoid states for the shift to complete. The shift completion delay is set in a is a function of load, and is an 8-element table that can set under 'Tuning → Shift Completion Delay'. Both the shift completion delay time (in milliseconds) and the load values can be set there, and the value used will be interpolated.
No further shift computations are made during these delay periods.
The hysteresis conditions are for auto mode only, of course. The hysteresis conditions are OR'd. That is, if either condition is met the shift is allowed. However, the hysteresis condition are not used if the load is at WOT.
You can disable the hysteresis by setting the values to zero, or setting the 'Hysteresis Enable Speed' very high (will require mods to the INI, which limits the value to 15),
The hysteresis is in there for a reason though. If you have no hysteresis, and happen to be traveling at a nearly constant speed very near one of the shift speeds, the controller could cause the transmission to shift between gears continuously, which would be very annoying. It would be like the TCC switching on and off, but 100 times worse.
And if a given speed column has more than one gear in it (most will - because you will want to upshift earlier at low loads - have a look at the default table) then the speed may stay the same but the load change slightly at the shift point (where the gear changes in the table) and cause a shift. This gear change can itself cause a change in kPa (because the rpm changes) and this might result in a shift back to the original gear, and so on. However note that you can do a lot with the 'LOAD Smoothing Factor' to lower the amount of 'bounce' in the load signal.
Note that in a real vehicle (as opposed to testing on a bench), hysteresis won't delay a shift, as long as the gap between speed bins is larger than the 'Shift Factors/Shift Speed Hysteresis' setting and the gap between load bins is larger than the 'Shift Factors/Shift kPa Hysteresis'.
The user can set the shift pressure for each upshift and downshift for output 3 separately from the on/off pressure. If the value is set to zero, Output3 acts like the other solenoids. However, if the value for a particular shift is non-zero (under 'General Settings/Shift Line Pressure Settings'), the pressure during the shift is set to the non-zero percentage. The different pressure starts before the pressure delay, and lasts until after the shift completion delay. This may be useful for 4L60E users who wish to use a reduce line pressure on solC during the 3-2 shift. Note that PWM must be enabled on Output3 (under 'General Settings/Solenoid PWM Setup') to use this function.
This table is used to look up the adjusted TPS percent based on the raw TPS percentage and the current RPM. The current actual TPS is used as the vertical index, and the current RPM is used as the horizontal index. The interpolated cell value at the intersection of these two value is used as the adjusted TPS percentage (aTPS%).
For example, in the table below, with a raw TPS% of 50% and an RPM of 3000, the adjusted TPS percent used for load calculations would be 70%. If the 'MAP versus TPS for LOAD' parameter was set to 25%, and the MAP was 40 kPa, then the current load would be:
load = 75% × (70%) + 25% × (40 kPa)
load = 52.5 + 10
load = 62.5
When setting the 'MAP versus TPS for LOAD' value, keep in mind that when the engine speed (rpm) drops after an upshift, but the throttle opening remains the same, the MAP (in kPa) will rise (approximately in proportion to the decrease in rpm). The converse happens on downshifts. This is despite no significant change in the throttle position or vehicle speed (so no change in "driver demand"). This change in load moves the load index to a new part of the shift table. The change in the index for the shift table can result in oscillating shifts. So the best advice is to use TPS (the one factor that is least likely to change much during a shift) as much as possible for load (i.e. set 'MAP versus TPS for LOAD' to a low value by moving the slider to the left).
The TPSxRPM table can be setup under 'Tables → Load table TPS by RPM'.
In general, you want to set the table cell values to to provide the most constant TPS that still reflects the driver's demand for torque. You can do this by restricting the range as various RPM's. For example, in the table below the lowest RPM adjusted TPS percentage (aTPS%) can only go from 10% to 55%, while the highest RPM aTPS% can only range from 50 to 100%.
The TPS Load table can be used in a number of ways, so you may need to experiment with different approaches to find what works best for your application.
If user really wants to use only the raw TPS for load with no adjustments, they can set the table so the the cells in each TPS row are identical to the bin value for that row, then the output from the table will be the raw TPS, like this:
Decel mode works in 2 ways:
For the decel mode to be triggered:
- the speed must be decreasing (sampled every 1/10th of a second), and
- there is a user TPS threshold setting which the current TPS value must be below (default is 12%), and
- the Max. sLoad setting (below) must not be zero. A zero value disables decel mode completely.
Downshifts based on the table target gear (even from the new lower row) are prevented until decel mode is canceled or expires (or the rpm drops below the minimum), but upshifts from the shift table are allowed. The decel mode will last as long as the speed continues to decrease OR until the 'downshift delay' period expires (the default is 2.5 seconds, this is user-settable).
Downshifts will still occur if the engine rpm falls below the minimum set in the RPM checking menu (if and only if rpm checking is enabled).
Note that fully variable PWM is enabled only on the PC (pressure control) valve in the default 4L60E configuration. This valve has a 1N4001 recirculation diode installed externally between the solenoid power supply and the line to the GPIO board to recirculate the flyback current generated by the PWM. The illustrated instructions are here: Recirculation Diode Instructions. If you enable PWM on Output1, Output2, Output3, Output4, and/or TCC you MUST install an external 1N4001 recirculation diode between that solenoid's voltage supply and the line going to the GPIO board. The banded end of the diode goes to the voltage supply wire, the non-banded end of the diode goes to the line to the GPIO board. Install the diode as close to the solenoid as is convenient. The 1N4001 diode is installed externally to avoid bringing high-voltage noise into the controller. 1N4001 diodes are available at virtually any electronics supply shop. Without this external diode in the PWM circuits, you may damage some internal components.
We recommend the OEM frequency as a default value to start with (and best guess from which where you might start tuning the frequency). However, it's often desirable to experiment with the frequency as it can result in a more responsive device (and potentially a less electrically/mechanically noisy circuit).
It's hard to say for sure what the exact effect changing the PWM frequency might have. The precise impact is a result of both the exact device being driven, as well as the nature of the driving circuit on the GPIO board.
In general, the current will be limited by the PWM. Or more correctly, the average current will be limited by the PWM percentage, as long as the rise time is short compared to the PWM period.
The instantaneous current is a little different because of the inductance in the solenoid.
The higher the frequency, the more the current is likely to be artificially limited by the 'rise time' due to the device's inductance. But the instantaneous current will be lower during PWM high periods. So for example, you might have a PWM% of 90%, but the early ending of each PWM high period might cut the current to just 50%.
However, the lower the frequency, the higher the instantaneous current is likely to be through the device at the end of a PWM 'high' period (and this can result in a slow burn-out of the device even when the the average current is limited). But the responsiveness and linearity may be better.
But if the device (the PC solenoid in this case) is less responsive or linear than you think it ought to be, you can try lowering the PWM frequency (especially if the OEM PWM frequency is lower than the default value in the MShift™/GPIO controller). The period can probably be up to twice the OEM value (1/2 the frequency) for testing purposes.
When driving PWM devices, one approach is to set the PWM period to get maximum responsiveness and linearity (i.e. 20%, 40% and 60% and 80% PWM feel increasingly different, and by about the same difference in between the steps). Then raise the frequency to the best 'acceptable' responsiveness/linearity and minimum electrical/mechanical noise (acoustic noise is more noticeable on something like an IAC valve than a PC buried in the trans) while limiting the current as much as convenient to prevent and long-term damage to the driven device.
This is easiest to sort out with a oscilloscope and a full set of specs for the device, but those aren't always available. When a oscilloscope is available, you can view the voltage rise in the device during the PWM high period, and use Ohm's law to calculate the instantaneous current. In general, you want the current to rise to nearly the maximum instantaneous value permissible (at the maximum PWM%) so that the device operates in the flattest part of the voltage curve as much as possible (which will make the PWM percentage have a more linear effect on the solenoid). However, you don't want either the instant or the average current to exceed the maximums, of course.
Here is a calculator to help set the ON and OFF parameters based on the target frequency and duty cycle:
You can select which of the outputs (1,2,4,5,6) have PWM, and which are on/off in this menu as well. Note that Output3 is controlled independently.
Also see: PWM Refresh and Dithering
To use any of these (other than 'no slip adjustments'), you must have an independent input shaft speed (ISS) sensor, and the 'TCC/Trans Slip Reporting' must be set to 'Slip in Transmission (ISS/VSS)' under 'ISS/non-CAN Tach Settings'.
The difference is in the scaling of the speedo. This is also used to estimate engine rpm IF the CANbus is not enabled AND PT5/VR3 is not used as a tach input, and/or to estimate the input shaft speed (IF PT5/VR3 is not used for ISS input).
The masking is set as the average of the last 20 periods plus or minus the user input percentage.
The lower limit is the average period minus (input_mask/2); the upper limit is the average period minus input_mask.
For example, if you enter 33%, and the current count for the 20 periods is 1440 (= 1440÷20 = 72 tics/tooth), then the mask is set to accept periods from 72-(33%÷2) = 72-(0.165×72) = 60 tics to 72+33% = 96 tics. So the range is not based on 100% being no filtering. Instead, low numbers mean more filtering, high numbers mean less filtering (the INI limits the range to a maximum of 200% - higher numbers will break the code).
As of 2.122 code, you can disable the VSS input signal masking by setting this value to zero (0). This may help with speedometer gauges that become jittery, spastic or stuck. If you do not set this value to zero, set it to at least 60. Non-zero values lower than 60 may cause the speedometer to respond very slowly.
The default VSSsmoothFactor is 4, so if the current speed is 20 and the VSS indicates it has risen instantaneously to 25 (usually because of noise), the calculation is:
The controller recalculates this 100 times per second, so the 'real' speed can still rise or fall quite rapidly. The smoothing factor can be from 2 to 12 (limited in the INI file).
VSS smoothing is disabled if the current vehicle speed is less than 1.5 times the 'Min. Vehicle Speed' (below) to prevent the speedometer from being stuck at zero if the minimum speed is high.
These fuel efficiency factors allow MegaShift™ to compute the instantaneous fuel consumption.
Timing retard values are positive to remove timing from the MS-II™ engine controller spark advance table. Retard values are applied for the duration of the shift, which includes the 'shift pressure adjustment delay' and the 'shift completion delay' times (under 'General Settings/Shift Factors'), plus the very short time required to process the shift solenoid switching.
So, for example, if you shift from 1st to 2nd, and the upshift retard is 10°, and the second gear retard is 2°, with a base timing of 20° you would see on the timing gauge:
These timing adjustments have been extensively tested with MS-II™ and B&G code, where they work perfectly. Apparently these timing adjustments do not work in MS3 as of Nov.23, 2011, presumably due to a bug in the CANbus code for MS3. Contact the MS3 developers on their forum at www.msextra.com to see if this bug has been fixed at the time you read this.
This sensor has a 1/8" NPT fitting. However, a 90° elbow, or maybe even some tubing, will be required in most installs to keep the sensor away from the transmission tunnel. Note that other internal values can be burnt to the controller to accommodate other sensors, but it might be easier to convert the ADC count in the tuning software.
For example: Suppose 0bar = 0.5v and 20bar = 4.5 volt.
There are 1024 ADC count to cover 0.0 to 5.0 Volts. So:
0.5V = 0.5/5.0*1024 = 102 ADC counts, and
4.5V = 4.5/5.0*1024 = 922 ADC counts.
So the pairs we have are:
(102 counts, 0 Bar) and (922 counts, 20 Bar).
The slope is then:
m = rise/run
= (20 - 0)/(922-102)
= 20/820
= 0.0244 Bar/count
The y-intercept is:
b = y - mx
= 20 - 0.0244*922
= 20 - 22.488
= -2.488 Bar
This sets up a pressure sensor based on two (voltage, pressure) points. All the slope/intercept calculation is done internally, so the user doesn't have to do the math. There are four parameters, corresponding to two points:
The further apart the two points are, the more accurate the reported pressure will be.
You can use the 2 point setting to report the Analog-Digital Conversion (ADC) count on the line pressure input by changing the settings to:
You can read more about ADC counts here: www.msgpio.com/manuals/mshift/adccalc.html
Also, there is no dedicated gauge for the ADC output, you would have to create one. It would look something like this (add it to the [Gauges] section of the INI):
line_ADC = linepressure, "Pressure ADC", "", 0, 1023, 1, 5, 1020, 1024, 0, 0
To set up the input, you need to configure two parameters:
Note that activating (grounding) the table/4WD switch does two things:
If you want to use the PE1/GPI1/Amp5 input for table switching only, be sure to enter 1.000 as the 4WD Speedo Correction (the default is 1.000).
Some PWM solenoids uses a deliberately low PWM percent, but refresh the solenoid with a burst at 100% before it can close. As well, some pressure control solenoids use a cleaning pulse (called a 'dither') to ensure adequate fluid flow through the system to keep the system clean. You can set both of these up in this dialog.
As of 2.122 code (including all 5.xxx code), you can disable the ISS input signal masking by setting this value to zero (0). This may help with input shaft speed/tach gauges that become jittery, spastic or stuck. If you don't set this value to zero, set it to at least 50. Lower values between 1 and 49 may cause the ISS tach to respond very slowly.
So you would enter 0.750 for 4th, and leave the other values at 1.000.
The user values let you adjust the calculated RPM to account for this for all the forward gears you are lucky enough to have (once you have enabled the ISS above).
Note: DO NOT power off the MShift™/GPIO board while the 'Flash Burn' indicator is active. Doing so *will* corrupt your settings. Wait a second or two for the burn to complete before powering down the board.
You can also choose whether you will use two grounding switches for manual shifting and mode changing, or whether you will use a variable voltage shift request scheme instead.
If the tolerance is set so that the valid ranges overlap, the code will select the first button state that is within the tolerance in the following order:
NOTE: You must only change the input patterns 'off-line' - then load that MSQ to your MShift™ controller once you are sure the patterns are appropriate. This is because you must make sure the entered patterns do not have the same pattern for more than one gear including reverse (except that park and neutral can and should have the same pattern, but different from all the other gears - the code does not distinguish between these), or MShift™ will NOT work. The code will not operate the solenoids correctly, and the flash memory burn process might be corrupted. Note that the input patterns are not 'tuning parameters', you must set them correctly and them leave them.
So, for example, if you have entered the same pattern for Reverse and 3rd, then the code will always assume 3rd gear when that pattern is sensed. The code will never be able to determine that you are in Reverse, regardless of the actual physical position of the gear lever.
You need to specific the state (high or low) of each input in each gear. To edit the bit pattern individually in each gear:
The voltages ranges are set dynamically so that the split point is 1/2 way between the adjacent voltages. There is a dead band applied (the voltage must be at the 1/2 way point plus the dead band for the lower voltage, and minus the dead band for the higher voltage. The default dead band is 5 ADC counts, which is 5/1024*5.0 = 0.0244 Volts
For example, if you have voltages set at:
1st: | 1.00V |
2nd: | 2.00V |
3rd: | 3.00V |
... | ... |
Voltage Dead Band | 0.024 |
The code will use any voltage between 1.524 and 2.475 for 2nd. The code doesn't depend on the user specified voltages being in any order, or any particular spacing.
You can also specify minimum and maximum valid voltages for the voltage based lever inputs. The defaults are a minimum of zero and a maximum of 5 Volts, making all possible voltages acceptable, however you should narrow this range to suit your actual voltage range to help reduce errors:
For example, if your lever signal drops to zero between shifts, and the minimum valid voltage for *any* gear is higher than zero (1.00 Volts, for example), you can set this value to a little below the lowest valid voltage (ex. approximately 0.700 Volts), and any lower voltages will be completely ignored by the lever position determination code. Similarly, if the voltage jumps to 5.00 between gears, you can set the maximum to something between the highest valid voltage and 5.00 to filter out the invalid states (perhaps about 4.300 Volts if the highest voltage for a valid gear is 4.00 Volts).
The 10-bit ADC counts are available for Input1 through 3. Look for them as 'Input1', 'Input2', 'Input3' in the gauges and in the datalog (the values are the voltages, but these are derived from the ADC count received from MShift™/GPIO in TunerStudioMS using a 0.00488 conversion factor). Input 4 (when used) is not available this way, because it is a digital input.
You can also specify the usage of the remaining two inputs. You can configure these as:
If you enable the shift outputs, you must construct a suitable circuit to drive your shift solenoids. These new outputs are on two of the ADC channels. To reduce electrical switching noise from affecting the ADC results, the output of these two processor pins is reduced to 1/3 of full value when PWM is enable on them. As a result, a logic level driver is probably the best bet when designing a circuit for these outputs. Something like a RFP30N06LE-ND from Digikey (www.digikey.copm) (http://www.fairchildsemi.com/ds/RF/RFP30N06LE.pdf) can be used (mounted on the case with a mica insulator), with a 1N4001 recirculation diode across the solenoid (banded end to 12V supply). A resistor between the RFP3006 gate and processor is not required. The source can be connected to the ampseal connector using the component holes on the PCB for:
Output | port pin | circuit | processor connection | Ampseal connection | Ampseal pin |
Output5 | PAD01 | GPI2 (jumpered) | C16 - (the hole furthest from the heatsink, that is not connected to ground) | R29 (the hole closest the ampseal) | Ampseal pin 6 |
Output6 | PAD03 | EGT3 | R67 (the hole furthest from the Ampseal) | AD595 pin 14 (or either of the adjacent holes marked "a") | Ampseal pin 25 |
Note that it is also possible to use the LED circuits as shift outputs, with the appropriate hardware.
Note: DO NOT power off the MShift™/GPIO board while the 'Flash Burn' indicator is active. Doing so *will* corrupt your settings. Wait a second or two for the burn to complete before powering down the board.
These dialogs lets the user specify the activation patterns of three outputs for up to seven shift solenoids (Output1=SolA, Output2=SolB, and the Output3=32sol on the 4L60E):
You directly set whether the solenoids are on or off in each gear:
NOTE: You must only change the input patterns 'off-line' - then load that MSQ to your MShift™ controller once you are sure the patterns are appropriate. As well, you must make sure the entered patterns do not have the same pattern for more than one forward gear, or MShift™ will NOT work.
The code uses the output states at all times to know what gear the transmission is actually in. This means that for each gear the output pattern *must* be unique in the output pattern. The problem arises while editing the output patterns. If you change one, you might well change it to a pattern that exists for another gear. So until you change that other gear's pattern, the code is mightily confused! So only change the output patterns while stopped with the engine off and the shift lever in Park (and then you should never need to change them again - there's only one right pattern for your transmission - so this is a 'configuration' thing, not a 'tuning' thing).
"on" means the solenoid is grounded (allowing current to flow in the controlled solenoid), "off" means it is not grounded (no current flows in the solenoid).
Note that you can enable outputs 5 and 6 without enabling 4. You can also enable 5 without enabling 6.
The OutputX patterns are used for two purposes:
Note that fully variable PWM is enabled only on the PC (pressure control) valve in the default 4L60E configuration. This valve has a 1N4001 recirculation diode installed externally between the solenoid power supply and the line to the GPIO board to recirculate the flyback current generated by the PWM. The illustrated instructions are here: Recirculation Diode Instructions. If you enable PWM on Output1, Output2, Output3, Output4, and/or TCC you MUST install an external recirculation diode between that solenoid's voltage supply and the line going to the GPIO board. The banded end of the diode goes to the voltage supply wire, the non-banded end of the diode goes to the line to the GPIO board. Install the diode as close to the solenoid as is convenient. The 1N4001 recirculation diode is installed externally to avoid bringing high-voltage noise into the controller. 1N4001 diodes are available at virtually any electronics supply shop. Without this external diode in the PWM circuits, you may damage some internal components.
If you choose "Use PWM for TCC", you can set the various parameters for TCC operation in the following settings. The PWM values give the percentage of time that current is allowed to flow. 0% is off (no current flow), 100% is on (full current flow). For example, 70% means that the current is allowed to flow 70% of the time, simulating 70%×12V = 8.4 Volts on a 12V solenoid. The default for this setting is 'on/off'.
TCC individual upshift lock/unlock behavior is user configurable (under 'TCC Settings/TCC Upshift Settings'). You can set it to stay locked if it is already locked, or force it to unlock.
Note: If you use PWM on the TCC circuit on a continuous basis (i.e. if either of 'PWM% when TCC Unlocked' or 'PWM% when TCC Unlocked' does not equal 0% or 100%), you must put a 1N4001 recirculation diode in the TCC solenoid. Install an external 1N4001 recirculation diode between that solenoid's voltage supply and the line going to the GPIO board. The illustrated instructions are here: Recirculation Diode Instructions. The banded end of the diode goes to the voltage supply wire, the non-banded end of the diode goes to the line to the GPIO board. Install the diode as close to the solenoid as is convenient. The 1N4001 diode is installed externally to avoid bringing high-voltage noise into the controller. 1N4001 diodes are available at virtually any electronics supply shop. Without this external diode in the PWM circuits, you may damage some internal components.
TCC lock-up start values: The following values set the PWM% that the TCC will start at, it will then move to the 'PWM% when TCC Locked' over the 'PWM Taper Time' you specify. This allows you to have smooth engagement of the TCC Lock-up.
Note: DO NOT power off the MShift™/GPIO board while the 'Flash Burn' indicator is active. Doing so *will* corrupt your settings. Wait a second or two for the burn to complete before powering down the board.
Table switching is done with with the 2WD/4WD input on Ampseal pin 5 (GPI1/PE1). Table 1 is used if the pin is 'open' (voltage > 3.25V); table 2 is used if the input is grounded (low voltage).
Note: This code allows the use of processor pin PE0 for table switching whenever the 2WD/4WD input is used as an additional digital lever input. PE0 will have to be wired through an unused circuit and Ampseal pin with a 5V pull-up (an 1K resistor). Grounding that pin will switching the the target gear control from table 1 to table 2. PE0 can be accessed from the 25x2 header on a GPIO board. It will need a 5V pull-up through a 1K Ohm resistor (and a 1K Ohm resistor can be put in-line between the pull-up and the processor pin). Pin PE0 is not brought out on the microTCU controller, so it cannot be used for table switching with the microTCU controller.
The shift table entries indicate the upshift gear that should be selected at the speed and MAP for that column and row.
For example, if the engine kPa is 60 kPa, and there is a 2 in the 40 mph bin and a 3 in the 50 mph bin, the transmission will shift from 2nd gear to 3rd gear at 50 mph (if the hysteresis conditions and rev limits are met). The transmission will downshift from 3rd to 2nd when decelerating at 49.9 mph at the same load, once the applicable hysteresis conditions are met.
Here is a calculator to help you decide on the before and after engine rpms when setting up the table:
Note that you can use any reasonable rpm as the 'Engine Speed', it doesn't have to be the redline. So you could put in 2500 rpm, for example, and see if the rpm would drop too low after any of the shifts.
In general, you want to set the table cell values to to provide the most constant TPS that still reflects the driver's demand for torque. You can do this by restricting the range as various RPM's. For example, in the table below the lowest RPM adjusted TPS percentage (aTPS%) can only go from 10% to 55%, while the highest RPM aTPS% can only range from 50 to 100%.
The TPS Load table can be used in a number of ways, so you may need to experiment with different approaches to find what works best for your application.
If user really wants to use only TPS for load with no adjustments, they can set the table so the the cells in each TPS row are identical to the bin value for that row, then the output from the table will be the TPS, like this:
Note: DO NOT power off the MShift™/GPIO board while the 'Flash Burn' indicator is active. Doing so *will* corrupt your settings. Wait a second or two for the burn to complete before powering down the board.
Here you can set the LED patterns in each gear. The default is:
However, using these menu items, you can change the pattern in each gear. Select the gear you wish the change the pattern for from the menu, then change the pattern in the dialogue to have each LED "off" or "ON" for that gear.
For example, you can have only one LED light in each gear. You can also set two patterns for reverse: the LEDs will cycle through the set patterns once per second - allowing you to have the display flash in reverse as a warning.
Or if you wish to use a 7-segment LED to display the current gear numerically, you can use these pattern to adjust the 4 LED outputs to be suitable for a 7-segment LED driver (such as the 4511 7-segment decoder/display driver IC).
Note that when driving LEDs, "ON" means current is allowed to flow, and "off" means current is not allowed to flow. If you are using a pull-up circuit with a 7-segment LED driver IC, "ON" will mean the pull-up voltage is held low (< 0.7 Volts), while "off" will mean the pull up voltage is high. So it might be backwards to what you expect (unless you are using the processor pins directly, in which case "ON" means 5V is being supplied).
There is much more on using the 7 segment LED/LCD driver here: 7segment.html
The shift completion delay is set in a is a function of load, and is an 8-element table that can set under 'Tuning → Shift Completion Delay'. Both the shift completion delay time (in milliseconds) and the load values can be set there, and the value used will be interpolated.
No further shift computations are made during the pressure adjustment and shift completion delay periods.
When "Tach + Load Shifting" is enabled (under 'General Settings → Shift Factors → Auto Shift Mode') the VSS based shift table(s) are no longer used. Instead, there are a series of 'per gear' upshift and downshift engine RPM tables (with 8 elements each by load) under 'Tach + Load Shifts' on the main menu.
These tables can be set in TunerStudio:
The tables are either upshift or downshift tables:
These tables set the RPM to shift at for each shift (based on the current short-term load average). For example, for a four speed transmission you would have:
Current Gear | Upshift | Downshift |
1st | 1-2 Upshift Table | No downshift possible |
2nd | 2-3 Upshift Table | 2-1 Downshift Table |
3rd | 3-4 Upshift Table | 3-2 Downshift Table |
4th | No Upshift possible | 4-3 Downshift Table |
There is no downshift table in 1st, and no upshift table in 4th (for a 4-speed) obviously.
The shifts work by first checking for an upshift (if the current RPM is greater than the interpolated RPM from the upshift table; if there is no upshift required then the downshift RPM is checked against the downshift table. The shift bring different upshift and downshift tables into play (those for the next higher gear if there was an upshift, and for the next lower gear if there was a downshift).
Some care must be taken to ensure that an upshift from a gear (say 2nd) will not be followed by an immediate downshift in the target gear (3rd). This will happen if the ratio of the gear ratios (3rd/2nd or 1.000/1.630 = 0.613 for a 4L60e) multiplied by the current rpm in 2nd is lower than the downshift rpm for the target gear. If the shifts start oscillating, that likely means that this situation has been encountered, and the upshift rpm must be raised, the next higher gear's downshift rpm must be lowered, or both.
And a similar situation applies for downshifts followed by immediate upshifts (in which case the downshift rpm for the current gear must be lowered, the upshift rpm for the next lower gear must be raised, or both).
Any short-term load below the user specified lowest load bin value for the Tach-based shift table is treated as if the load were equal to the lowest load bin (i.e. the rpm in the lowest cell will be used for shifting), and any short-term load average that is above the highest load bin will use the highest bin's rpm value for shifting. For example, in the above illustration, the highest bin is 6000 rpm at 100 kPa. So 6000 rpm would be the shift point for any load over 100 kPa as well, even if it were 250 kPa or more.
Note: DO NOT power off the MShift™/GPIO board while the 'Flash Burn' indicator is active. Doing so *will* corrupt your settings. Wait a second or two for the burn to complete before powering down the board.
Spare Port Function: The function of each three 'spare ports' can be selected under: Spare Ports→Spare Ports Function→Spare Port X Usage (there are 5 modes, corresponding to 5 values of the parameter spX_mode):
The speedometer output signal will adjust automatically after a reset when you change the tire size, final drive ratio, or number of VSS teeth. If not used as a speedo output, this is a PWM enabled port with a 16x9 lookup table.
You can use the calculator above to determine the ratio of the VSS input frequency (pulse/mile) to the speedo desired output.
There are four 'user spare ports' spare ports 0, 1, 2, and 3. Spare port and spare port 2 can use an ANDed combination of speed, rpm, load, and current gear (with hysteresis). Assuming they are not used for another function (like a 4th shift solenoid), these can be used to control external devices like fans (ex. shut off above a specified speed), or ancillary trans functions.
These are the 4 conditions on 4 variables (vehicle speed, engine rpm, load, and current gear) that can be used to set the state of the spare port output on Ampseal pin 11. The conditions are:
For example, if you set:
You can set up to 4 of the following conditions. There are 4 conditions on 4 variables (vehicle speed, engine rpm, load, and current gear) that can be used to set the state of the spare port output on Ampseal pin 12. ALL must be 'true' for the output to switch. The conditions are:
For example, if you set:
Note that:
For spare port 1 and spare port 2: Use the only PWM 12 element table and OFF value to set the state. This setting relies on the 'PWM active' parameter (below) to determine when the PWM state is ON or OFF. The PWM can be set to a range of values from 0% to 100% in 12 bins (and the user can select if the interpolated PWM percent varies with load, temperature, speed, or engine rpm. The user can also set a single separate OFF value for the PWM. If the user doesn't want varying PWM, and wants and ON/OFF output instead, they can simply set all the table values to 100% and the OFF value to 0% (or vice-versa).
Spare Ports→Spare Port X PWM Setup→PWM Active (spX_active):
For spare port 1 and 2 there are two 12x1 tables for each spare port's PWM. One (Spare Port X PWM Percent) sets the percentage of 'ON-time' for each bin of the index table. The index table is used to compare the current 'PWM Index' value (which can be the current load, speed, temperature or rpm, depending on what you have selected in the PWM setup) to the index bin values. The code finds the closest bin values in the index table, and then computes the interpolated PWM% from the 'PWM percent' table. Dealing with two separate table is awkward, though. Instead, it may be easier to use the 'Tuning→Spare Port X (index)' graphical presentation. This gives a graph of the index versus PWM%, along with the associate tables, all in one place.
For spare port 0 and spare port 3 there is a two index table for each spare port (a 9 element bin table for the y axis, and a 16 element bin table for the x axis). These are used to interpolate the PWM percentage from a 144 element table. The bin values and PWM table can be edited under 'Tables→Spare Port X Table' once the spare port is set to a PWM enabled usage under 'Spare Ports→Spare Port Function→Spare Port 0 Use' (i.e. if it is not set to be a speedo output).
PWM mode for Spare Port 3 is a bit different than for the other spare ports. Spare port 3 can be used in PWM mode as a alternate algorithm for the line pressure output. The PWM will be derived from spare port 3's 16x9 PWM table (not the 16x9 load × speed line pressure table), unless:
Note that the PWM reported in TunerStudio is the actual PWM percentage. As the frequency increases, the 'granularity' of the possible PWM% increases, and the PWM% may be off from the target by up to several percent. Lowering the PWM frequency (increasing the period) will result in better accuracy.
In 5.102+ code, the selective clutch outputs on spare port 1 and spare port 2 can be set to engage momentarily when the TCC engages (called 'TCC follow mode'), as well as when certain up/down shifts occur. This is a useful function for some VW/Audi transmissions. You set the user parameters under 'Shift Ouptut Patterns → Clutch TCC Activation'. The settings are:
The PWM frequency and percentage are set in two menus:
* A pull-up circuit is comprised of a current-limiting resistor that connects the signal to a voltage supply. The current limiting resistor is chosen to limit the current draw when the driving transistor is flowing (otherwise the voltage supply would essentially be shorted to ground). Resistor values of 1k Ohm (1000 Ohms) to 10k Ohm (10000 Ohm) are commonly used for signaling purposes for automotive devices. The voltage supply is typically either the vehicle's 12V (nominal) supply, or the controller's 5V supply, depending on how much voltage the signalled device requires.
Example: Tachometer as a Gear IndicatorThis frequency output function could be used to drive a tachometer as a gear indicator, for example. To use this, recall that for an N cylinder 4-stroke cycle engine (N = 1,2,3,4,5,6,8,...) there is one spark event every second revolution, so the frequency is:
For example, this is RPM/15 for an 8 cylinder, 4-stroke cycle engine, RPM/20 for a 6-cylinder, and RPM/30 for a 4 cylinder engine. To get a four stroke cylinder tachometer to indicate 2000 rpm (often abbreviated to just a "2" on the tach face, implying 2nd gear), we would set the period to:
period = 120/(2000 * 4) = 0.015 seconds = 15 milliseconds which rounds to 14.976 milliseconds in the code.
Here is a calculator to do the math for you: You may decide to re-label the tach values, especially if the tach allows access to the face so you can replace it with a computer drawn custom face with PNR plus all your forward gears (in which case you can use whatever periods that work with your design, of course).
|
Note: DO NOT power off the MShift™/GPIO board while the 'Flash Burn' indicator is active. Doing so *will* corrupt your settings. Wait a second or two for the burn to complete before powering down the board.
baud = scalar, U32, 121 "", 1.00000, 0.00000, 115200, 115200, 0 ; baud rate
to something like:
baud = scalar, U32, 121 "", 1.00000, 0.00000, 300, 921600, 0 ; baud rate
Note that the range of allowable baud rates in the code (as opposed to the INI limits above) is 300 baud to 921600 baud (in 5.011+ code). Any value outside that range will cause the code to revert to the default 115200 baud rate. This prevents an incomplete flash burn cycle from corrupting the communications so much that the code must be re-loaded with the serial monitor (aka. 'bootloader'). Flash burns involve writing ones to all the memory location before burning the actual values, so an incomplete burn can result in all ones in the baud rate location, and for a 32-bit unsinged integer this is 4294967295 (= 1111 1111 1111 1111 1111 1111 1111 1111 in binary), which is obviously outside the valid range so 115200 will be used. This will allow the user to burn a good MSQ to the controller to restore its proper function.
Note: DO NOT power off the MShift™/GPIO board while the 'Flash Burn' indicator is active. Doing so *will* corrupt your settings. Wait a second or two for the burn to complete before powering down the board.
To calibrate the throttle:
Note that you may have to re-calibrate if you have changed the idle stop using the throttle stop screw.
Note that the transmission fluid temperature values are stored as 'Coolant Temperature Sensor' in TunerStudio. Do not recalibrate the Air Temperature Sensor table.
The CANbus user parameters in the MShift™ code are:
However, to prevent people accidentally screwing up their comms, it is un-editable in the INI file until you make a small change. Use a text editor and find a line in the INI like:
[pre]field = "!MS-II CANbus ID", ms2canID, { 0 } ; change to { 1 } to make editable[/pre]
and change it to:
[pre]field = "!MS-II CANbus ID", ms2canID, { 1} ; change to { 1 } to make editable[/pre]
If you choose mixed loads (3 or 4 above), you also need to activate/deactivate some settings under Project -> Project Properties:
If you are using only MAP or only TPS (either of the first two options) you only need to make sure LOAD_KPA is activated (for MAP) or deactivated (for TPS).
Also, note that the usual hysteresis limiting applies, except when MAP for Line Pressure Table/TPS for Gear Tables, in which case there is hysteresis on the speed, but not the TPS (this can block shifts on the stim, but with reasonable hysteresis values isn't likely to in real life).
ochGetCommand = "a\x00\x06" ; Lower case so we don't get confused.The last value for the 'output channel get command' (ochGetCommand) is x06, which indicates the hexadecimal count for the txtbuf table used for serial communications. The tables in B&G's 2.905 code are:
The text buffer for the outpc table is at table 0x06. The text buffer is isolated from the values as they change, so is less likely to produce errors on 'non-atomic' multi-byte word values. But the actual outpc for CANbus use is at table 7 (with B&G code, see below for msextra/MS3). So use either of the values 6 or 7 for the MS-II™/MicroSquirt® outpc table.
txbuf (table 6) has the same structure and 99.9% of the time has the same content as outpc, and when it doesn't, txbuf is more likely correct. That's why it exists and why TunerStudioMS uses it.
pageIdentifier = "\x00\x04", "\x00\x05"There are two sets of values in this case, for inpram (=x04) and in2ram (=x05) (other codes may have more or less sets). The last value in the last set, x05 indicates the hexadecimal count for the in2ram table that contains the adjustments in the case of this code (but not necessarily all codes). So use the value 5 for the in2ram block that contains the adjustment variables for MS-II™ or MicroSquirt® controllers using code from B&G.
The code will write the adjustments in the table, starting at the offset entered. It will write eight (8) bytes:
Note that these values are also used in MicroSquirt® controllers, the Sequencer™ controllers, etc.
So the controller for the engine must have 8 bytes set aside (in the order above) in the chosen table for it to read and implement these adjustments. They do not have to have these specific names, however. All B&G code since 2.901/3.430 has these bytes reserved as in2ram bytes 946 - 953 (you will find these in 'page 2' of the INI's [Constants] section). Other codes may or may not have this already implemented - check with your code's developer.
MShift™, CANbus, and MS/Extra Code
|
MS3/Extra: Please check at the www.msextra.com forums to get the adjustment variable names, offsets, etc. Because the relevant values appear to move from one version to another in the ms3/extra code, you best bet if you are running ms3/extra is to ask about these offsets for the particular code you are using on the www.msextra.com forums.
For example, in recent MS3 code, we have been informed that outpc location is table 7, the spark/fuel/IAC adjustment variables at table 7, with the relevant variables starting at offset 512.
|
MS2/Extra: Apparently MS2/Extra has the appropriate parameters inserted. These are located at block = 7, offset = 512. So set:
These are NOT the same as the defaults, so you will need to edit some of the values.To make these values 'editable', see below. The developers of extra code may change these values in newer releasers of the code, so you should check on the msextra forums for up-to-date information. |
However, please note that these locations may be different in past msextra codes (before 2015). Check with the developers at www.msextra.com to verify these values if you have trouble with these adjustment functions. |
All of the CANbus parameters can be changed in the tuning software. However, by default some are blocked by the INI configuration to prevent users from accidentally disabling their CANbus communications. To enable editing of one or more of these parameters, you must find the line in the INI for that parameter (around line 1246), and change the last section of the line where it says { 0 } to { 1 } to make editable in the tuning software. You can do this using notepad.exe (which comes with Windows and which can be found under 'Start/All Programs/Accessories/Notepad'), or you can use any general text editor.
Note that all codes since 4.146/5.099 have these parameters editable by default, so you can change the values in TunerStudio directly without making and edits to the INI.
dialog = canconfig, "CANbus Configuration" |
The file you edit will be in the TunerStudio project folder (something like: C:\Users\user\Documents\TunerStudioProjects\project name\projectCfg\). The default file names for the files you need to edit will be either:
If you cannot find a file with one of these names, try a file with the .ini extension in the /projectCfg/ folder.
To use the CANbus VSS, you need to specify the offset of the VSS value in the OUTPC/OUTMSG structure. If you set the value to zero (the default), or the CANbus is not enabled, the GPIO's VSS input is used. If it is not set to zero and CAN is enabled, the VSS from the external CANbus controller is used. For example, for MS3 code as this is written (2015), the speedo offset is apparently 332 with an outpc size of 340.
You can determine the required offset from the OUTPC/OUTMSG structure. The OUTPC structure is described in the [OutputChannels] section of the INI for your code. This will look something like:
[OutputChannels] | |||||||
deadValue | = { 0 } | ; Convenient unchanging value. | |||||
ochBlockSize | = 112 | ||||||
ochGetCommand | = "a\x00\x06" | ; Lower case so we don't get confused. | |||||
seconds | = scalar, | U16, | 0, | "s", | 1.000, | 0.0 | |
secl | = { seconds % 256 }, | "s" | ; For runtime screen. | ||||
pulseWidth1 | = scalar, | U16, | 2, | "s", | 0.001, | 0.0 | |
pulseWidth2 | = scalar, | U16, | 4, | "s", | 0.001, | 0.0 | |
... | |||||||
VSS | = scalar, | U16, | %%, | "mph", | 0.100, | 0.0 | |
... |
For more CANbus configuration information, including wiring and tuning software setup, see: www.msgpio.com/manuals/mshift/cpt.html
Load = ('Multiplier' * deviceVolts) + 'Load at 0 Volts'
Where M = multiplier (aka. "slope" in math terms), x is the Volts, B = Load at zero Volts, and y = load.
M is the slope, which is the 'rise' divided by the 'run':
M = (Load2 - Load1)/(Volts2 - Volts1)
and B = Load1 - M * Volts1
For example, if your device puts out 1.2 Volts at 20% load, and 4.4 Volts at 100% load, then the values you would use are:
Multiplier = (100-20)/(4.4-1.2) = 80/3.2 = 25
Load at 0 Volts = B = y - Mx = Load1 - 25*Volts1 = 20 - (25*1.2) = -10
The equation then becomes Load = (25 * Volts) - 10
Here is a calculator to assist in deriving the values (click anywhere outside a text box to recalculate):