Posted on

Engine Protections

A lot of OEM vehicle engine management systems lack proper forms of engine protection, with nothing more than a “low oil pressure” light. Usually in cases where the light comes on, it’s too late for the engine. While engine protection isn’t as exciting as big turbos and bulk power, it is a crucial part of the longevity of your engine. Whether you have a stock engine or a fully built performance motor replacing an engine uses time and money.

There are multiple types of engine protections which will be detailed below.


Knock sensors are crucial to ensuring an engine is running safely. Knock sensors are used to measure noise coming from the engine, and are used to detect detonation or “ping”. Detonation is when fuel is ignited by the combustion and heat from the cylinder rather than the spark event. This ignition is not only at the wrong time during the engine cycle, but it also has a less smooth explosion. As detonation can very rapidly cause damage to pistons, valves, cylinders, and heads it is important that it is kept under control.

Oil Pressure

Oil pressure based protection is one of the most common types of engine protection. A sensor is used to monitor oil pressure and the ECU monitors this pressure.

Low oil pressure can result in catastrophic engine failure through spun bearings, damaged camshafts and thrown rods. It can also cause damage to attached components like turbochargers. For this reason, shutting off an engine which has low oil pressure can save vital components.

When racing the risk of oil starvation is increased due to high sustained load while engaged in high g-force cornering, braking, and accelerating. This can cause oil to surge away from the pickup and starve the engine of oil.

As oil pressure changes with engine rpm and temperature, these factors are often added as tables which change the engine cut activation. The following shows an oil pressure limit table based on rpm and pressure. If the engine is over the set RPM and sees an oil pressure lower than the one in the corresponding cell the limit will kick in, either limiting the engine to a low RPM or shutting off the engine entirely depending on how the limit has been set up.

Engine Temperature

Engine temperature can be based off either coolant or oil temperature, and both are important to keep an eye on.

Oil temperature being too high will usually cause pressure problems before there are issues with the lubrication properties.

Coolant temperature is more commonly monitored, and is included in a basic form in most OEM cars. A high coolant temperature can cause blown head gaskets, warped and softened cylinder heads, and even seized pistons. Even at a lower level, a coolant temperature which is too high can lead to detonation.

For these reasons having engine temperature sensors which allow the ECU to limit RPM, or cut the engine if temperatures get too high can be the difference between an engine which will live to race another day, or an expensive lawn ornament.

Coolant Pressure

Coolant pressure is often related to coolant temperature, but it can also give an insight into other parts of the engine. . A coolant hose which has popped off will cause a drop in coolant system pressure, this can allow the driver to stop and fix the problem before the car overheats. Coolant pressure that is high can be a sign of high engine temperatures which make it more likely for a head gasket to blow due to warping of the mating surface. Irregular spikes in coolant pressures can also be a way to diagnose a blown head gasket as the escaping combustion gases raise the pressure in the coolant system. With the increasing prevalence of combined pressure and temperature sensors adding a coolant pressure sensor and corresponding cutoffs in the ECU is an easy way to monitor leaks within the coolant system.

Fuel Pressure

Fuel pressure is another important factor as a drop in fuel pressure will usually lead to less fuel entering the cylinder than expected. This will cause the engine to be lean, which can cause damage. At lower RPM an engine running lean can just result in stalling, and poor performance, but under higher loads it can lead to detonation which may cause engine damage. Running lean will also cause higher cylinder temperatures which can also contribute to engine damage.

Fuel pressure can drop due to a failed fuel pump, or fuel pressure regulator. If this happens while the engine is under hard acceleration it can cause catastrophic engine failure. Fuel pressure isn’t always monitored as the base pressure is often set with a gauge, but most fuel pressure regulators have a bung which can be used for a sensor which can then be wired into the ECU.


High Exhaust Gas Temperatures (EGT) can cause damage to engine components, turbochargers, and the engine itself. In a diesel engine high EGTs are generally caused by the engine running too rich and is burning too much fuel compared to the amount of air it is getting.

Generally an EGT safety limiter is in place for diesel engines. The location of the EGT sensor(s) is important in ensuring your limiter numbers are set correctly.

Injector Duty Cycle

Injector duty cycle follows the same logic as fuel pressure with the same problems and dangers. If the injector duty cycle is at 100% then the injectors are effectively wide open. If the injectors are at 100% flow, the maximum amount of fuel is flowing through the injectors, it is then possible for more fuel to be necessary for combustion, but not enough is able to be provided. This will lead to a lean condition, and may cause engine damage. As the injectors are directly driven by the ECU it is usually fairly simple to add a form of injector duty cycle based protection to your ECU.


Lambda (or AFR) protections also look at fueling, and can be another method to protect an engine from damage due to running lean, but Lambda protections can also be used to protect an engine from running too rich. As mentioned above, an engine which is running too rich can have EGTs which are too high. Using Lamdba based protections allows for a large scope of protection and can be used to prevent other issues. However, due to wideband sensors being positioned in the exhaust it is inherently a reactive system and while it will catch problems it may be too slow to effectively protect the engine from things like a sudden drop in fuel pressure. With that being said, as Lambda is generally monitored anyway it is not a particularly large extra step to set up when configuring your ECU.


While a properly tuned car is unlikely to overboost, especially to a level that causes engine or component damage, it is still possible for mechanical failures to occur. For example, a wastegate solenoid line can break, causing the turbo to continue building boost beyond where the wastegate should have opened. This can lead to increased cylinder pressures, causing bent rods, broken pistons, and lifted heads. For this reason a separate boost based engine limiter can be set up to limit the engine’s RPM if boost exceeds the set amount.


A general RPM limit is a great idea, as while an engine revving to the moon will sound incredible, it will likely only do that once before it starts to make some less incredible sounds. There is no hard and fast rule about what your RPM limit should be, but your tuner or engine builder should have a good idea of where to set the limit.

It is possible to have engine protection which is set up in an incorrect fashion. An ignition cut at high RPM can cause valve float due to high exhaust pressure from unburned fuel igniting in the exhaust manifold, on cars with shim-over-bucket style cam followers this can cause the shim to come out of its seat and cause engine damage. It is also important that the limits are set correctly. The location of a sensor can effect the figures which are read by the ECU. Or the numbers in the ECU might not be appropriate.

While not every aftermarket ECU will have the option to turn on all of these protections from a single tuning panel, many are able to be added through the use of User Defined tables. Engine protections also aren’t a magic bullet, and failures can still occur, but having as many safeties as feasibly possible will help ensure that smaller failures don’t turn into major ones. It is always important to talk to your wiring harness manufacturer, tuner, and engine builder about which forms of engine protection are best for you, and how best to implement them.

  • Product on sale
    CANbus IO Expander - Mini
    CANbus IO Expander – Mini
  • Syltech - Combined Pressure and Temp Sensor
    Syltech – Combined Pressure and Temp Sensor
  • Tesa Tape - 51036 - Wiring Harness Tape
    Tesa Tape – 51036 – Wiring Harness Tape
  • CAN Checked - MFD15 52mm CAN Gauge
    CAN Checked – MFD15 52mm CAN Gauge
  • Open Barrell Splice kit with crimping pliers
    Open Barrel Splice Kit – With Crimping Pliers
  • ECU Master EMU-BLACK
    ECU Master EMU-BLACK

Posted on

Understanding G-Codes and M-Codes in 3D Printing with Klipper Firmware

When venturing into the world of 3D printing, a fundamental aspect of controlling your printer is familiarity with G-codes and M-codes. G-codes (geometric codes) and M-codes (miscellaneous codes) are sets of instructions that command the movements, actions, and operations of your 3D printer. In the context of Klipper firmware, mastering these codes becomes particularly valuable for customizing and optimizing your printing experience.

The Power of G-Codes: Navigating the 3D Space

G-codes are the backbone of 3D printing, dictating how the printer’s motors should move to produce a desired object layer by layer. Whether it’s a rapid movement to a new position (G0), a controlled extrusion of filament (G1), or homing all axes (G28), G-codes are the language through which you communicate with your 3D printer. Understanding and utilizing G-codes allows you to control the printer’s movements with precision, enabling the creation of intricate and accurate prints.


G1 X10 Y20 Z30 F3000

In this example, the printer is instructed to move to the coordinates X=10, Y=20, Z=30 at a feed rate of 3000 mm/min.

Navigating System Operations with M-Codes

Complementing G-codes, M-codes handle miscellaneous functions such as temperature control, bed leveling, and emergency stops. These codes govern crucial aspects of the printing process, ensuring that the printer operates within specified temperature ranges, executes proper homing procedures, and handles emergencies responsibly.


M104 S200

This M-code sets the extruder temperature to 200 degrees Celsius, ensuring the filament is at the optimal temperature for extrusion.

Why Knowing G-Codes and M-Codes Matters

Understanding G-codes and M-codes empowers 3D printing enthusiasts to optimize their printing workflows. Knowing how to home the printer, control temperatures, and manage extrusion precisely allows for the fine-tuning of prints and troubleshooting of potential issues.

Moreover, delving into these codes opens up possibilities for customization. Whether you’re adjusting the speed of movements, implementing auto bed leveling (G29), or defining specific extrusion rates (G92), G-codes and M-codes provide the flexibility needed to tailor your 3D printing experience to your exact specifications.

As you navigate the world of 3D printing with Klipper firmware, this cheat sheet serves as a handy reference, condensing essential G-codes and M-codes into a single, accessible resource. Mastery of these codes transforms the seemingly complex task of 3D printing into a more manageable and customizable endeavor, allowing you to unleash the full potential of your 3D printer.

3D Printing G-Code Cheat Sheet

Here is a quick one pager we’ve prepared that we keep close to out 3D printing workstation, very helpful for when reading g-code for troubleshooting, or when you’re writing your own macros.

**Movement Commands**
G0 / G1 Rapid / Linear Move
Example: `G1 X10 Y20 Z30 F3000`
G28 Home all axes
Example: `G28`
G92 Set position
Example: `G92 E0` (reset extruder position to 0)
**Temperature Control**
M104 Set extruder temperature
Example: `M104 S200`
M140 Set bed temperature
Example: `M140 S60`
M109 Wait for extruder temperature
Example: `M109 S200`
M190 Wait for bed temperature
Example: `M190 S60`
**Extrusion Control**
M82 / M83 Set extruder to absolute (M82) or relative (M83) mode
Example: `M82`
G92 E Set extruder position (used with absolute mode)
Example: `G92 E10`
G1 E Extrude filament
Example: `G1 E10 F100`
**Positioning Modes**
G90 Set to absolute positioning mode
Example: `G90`
G91 Set to relative positioning mode
Example: `G91`
**Bed Leveling and Mesh**
G29 Auto bed leveling
Example: `G29`
G80 Cancel mesh bed leveling
Example: `G80`
**Fan Control**
M106 Turn on fan
Example: `M106 S255`
M107 Turn off fan
Example: `M107`
**System Commands**
M112 Emergency stop
Example: `M112`
M503 Print settings (configured in firmware)
Example: `M503`
M665 / M666 Delta parameters (if applicable)
Example: `M665 L200.000 R100.000 H400.000 B125.0 X0.000 Y0.000 Z0.000`
Posted on

Autosport and Deutsch Connector Heatshrink Boot Size Charts

Deutsch Autosport connectors are the standard for connectors in the autosport industry with the AS series connectors being used by race winning teams. In order to correctly boot these connectors, the proper boot must be used. Below is a chart of Autosport connectors and their corresponding boots, both straight and 90 degree.

Shell SizeStraight Boot90 Degree Boot
ASX (Size 02)203W301-25-G021037-4-G223W6011182-4-G
ASX (Size 03)204W221-25-G031037-4-G224W221-25-G031182-4-G
AS Mini202K121152-42-G222K1211152-4-G

Used commonly in the automotive aftermarket, the Deutsch DT series is a versatile connector. If the part number ends with E007 (DTM) or E008 (DT), then the connector has a bootable end for applications where wires need added protection.

Straight Boot90 Degree Boot
DTM PlugsDTM ReceptaclesHeat Shrink SIzeRaychemHellermanRaychemHellerman
Straight Boot90 Degree Boot
DT PlugsDT ReceptaclesHeat Shrink SizeRaychemHellermanRaychemHellerman
Posted on

How to Convert Sensor Calibration Tables

When adding sensors, or configuring an ECU you will often need to input calibration data so that the ECU knows which input values represent what data.

Often calibration tables will be available in ohms like this example from a Bosch Motorsport coolant temperature sensor

For some ECUs this is fine as you can select between units when inputting a calibration table

If this isn’t an option you can manually calculate the voltage using ohms law

V = IR

Unfortunately this takes a lot of time to do manually, and if using a pullup resistor adds more complexity.

Fortunately, with a little bit of spread-sheeting know-how you can create an automatic voltage calculator with the ability to change the sensor input voltage and pullup resistor value on the fly. The below link is to the PT Motorsport sensor calibration converter.

PT Motorsport Sensor Calibration Converter

We have included conversion tables for some common sensors, as well as the pull-up resistor values used by some common aftermarket ECUs.

If you need to convert your own sensor calibration you will need to first download the document so that you can edit it.

The main section of interest is the grey table. This has the sections for altering the pullup resistor and sensor supply voltage values as well as the sensor calibration data.

For the pullup resistor value you can either input the value you intend to use, or if you are using an ECUs internal pullup resistor you can input the value. The table includes some of the common ECU pullup resistor values. If you are unsure which pullup resistor to use, or want to know more about why we use them, read this article.

You can also enter the sensor supply voltage. In most automotive applications this will be 5V.

Finally, enter the sensor calibration data.

Using the example Bosch sensor above and using it with the internal pullup resistor in a Haltech ECU we can input the following data. Where there isn’t enough data to fully complete the table you can simply remove those rows.

As the data is entered the table will update, giving the correct output voltage values. Along with the table, a graph is also generated. This graph is useful to determine whether your pullup resistor is suitable for your application. For more information on why we use a pullup resistor, and how to choose the correct one for your application see our article.

With this data we can input the values into our ECU calibration table

This will look different across ECUs, the below is from the ECU Master EMU Black software, but using the same values (for this example that would mean wiring in a 1000ohm resistor rather than using the internal 2200ohm)

Posted on

What is a pullup resistor and which one do I need?

You may have seen references in articles to pullup resistors, or seen their use in wiring documentation. A pullup resistor diagram will generally look like this:

But what is a pullup resistor, and why do we even need one?

A pullup resistor is a regular resistor which we use to provide a known resistance. Why do we need a known resistance though?

The simple answer is that ECUs aren’t multimeters and generally can’t directly measure resistance. Instead using voltage inputs for receiving information. In a sensor with only two wires, there is no voltage being introduced and therefore no voltage for the ECU to measure. To provide a voltage we use a resistor from the ECUs 5V output to the signal wire of the sensor.

This gives the ECU a variable voltage output from our sensor. This also means that we need a pullup resistor for every input.

For ensure the correct variable voltage we need a resistor before and after the ECU sensor voltage input. Our pullup resistor is the resistor that’s before the input, and our sensor acts as the resistor after the input.

To show why a resistor is needed on each side, lets take a look at what our circuit looks like without each resistor.

Without the pullup resistor, the 5V output would travel directly to the ECU input, giving a signal of 5V all the time, regardless of what the sensor is doing.

Without the sensor the ECU would simply see 0V all the time.

What about pullup resistors for switches?

You may also see pullup resistors used in switch diagrams or referenced in ECU guides.

Why do we need a pullup resistor for a switch when it should just be on or off?

Once again, we will look at what happens without the resistor.

In this case when the switch is closed we end up with a short directly from the 5V output to ground.

With the resistor in place, the ECU will see 5V when the switch is open, and 0V (Ground) when the switch is closed.

How Do I know what resistance I need?

Generally for switched applications a 1kohm resistor is appropriate, but for sensor inputs it can be slightly more complicated.

If you use the PT Motorsport Sensor Calibration Converter (full instructions here) you will end up with a graph of the values across the voltage range. If you change the pullup resistor value you will notice that the scaling of the graph changes.

In this instance, as the resistance increases the resolution at various points changes. We want our most used ranges of data to be on the sloped part of the graph. As shown below, the different resistor values lead top different “ideal” ranges.

Depending on your application, you would select a resistor that gives good resolution in the area you expect to see.

For example, for a pre-turbo IAT sensor a 2200ohm resistor would be appropriate as a temperature range of -20 to 80 degrees is within our expected range.

For an oil temperature sensor, a 330ohm resistor would be appropriate as the higher resolutions are in the higher temperature range.

Where should I install my pullup resistor?

If your ECU doesn’t have an internal pullup resistor, or if it isn’t an appropriate resistance, where should you install your own pullup resistor?

Depending on the type of sensor and the available connectors you can either add your pullup resistor in-line in the harness or at the sensor connector. If you are running a 2 wire sensor having the pullup resistor near the ECU makes sense as you can add the resistor before you branch your wiring harness meaning that less wire needs to be run. That being said, a pullup resistor can be located anywhere practical using the method outlined below.

To wire a pullup resistor like this we use open barrel splices. Simply strip a short section of wire from your 5V signal wire and your sensor wire, and crimp the resistor across the wires. Our example is un-covered, but in your own harness this would then be covered by 4mm ATUM heat-shrink.

If you are running a Syltech Combined Pressure and Temperature sensor then you can use a bootable Deutsch connector to protect and hide the resistor at the sensor connector end of the loom. In this application having the pullup resistor at the sensor end works as the sensor needs to have a 5V power wire to drive the pressure sensor, so there are no additional wires run.

In this application, insert the wire into the Deutsch pin, then insert the resistor leg before performing your crimp.

Once crimped, insert the pins into the correct locations. The wires joined by the resistor will need to be inserted at the same time. The end of the bootable Deutsch connector can then be covered with heat-shrink or an appropriate boot.

Posted on

Time Attack Tas 2022 – Using Technology to get a new PB!

Time Attack Tas (TaT) is an event we very much look forward to every year, competing in every event since its inception.

This year was another great event organised by the Hobart Sporting Car Club at Baskerville. We’re very grateful for their continued dedication to the sport and this event.

Peter competed in his R33 Skyline GTST and took 2nd place in Club Class. Peter negotiated his usual struggle for traction and drove his way to a new PB of 59.1 seconds. 

Peter often drives with a heavy foot which is the cause of the majority of his traction issues. We were able to assist slightly in the part throttle area of driving by changing the mapping of the drive by wire throttle.

Another reason we love drive by wire.

You can see here in the NSP software, the vertical axis is the actual percentage of throttle opening vs the horizontal axis which is the accelerator pedal position. The dashed line represents a linear relationship, which is close to where we started, and the solid line is where we finished for the day, giving the driver much more part throttle “resolution”. This significantly improved part throttle drivability and made it easier to get out of corners cleanly, contributing to the new PB.

NSP makes this very easy to map with the spline handles you can use to drag the curve around. This feature isn’t unique to Haltech though, with most ECU manufactures offering this feature too.

Our beloved EVO piloting tuner, Ash, was also competing and was able to secure 3rd place with a 59.6 lap time, unfortunately unable to drive his vehicle home though, that story for another time…

  • 4 Port CAN Hub
    4 Port CAN Hub
  • Open Barrell Splice Kit
    Open Barrel Splice Kit – 100pcs
  • ECU Master EMU-BLACK
    ECU Master EMU-BLACK
  • Subaru GC8 APP Bracket
    Subaru GC8 APP Bracket

Posted on

Custom billet parts for “LEGIT” R34 Skyline

Dry Sump, Single Turbo, VR38 swapped R34 Skyline

We’ve been so fortunate to be invited into a rather special build and offer our part design, prototype and manufacturing services to aid in the completion of “LEGIT” R34 Skyline. 

VR38 Crank Angle Sensor Bracket, CNC Machined from 6061 Billet.

Above is the Crank angle sensor mount for the VR38VETT. As the engine has a dry sump fitted, the factory crank angle sensor mounting is removed and a new one must be fabricated. We took careful measurements of the bell housing area where the mount was to go, then modeled in Fusion 360 a part to suit, 3D Printed a prototype and test fitted. It wasn’t perfect the first time so we adjusted the model and prototyped 2 more parts before cutting it out of a 6061 Aluminum billet. 

The other part we were commissioned to make was the alternator bracket. Because of the exhaust system that accommodates the single turbo conversion, a new LS style alternator was to be fitted. Test fitting the alternator was painful as space was tight in the engine bay when the engine and exhaust manifolds were fitted. So with the engine out of the car, we first 3D scanned the engine bay, then we 3D scanned the engine with the turbo manifolds fitted. Then we took those 3D scans and opened them together in Fusion 360. We then downloaded the CAD asset for a LS alternator and offered it up to the engine while the engine was in the vehicle virtually. With the alternator in place in CAD, we could then design an alternator bracket to suit.

Imported scan data. Engine in Pink, Body in Green, Alternator in Grey and new Bracket in Blue.
Doesn’t look too pretty but that’s over 1gb of scan data!

We 3D printed the prototype bracket and it was a near perfect fit, just a millimeter here and there to adjust and it was ready to make out of aluminum.

The finished product! Fits like a glove.

The finished product looked great and will serve its purpose very well. We learned a lot about what our little mill is capable of and it’s only driven our desire to make more parts!

  • 4 Port CAN Hub
    4 Port CAN Hub
  • Subaru Idle Air Control Blank
    Subaru Idle Air Control – Blanking Plate
  • Deutsch 47 Pin Bulk Head Connector Kit
    Deutsch 47 Pin Bulk Head Connector Kit
  • Subaru GC8 APP Bracket
    Subaru GC8 APP Bracket