Two Stroke Jetting

Engine Condition

In order to get good jetting results, the engine must be in good working order. This includes:

  • good reeds,
  • clean air filter,
  • good packing in the silencer,
  • no expansion chamber leaks,
  • freely working power valve,
  • no leaking crank seals or other air leaks, and
  • good top end condition.

Rich and Lean

Rich and lean in the context of jetting refers to the fuel:air ratio. More fuel relative to the amount of air is richer. Less fuel relative to the amount of air is leaner.

Jetting rich and lean is not the same as fuel mix ratio (the ratio of fuel to oil) rich and lean. In fact, in the extreme, more oil actually means leaner jetting because there is less gas in the fuel mix. At typical fuel mix ratios (60:1 to 32:1), you can pretty much ignore fuel mix ratio variations in your jetting.

To be clear, this discussion is focused on jetting rich and lean.

Lean in a range makes the engine very peppy and fast revving under light/no load, but it lacks power.

Rich in a range makes the engine dull and slow to rev.

Rich on a low throttle circuit, then lean as the throttle opens farther, produces a strong power surge or hit.

More power is produced when you are slightly rich as opposed to slightly lean.

If you set your jetting for perfectly clean operation with absolutely no stuttering under very light load (such as very slowly rolling on the throttle on flat smooth conditions) you are probably giving up a bit of power or grunt, especially at the low end.

Carburetor Circuits

There are three main circuits in most carburetors.

  • Pilot Circuit
  • Midrange Circuit
  • Main Circuit
There is also the "choke" or "low speed enrichment" circuit. Once the bike is started and warm, you can pretty much ignore this circuit.

Refer to Figure 1. To see how specific circuits impact fuel:air ratio based on throttle opening.

Figure 1

jet chart

Pilot Cicuit

The pilot circuit is in play at low throttle openings, from closed to 1/4 throttle opening.

The main components of the pilot circuit are the pilot jet, the air screw, the jet needle starting diameter, and the slide cutaway. Good performance can usually be achieved by swapping the pilot jet size and turning the air screw setting.

Turning the air screw in (clockwise) reduces air and makes the pilot richer. Turning the air screw out (counterclockwise) increases air flow and makes the pilot circuit leaner.

A lean pilot circuit causes the engine to surge at low RPM’s, bog or cut-out when the throttle is opened quickly and rpm will hang and slowly settle down.

A rich pilot circuit causes hard starting, plug fouling at low RPM and sputtering as the throttle is cracked opened. It can cause randomly timed pipe bang when unburnt fuel burns in the expansion chamber.

If the engine surges when the throttle is closed, the low speed circuits are lean.

When you close the throttle and the engine hangs at a certain rpm, then finally drops to normal idle, the low speed circuits are lean.

When you close the throttle and the engine stalls or comes close, then returns to idle, the low speed circuits are rich.

If you can easily cold start with no choke, the pilot circuit is probably too rich.

Be aware that it is important to avoid very lean pilot circuit. Descents often involve a lot of closed throttle riding. If your pilot circuit is too lean, there is a possibility of seizing under prolonged periods of closed throttle descent.

Midrange Circuit (Jet Needle)

The midrange circuit is in play from 1/8 to 7/8 throttle openings.

The midrange circuit is the most important circuit to get good performance from your engine.

The main component of the midrange circuit is the jet needle. The midrange circuit is tuned by moving the clip position and swapping to needles with different taper and starting diameter.

Clip position 1, the highest position, is the leanest because the needle sits farther into the tube above the main jet. Clip position 5, the lowest position, is the richest because the needle is further out of the tube above the main jet.

Lean midrange causes a hesitation, then resuming when the throttle is rolled on. A lean midrange causes the engine to run hotter and may melt the piston if very lean.

Rich causes sputtering and a dull sound and slow acceleration. Rich will increase fuel consumption. Rich will tend to create a lot of spooge (sticky black oil running out of silencer).

It is usually not a good idea to try to jet away spooge if the engine runs well otherwise.

That annoying stutter at 1/4 throttle is often corrected with the needle taper and clip position. In extreme cases, a slide with a different cutaway can be used to tune the transition from the pilot circuit to the midrange circuit.

Be aware that if you change to a needle with a different starting diameter, you may have to adjust the air screw setting or even the pilot jet.

Also note that some jet needles are lean taper and some are rich taper. If you switch from a lean taper needle to a rich taper needle, or vise versa, you will have to change the main jet.


Main Circuit

The main circuit is in play from 3/4 to wide open throttle.

The main circuit is adjusted by changing the the main jet.

Although it is called the "main" circuit and "main" jet, it only has a significant impact from 7/8 to full throttle. Most riders, other than perhaps MX, should be most concerned about getting the midrange and pilot circuits optimized and the main jet in the ballpark.

To prove to yourself where the main jet is effective, you can temporarily remove it and note that the bike starts and runs just fine, until near full throttle.

A lean main circuit can cause detonation or pinging at full throttle. A severe lean condition will burn a hole through the piston.

A rich main circuit will lead to slow acceleration at full throttle.

If the bike speeds up when backing off from full to 7/8 throttle, the main jet is probably too rich.

Tuning (Re-Jetting)

Re-jetting is the process of adjusting the circuits in the carburetor to optimize performance. It can involve swapping jets, swapping jet needles, adjusting needle clip position, or changing throttle slides. It will involve setting the idle speed and air screw.

As noted at the beginning, the bike has to be in good working order to get it jetted properly. The most import thing is to avoid very lean conditions as this could cause damage. There are many ways to go about jetting. A methodic approach, such as listed below, is best.

Prerequisites:

  • Make sure the engine is in good working order.
  • Set the float level.
  • Fully warm up the engine.
Tuning:

  1. Adjust the air screw and pilot jet.
  2. Adjust the jet needle.
  3. Adjust the main jet.

Once your bike is in good working order, start by setting the float level. On most carbs, the fuel flow should stop when the floats are parallel to the float bowl seam.

Warm up the bike by riding for at least 15 minutes. Don't warm it by idling in place.

Begin with the pilot circuit.

Carefully turn the air screw in, counting the number of turns to lightly seat it. Then back out 2 turns. Start the engine and adjust the idle speed for a slightly fast idle. Turn the air screw in or out 1/8 turn at a time and wait for the engine to settle. Find the spot where the idle speed is highest. Turn off the engine and count the number of turns to seat the air screw. If less than 1 turn, go up one size on the pilot jet. If more than 2.5 turns, go down one size on the pilot. Repeat this process until you find a pilot jet that idles fastest with the air screw from 1 to 2.5 turns out.

Now, reset the idle speed to a normal idle. You may want to fine tune the air screw for the conditions of the day. Put the warm bike in neutral and wack the throttle open quickly. If it is slow to respond, close the air screw 1/16 turn. You want to end up just a little bit richer than the highest idle speed. Once it responds well, you're good on the pilot circuit.

'Comments datafile not found!
CommentsStack stores comments and ratings within a flat-file plain text file, which acts as your database. A new comments datafile has been generated for you. Please reload this webpage to complete the setup. You may need to reload the page twice.', 'name_missing' => 'Please provide your name.', 'rating_missing' => 'Please provide a rating.', 'reviewtitle_missing' => 'Please provide a title.', //'url_invalid' => 'Invalid URL.', 'message_missing' => 'Please enter your message.', 'math_invalid' => 'Wrong math answer.', 'max_length_name' => 'The name supplied is too long. Please shorten it.', //'max_length_url' => 'Maximum character length for guest URL is ' . $max_length_url, '$max_length_reviewtitle' => 'The title is too long. Please shorten it.', 'max_length_message' => 'Maximum character length for guest message is ' . $max_length_message, 'no_content' => 'Be the first to comment!' ); $cookie_name = "commentstack-001"; $cookie_value = "submitted"; $to = '150xcw@settlage.com'; $subject = 'New comment'; $message = 'A new comment has been posted to Jetting https://150xcw.com/index.html'; // END CONFIGURATION // Set default timezone to adjust the timestamp. // => http://www.php.net/manual/en/function.date-default-timezone-set.php date_default_timezone_set($time_zone); // Functions to create and/or update the content of the TXT file (our database) function create_or_update_file($file_path, $data) { $handle = fopen($file_path, 'w') or die('Cannot open file: ' . $file_path); fwrite($handle, $data); } // Filter HTML outputs. // The rest will appear as plain HTML entities to prevent XSS. // => http://en.wikipedia.org/wiki/Cross-site_scripting function filter_html($data) { return preg_replace( array( '/<(\/?)(b|blockquote|br|em|i|ins|mark|q|strong|u)>/i', // Allowed HTML tags '/<center>/', // Deprecated
tag '/<\/center>/', // Deprecated
tag '/&([a-zA-Z]+|\#[0-9]+);/' // Symbols ), array( '<$1$2>', '
', '
', '&$1;' ), $data); } // Redefine database name via URL to load // Load database-002.txt => http://localhost/guestbook/index.php&data=database-002 if(isset($_GET['data'])) { $database = $_GET['data']; } // Redefine database ratings via URL to load // Load database-002.txt => http://localhost/guestbook/index.php&data=database-002 if(isset($_GET['data'])) { $database_ratings = $_GET['data']; } // Check whether the "database" is not available. If not, create one! if( ! file_exists($database . '.txt')) { // Prevent guest to create new database via `data=database-XXX` in URL // Only administrator can do this by editing the `$database` value if( ! isset($_GET['data'])) { create_or_update_file($database . '.txt', ""); echo "

" . $messages['database_missing'] . "

"; } return false; } else { $old_data = file_get_contents($database . '.txt'); } // Check whether the "database-ratings" is not available. If not, create one! if( ! file_exists($database_ratings . '.txt')) { if( ! isset($_GET['data'])) { create_or_update_file($database_ratings . '.txt', ""); echo "

" . $messages['database_missing'] . "

"; } return false; } else { $old_ratings_data = file_get_contents($database_ratings . '.txt'); } /** * Post a message */ $error = ""; // error messages if($_SERVER['REQUEST_METHOD'] == 'POST') { // Make sure the honeypot is empty. if(isset($_POST['specialtitle']) && empty($_POST['specialtitle'])) { $name = ""; $rating = ""; //$url = ""; $reviewtitle = ""; $message = ""; $timestamp = date('U'); // Make sure the guest name is not empty. if(isset($_POST['name']) && ! empty($_POST['name'])) { $name = strip_tags($_POST['name']); } else { $error .= "

" . $messages['name_missing'] . "

"; } // Make sure the rating is not empty. if(isset($_POST['rating']) && ! empty($_POST['rating'])) { $rating = strip_tags($_POST['rating']); } else { $error .= "

" . $messages['rating_missing'] . "

"; } // Make sure the review title is not empty. if(isset($_POST['reviewtitle']) && ! empty($_POST['reviewtitle'])) { $reviewtitle = strip_tags($_POST['reviewtitle']); } else { $error .= "

" . $messages['reviewtitle_missing'] . "

"; } // Make sure the URL format is valid. Set its value as `-` if empty. /* if(isset($_POST['url']) && ! empty($_POST['url'])) { if(filter_var($_POST['url'], FILTER_VALIDATE_URL)) { $url = strip_tags($_POST['url']); } else { $error .= "

" . $messages['url_invalid'] . "

"; } } else { $url = "-"; } */ // Make sure the guest message is not empty. if(isset($_POST['message']) && ! empty($_POST['message'])) { $message = preg_replace( array( '/[\n\r]{4,}/', // [1] '/\n/', '/[\r\t]/', '/ {2}/', // Multiple space characters '/  |  /', '/(.*?)<\/a>/i' // Match links ), array( '

', '
', '', '  ', '  ', '$6' // Unlink all links in message content! ), $_POST['message']); $message = htmlentities($message, ENT_QUOTES, 'UTF-8'); // [2] } else { $error .= "

" . $messages['message_missing'] . "

"; } // Check the math challenge answer to prevent spam robot. if( ! isset($_POST['math']) || empty($_POST['math']) || $_POST['math'] != $_SESSION['math']) { $error .= "

" . $messages['math_invalid'] . "

"; } // Check for character length limit if(strlen($name) > $max_length_name) $error .= "

" . $messages['max_length_name'] . "

"; //if(strlen($url) > $max_length_url) $error .= "

" . $messages['max_length_url'] . "

"; if(strlen($reviewtitle) > $max_length_reviewtitle) $error .= "

" . $messages['$max_length_reviewtitle'] . "

"; if(strlen($message) > $max_length_message) $error .= "

" . $messages['max_length_message'] . "

"; // If all data entered by guest is valid, insert new data! if($error === "") { // Main database $new_data = $name . "\n" . $rating . "\n" . $reviewtitle . "\n" . $message . "\n" . $timestamp; if( ! empty($old_data)) { create_or_update_file($database . '.txt', $new_data . "\n\n==\n" . $old_data); // Prepend data } else { create_or_update_file($database . '.txt', $new_data); // Insert data } // Ratings database $new_ratings_data = $rating . "\n"; if( ! empty($old_ratings_data)) { create_or_update_file($database_ratings . '.txt', $new_ratings_data . "\n" . $old_ratings_data); // Prepend data } else { create_or_update_file($database_ratings . '.txt', $new_ratings_data); // Insert data } // Set the tracking cookie, if enabled setcookie($cookie_name, $cookie_value, time() + (31557600 * 30), "/"); // 86400 = 1 day // Send email notification, if enabled if(mail($to, $subject, $message)){ // Email sent } else{ // Problem with email sending } } else { // else, print the error messages. echo $error; } } } // [3] $_SESSION['guest_name'] = isset($_POST['name']) ? $_POST['name'] : ""; $_SESSION['guest_rating'] = isset($_POST['rating']) ? $_POST['rating'] : ""; //$_SESSION['guest_url'] = isset($_POST['url']) ? $_POST['url'] : "http://"; $_SESSION['guest_reviewtitle'] = isset($_POST['reviewtitle']) ? $_POST['reviewtitle'] : ""; $_SESSION['guest_message'] = isset($_POST['message']) && $error != "" ? htmlentities($_POST['message'], ENT_QUOTES, 'UTF-8') : ""; // ---------------------------------------------------------------------------------------- // [1]. Prevent guest to type too many line break symbols. // People usually do these thing to make their SPAM messages looks striking. // [2]. Convert all HTML tags into HTML entities. This is done thoroughly for safety. // We can revert back the escaped HTML into normal HTML tags later via `filter_html()` // [3]. Save the form data into session. So if something goes wrong, the data entered // by guest will still be stored in the form after submitting. // ---------------------------------------------------------------------------------------- // Math challenge to prevent spam robot. // Current answer will be stored in `$_SESSION['math']` $x = mt_rand(1, 25); $y = mt_rand(1, 25); if($x - $y > 0) { $math = $x . ' - ' . $y; $_SESSION['math'] = $x - $y; } else { $math = $x . ' + ' . $y; $_SESSION['math'] = $x + $y; } // Testing... // echo $math . ' = ' . $_SESSION['math']; /** * Show the existing data. */ $data = file_get_contents($database . '.txt'); $current_page = isset($_GET['page']) ? $_GET['page'] : 1; $nav = ""; if( ! empty($data)) { $data = explode("\n\n==\n", $data); $total_pages = ceil(count($data) / $per_page); // Create navigation if the number of pages is more than 1. if($total_pages > 1) { for($i = 0; $i < $total_pages; $i++) { if($current_page == ($i + 1)) { $nav .= "
  • " . ($i + 1) . "
  • "; // Disabled navigation } else { $nav .= "
  • " . ($i + 1) . "
  • "; } } } for($i = 0; $i < count($data); $i++) { $item = explode("\n", $data[$i]); // Permalink (single item) // http://localhost/guestbook/index.php&data=database-001&guest=0123456789 if(isset($_GET['guest']) && preg_match('/[0-9]+/', $_GET['guest'])) { if($item[4] == $_GET['guest']) { echo " \n"; echo "
    \n"; echo "
    \n"; echo "
    \n"; echo $item[0]; echo " \n
    \n"; echo " "; echo " "; echo " "; echo " \n
    \n"; echo "
    " . $item[2] . "
    \n"; echo " " . filter_html($item[3]) . "\n"; echo "
    \n"; echo " \n"; } // Normal list } else { if($i <= ($per_page * $current_page) - 1 && $i > ($per_page * ($current_page - 1)) - 1) { echo "
    \n"; echo "
    \n"; echo "
    \n"; echo $item[0]; echo " \n
    \n"; echo " "; echo " "; echo " "; echo " \n
    \n"; echo "
    " . $item[2] . "
    \n"; echo " " . filter_html($item[3]) . "\n"; echo "
    \n"; } } } } else { echo "
    \n
    \n"; echo " \n"; echo " " . $messages['no_content'] . "\n"; echo "
    \n
    \n"; } // Hide form if user has already submitted it and there is a tracking cookie if(!isset($_COOKIE[$cookie_name])) { // No cookie, so do nothing } else { echo ""; } ?>
    0 / 1000
    = ?