Delaying torque converter lock up via can bus

Hi All, I’m new to the Arduino world. A wealth of knowledge here so I have plenty more reading to do.
I’m looking to use an Arduino uno r3 with a can bus shield and a 1 channel relay in a Vehicle transmission application. My goal is to take over some of the control of when my cars torque convertor locks up, however more precisely I want to delay when the torque convertor currently locks up. Any guidance on how to achieve this or if I'm on the wrong path please let me know.

The torque convertor locks up immediately after shifting into 3rd gear during light throttle at approximately 32km’s ground speed, once the TC is locked it is reluctant to unlock in that gear despite applying more throttle. It creates unnecessary vibration through the car and with the TC locked at such low speed and low engine rpm, the engine is often not sitting in its peak torque window so when planting your foot down with the transmission in 3rd, it takes some time for the engine rpm to increase before the turbo starts making boost again. Temporarily I had disconnected and added a toggle switch to the TC lockup solenoid circuit to compare the cars driving characteristics with an unlocked TC. When the TC cannot lock there is no more vibrations, the engine rpm can flare freely up to 2600rpm and be in its peak torque window. This allows the car to accelerate effortlessly instead of lugging at 1700rpm with a locked torque convertor. The only time the torque convertor will unlock is during gear changes, eg when shifting from 3rd gear into 4th gear the TC clutch will unlock briefly during the gear change, and will re engage shortly after. The TC solenoid also uses a PWM signal which ramps during engagement to reduce the harshness feeling of a lockup clutch engaging.

My intention is to “delay” by diverting the transmission TCM PWM lock up signal from reaching the solenoid until the transmission has shifted into 5th gear, so instead of locking in 3rd gear at 32km’s, it wouldn’t lock until approximately 65-70km’s.
How I exactly achieve the end result is still a little unknown, but my idea is to hack the canbus system first and reverse engineer some of the messages. The dash whilst driving in D mode always display’s the current gear selected, D1, D2, D3, D4, D5, D6, D7, D8.
Once I am able to identify these canbus messages, I would like to program the Arduino so when ever D1, D2, D3 and D4 is selected and see’s that retrospective canbus message, it will close the relay so the torque convertor lock up solenoid wiring / PWM signal is now diverted to a 50w load resistor to mimic a load on the TC solenoid circuit so a fault and open circuit isn’t flagged. As soon as the transmission shifts into any other gear other than D1, D2, D3, D4 (and the Arduino isn’t receiving of those canbus messages), the relay opens and allow the original TCM torque convertor solenoid wiring to pass through directly to the solenoid instead of the load resistor.

I understand it would be much easier to use ground speed alone as the trigger for the relay instead of having to hack the canbus system to retrieve the "gear selected" messages however to maintain a smooth torque convertor lockup engagement, it will be best for the hand over from the load resistor back to the original TC solenoid would during/immediately after a gear shift has taken place.

Any input or feedback on my project would be great! Thanks

The hardware I were looking to use for this project are;

Have You tried to use a VW service station?

1 Like

I do have Vag-com Ross Tech service tooling. When trying to retrieve the canbus messages for the actual gear selected for this project, I will use an Obd2 Y splitter cable, one port will have the Ross tech service tooling connected to my laptop so I can request the "selected gear" values (otherwise the gear selected canbus messages would not be sent to the Obd2 port normally) the second Obd2 Y splitter port will have the canbus shield connected.

If I can find the canbus message that the Rosstech tooling sends when requesting the selected gear, is should have a half a chance.

As a default You could block the built in logic. Only You need to catch the message telling about the gear You want and releasing the blockage.
Keep on sniffing and debugging!

Are sure there is not a fault with the existing system ?

I wish there was! Unfortunately, this is the way the Aisin Tr80sd TCU has been programmed by default to reduce emissions, purposely by keeping the engine out of its peak torque window.
I have verified this on few Touaregs now. I did look at getting the TCU remapped, however there is no functionality to edit the TC lockup point, controlling this by the Arduino will be my best chance I think.

I have made a bit of progress. I ended up getting a genuine Arduino uno r3 and a Seeed studio can bus v2 shield, I tapped directly into the can bus wires at the transmission tcm connector.

Using the can hacker software, I could monitor in real time a list of all the ID's sending data. I've narrowed down the ID that includes the can bus data for the transmission gear position such at P, R, N, D mode, S (sports mode), M (manual mode) and actual gear selected.

The first two bytes constantly change with the ignition on, with the engine running, and also whilst driving. I'm unsure what this data is for.

I guess I have obtained the first bit of information I need for this project, but now I need to work out what to do with the data.

Essentially when ever D1,D2, D3 gear is selected and the can bus shield see's this message, I would like it to automatically trigger a relay so the wiring that normally would go to the torque converter lock up solenoid gets bypassed and diverts to a 5.6ohm 50w resistor, as soon as D4 or any higher gear is selected the the relay opens again and allows the factory torque converter lockup solenoid to be controlled as be normal by the TCM calibration.

Go on. Find out about the changes, find the pattern.

I can see the pattern, the 4th byte is the only numbers changing that is relevant to the gear selected.
25= D1
35 = D2
45 = D3 and so on.

I did come across the below link which could possibly be modified to suit my application, I might be able to simplify this by having the can bus shield only needing to listen for the D3 can bus message (since D1 and D2 don't lock the torque converter anyway, BUT how do you trigger a relay by listening to only the 4th byte of data that is changing in that particular can bus message? when ever it see's the 4th byte, that is when I need the Arduino to trigger the relay to "divert" the TC solenoid wiring to the resistor.

This is going to seem a silly question, but is it right for me to think these things are not documented somewhere for the public to read? And so looking for patterns is the only way to go about decoding this stuff?

If so it seems fraught with danger to me: what if you miss the significance of some lone bit tucked away somewhere and your transmission has an excursion at autobahn speeds? Or is this voodoo well enough known to those of you who do this stuff for you to be confident you nailed it?

Why would a proprietary system be publicly documented? :thinking:

Yeah I guess I asked the wrong question: should have asked if it's proprietary. And of course even if it's not proprietary (in any legal sense) that doesn't mean it's public knowledge.

My question stems from being an unsuspecting mop driving along behind a car which I assume or hope is properly engineered and that the transmission's not going to have an excursion and come through my windscreen in tiny pieces because someone tried to "see the pattern" but missed one.

A mop = member of (the) public.

I would be a little more concerned if I were looking at sending can bus messages, as that could cause issues if something was not correct. However in this scenario I am listening to the can bus for that particular change in byte 4 relating to the actual gear selected. I see little harm in listening to the can bus.

But.... what if there's another byte somewhere else that you didn't spot which works in tandem with the byte you are watching, and which taken with your watched byte would mean you shouldn't do the delay thing under some circumstances although your watched byte alone says you're good to go?

Plenty of what if's I guess however all I'm looking to do is stop the torque converter from locking up in 3rd gear like it does currently, delaying the lockup isn't anything of significance compared to say controlling when the transmission selects gears and using an Arduino to control gear changes based on speed, rpm, engine load, throttle position ect.

I can delay by diverting the factory TC lock up wiring signal whilst in 3rd gear by reading the state of byte 4, and once it reach the value of 4th gear, all other times the factory wiring from the TCM is wired directly to the lock up solenoid through the relay to function as per original logic built into the TCM. Using the can hacker software I have done my road testing in D mode, S mode M mode, selecting P, R, N.
Byte 4 is wholly responsible for actual gear selected information. There is some changes in the can bus message when using the transmission in M (manual tip tronic mode) but that does not concern me, since I'm only wanting this action to occur when driving only in D mode. All other times for the lever position, and gear selected all ways defaults to relay allowing the factory TCM to control the TC lockup solenoid as per OEM.

Well done!
As other helpers have told, See what You can do to avoid false decisions.
Does that 35, 45 only arrive once or is it repeated? If so, looking for several instances giving the same number could be one possible safety check.
I don't remember the details for CAN bus messages, if checksums are used. One principal regarding engine control is the speed message is only valid for a short time, say a number of mS. We used 250 mS in our application I think...

Byte 4 will stay at 25 for however long the transmission driven in 1st gear
as soon as the transmission shifts into 2nd gear, Byte 4 will stay at 35
as soon as the transmission shifts into 3rd gear, Byte 4 will stay at 45
as soon as the transmission shifts into 4th gear, Byte 4 will stay at 55

if down shifting the transmission

once down shifting from from 4th gear into 3rd, Byte 4 will stay at 45 until downshifting again

The only time byte 4 changes value is during its upshift or downshifting of gears.

The can bus message is being sent for .150seconds, to .500 seconds. it varies but Arduino is constantly updated of the can bus message from ID393

what I need to work out is how to write a sketch that is only paying attention to the value of Byte 4, and as soon as the value in Byte reaches the value for 3rd gear then it needs to trigger a relay.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.