1971 VW Bus Engine Assembly

With Fuel Injection Added

This project is installed and running. More stuff may be added, so check back periodically.

[Click on any picture to view full size version]

You know you're in trouble when you remove the oil strainer cover plate and you find metal.

Lots of it.

So you pull the engine and strip it. To your suprise, as the main components come out, everything looks good. What gives? Then you pull the cam and see this:

Left Middle Cam Bearing

Then you look at the bearing in the other half of the case and see this:

Right Middle Cam Bearing

Then you look at the (stock) cam journal and see this:

So no doubt where the metal came from, but this doesn't make sense. If the bearing was damaged by crud, one would expect both halves of the bearing to be trashed, and maybe the cam journal damaged. If the cam was bent, you would again expect both halves of the cam bearing to be trashed, and a damaged area on the cam journal.

Laying a straightedge along each half of the case shows all cam bearing seats are in line, with no gaps or high spots, so it's not the case. Spinning the cam in the case with the middle bearing removed and a dial indicator on the middle journal shows insignificant runout, so it's not the cam.

So what happened?

Working theory is it's just a bad bearing, where the bearing material simply didn't adhere to the steel shell. So the decision is made to rebuild with new cam bearings and see what happens. Fortunately, this engine has full-flow oil filtering, so none of the nasty metal bits found new homes in other bearings.

[Later thoughts] After looking at the bearing picture a little more, I noticed the following: Notice the cracks in the bearing material. These cracks do not go all the way through the shell, just the babbit material. I'm fairly confident now that the issue was the babbit simply did not bond to the steel bearing shell, and was shed in chunks. The shell was probably contaminated and not cleaned properly before the babbit was applied. Bad bearing, right out of the box.

Everything is thoroughly degreased, washed, cleaned, blown dry, oiled, and bagged. Now reassembly begins (with a few upgrades...)

The Build

Crank, lifters, and cam laid into left case half.

Camshaft gear bolts detail, showing timing marks matched up.

View from the front of the engine. Note 8 dowled counterweighted crank and new W100 grind cam with new lifters. Case main stud o-rings are in place.

Right case half, showing new lifters installed and coated with special Torco cam lube.

Detail view of (existing) welded counterweighted crank. One of these will increase the life of your engine cases significantly, and allow freeway driving at 3,800 - 4,000 rev/min all day.

Case halves assembled. Note full-flow oil filter conversion fittings. These nicely clear the mustache bar.

Pistons and cylinders bagged to protect from contamination. Note important air deflector tins - don't forget these!

Bagged assembled heads.

Left side assembled. Note (existing) 1-1/2 qt. sump and Berg pressure-relief pump cover.

Another shot of the same, showing red high-temp silicone used to seal barrels and deck height shims to the case. The 88mm thick-wall barrels are shimmed to yield stock 7.5:1 CR. Remember, it's a Bus...

Both sides of engine assembled, along with oil filter, cooler, mustache bar and rear pulley tin. Note the pushrods and rockers have not been installed, so that the engine can be cranked for oil pressure without wiping all of the cam lube off the lifters.

Details of the oil filter plumbing.

After cranking the engine to get oil pressure, the valve train is assembled. Because these heads have dual springs, a solid rocker shaft kit is being used, along with steel pushrods and good swivel feet adjuster screws. One trick: while the engine is on the assembly stand, fill with oil. Then slowly tilt the engine to fill one rocker arm box with oil. Let stand for a few minutes. Then tilt the engine the other way and do the same for the other cylinder head. This guarantees the rockers and valves have adequate lube for startup.

Side Project: How To Make a Hoover Bit

Uh oh - something's missing: the 'Hoover bit' is broken off. I suppose I could find one online and buy it. But then, I'd have a 40 year old part, and by the time I got it ordered, got it shipped here, and then refurbished it, I could just as easily make one. So, let's to that.

A stock Hoover Bit (Image borrowed from online somewhere. You can probably guess why these fail...)

Step #1: Get some scrap sheet metal. In this case, it's a length of 0.035" sheet steel, already bent into a right angle (upper right). Hack off a segment, cut and bend a right angle (upper left). That's not going to be very strong, so let's cut and add a stiffener (lower).

Step #2: Sand everything so it's bright and shiny. Add a little brazing flux, then clamp for the first heat. Braze the unclamped area. After it's cool, remove the clamp, then braze in the previously clamped area.

Step #3: After brazing - sand everything again so it's bright and shiny. Trim to rough shape, so it's ready for the next step.

Step #4: Sand the original Hoover Bit so it's paint and rust-free. Measure, trim, flux, and clamp the new piece into position. Like before, we'll braze, then remove the clamp and braze in the clamp area.

Step #5: Buff the finished piece to remove any residual flux. Trim to a little bigger than expected final shape, then paint it black (so it won't rust).

The painted piece.

The painted piece trial installed for a fit check. Note the length is too long and the width is too wide, but we'll trim to fit the fan housing exactly.

Trimmed to fit the fan housing. (Look at the size of the air leak that would be there without this piece in place!)

Trimmed piece mounted to oil cooler. Note the added thin adhesive foam strip (Ace Hardware) to seal the Hover Bit to the oil cooler (fills in all of the oil cooler knooks and crannies).
Anal? Maybe. Just hate to waste cooling air...

Final Assembly - Tin, Exhaust, Intake

Air control flaps mounted. Note the alternator got a full refresh: new bearings, brushes inspected, test run on a test fixture. It's such a pain to have to replace one of these, so it's well worth insuring that it's going to stay put for a while. Please excuse the crappy gold aftermarket pully - it's a leftover from the test fixture. It will be replaced with a good German black pully ASAP.

Thermostat mounted and adjusted.

New foam seal on oil cooler exhaust housing.

Exhaust header in place. Note the block-off plates bolted to the headers heat riser flanges. These are made from flanges sawed off a clogged up manifold and welded shut. You can probably buy these premade somewhere. Heat risers aren't needed with fuel injection, as the intake runners (except for cold start) only carry air. Thus, no fuel to condense on the cold runners. Also note these old GB headers have metal tubes to carry heater air to the heater boxes, just like a stock muffler has. No paper/foil air hoses to burn up against the hot exhaust tubes.

Brazed-on heaterbox flanges. A suggested upgrade: way better than the factory rings and clamps. These never get loose or rot off. I'm trying stainless steel hardware to see if it holds up better than plain steel.

Tricky FI hidden inside the manafold mounting nut. Be sure to locktite the snot out of this one! If it were to ever come loose, guess where it would go?

FI intake manifold and center body. This FI setup is what was used on a '75 Bug (the doner vehicle), and is suitable and compatable with the upright engine configuration used in an early Bay. The center body holds the alternator (or generator, if you prefer), and also holds the throttle body. The intake runners have flanges for the fuel injectors.

The other side of the FI intake manifold. Note the two halves of the center body are joined with blue silicone as the gasket. The thermo-time switch and aux air regulator fit in the center space of the fan belt. Also note the throttle wire tube fits on the left sife of the oil cooler rather than the right, as on carb'ed engines. You will have to make new holes for the throttle wire tube. Be sure to cover the old holes, to avoid a cooling air leak. Note the offset linkage to connect the throttle wire to the throttle body (not mounted yet).

Where the throttle wire tube exits to the front tin. Again, you'll have to make a new hole in the front tin for the tube. Use rubber grommets wherever the tube passes through the tin.

Injector Test Setup

Injector test setup. Troubleshooting a FI system is a pain in the rear with the engine in the Bus. It's much easier to pre-test everything on the bench before trying to run the engine for the first time, especially the injectors.

To do this, you need the following list of stuff:

Fuel tank. This one is made out of an old paint thinner can, and has two copper tubes brazed into the lid. Both tubes go to the bottom of the can.

Holding stand. This one is an old chemistry ring stand I had laying around. It enables you to have everything mechanically secured, allowing you some reasonable distance between the power source and spraying fuel.

Pressure gauge. This allows you to check the pump and pressure regulator. With no vacuum applied to the regulator control port, you should get around 35 lbs/in2. Applying vacuum should cause that number to drop to around 28 lbs/in2. The purpose of the vacuum control on the regulator is to keep the fuel pressure across the fuel injector constant, regardless of intake manifold pressure. This makes the fuel quantity delivered by the injector a function of just the width of the pulse driving the injector.

One other detail: when you shut the fuel pump off, the pressure drop should be imperceptable. If it noticeably drops, then something's leaking.

Easy-release connector. These are a joy compared to the stock connector housings. Press the wire bar down and the connector instantly releases. No tugging, yanking, or swearing to disconnect these like with the factory connectors. It's worth retrofitting the whole harness with these! [Source and part number at end of harness build section.]

5 ohm 10 watt series resistor. This emulates the series resistor block found in the factory FI wiring. You need this to avoid overheating the injector during the testing process. Note the resistor gets HOT, so wire it in at the battery end of the harness (e.g., away from the spraying fuel). Note: the resistor is not used with the cold start injector.

Precision 30 second injector driver. OK, I got a little carried away here. I just didn't feel my ability to accurately fire the injectors in order to test their flowrate was adequate. So, having the parts needed to do it laying around, I cobbed together a precision 30 second injector driver. This is based on an Arduino Nano module (ridiculously cheap online), a generic power mosfet (transistor), a push button, and a snubber network. Also a page and a half of code.

Conveniently, the Arduino runs fine on 12 volts (has an on-board voltage regulator).

Close-up: Nano, button, and mosfet. The greel LED shows the board has power. The red LED indicates the injector is being driven. Push the button, and the injector fires for 30 seconds, then stops automagically. Push the button while the injector is firing, and it immediately stops firing.

Snubber network. This is nothing more than a resistor and a 3 amp diode. When an injector shuts off, the energy in its coil has to go somewhere. This network absorbs that energy and dumps it as heat. It also protects the mosfet from the resulting voltage spike. Note the pic shows a 22 ohm resistor. It was subsequently changed to 15 ohms, to lower the peak voltage spike value.

The schematic and source code for this is posted below, in case anybody wants to build one.

Power source. This is a pair of 6 volt gel cells I had laying around wired in series. Pretty much anything that can put out a few amps at 12 volts will work.

Injector under test. Look for a nice fan pattern to the spray. A solid stream won't do. Also make sure the fuel stops completely when you cut power to the injector. No drips allowed!

To test, apply power to the pump, and allow the system to purge all air and reach a stable pressure of around 35 lbs/in2. Then apply injector power for exactly 30 seconds and measure the quantity of fuel emitted. Should be around 89 ml.

The important point is to make sure all four injectors pass the same amount of fuel. Otherwise, some cylinders will run rich, some lean - not a good thing...

Also test the cold start injector. It passes less fuel than a regular injector. Mine did around 40 ml in 30 seconds. Inspect this injector carefully for structural issues, looseness, and leaks. These injectors are 40 year old parts and have been known to break. A fire usually results.

Injector Plumbing

Bad to good hose clamps.

Replaced stub hoses on injectors. The original injector hoses were scary fabric covered stuff, and old. As the injectors all tested out good, it made no sense to not cut off and replace the feed hoses.

To remove the OEM hose clamps, a careful diagonal cut across the ferrule was made with a cutoff disk in a die grinder. Be sure to plug the hose end so no particles get into the injector! Be really careful cutting the clamp. Do not cut into the injector, or it's toast! Just cut a slot you can stick a screwdriver into, then carefully twist to open the slot up. Peel the metal back with pliers until the hose can be twisted off the injector. Don't break the plastic injector nipple!

The new hose is Gates Barricade 5/8" 225 PSI FI hose (FLAPS). One issue with this hose is it has a tendency to kink if bent sharply, so watch the installed bend radius... The clamp is a (non-removable) Oetiker 5/8" (15.7mm) 167 series single ear clamp (Amazon).

Injectors #3, #4 (left side)
Removable clamps are used where service disassembly may be useful.

Cold start jet and pressure tap

Injectors #1, #2 (right side)

Pressure regulator

Test Run

I decided, before I get any farther into the harness rebuild, that I should test run this thing and see if there are any other issues that may need to be dealt with. Because the original FI harness worked the last time it was used, I decided to cobb it on and run it. This would allow the future rebuilt harness to be installed on a known running engine.

So, the harness was cobbed onto the engine with c-clamps and tie wraps.

Starter holder. This is made from an old transmission. It has a control panel made from a length of angle iron which holds an ignition switch, a starter button, an oil light, and a gen/alt light. The FI fuel pump is laying on the cart base, below the trans case.

Yeah, the wiring looks pretty hairy. But don't forget, this is a temporary cobb so we can run this thing...

Fuel tank. The fuel tank from the injector test is used to feed the injector pump. The battery is connected.

Misc FI parts. The injector resistors and double relay are attached to the engine tin with c-clamps. The FI controller is laying on the ground under the cart.

Air flow sensor. The AFS is attached to the S-boot and allowed to rest on top of the alternator. The crankcase vent hose provides terminal spacing. Hoses that would normally go to the air cleaner are plugged with rubber stoppers as needed. All of the old harness connectors are labeled (blue tape flags) for the future rebuild.

Decel valve. The decel valve is mounted to the remains of the EGR valve pipe. [In the bug, this valve is normally mounted up next to the left hood hinge.]

Left side view. The white wires wraped around the oil hoses are from a heated O2 sensor mounted in the exhaust collector. This signal feeds a dash gauge.

Success!!! It runs! Download Video

Harness build

Harness parts. This is some of the terminals and parts needed to build a harness. I will provide a complete list below of the part numbers actually used. All terminals and housings were purchased from DigiKey. The crimp tool is from Del City. The pin extractor (lower left from crimp tool) is home-made. The wire used is 18 AWG 600 volt teflon insulated silver plated high temperature (200 degrees C) wire from Powerwerx.com (AKA Bulkwire.com). This build needed 125 feet of it, just for the engine side of the harness. The body side (fuel pump, etc.) will use regular automotive wire.

Double relay power connector. The double relay has two connectors - an engine harness connector and body harness connector. Mark your relay where each connector plugs in. Don't swap them!

This is the beginning of the body harness (the part of the FI harness which stays in the car when the engine is removed). The connector for both harnesses use identical 9-pin housings (available from German Supply). When I got my FI setup from the '75 Bug doner vehicle, I couldn't get the body harness, as it's part of the vehicle rear body harness. So I have to build from scratch.

The battery connection and ignition switch connections have been added. Note the inclusion of fuse holders, one for each power source. These protect the FI controller and other expensive parts in case something goes wrong...

Original harness stripped of outer sheath. The original harness was laid on a length of butcher paper, and the locations of all of the connectors was marked, as well as where harness sections split from the main. The number of wires going to each connector was indicated. After that, the original outer plastic covering was removed.

Interestingly enough, once the nasty stiff outer plastic covering was removed, the inner wires weren't too bad at all. If it wasn't for the fact that this was originally a Bug harness and it had to be stretched a foot or so to fit a bus, it could have simply been re-sheathed with heat-shrink tubing and reliably used as is.

Connector drawing.
The pin orientation for each connector is sketched, and the number printed on each wire is shown. When all of the wires are labeled, they should be verified by testing with a continuity tester between similar numbers. You really don't want any wiring errors. Once you start replacing wires, the wire numbers printed on the original wires are lost, and you only have your sketch to go by.

The (most important) controller connector.

You can see how the sketch corresponds to the actual connector. You want no mistakes here!

Note: to disassemble connector:

What a good crimp should look like.
Your crimps must look like this: wire completely clamped, and wire insulation captured.

The finished harness.
Each wire was removed, one at a time, and a new identical wire was fabricated. Then the wire was passed through the appropriate sections of heat shrink tubing. As each section was completed, the tubing was shrunk in place with a heat gun. There are several places in the harness where wires are doubled back, so that they can continue down another harness leg. Be wire to fold the wire as needed so that the heat shrink tubing fits properly. A complete continuity check will be done on the new harness before installing on the engine, to make sure there are no errors.

Note the green heat shrink covering on the wire which goes to the points side of the coil. This wire is not run in the harness with the rest of the wires because the voltage waveform from the ignition coil is so nasty. Best to keep it isolated, to minimize capacitive coupling of ignition noise.

Parts list - Digikey

(part #, description)

Metal Fuel Hose Adapters

New problem. Unfortunately, installing this engine into the bus brought up some plumbing issues. Specifically, the hoses aren't all the same size. The FI hoses are 7mm onto 8mm hose barbs. The fuel tank has 5.5mm hose onto 6mm barbs. And just to be complete, the fuel return line to the tank is 1/4". Obviously, gonna need some adapters.

Originally, the install was done using the plastic ends cut from old fuel filters. Which worked. But, as I get older, I see the errors of my old ways. Plastic is not forever. And worse, some of the adapters were located above exhaust system parts.

So, it was decided to build some all-metal adapters. Two sizes were needed: a 3/16" to 5/16" (fuel tank to pump filter), and a 5/16" to 1/4" (pressure relief valve to tank return pipe). The easiest way to build these was to use brass tubing from the hobby store. These tubes are available in an assortment of diameters, and one tube will just snugly slide into the next larger size tube, where it can be soldered in place. So, the following tube diameters were procured:

Tube sizes

Cut Tube Sections To make the 3/16" to 5/16" adapter, the following lengths of tubing were cut, using a cutoff disc on a Dremmel tool:

Cut Tube Sections The 3/16" tube was sanded with 400 grit wet-or-dry paper. Plumbing solder flux (the gray stuff which has powdered solder mixed into it) was applied. The 7/32" tube section was slid onto it, flush to one end, and soldered using 60/40 electrical solder (it flows and wicks in better than plumbing solder). I used a 60 watt soldering iron, as it provides good temperature control.

After soldering, the assembly was cleaned with methyl alcohol (AKA shellac thinner), then sanded and fluxed. The next tube section was slid on and soldered.

This process is repeated until all of the tubes are soldered.

To finish the adapter, barbs are made from 22 AWG copper wire. Take a length of wire and stretch it slightly to make it straight. Tightly wrap a turn and a half around the tubing. Slide the wire off and cut it through the overlapped section with cutters. Trim and align the wire ends until it tightly fits around the tube end with no gap, then solder into place. After final soldering, clean the adapter with alcohol to remove all remaining traces of flux - you don't want to get any in your injectors!

The finished adapters are pretty much bullet-proof, as they have a full 1/2" of soldered tubing overlap. Shy of being subject to physical damage, these should never fail.

Schematic and source Code Listing For Injector Driver

Code listing:
          /* ---------------------------------------------------------
              Injector Tester

              If the button is pressed, the injector fires for a
              fixed time period. If the button is pressed while the
              the injector is firing, the injector immediately turns

              This code is implemented as state machines. One state
              machine de-bounces the button signal. The other state
              machine controls the injector timing.

              (c) 2016-2016 Telford Dorr
              All rights reserved.
             --------------------------------------------------------- */

          // Definitions
          #define ON HIGH
          #define OFF LOW
          #define PRESSED LOW
          #define NOT_PRESSED HIGH

          // Constants
          const int D11_INJECTOR_DRIVE = 11;
          const int D12_BUTTON = 12;
          const int D13_LED = 13;
          const unsigned long DELAY_VALUE = 30000;   // milliseconds
          const unsigned long MIN_BUTTON_PRESS_TIME = 100;   // milliseconds

          // Global vars
          unsigned long endTime;
          unsigned long buttonTime;
          int state = 0;
          int buttonState = 0;
          boolean buttonPress = false;

          void setup()
            // initialize pins as outputs.
            pinMode( D11_INJECTOR_DRIVE, OUTPUT );
            digitalWrite( D11_INJECTOR_DRIVE, OFF );
            // Note: separate pins used for injector and LED, as startup code
            // flashes LED.
            pinMode( D13_LED, OUTPUT );
            digitalWrite( D13_LED, OFF );

            // Initialize pin as an input, with pullup.
            pinMode( D12_BUTTON, INPUT_PULLUP );

          void loop()
             * Button debounce processor
             * This state maching insures that the button is continually pressed for
             * a minimum amount of time before passing its state to other processes.
             * Same for button release. This avoids false high-speed triggering.

            switch (buttonState)
              // Waiting for button press
              case 0:
                if (digitalRead( D12_BUTTON ) == PRESSED)
                  buttonTime = millis() + MIN_BUTTON_PRESS_TIME;
                  buttonState = 1;

              // Checking for minimum press time
              case 1:
                if (digitalRead( D12_BUTTON ) == NOT_PRESSED)
                  buttonState = 0;
                else if ((long)(millis() - buttonTime) >= 0)
                  buttonPress = true;
                  buttonState = 2;

              // Waiting for button release
              case 2:
                if (digitalRead( D12_BUTTON ) == NOT_PRESSED)
                  buttonTime = millis() + MIN_BUTTON_PRESS_TIME;
                  buttonState = 3;

              // Checking for minimum release time
              case 3:
                if (digitalRead( D12_BUTTON ) == PRESSED)
                  buttonState = 2;
                else if ((long)(millis() - buttonTime) >= 0)
                  buttonPress = false;
                  buttonState = 0;

             * Injector drive state machine
             * When a button press is detected, the injector is energized for a
             * specified time period. After that time, the injector is de-energized.
             * If another button press is detected while the injector is energized,
             * it is immediately de-energized.

            switch (state)
              // Idle: waiting for button push
              case 0:
                if (buttonPress == true)
                  endTime = millis() + DELAY_VALUE;
                  digitalWrite( D11_INJECTOR_DRIVE, ON );
                  digitalWrite( D13_LED, ON );
                  state = 1;

              // Button pushed. Waiting for button release
              case 1:
                if (buttonPress == false)
                  state = 2;
                else if ((long)(millis() - endTime) >= 0)
                  digitalWrite( D11_INJECTOR_DRIVE, OFF );
                  digitalWrite( D13_LED, OFF );
                  state = 3;

              // Waiting for either button push or timeout
              case 2:
                if (buttonPress == true
                    || (long)(millis() - endTime) >= 0)
                  digitalWrite( D11_INJECTOR_DRIVE, OFF );
                  digitalWrite( D13_LED, OFF );
                  state = 3;

              // Waiting for button release
              case 3:
                 if (buttonPress == false)
                   state = 0;

Useful Fuel Injection Reference Publications