Sprinter 4WD Conversion Idea, GMT-800 IFS.

Bikersmurf

Expedition Leader
The time vs money problem seems to be one common to all building custom rigs. I’m glad to see you’re able to start moving forward again.

I’ve also seen RV owners who have covers for their wheels to protect them from UV damage... if you put some on now, it’d conceal when you started working on things. I’m so glad I don’t have to deal with any of that... so long as it’s my own vehicle, repairs are perfectly allowed where I am. A friend even swapped an Fj40 body in my driveway over the course of a couple weeks without anyone getting excited. At the other side of the park (in front of my house), things are completely different... you’ll get hassled if your grass is to long, leaves falling off your tree land on the grass, or you have an RV in your driveway.

I’m following along, not because I’ll ever own a Sprinter, because what you’re doing is clever and outside the box. I’m looking forward to seeing you make more progress. :D
 

luthj

Engineer In Residence
My house is not is a real HOA area. There is a very small HOA that manages a few public spaces, but I am allowed to do whatever I want in my driveway, except park boats or trailers strangely. Honestly, I doubt anyone would care. When I moved in my neighbors lawn "grass" was about 2ft high, lol! I have an undying hatred for HOAs. There is always that one person who cruises the area looking for violations to report.

I am back on this project though, hoping to have my garage unpacked and decently sorted by the end of the month.

The garage is already 3/4 insulated, so I am tossing some fiberglass in the walls, and possibly getting a portable AC unit. Should make working in the summer much more manageable.

I made a few changes to the low-rang CAN bridge program. I revised the division operations to use a scaling factor and bitwise shift. Not really needed, but will make the program faster. I also added an IF/else statement that will only trigger serial debug output every second. That will prevent the program choking on serial writes.


I also discovered that the micros() function will rollover to zero at about 72 minutes. This is used to track time for the front wheel pulse program (not the one below). Given the rate the program operates, and the built in filtering the ESP module uses, I don't see any issue with the 1-2 bad samples created during the rollover at 400-900hz input frequency. Its not likely to even register with the ESP module. If it does, I will add a line to adjust the timing intervals after a rollover.


C++:
void loop()
{
  // Declarations
  byte cPort, cTxPort;
  long lMsgID;
  bool bExtendedFormat;
  byte cData[8];
  byte bData[4];
  byte cDataLen;
  int lowrange;
  unsigned short wSpeedL;
  unsigned short wSpeedR;
  unsigned short wSpeedA;
  unsigned long previousMillis = 0;
  unsigned long interval = 1000;
  //Serial printing interval
  bool SERIAL_OUTPUT= false;
 
  // Start timer for LED indicators
  TimerStart(&pTimerLEDs, TIMER_RATE_LED_BLINK);
  while(1)  // Endless loop
  {
    // Control LED status according to CAN traffic
    LEDControl();
  
  //Read low range switch and assign to lowrange varaible
  lowrange=digitalRead(LRSW);
  //Serial Print Interval
  
  if (SERIAL_DEBUG)
    {  
      unsigned long currentMillis = millis();
      if (currentMillis - previousMillis >= interval) 
      {
      // save the last time Serial Printing Occured    
      previousMillis = currentMillis;
      // Set Print to serial
      SERIAL_OUTPUT = true;
      
      }
      else (SERIAL_OUTPUT = false);
    
    }
    // Check for received CAN messages
    for(cPort = 0; cPort <= 1; cPort++)
    {
    
      if(canRx(cPort, &lMsgID, &bExtendedFormat, &cData[0], &cDataLen) == CAN_OK)
      {
        // Scan through the mapping list, If frame matches ID and lowrange is high. 
        for(int nIndex = 0; nIndex < nMappingEntries; nIndex++)
        {
          if(lMsgID == CAN_DataMapping[nIndex].lReceivingMsgID
              // Removed matching for source CAN port
              // && cPort == CAN_DataMapping[nIndex].cReceivingPort
              && lowrange == 1
            )
          {
      //If recieved port is CAN0, transmit on CAN1, otherwise transmit on CAN0.
            cTxPort = 0;
            if(cPort == 0) cTxPort = 1;
      
      //Initialize wheel speed int to zero
      wSpeedL = 0;
      wSpeedR = 0;
      wSpeedA = 0;
      
      //copy speed data bytes to working array from CAN data array
        bData[0] = cData[4];
        bData[1] = cData[5];
        bData[2] = cData[6];
        bData[3] = cData[7];
        
      //Set wSpeed to array data
        wSpeedL = (wSpeedL  << 8) + bData[0];
        wSpeedL = (wSpeedL  << 8) + bData[1];
        wSpeedR = (wSpeedR  << 8) + bData[2];
        wSpeedR = (wSpeedR  << 8) + bData[3];
        
        //print data for debug
        if (SERIAL_OUTPUT) 
          {
          Serial.print("wSpeedL raw =");
          Serial.println(wSpeedL);
          Serial.print("wSpeedR raw =");
          Serial.println(wSpeedR);
           }
        //For Front wheels, frame 0x200, adjust front wheel average speed. 
        if (lMsgID == 0x200)
          { 
            // copy speed data to wSpeedA
            wSpeedA = (wSpeedA  << 8) + cData[2];
            wSpeedA = (wSpeedA  << 8) + cData[3];
            
            //debug printing
            if (SERIAL_OUTPUT) 
          {
            Serial.print("Front average speed CAN Raw, cData[2]..[3] =");
            Serial.print(cData[2], HEX);
            Serial.println(cData[3], HEX);
            Serial.print("wSpeedA = ");
            Serial.println(wSpeedA);
          }
            //divide average speed by 2.73 using binary scale factor,  ((1/2.73)*4096) = 1500
            wSpeedA = ((wSpeedA * 1500)>>12);
            if (SERIAL_OUTPUT) 
          {           
            Serial.print("wSpeedA Converted = ");
            Serial.println(wSpeedA);
          }//end If 
            //Copy revised speed to data array
            // memcpy ((byte*)cData[2], (byte*)(wSpeedA), sizeof(wSpeedA));
            //memcpy (cData[2], (byte*)&wSpeedA, sizeof(wSpeedA));
            cData[2]=highByte(wSpeedA);
            cData[3]=lowByte(wSpeedA);
            if (SERIAL_OUTPUT) 
            {
              Serial.print("Front average speed Converted Raw, cData[2]..[3] =");
              Serial.print(cData[2], HEX);
              Serial.println(cData[3], HEX);
            }
          } //end if
          
        //Divide Wheel speeds by 2.73 using binary scale factor,  ((1/2.73)*4096) = 1500
        wSpeedL = ((wSpeedL * 1500)>>12);
        wSpeedR = ((wSpeedR * 1500)>>12);
        
        //print data for debug
         if (SERIAL_OUTPUT) 
          {   
            for (int mIndex=4; mIndex <= 7; mIndex++)
            {
              Serial.println("cData [4]..[7]");
              Serial.print(mIndex);
              Serial.print("-");
              Serial.println(cData[mIndex], HEX);
            }//end for loop
          } //end If 
        //Copy wSpeedL and wSpeedR to working array, Note offset for start byte.  Assumes both CAN frame and chip are little endian
         //memcpy( (byte*)&bData[0], (byte*)&(wSpeedL),sizeof(wSpeedL));
         //memcpy( (byte*)&bData[2], (byte*)&(wSpeedR),sizeof(wSpeedR));
          bData[0]=highByte(wSpeedL);
          bData[1]=lowByte(wSpeedL);
          bData[2]=highByte(wSpeedL);
          bData[3]=lowByte(wSpeedL);
        
        
        //Print working array contents
         if (SERIAL_OUTPUT) 
          {   
            for (int mIndex=0; mIndex <= 3; mIndex++)
            {
              Serial.println("bData[0]..[3]");
              Serial.print(mIndex);
              Serial.print("-");
              Serial.println(bData[mIndex], HEX);
            }//end for loop
          }//end If 
        
        //Copy bData to data array
        cData[4] = bData[0];
        cData[5] = bData[1];
        cData[6] = bData[2];
        cData[7] = bData[3];
        
      
              // Transmit Frame, print error message if CAN_ERROR is returned
            if(canTx(cTxPort, CAN_DataMapping[nIndex].lTransmittedMsgID, bExtendedFormat, &cData[0], cDataLen) == CAN_ERROR)
              Serial.println("Transmision Error.");
      
            
          }
      
        //Transmit Frames If low range is not active, or for non-matching frames
        else 
        {
          //If recieved port is CAN0, transmit on CAN1, otherwise transmit on CAN0.
          cTxPort = 0;
          if(cPort == 0) cTxPort = 1;
          
          if (canTx(cTxPort, lMsgID, bExtendedFormat, &cData[0], cDataLen) == CAN_ERROR)  Serial.println("Transmision Error.");
        }// end if else
          
        }// end for
  
      }// end if
    }// end for
    
  }// end while
}// end loop
 
Last edited:

luthj

Engineer In Residence
After getting some feedback on the Front Wheel Box (FWB), I think a circuit like this one will work better. This is for the front wheel speed sensor converter.

I obviously don't need the U2 opto-isolator for my application. This trigger circuit is a bit more flexible with regards to input frequencies ( It will see 45-750hz). It also has a low pass filter that should block any noise over 1khz.

518545
 

luthj

Engineer In Residence
Digging through some GM parts catalogs, a friend noticed these UCAs. They are strangely listed for the 2008 2500 silverado, and they mention for coil springs? Which was never an option on 2500s? So this must be a 1500 series part. Anyways, they have a significant rearward offset to clear the coils. I would need to rework the model to accommodate them, but that may be easier than cutting up the older symmetrical UCAs? I need to get one to measure. Should be plenty in the junkyards I would bet.

518635
 
Last edited:

Len.Barron

Observer
Digging through some GM parts catalogs, a friend noticed these UCAs. They are strangely listed for the 2008 2500 silverado, and they mention for coil springs? Which was never an option on 2500s? So this must be a 1500 series part. Anyways, they have a significant reward offset to clear the coils. I would need to rework the model to accommodate them, but that may be easier than cutting up the older symmetrical UCAs? I need to get one to measure. Should be plenty in the junkyards I would bet.
The newer 1500's have aluminum lowers, nice pieces that would shave some considerable weight vs their cast iron predecessors..
 

luthj

Engineer In Residence
The newer 1500's have aluminum lowers, nice pieces that would shave some considerable weight vs their cast iron predecessors..

Yeah, but will it handle a 4,000lb front end?


On another note I spotted a NP242D Tcase from a 99 durango in a local parts recycler. Only asking 110$! Sent them a message. The local pick-n-pull is only 3 miles from my house. So back willing, I will have a look there next weekend for a trans core.

I still need to figure out front/rear output shaft connections. Dodge uses a internal slip yoke which seals the Tcase housing. So I need to find a good shaft to use for the custom unit, or convert it somehow. The front output is standard 32 spline NP/NV, so I can likely find a yoke with common U joint fitting.

Looks like plenty of parts for jeeps with the 32 spline output. I can also source a yoke for the 9.25 IFS in 1350 or 1330 size. So all thats left is the sprinters rear axle flange. I figure an adapter plate/flange should let me mount up a 13XX series flange yoke

518707



https://www.ebay.com/itm/JEEP-1310-...167297&hash=item2a88fe7b22:g:RvwAAOSwRbtaC1um

518704
 
Last edited:

Len.Barron

Observer
yes that 32spline configuration was used at one time or another by almost all the car makers (except ford I think...they always had to have an odd spline count). I had a similar issue with my NP263xhd, the front output was female internal spline (duramax uses a very larger 31spline) so I took the stock shaft and machined the end of it off and found the 4 bolt flange that matched the driveshaft cv flange and pressed/welded them together...so far so good.
I'm sure that new aluminum lower would do the trick...but it's unsprung weight and I'd stick with cast iron/steel as well.
 

b dkw1

Observer
yes that 32spline configuration was used at one time or another by almost all the car makers (except ford I think...they always had to have an odd spline count).

Lots of Ford 205's had 32 spline outputs. Cheby and Dodge also used them so that may be why.

That slip yoke is for a CV joint. Do you really need a CV joint? I try to stay away from them as the are not as strong and have more parts to wear out. Also, replacing joints in them on the trail brings the suck to a whole new level.
 

luthj

Engineer In Residence
The rear won't need a CV. The front likely will. That's what gm used anyways, as the shaft is too short to get a good angles. At least that's what my sketches show.
 

luthj

Engineer In Residence
I received the Uno and Due today. Uploaded the sketches, and can confirm they compile and run. Good serial output. I should get the input circuit parts for the FWB on Thursday, and I can rig up a test. The serial console was showing a non-zero value for the input RPM on both channels. It may be a coding artifact, or just noise, as I don't have pull down resisters on the input pins.

The Due will be a bit easier. When I have a chance, I will splice a set of wires into the CANbus, and connect the due to see what kind of data I get from the serial console. 50/50 if I got the everything correct with the byte to short int conversion. If the input output Frames look good, I will put it in series with the TCM, and take it for a drive.

I need to rig up a power supply for the Due. The specs on this version indicate a wide range power supply from 8-30V. I don't want to fry it with voltage transients, so a basic filter circuit for AC ripple, and a zener to suppress spikes will likely be required. I am sure there are some good examples floating around the web. I could just use a 5V USB power adapter as well.
 

luthj

Engineer In Residence
Some interesting findings on Tcases. All Jeeps with the NAG1 use a different intermediate shaft. On the 241/242, this means the Tcase has a different input gear. It has external instead of internal splines. Photo below.

When I pull a Jeep 4x4 NAG1, it will have the correct intermediate shaft. Mopar part 5179989AA. In addition I will need input gear 5179989AA($120.79). This is for the 241, but should fit in the 242 no problem. Finally I will need adapter case 52108644AA($240.79). All these parts are present on non-rubicon 2011+ Wranglers. The rock-trac/rubicon uses the same intermediate shaft and gear, but has a different adapter case. I have tried finding used wrangler parts, but they are rare for 2011+. I think I found a place about 40 mins away from me that has a 2011 wranger on the lot. If so I can snag the tcase adapter and tcase for parts.



519084

519085

519088
 
Last edited:

Len.Barron

Observer
Be careful with the late model wrangler cases, there are some considerable input shaft differences(both internal and external available in the same years) between manual and auto trans models and I think another change happened in 2014.
 

luthj

Engineer In Residence
Best I can tell the switchover was in 2011 when they went from the four-speed to the five-speed. At that point the auto and manual boxes got different adapter housings and intermediate shafts as well as input gears. The manual boxes use the traditional internal spline while the 5speed switched to the external spline.

From my experience and research almost all the newer transfer cases on jeep applications use this external spline input gear with the 5 speed. For speed transmission still use the traditional system as that is a legacy transmission. Starting in 2006 they started switching over the higher power applications to the NAG1 five-speed. Yo My knowledge the only current production model that uses the NAG1 is the wrangler all others have switched to different transmissions by now. Part of the reason is that the wrangler doesn't change much, but also the NAG1 5 speed is much shorter than a lot of the newer 6, 7 and 8 speed transmissions. This allows for better driveline angles.
 

Len.Barron

Observer
sounds right...it's been a few years since I had to source my 241OR for my rockcrawler and nearly made the mistake of buying one with the external spline config.
 

Forum statistics

Threads
188,163
Messages
2,902,925
Members
229,582
Latest member
JSKepler
Top