4L80E DIY transmission controller
When using the paddle shifters, how much delay (if any) is there between pulling the paddle and the transmission starting to shift? That's always bugged me with the paddle-shifted ATs that I've tried, but I've always wondered if a DIY controller could get the delay down to where the transmission felt more responsive than a manual.
Don't know about commercial units, but in mine, the main loop is under one millisecond, so paddle shifting would be add less than that.
The real delay with any shifting is in the transmission. It takes time to fill the pistons with enough fluid to make them engage. Some gears might take longer than others.
So if you increase the line pressure and port and open up the passageways, things happen faster.
But it's a tradeoff between comfortable shifts and feeling you got kicked in the rear by a mule.
It's all based on tables. For example my line pressure tables are higher in sport mode than they are in cruise mode, so shifts will be firmer. Also sport mode shifts later than cruise. No reason why it can't be raised for paddle shitfing . I don't raise them for paddle shifting, but I have the option if I want it.
In the 4l80e, max line pressure is when the solenoid is off, the valve and springs set max line pressure. The higher the duty cycle you pulse the solenoid, the lower the pressure, but if you give it too much duty cycle, the solenoid may overheat. My minimum pressure is at 60% duty at this time.
I've only driven it in cruise mode so far and up shifts are firm, but very pleasant. The transmission is a 4L80E which I modified with dual feed, 2nd and 3rd accumulator delete, forged input shaft and drum, enlarged feed holes for 2nd and 3rd, extra clutches, and a bunch of other mods.
The only thing I'm going to change for now is to unlock the converter earlier when I apply the brake or reduce the throttle by some percentage. That's a software only change.
The Best V8 Stories One Small Block at Time
BTW, about half the code is related to the display and the variables stored in NVRAM. This would normally be a nightmare if there needed to be a change in either the display or stuff needed to be saved when the power is turned off. There would have to be a ton of changes to the code with each change in either of these. To avoid this maintenance nightmare, I've created an Excel spreadsheet that has tables with the characteristics of the stuff for the display and the NVRAM and alarms. So or example, if I needed to add a new screen or field in the display, I change it in Excel spreadsheet and let the Excel macros I've written generate about 7000 lines of "C" code.
Off the top of my head, TPS (or map), RPM, and MPH are pretty much all you'll need for basic setup.
The RPM and MPH signals will need to be converted first in order to be read by the processor. What have you gotten done so far?
so hey, nice job and thanks for the tease.
Off the top of my head, TPS (or map), RPM, and MPH are pretty much all you'll need for basic setup.
The RPM and MPH signals will need to be converted first in order to be read by the processor. What have you gotten done so far?
I've built a few projects out of ardiunos so far, but very little coding of my own. Just tweaking existing code or incorporating other code examples together. The electronic side of it is simple though for this project. Today I've been trying to read up on the innerworkings of the 4l80e and what it expects. Found a lot of great data in this PDF. http://extremeautomatics.com/assets/...0Reference.pdf (I'm sure this is nothing new for you, but maybe someone reading your thread might find it useful)
I've built a few projects out of Arduinos so far, but very little coding of my own. Just tweaking existing code or incorporating other code examples together. The electronic side of it is simple though for this project. Today I've been trying to read up on the innerworkings of the 4l80e and what it expects. Found a lot of great data in this PDF. http://extremeautomatics.com/assets/...0Reference.pdf (I'm sure this is nothing new for you, but maybe someone reading your thread might find it useful)
Relays are not a good choice. Mosfets are better and actually easier to drive. They don't even need heatsinks.
My code has protections for downshifting. That part is pretty simple... if the RPM is over a certain value, don't allow downshifting.
Deciding when to upshift and downshift in normal operation isn't quite as simple. I'm happy to share that.
Some of the 4L80Es don't have the VSS reluctor ring, but it can be added if it doesn't. As I mentioned before your'e going to need something to convert the vss signal from the VR sensor to a square wave. My previous version of the controller used a chip that does that conversion for up to two sensors. Maybe you can find a module somewhere or if you can't, I can look up my old stuff and see what the chip was. It would have been alot easier of GM had used hall sensors instead of VR sensors.
so hey, nice job and thanks for the tease.
It's not possible to make what I have into a kit because it's too integrated with the AEM. And I don't want to be in business again. It's a hobby for me.
I am however willing to help anyone with parts of my code and circuit design, that wants to make to effort to learn and build their own version. Or just answer questions.
Code isn't that difficult to understand if it's written well. It's like learning how to walk. Before you know how to walk it seems impossible. Then you crawl, then you stand up with the help of some prop, then you take one step, then you start to walk. After a while it's not that hard. The thing that scares people is when they look at the entire program. It's less daunting when you look at a tiny piece and try to understand it. Then each piece you understand makes the next piece easier. Check out to complete set of instructions and code I put out for PWM fan controller. PWM Fan Controller
It's an easy intro to programming. The actual code in a trans controller isn't that much more difficult. But a descent trans controller will require,many subroutines and application of some concepts like slopes and other math stuff.
line pressure control solenoid (aka. "force motor") is pulsed at 614Hz
Duty cycle on the Pressure Control solenoid is inversely proportional to the
throttle angle (as throttle angle increases, duty is decreased)
At idle (minimum throttle), the duty is at max (60%). At WOT (wide open throttle),
the duty is at min (0% or off).
All solenoids share common 12V line on pin E (except Pressure Control solenoid,
which has its own +12 Volt supply on pin C) and are switched on and off with ground.
So if you ignore the line pressure solenoid, you will have the maximum pressure. Not good.
To figure out what the duty cycle needs to be to the solenoid, crack open the high school algebra book and re-learn the point slope method (y = mx + b).
Keep in mind that an arduino Mega has a granularity of 256 possible PWM duty cycles that range from 0 to 255, so 255 is 100% duty. To have the arduino generate a PWM, you use the analog write command.
/* ++++++++++++++++++++++++++++++++++++++++++++++++++++*/
void adjust_line_pressure() {
if (!engineRunningStatus) {
if (prevLinePressDuty != 0) {
prevLinePressDuty = 0;
analogWrite(linePressControlPin, prevLinePressDuty); // line pressure,
}
return;
}
linePressDuty = solve_for_x_int(currBoostFL, boostForMinLinePressFL, slopeLinePressDutyFL, lowestLinePressDuty);
int duty = constrain_int(linePressDuty, 0, lowestLinePressDuty); // 153 is 60% duty for 8 bits
if (duty != prevLinePressDuty) {
prevLinePressDuty = duty;
analogWrite(linePressControlPin, prevLinePressDuty); // line pressure,
}
} // end adjust_line_pressure()
/* ++++++++++++++++++++++++++++++++++++++++++++++++++++*/
int solve_for_x_int(float yVal, float lowBits, float slopeVal, float lowVal) {
// returns the x component given a Y, b and a line
int solveRes = (int) ((yVal - lowBits ) / slopeVal + lowVal) ;
return solveRes;
} // end solve_for_x_int In addition to controlling the 4l80e, the transmission controller can also close the throttle plate (throttle by wire). It's similar to how cruise cruise control operates the throttle plate in a regular car. Any RPM or boost launch control target, can be set from the touch screen.
The two step is triggered when the brake is pressed hard and the pressure reaches a preset high pressure. The gas pedal gets floored, but the engine RPM (optionally boost) is now controlled by the transmission controller by reducing the throttle opening and maintaining the desired RPM. Once the brake pressure drops to a preset pressure, the two step is released, the throttle plate goes back to normal and the car automatically launches. Then the throttle plate is again closed as needed for boost control by gear. My 6.0 turbo setup does not have a wastegate.
In addition to controlling the 4l80e, the transmission controller can also close the throttle plate (throttle by wire). It's similar to how cruise cruise control operates the throttle plate in a regular car. Any RPM or boost launch control target, can be set from the touch screen.
https://youtu.be/-9CqPtqYtdc
The two step is triggered when the brake is pressed hard and the pressure reaches a preset high pressure. The gas pedal gets floored, but the engine RPM (optionally boost) is now controlled by the transmission controller by reducing the throttle opening and maintaining the desired RPM. Once the brake pressure drops to a preset pressure, the two step is released, the throttle plate goes back to normal and the car automatically launches. Then the throttle plate is again closed as needed for boost control by gear. My 6.0 turbo setup does not have a wastegate.
Iv been wanting to start a project for a 8-speed auto, would like to look at your code for the 4L80. iv been checking out this thread and admiring your work for a long time.
You've been a inspiration to quite a few i bet. THANKS,







