Silicon ChipProgrammable Ignition System For Cars; Pt.1 - March 2007 SILICON CHIP
  1. Outer Front Cover
  2. Contents
  3. Publisher's Letter: Earth Hour - a flawed concept / Longwall mining: an environmental disaster
  4. Feature: Taking Glass Beyond The Window Pane by Kevin Poulter
  5. Project: Programmable Ignition System For Cars; Pt.1 by John Clarke
  6. Project: Remote Volume Control & Preamplifier Module; Pt.2 by Peter Smith
  7. Feature: The Spark That Changed The World by Kevin Poulter
  8. Project: GPS-Based Frequency Reference; Pt.1 by Jim Rowe
  9. Project: Simple Ammeter & Voltmeter by Ross Tester
  10. Vintage Radio: The EILCO 6104 lunch-box RFDS radio by Rodney Champness
  11. Book Store
  12. Advertising Index
  13. Outer Back Cover

This is only a preview of the March 2007 issue of Silicon Chip.

You can view 32 of the 104 pages in the full issue, including the advertisments.

For full access, purchase the issue for $10.00 or subscribe for access to the latest issues.

Items relevant to "Programmable Ignition System For Cars; Pt.1":
  • Programmable Ignition System main PCB [05104071] (AUD $10.00)
  • Programmable Ignition System Trigger Module PCB [05104072] (AUD $5.00)
  • Programmable Ignition System Hand Controller PCB [05104073] (AUD $10.00)
  • PIC16F88-E/P programmed for the Programmable Ignition System [ignprgm.hex] (Programmed Microcontroller, AUD $15.00)
  • PIC16F88 firmware and source code for the Programmable Ignition System (Software, Free)
  • Sample timing maps for the Programmable Ignition System (Software, Free)
  • Programmable Ignition System PCB patterns (PDF download) [05104071/2/3] (Free)
  • Programmable Ignition System front panel artwork (PDF download) (Free)
Articles in this series:
  • Programmable Ignition System For Cars; Pt.1 (March 2007)
  • Programmable Ignition System For Cars; Pt.1 (March 2007)
  • Programmable Ignition System For Cars; Pt.2 (April 2007)
  • Programmable Ignition System For Cars; Pt.2 (April 2007)
  • Programmable Ignition System For Cars; Pt.3 (May 2007)
  • Programmable Ignition System For Cars; Pt.3 (May 2007)
  • A Knock Detector For The Programmable Ignition (June 2007)
  • A Knock Detector For The Programmable Ignition (June 2007)
Items relevant to "Remote Volume Control & Preamplifier Module; Pt.2":
  • ATmega8515 programmed for the Remote Volume Control & Preamplifier Module [DAVOL.HEX] (Programmed Microcontroller, AUD $15.00)
  • ATmega8515 firmware and source code for the Remote Volume Control and Preamplifier (Software, Free)
  • Main PCB pattern for the Remote Volume Control and Preamp (PDF download) [01102071] (Free)
  • Display PCB pattern for the Remote Volume Control and Preamp (PDF download) [01102072] (Free)
  • Power supply PCB patterns for the Remote Volume Control and Preamp (PDF download) [01102073/4] (Free)
Articles in this series:
  • Remote Volume Control & Preamplifier Module; Pt.1 (February 2007)
  • Remote Volume Control & Preamplifier Module; Pt.1 (February 2007)
  • Remote Volume Control & Preamplifier Module; Pt.2 (March 2007)
  • Remote Volume Control & Preamplifier Module; Pt.2 (March 2007)
Items relevant to "GPS-Based Frequency Reference; Pt.1":
  • PIC16F628A-I/P programmed for the GPS Frequency Reference [GPSFrqRfv3.HEX or GPSFrqRfv4.HEX] (Programmed Microcontroller, AUD $10.00)
  • PIC16F628A firmware for the GPS-Based Frequency Reference (v3 & v4) (Software, Free)
  • Updated PCB pattern for the GPS-Based Frequency Reference (PDF download) [04103073] (Free)
  • Display PCB pattern for the GPS-Based Frequency Reference (PDF download) [04103072] (Free)
  • GPS-based Frequency Reference front and rear panel artwork (PDF download) (Free)
Articles in this series:
  • GPS-Based Frequency Reference; Pt.1 (March 2007)
  • GPS-Based Frequency Reference; Pt.1 (March 2007)
  • GPS-Based Frequency Reference; Pt.2 (April 2007)
  • GPS-Based Frequency Reference; Pt.2 (April 2007)
  • GPS-Based Frequency Reference: Circuit Modifications (May 2007)
  • GPS-Based Frequency Reference: Circuit Modifications (May 2007)
  • Improving The GPS-Based Frequency Reference (September 2011)
  • Improving The GPS-Based Frequency Reference (September 2011)

Purchase a printed copy of this issue for $10.00.

By JOHN CLARKE Programmable Ig System For Cars; Want to program the ignition timing on your car? Now you can, with this completely new design. It can be used in older cars which presently do not have electronic ignition or used as an “interceptor” for cars with engine management systems. O UR PREVIOUS Programmable Ignition was originally published in March 1996 and proved to be a very popular project with readers. This was subsequently updated as the Programmable Ignition Timing (PIT) Module in the June and July 1999 issues of SILICON CHIP. The updated PIT module included 16  Silicon Chip a basic 2-step advance curve and a 1-step vacuum advance that changed the timing according to engine load. In operation, it was used to control the High Energy Ignition design from the June 1998 issue. This latest Programmable Ignition from SILICON CHIP is far more advanced in features and its ability to produce an accurate advance curve. It is also a complete stand-alone ignition system that is triggered by an engine position sensor and then drives the ignition coil. It can be triggered from one of many sensors in a distributor, including points, reluctor, Hall effect, optical trigger and the 5V signal from the car’s Engine Control Unit (ECU). In order to measure engine load, the Programmable Ignition can use a Sensym absolute pressure sensor. In fact, provision has been made to mount this sensor directly on the PC board, the sensor then being connected to the engine manifold via plastic tubing. Alternatively, you can connect the ignition circuit to an existing manifold pressure sensor if present. This is commonly called a Manifold Absolute siliconchip.com.au Fig.1: this diagram shows the four main modules used in the Programmable Ignition System. The LCD Hand Controller is used only during the initial set-up. nition Pt.1 Pressure (or MAP) sensor and is found on many cars these days. You could also use a secondhand MAP sensor from an auto wrecker. Changing the timing A fully effective ignition system needs to increase the timing advance with increasing RPM and to alter the timing according to engine load – all with a fair degree of precision. Additionally, some means to detect detonation (knock) and retard the timing would be an advantage. In this way, the ignition can be advanced further than would otherwise be possible without knock sensing. This latest SILICON CHIP Programmable Ignition incorporates all these features. What’s more, there is an opsiliconchip.com.au tion to select between two separate ignition-timing curves using a switch. This option is ideal if you are running both petrol and gas, where a different timing curve is required for each type of fuel. Fig.1 shows the complete system. It comes in four modules: an LCD Hand Controller, a Programmable Ignition Timing (PIT) module, an Ignition Coil Driver module and a Knock Sensor module. The first three modules are mandatory, while the fourth, the Knock Sensor module, is optional. The heart of the system is the Programmable Ignition Timing module, based on a PIC16F88-E/P micro. It is programmed by the LCD Hand Controller and it delivers a signal to the Ignition Coil Driver. The latter, as its name suggests, then drives the ignition coil. LCD Hand Controller The LCD Hand Controller is similar to the one featured in our book “Performance Electronics for Cars”. It was originally designed for setting up the Digital Pulse Adjuster, Digital Fuel Adjuster and Independent Boost Controller projects featured in that book. The Hand Controller is used during the initial setting-up procedure. It plugs into the main unit and can be used while the engine is either running or stopped. It is then normally disconnected from the main unit after all adjustments have been made. Using the Hand Controller, you can set all the initial parameters and also program the ignition advance/retard curve. Several pushbutton switches on the Hand Controller enable these changes to be made. Knock sensor The optional Knock Sensor module enables “pinging” to be sensed and the ignition timing retarded for a brief period. In brief, engine pinging is monitored by the Knock Sensor and the Programmable Ignition Timing (PIT) module for the first 6ms after each spark. However, at high RPM, there is less than 6ms between each firing and so knock signal monitoring is done between each spark and the start of the next coil dwell period. When engine knock is detected, the timing is retarded for the next 10 sparks. The amount of retardation varies according to the severity of the knock signal. More details on this are given in the specifications. Different uses The Programmable Ignition can be used either as an interceptor or for fully mapped ignition timing. In the interceptor role, it can vary the existing ignition timing by advancing or retarding it from its current value – ie, it can be used to alter the timing signals from the car’s ECU. Alternatively, when used to completely replace the existing ignition timing, you will need to obtain the advance/retard curve for your vehicle so that the entire timing curve can be produced by the Programmable Ignition. For some vehicles, you may March 2007  17 Main Features • • • • • • • • • • • • • • • • • • • • • • • Advance and retard adjustment over a wide range Plug-in LCD Hand Controller for adjustments Hand Controller LCD shows values and settings for adjustment Suitable for single-coil ignition systems with a distributor Can be used as a timing interceptor or as a replacement ignition Ignition timing mapped against RPM and engine load Interpolated values used for RPM and load values between sites Optional single map or dual timing maps Single map has 15 RPM sites x 15 engine load sites Dual maps each have 11 RPM sites x 11 engine load sites 1° or 0.5° adjustments Dwell adjustment Knock sensing indication with optional ignition retard Suits 1 to 12-cylinder engines (4-stroke) and 1 to 6-cylinder 2-stroke engines Two debounce settings High-level or low-level triggering Points, reluctor, Hall effect, digital signal or optical triggering Works with many pressure sensors (MAP sensors) Minimum and maximum RPM adjustments Minimum and maximum engine load adjustments Diagnostic RPM and load readings Add-on knock sensing unit (optional) Requires evenly spaced firing between cylinders. For V-twins, you will need two ignition systems and a separate trigger for each cylinder. be able to obtain the curves from the manufacturer. For other cars, you will need to plot out the existing curve and transfer the resulting timing map to the Programmable Ignition. Plotting out this timing curve is not hard to do and can, in fact, be done using the Programmable Ignition system itself and a timing light. In practice, the ignition timing is mapped out in an array of either two RPM Site Load Site Min load LOAD1 LOAD2 LOAD3 LOAD4 LOAD5 LOAD6 LOAD7 LOAD8 LOAD9 LOAD10 Max load LOAD11 RPM0 Min RPM RPM1 0 16 15 14 13 12 11 10 9 8 7 6 1000 16 15 14 13 12 11 10 9 8 7 6 RPM2 1400 18.5 17.5 16.5 15.5 14.5 13.5 12.5 11.5 10.5 9.5 8.5 RPM3 1800 21.5 20.5 19.5 18.5 17.5 16.5 15.5 14.5 13.5 12.5 11.5 RPM4 2200 23 22 21 20 19 18 17 16 15 14 13 11-RPM by 11-engine load site maps or as a single 15-RPM by 15-engine load site map. Timing arrays (or ignition maps) are the most common method that car manufacturers use to set the ignition advance curve for both RPM and engine load. Mapping is a way of plotting the advance curve as a series of steps rather than setting an ignition advance or retard value at every possible engine RPM5 2600 25.5 24.5 23.5 22.5 21.5 20.5 19.5 18.5 17.5 16.5 15.5 RPM6 3000 29 28 27 26 25 24 23 22 21 20 19 RPM7 3400 32 31 30 29 28 27 26 25 24 23 22 RPM8 3800 36 35 34 33 32 31 30 29 28 27 26 RPM9 4200 38 37 36 35 34 33 32 31 30 29 28 RPM10 4600 42.5 41.5 40.5 39.5 38.5 37.5 36.5 35.5 34.5 33.5 32.5 Max RPM RPM11 5000 44 43 42 41 40 39 38 37 36 35 34 Table 1: these ignition advance values were measured for a 1988 2-litre Ford Telstar using a timing light and the 11 Programmable Ignition itself. x 11 18  Silicon Chip Ignition Timing Map RPM and load value. Thus mapping sets the ignition advance or retard values at specified preset points for both RPM and engine load. For example, we can specify the timing advance to be 25° at 3000 RPM and 28° at 3400 RPM. However, we do not specify individual values at 3100, 3200 or 3300 RPM. Instead, the advance values at these RPMs are interpolated (ie, calculated), based on the values set for 3000 and 3400 RPM. At 3200 RPM, the amount of advance is easily calculated because it is exactly in the middle between the 3000 RPM and 3400 RPM sites. The advance change between 3000 RPM and 3400 RPM is 3° (ie, from 25° to 28°) and half of this is 1.5°. So the advance required at 3200 RPM is simply 25° + 1.5° = 26.5°. Another calculation is required for engine load values that are in-between the specified load sites. For our Programmable Ignition, if you require two separate engine advance curves then you need to select the 11x11 arrays. If only one advance curve is required, you then have the option of using a 15x15 array for greater accuracy. By the way, don’t confuse the ignition timing map with the MAP (manifold air pressure) sensor. They are two completely different things. Plotting the timing values We used the Programmable Ignition, the LCD Hand Controller and a timing light to plot out the ignition timing values for a 1988 2-litre Ford Telstar. We’ll describe exactly how this is done in some detail in a later article. The resulting timing vs RPM values were tabled (Table 1) and then plotted using Microsoft Excel. These files will be available on our website so that you can use the tables and edit the values (just by wiping over the values and rewriting them) to suit your car’s engine. It is not really necessary to use Excel though and you can just as easily use a pencil and piece of paper to draw out the map instead. Fig.2 shows the ignition timing versus RPM and engine load from 1000-5000 RPM. Since we have 11 RPM sites, each RPM site covers a span of 400 RPM. RPM0 is an extra site and is shown covering the range from 0-1000 RPM. The RPM0 wording is shown on a different line because it is not an actual siliconchip.com.au 45 40 Advance (Degrees) siliconchip.com.au 15.5 19 22 26 28 32.5 34 Advance (Degrees) 35 40-45 30 35-40 30-35 25 25-30 20-25 20 15-20 15 RPM2 RPM3 RPM4 RPM5 RPM6 RPM7 RPM8 RPM9 RPM10 10 10-15 5-10 RPM12 RPM11 RPM11 RPM9 RPM10 RPM8 RPM7 RPM6 RPM5 RPM4 RPM3 RPM2 RPM1 1300 1600 1900 2200 2500 2800 3100 3400 3700 40000-5 4300 18 20 22 23 25 27 29.5 32 35 5 37 39 17 19 21 22 24 26 28.5 31 34 36 38 16 18 20 21 23 25 27.5 30 33 0 35 37 15.5 17.5 19.5 20.5 22.5 24.5 27 29.5 32.5 34.5 36.5 15 17 19 20 22 24 26.5 29 32 34 36 14 16 18 19 21 23 25.5 28 31 33 35 13 15 17 18 20 22 24.5 27 30 32 34 12.5 14.5 16.5 17.5 19.5 21.5 24 26.5 29.5 31.5 33.5 12 Engine 14 Load 16 17 19 21RPM23.5 26 29 31 33 11 13 15 16 18 20 22.5 25 28 30 32 31.5 10.5 12.5 14.5 15.5 17.5 19.5 22 24.5 27.5 29.5 Fig.2: this 3-dimensional graph plots ignition advance against engine 10 12 14 15 17 19 21.5 24 27 29 31 RPM as an 16 11x1118 array20.5 – ie, 11 sites and 9 and11engine 13 load14 23Load26 28 11 30 RPM how13.5 the ignition advance with 8.5 sites. 10.5Note 12.5 15.5 17.5 20 increases 22.5 25.5 RPM 27.5and 29.5 decreases higher13engine graph here was for29a 8 10with 12 15 load. 17The 19.5 22 25 produced 27 1988 2-litre Ford Telstar. RPM13 4600 42.5 41.5 40.5 40 39.5 38.5 37.5 37 36.5 35.5 35 34.5 33.5 33 32.5 15 x 15 15 xIgnition 15 Ignition Timing Map Timing Map 45 40 35 30 25 20 15 10 Advance (Degrees) 40-45 35-40 30-35 25-30 20-25 15-20 10-15 5-10 0-5 5 RPM14 RPM12 RPM10 RPM8 RPM6 RPM4 RPM2 LOAD13 Engine Load LOAD15 LOAD9 LOAD5 0 LOAD11 The Timing mode has four possible display modes, selected by pressing the Run/View pushbutton. It selects one of four modes – called SITE, FULL, DIAG and VIEW – in cyclic fashion. Each display mode shows a slightly different aspect of the mapping sites. One feature in common is that they all display the MAP and the current advance or retard value on the top line, although there is a difference in the displayed value as we shall see. When the 11x11 maps are selected 13 40 LOAD7 RUN modes 11.5 45 LOAD1 As mentioned above, the Hand Controller is used to enter the settings and to enter the ignition map. The values are displayed on the 2-line 16-character LCD screen. There are eight direction pushbuttons, a Run/ View pushbutton and a Reset. The Reset switch is recessed to prevent accidental activation. It is used to return all mapped advance or retard values to 0°. The eight direction pushbuttons alter the values and can configure the display to show the different settings or a different load site. Finally, the Run/View pushbutton only works in the Timing mode. This mode is selected using a jumper link on the Programmable Ignition Timing Module. 8.5 11 x 11 11 Ignition x 11 Ignition Timing Map Timing Map LOAD3 Using the Hand Controller 6 LOAD11 RPM site and cannot be adjusted. It has the same values as RPM1. RPM0 is shown because it explains what the advance curve is below the minimum RPM1 site while the engine is being started. The same thing happens for RPM above RPM11. In this case, the advance remains at the RPM11 values. Engine load is shown with LOAD1 as the minimum engine load while LOAD11 is the maximum engine load. RPM0 LOAD1 is usually accessed when the Min RPM RPM SiteLOAD11 RPM1 engine is on overrun while 0 1000 Load Site is usually accessed under acceleration Min load LOAD1 16 16 or when the car is climbing The 15 LOAD2a hill. 15 load values were measured LOAD3 using 14 a 14 LOAD4 13.5 13.5 second hand pressure sensor from LOAD5 13 13 an automotive wrecker. These were 12 12 then converted to loadLOAD6 values ranging LOAD7 11 11 from 1-11. LOAD8 10.5 10.5 The curve can be plotted LOAD9 in three 10 10 LOAD10load and 9 9 dimensions showing RPM, LOAD11 8.5 8.5 ignition advance. If you use our Excel LOAD12 8 8 file, then the curve will be automatiLOAD13 7 7 cally replotted when LOAD14 ever a value 6.5 is 6.5 Max load LOAD15 altered. 6 6 6 LOAD1 LOAD2 LOAD3 LOAD4 LOAD5 LOAD6 LOAD7 LOAD8 LOAD9 LOAD10 Max load LOAD11 RPM Fig.3: this 3-dimensional graph is also for a 1988 2.0-litre Ford Telstar but this time the ignition advance is plotted against engine RPM and engine load as a 15x15 map (300 RPM per site). (from the settings mode), the display will show either MAPa or MAPb, depending on which map is selected. If the 15x15 map is selected, then the display will only show MAP, without the alpha or beta symbols. Following the MAP legend, the display shows the advance or retard value. The display format depends on whether the setting is for 0.5° or March 2007  19 RPM14 4900 43.5 42.5 41.5 41 40.5 39.5 38.5 38 37.5 36.5 36 35.5 34.5 34 33.5 The LCD Hand Controller connects to the Ignition Timing Module via a standard DB25 RS-232 cable. It’s used to program in the various settings and the ignition timing map(s) and can display all programmed data on a 2-line 16-character LCD module. 1° resolution. In all cases, a “-” sign indicates a retard value, while a “+” sign indicates an advance value. When there is no change in advance or retard, the value simply shows 0.0 for the 0.5° resolution setting or 0 for the 1° resolution setting. The advance or retard value is changed using the Up (), Down (), Step Up ( ) and Step Down ( ) pushbuttons. The  and  pushbuttons increase or decrease the setting by the resolution value; ie, by either 0.5° or 1° for each switch press. By contrast, the   and   push­ buttons change the advance/retard value by 2° on 0.5° resolution and by 4° on 1° resolution. The resulting values are stored in memory and remain there even if power is turned off, unless they are changed by the pushbuttons or by the Reset switch. At the end of the top line, the display shows either SITE, FULL, DIAG or VIEW, to indicate the selected mode. Note that the SITE, FULL and DIAG modes are called the “Run” modes because they show what sites are accessed while the engine is running. Site mode The SITE mode is displayed each time the Programmable Ignition is powered up when the Run/View mode is selected with the jumper link. In this mode, the second line shows 20  Silicon Chip the current RPM site and the current LOAD site. These are from sites 1-11 when the 11x11 mapping is selected or from 1-15 when the 15x15 mapping is selected. The advance or retard value is shown as the value entered at that load site. In practice, the LOAD and RPM sites only change with changes in engine RPM and engine load. In other words, this is a real time display that shows the current load and RPM sites and the current advance or retard value setting. Full mode Pressing the Run/View pushbutton brings up the FULL mode. In this case, the second line shows the RPM site as before (eg, RPM1) but it also shows the actual position between this site and the next. For example, with the 11x11 ignition timing map (Fig.2), each site is 400 RPM away from the next. In practice, however, the RPM is measured in 100 RPM steps. As a result, the display shows the RPM 1 position as RPM 1;0, RPM 1;1, RPM 1;2 or RPM 1;3. These values correspond to 1000, 1100, 1200 and 1300 RPM respectively. There is no RPM 1;4 position as this becomes the RPM 2;0 site for 1400 RPM. If you don’t understand this, it will become clearer when we describe how the Programmable Ignition is set up in the forthcoming articles. Similarly for the LOAD sites, the position within the site is shown after the semicolon (;). Note that the word LOAD is abbreviated to just LD, so that the values fit within the display line. In the FULL display mode, the advance or retard value is the interpolated value that is calculated for the positions between each load site. Let’s go back to our earlier example and consider the RPM 6 (3000 RPM) and RPM 7 (3400 RPM) sites. At these sites, the advance is 25° and 28° respectively. This means that at RPM 6;0 the advance value will be displayed as +25.0°, while at RPM 7;0 the value will be shown as + 28.0°. The interpolated value will be shown for RPM values between these two sites. For example, at 3200 RPM (RPM 6;2), the advance value will be +26.5°. Consequently, this is the value that will be shown at site RPM6;2. Note that this is a simplistic example because we are ignoring the fact that the LOAD value could also be in-between LOAD sites. In that case, both the RPM and LOAD values are interpolated to give the advance or retard value. Note also that if the advance or retard value is increased or decreased in this mode, it will be the interpolated value that is displayed rather that the site value. The site that will be siliconchip.com.au changed is the next lowest RPM and LOAD site. Having said all that, interpolation can be switched off within the settings if required. Knock sensing When knock sensing is set, the display shows the modified timing value after knock retard is taken into account. This means that if the display is showing +26.0° and the knock sensing subsequently introduces a 6° timing retard, the display will then immediately show +20.0°. This is the actual advance value used for ignition. Note that engine knock detection is indicated by an exclamation mark (!) that is positioned between the RPM site value and the LOAD on the second line of the display. The (!) is shown when knock is detected, regardless as to whether the knock retard feature is on or off. The knock symbol is shown in the SITE, FULL and DIAG display modes. Diagnostic mode Pressing the Run/View switch again switches to the DIAG mode. This is the diagnostic mode and is very useful when it comes to determining your engine’s RPM range, as well as measuring the output range from the MAP sensor. In this mode, the second line shows the actual RPM with 100 RPM resolution and the actual LOAD value from 0-255. The advance/retard value on the top line normally shows the interpolated value in the same way as the FULL mode. As mentioned above, interpolation can be switched off and this is useful when measuring the manufacturer’s advance curve (more on this in a later article). Pressing the Run/View pushbutton yet again switches to the VIEW mode. This is not a real-time display because the RPM and LOAD sites do not change with the engine RPM or load. Instead, you can step through each site manually using the Right (), Step Right (), Left () and Step Left () pushbuttons. The  and  pushbuttons increase or decrease the LOAD site value. When increasing the LOAD site value and it reaches its maximum value (either 11 or 15), pressing the switch again causes the RPM site to increase by 1 and the LOAD site to return to 1. In this way, siliconchip.com.au Specifications Timing adjustment resolution: 0.5° resolution advance and retard or 1° resolution advance and retard. Timing adjustment range: ±60° for 12-cylinder engines, ±90° for 8-cylinder engines, ±120° for 6-cylinder engines, ±127° for less than 6 cylinders. Using less than 75% of the limit is recommended to prevent timing “drop-out” with sudden RPM changes. Timing adjustment accuracy (above Low RPM setting): 0.2% for a 2-cylinder 4-stroke, 0.3% for a 6-cylinder 4-stroke, 0.4% for an 8-cylinder 4-stroke (note: 0.3% is equivalent to 0.12° at 40° advance or retard for a 6-cylinder engine). Timing update: the update period is the time between successive firings. Timing calculation period: 700ms maximum. Timing jitter: ±5ms at 333Hz (5ms is equivalent to 0.3° for a 6-cylinder engine at 10,000 RPM). Minimum input frequency: 0.6Hz (corresponds to 36 RPM for a 2-cylinder 4-stroke engine, 18 RPM for a 4-cylinder 4-stroke engine, etc). Maximum input frequency: 700Hz (corresponds to 14,000 RPM for a 6-cylinder 4-stroke, 7000 RPM for a 12-cylinder 4-stroke. Cylinder settings: 1-12 cylinders for a 4-stroke engine and 1-6 cylinders for a 2-stroke engine. Minimum RPM setting: 0-25,500 RPM in 100 RPM steps Maximum RPM setting: indirectly set by RPM/SITE – 0-25,500 RPM in 100 RPM steps. Minimum load setting: 0-255 in steps of 1 (corresponds to 0-5V). Maximum load setting: indirectly adjusted by changing loads per site (0-255 in steps of 1). Debounce adjustment: 0.4ms or 2ms. Dwell adjustment: 0-25.3ms in 0.2048ms steps (multiplied with voltage below 12V). Dwell variation with supply: x1 for >12V, x2 for 9-12V, x3 for 7.2-9V, x 4 for <7.2V. Firing edge selection: low or high. Spark duration: 1ms. Map settings: two 11x11 maps (MAPa and MAPb) or single 15x15 map. Knock input range: 0-5V (0-1.25V = no retard; 1.25-5V = progressive retard in 16 steps). 9° at 3.75V, 12° at 5V for 1° resolution; 4.5° and 6° respectively for 0.5° resolution. Knock monitoring (requires an additional knock circuit): monitored for the first 6ms after firing. This period is reduced at higher RPM with the start of dwell. Optional 4000 RPM or 6000 RPM sensing limit. Ignition retard activation (when enabled) is set for a minimum of 10 sparks with the onset of knocking. Internal test oscillator: 4.88Hz. Response to low RPM setting: 0-25,500 RPM in 100 RPM steps. Typically set at around 1000 to 2000 RPM. March 2007  21 The Best Laid Plans Of Mice & Men When we presented our last very popular High Energy Electronic Ignition System, in the December 2005 & January 2006 issues of SILICON CHIP, we stated that “in a future issue we would present a development of the Electronic Ignition to allow ignition timing to be altered. That project will allow the existing timing to be fully mapped on the basis of engine RPM and inlet manifold pressure”. In fact, provision was made on the PC board for the extra parts that would be required to make the system fully programmable. A new program for the microcontroller would complete the system . . . or at least, that was the plan. It didn’t work out. Instead, we have had to effectively split the original PC board into two parts and add a few more components into the bargain. Now what was that about mice and men? It goes like this: The best-laid plans o’ mice an’ men Gang aft a-gley, An’ lea’e us nought but grief an’ pain For promised joy. [“To a Mouse” by Scottish poet Robert Burns (1759-1796)]. you can step through the entire ignitiontiming map. The same thing happens when decreasing the LOAD site value. After reaching 1, the RPM site value is decreased by 1 on the next switch press and the LOAD site goes to either 11 or 15 (depending on the MAP setting). The  and  switches just alter the RPM sites up or down without altering the LOAD site. In this way you can check the ignition advance or retard settings for each RPM site at a particular LOAD site. Note that the , , and  pushbuttons do not operate in the SITE, FULL and DIAG modes. In these modes, the sites are only changed in response to engine RPM and load inputs. Settings The Settings display is invoked when jumper LK1 in the Programmable Ignition Timing Module is moved to the settings position. This display is used to set up the programmable ignition to suit your engine. The display will initially show <SETTINGS>. The < and > brackets indicate that each setting can be selected with either the left () or right () pushbutton switch. The values within the settings are then changed using the  and  pushbuttons. These values (except for the oscillator setting) are stored in memory and do not change unless altered using the Up and Down pushbuttons. 22  Silicon Chip Note that the oscillator setting is always off when power is re-applied to the Programmable Ignition. Pressing the  pushbutton brings up the Cylinder setting. You can then select cylinder values from 1-12 for a 4-stroke engine and from 1-6 for a 2-stroke engine. During this time, the top line of the display will show STROKE and then two numbers – ie, 4 and [2] for 4-stroke 2-stroke engines respectively. Directly below these on the second line is the word CYLINDER and the selected cylinder numbers (the bracketed number is the cylinder value for a 2-stroke engine). The cylinder value is changed using the  and  pushbuttons. Note that a dash is shown in the two 2-stroke column when odd 4-stroke cylinder numbers are selected, as this is not a valid setting for a 2-stroke engine. The next four settings are for adjusting the range of the RPM sites and the LOAD sites. These are crucial in insuring you get the full use of the available sites. In other words, there is not much point in having the RPM sites cover a range from 0-25,000 RPM when, for example, the engine does not run above 5000 RPM. In this case, you would only be using 20% of the available RPM sites (ie, RPM 1, RPM 2 and part of RPM3 only) for mapping the advance curve. The first of these settings is the Minimum RPM. This sets the RPM for the RPM 1 LOAD site. The display shows SET MIN RPM X00 RPM, where the X represents a number from 0-255. Typically, this is set at the idle speed for the car but it may be set differently depending on how you want the ignition curve to operate (more on this in a later article). The settings can be changed from 0 RPM through to 25,500 RPM in 100 RPM steps. In practice, you would use the DIAG (diagnostic) setting mentioned above to determine the minimum and maximum engine RPM range. Alternatively, you can use the idle and red-line specifications for your engine. The second setting is for the Maximum RPM. This value of RPM is indirectly set by the value of the RPM per site (RPM/SITE) adjustment, as shown on the top line of the display. It can be set from 0-25,500 RPM in 100 RPM steps. The second line shows the maximum RPM. This is calculated based on the minimum RPM setting and the RPM/site value. It is shown in the second line of the display as MAX RPM X00 RPM, where X is a number from 0-255. An ERROR indication is shown instead of the maximum RPM if the setting would be over 25,500 RPM. The reason why we adjust the RPM/ SITE value rather than the Maximum RPM directly is because the Programmable Ignition requires a discrete number of 100 RPM steps between each RPM site. In practice, the RPM/SITE value is altered so that the maximum RPM is at or just over the value required. You can also adjust the minimum RPM setting to achieve the best compromise for the adjustment. An example may help here using the 11 x 11 map. If, say, the minimum RPM is set at 1000 RPM, the RPM/SITE value can be set to say 400 RPM for a 5000 RPM maximum or to 500 RPM for a 6000 RPM maximum. Thus, if you had a red line of say 5500 RPM, you could set the RPM/site value to 500 for the 6000 RPM maximum. Alternatively, you could lower the minimum RPM value to say 800 RPM, with the RPM/site set to 500 for a 5800 RPM maximum. The third and fourth settings are for the LOAD sites. Again, in practice, you would use the DIAG (diagnostic) mode to determine the minimum and maximum values from the MAP sensor. The maximum load values occur when the car is accelerating up a hill, while minimum load values are siliconchip.com.au present under very light throttle conditions and when the engine is being overrun in low gear downhill. The Minimum Load adjustment can be set from 0-255 in steps of 1. These 0-255 values correspond to the 0-5V output from the MAP sensor. This value is set to the reading obtained in the DIAG (diagnostic) mode when the engine is being overrun. By contrast, the Maximum Load is adjusted indirectly by changing the loads per site (LOADS/SITE) setting. This can be changed in steps of 1 from 0-255. The second display line shows the calculated maximum load (MAX LOAD) value based on the minimum load and the LOADS/SITE setting. An ERROR indication shows if the calculated maximum LOAD value is over 255. In practice, the Minimum Load and the LOADS/SITE settings are adjusted so that they cover the range of the MAP sensor output, although they may slightly overlap the required minimum and maximum values. Other settings that follow these mapping values are: (1). MAPS: here you can select either the two 11x11 maps (mapa and mapb) or the single 15x15 map. Note that any ignition values mapped into an 11x11 map will no longer be correct if the map is subsequently changed to a 15x15 array and vice versa. Instead, you have to re-enter the values. (2). Resolution: this sets the resolution of the advance/retard adjustments and can be either 1° or 0.5°. Once ignition values have been entered into the map on one resolution setting, they will be incorrect if the resolution is changed to the alternative setting. (3). Response To Low RPM setting: at low RPM, the engine speed can change quite quickly. Because the calculation for RPM can only occur between each detected firing pulse, the response to RPM changes can be too slow and can lag behind the engine. This can noticeably retard the ignition with increasing RPM. The Response To Low RPM setting is included to improve low RPM response, particularly at starting. The downside of this setting is that there is some slight ignition retardation but this is less than 1° for typical low RPM settings. The RPM value can be set from 0-25,500 RPM in 100 RPM steps. The Low RPM Response operates for RPM siliconchip.com.au Ignition Timing – A Quick Primer A typical internal combustion engine has one or more pistons that travel up and down inside cylinders to turn a crankshaft. As a piston rises inside its cylinder during the compression stroke, a mixture of fuel and air is compressed. In petrol and gas engines, this fuel-air mixture is then ignited using a spark to drive the piston as it starts its downward stroke. This ignition must be timed accurately to ensure maximum power and efficiency. If the mixture is fired too late in the cycle, power will be lost because the piston will have travelled too far down in the cylinder for the burning fuel to have maximum effect. Conversely, if the mixture is ignited too early, it will “push” against the piston in the wrong direction as it rises towards top dead centre (TDC). Ideally, each spark plug is fired so that there is just enough time for the ignited fuel to apply maximum force to the piston as it starts its downward power stroke. In practice, the fuel takes a certain amount of time to burn and so the spark plug needs to be fired before the piston reaches the top of its stroke or top dead centre. At low engine RPM, the spark only needs to occur a few degrees before top dead centre. However, as engine RPM rises, the ignition must be fired progressively earlier in order to give the fuel the same time to fully ignite – ie, the spark timing must be progressively advanced as engine RPM rises. This timing requirement is called the “RPM ignition advance curve” and is often around 6° before TDC at idle, rising to about 40° at the engine’s recommended maximum RPM (the redline). As stated, if the spark ignites the fuel far too early, then the piston may be pushed downwards before it reaches top dead centre. However, if the ignition is only early by a small amount, then the engine will exhibit a knocking sound as the piston rattles within the cylinder. This effect is called “detonation” (also called “pinging” or “knocking”) and can cause serious engine damage in severe cases. Engine load is also an important factor when it comes to ignition timing. Under light loads, the advance timing can usually be at the maximum. However, when the engine is heavily loaded, such as when accelerating or powering uphill, the fuel takes less time to ignite because of higher fuel pressures and temperature (and because the mixture is richer). As a consequence, as engine load increases, the ignition timing must be retarded to prevent detonation. below the set value (typically just below idle speed). Above this setting, the standard response to RPM occurs. By contrast, the response at higher RPM is satisfactory because there is only a short period between plug firing and the engine speed will not vary much during this time. Usually, the setting is adjusted so that it operates at engine cranking speed but stops when the engine reaches idle speed. In other cases, it may be necessary to raise this RPM limit so that the engine can rev correctly from idle. (4). Debounce: the debounce setting affects the trigger input and its resilience to a noisy signal, as can typically occur with points bounce in older car ignition systems. Unless corrected, points bounce can upset the detection of engine RPM and affect the timing. Typically, you can use the 0.4ms debounce setting but the alternative 2ms debounce setting can be selected if the ignition appears to be erratic due to a noisy input sensor signal. (5). Dwell: dwell is the period during which the ignition coil “charges” before each plug firing. It is alterable from between 0-25.3ms in 0.2048ms steps. We have provided an oscillator feature (see below) that allows the ignition coil to be driven by the Programmable Ignition and the spark produced by the coil monitored. The dwell is then progressively adjusted upwards from 0ms until the spark reaches its maximum voltage. The dwell is then increased slightly above the set value to ensure there is more than sufficient spark when the engine runs. In addition, the dwell is automatiMarch 2007  23 Fig.4: the Ignition Timing Module is based on a PIC16F88-E/P microcontroller. This processes the input trigger, MAP sensor and optional knock sensor signals and provides outputs to drive the Ignition Coil Driver circuit (Fig.5) and a tachometer. It also monitors the Hand Controller’s switches and drives the LCD. cally increased when the battery voltage is low – ie, to x2 for battery voltages between 9V and 12V; to x3 for voltages between 7.2V and 9V; and to x4 for voltages below 7.2V. (6). Edge: this sets the ignition to trigger from either a low-going input signal edge or a high-going signal. In most cases, a high-going signal edge must be selected but some optical, Hall-Effect and reluctor outputs will require the low-going edge selection. (7). Knock: this sets the KNOCK retard feature either ON or OFF and sets the LIMIT at either 4000 or 6000 RPM (these settings are all shown on the LCD). Pressing the 24  Silicon Chip  and  pushbuttons cycle the selections between these options. The LIMIT setting sets the RPM value at which knock sensing ceases. This is usually set to 4000-6000 RPM because at higher revs, the engine noise drowns out any knocking and so would either be undetectable or would cause false readings. Note that knocking will only be detected if the separate knock sensing circuit (to be described) is added and a knock sensor is installed on the vehicle. (8). Diagnostic: this sets the interpolation either ON or OFF. It is normally set to ON and should only be set to OFF when making ignition curve measurements using the Programmable Ignition and a timing light. (9). Oscillator: this sets the internal oscillator ON or OFF. It’s normally OFF but can be set to ON to test the ignition coil spark with varying dwell settings. The oscillation rate is about five times a second (5Hz). Circuit details OK, so much for all the fancy features built (or more accurately, programmed) into the unit. Let’s now take a look at the circuit details. The circuit for the Programmable Ignition can be split into three secsiliconchip.com.au tions. First, there is the Programmable Ignition Timing circuit, as shown in Fig.4. To this is added an input trigger circuit, depending on the ignition trigger used – see Fig.6. This can be either points, optical, Hall effect or reluctor, or can be taken from the engine management unit (EMU). Finally, a separate circuit, controlled by the Programmable Ignition Timing circuit, drives the ignition coil – see Fig.5. The LCD Hand Controller, to be described in Pt.2, is a completely separate unit which connects to the Programmable Ignition Timing module via a DB25 cable. As stated, it’s used only during the setting-up procedure, after which it is no longer required unless you wish to reprogram the system (eg, to alter the timing map). The main circuit (Fig.4) is based on IC1 which is a PIC16F88-E/P high-temperature microcontroller. This micro processes the input trigger and MAP sensor signals and provides an output to drive the Ignition Coil Driver circuit. It also drives the LCD module in the Hand Controller and monitors the Hand Controller’s switches. Timing signals for IC1 are provided by crystal X1. This sets the internal oscillator to run at 20MHz, which enables the software programmed into IC1 to run as fast as possible. In operation, IC1 accepts the ignition trigger signal at its RB0 input (pin 6) and drives its RB3 output to switch the ignition coil (via the driver circuit) accordingly. As shown, the RB0 input is protected from excess voltages by a series 2.2kW resistor, which prevents excessive current flow in IC1’s internal clamping diodes. Clamping occurs when the voltage goes below 0V or if it goes above the +5V supply (ie, the input is clamped to -0.6V or +5.6V). The 1nF capacitor at the RB0 input shunts transient voltages and highfrequency signals, to filter false timing signals. Transistor Q4 is also driven from the trigger input. The transistor is used to provide a tachometer output at its collector. In operation, Q4’s collector is normally held high via a 2.2kW pull-up resistor but switches low each time the transistor turns on (ie, when the trigger input is high). Q4’s collector output can be used to drive most modern tachometers. However, an impulse tachometer (now very rare) requires a different consiliconchip.com.au Fig.5: the Ignition Coil Driver is based on transistors Q1-Q3. Darlington transistor Q1 switches the ignition coil, while the four series zener diodes across Q1 protect it against voltage spikes when the transistor turns off. nection and this type should operate when connected to the ignition coil’s negative terminal. MAP sensor The MAP sensor signal is applied to the analog AN2 input of IC1 via a 1.8kW resistor. A 10nF capacitor filters out unwanted high-frequency signals to prevent false readings. In operation, the AN2 input measures an input voltage ranging from 0-5V and converts this to a digital value ranging from 0-255. This is the value that’s read from the DIAG (diagnostic) display. Note that +5V supply and ground rails are provided for the sensor. When the Sensym sensor is used, it can be directly mounted on the PC board used for the Programmable Ignition Timing Module. The optional knock sensor signal is applied to IC1’s analog AN1 input (pin 18). As before, this input accepts signal voltages from 0-5V and converts them to digital values. Conversely, if the knock sensing circuit is not used, this input must be tied to ground using jumper link LK2 to disable the knock sensing function. The third analog input at AN3 (pin 2) is used to monitor the +12V ignition supply. As shown in Fig.4, this supply voltage is divided down using 100kW and 47kW resistors and filtered using a 10mF capacitor before being applied to the AN3 input. This divider effectively converts the supply voltage to a 0-5V signal which is then used to determine if the dwell period should be increased to compensate for a low supply voltage. Note that the voltage across D1 is accounted for in this measurement. Link LK1 selects either the timing map display or the settings display. In the settings position, the RA5 input is tied to ground via a 10kW resistor. Conversely, when LK1 is in the timing position, RA5 is tied to 5V via the 10kW resistor. Note that the RA5 input differs from the other inputs in that it cannot be directly tied to one of the supply rails otherwise the micro could latch up. The 10kW input resistor eliminates this problem. March 2007  25 Fig.6: the seven input trigger circuits: (a) points triggering; (b) ignition module (see text); (c) Hall effect & Lumenition triggering; (d) triggering from an engine management module; (e) reluctor pickup; (f) Crane optical pickup; and (g) Piranha optical pickup. Switch S1 is used to select between the two 11x11 timing maps. When S1 is open, RA4 is pulled low via the 10kW resistors and mapa is selected. Conversely, when S2 is closed, RA4 is pulled to +5V and mapb is selected. Note that this switch operates only when the 11x11 maps are selected using the LCD Hand Controller. It has no effect if a 15x15 map is selected. Driving the LCD Pins 7, 8 & 10-13 of the microcontroller are used to drive the LCD module in the Hand Controller (via a DB25 connector). The 10W resistors in series with these outputs act as stoppers to keep RF signals out of IC1. In addition, the RA0 input at pin 17 monitors the switches from the Hand Controller. The associated 1kW resistor pulls the input voltage to 0V unless a switch is closed, at which point the line is pulled high to +5V. The 10nF and 1nF capacitors filter out RF signals. Power supply Power for the circuit is derived via the ignition switch. This supply is then filtered using inductor L1 and the 100nF capacitor. Diode D1 pro26  Silicon Chip vides reverse polarity protection, after which the supply is decoupled using a 1000mF capacitor. As a further precaution, the circuit is protected from voltage spikes using transient voltage suppressor TVS1. This clamps any high voltages that may otherwise damage following components. Following TVS1, the supply is regulated to +5V using regulator REG1. This is a low-dropout device and is used here to ensure that a regulated +5V supply is maintained during starting when the battery voltage can drop well below l2V. A 100mF capacitor decouples the regulator’s output, while a 100nF capacitor (located close to pin 14 of IC1) shunts high frequencies to ground. Ignition coil driver Fig.5 shows the Ignition Coil Driver circuit. It’s fairly straightforward and is based on transistors Q1-Q3. Q1 is a Darlington transistor specifically made for ignition systems. It’s capable of handling currents in excess of 10A and voltages exceeding 400V. As shown, four 75V zener diodes (ZD1-ZD4) are connected in series between its collector and emitter terminals. These protect the transistor from excess voltages by clamping its collector at 300V, which is well within its rating. The circuit works like this: when the input signal is low (or there is no signal), transistor Q3 is off, Q2 is on (due to base current through the 1.2kW resistor) and Q1 is off. Conversely, when the input subsequently switches high, Q3 turns on and switches Q2 off by pulling its base to ground. As a result, Q1 turns on and current flows through the primary winding of the ignition coil. The ignition input signal now subsequently switches low again and so Q3 immediately turns off due to the 470W resistor between its base terminal and ground. And when that happens, Q2 switches on and Q1 switches off, interrupting the current through the ignition coil. As a result, the coil’s magnetic flux rapidly collapses and this generates a high voltage in the secondary to fire one of the spark plugs. The 1nF capacitor on Q3’s base is there to suppress any RF signals that may otherwise be injected when the current through the ignition coil is interrupted (ie, when Q1 switches off). siliconchip.com.au Resistor R1 is included to make the module more versatile. In our application, R1 is not used and is replaced with a wire link. For other applications, where a separate ignition coil driver is required, R1 will be required. Typically, a 470W resistor would be used for a 5V drive signal, while a 1.2kW resistor would be used for a 12V drive signal. Finally, the module can also be configured to drive transistor Q1 when the input signal switches low. In this case, Q3 is left out of circuit and a link installed between the pads on the PC board for its base and collector leads. The 1.2kW resistor pull-up is also removed from circuit. Trigger inputs The Programmable Electronic Ignition is configured for the appropriate trigger input during construction. The seven possible input circuits are shown in Fig.6. The points trigger is shown in Fig.6(a) and includes a l00W 5W wirewound resistor connected to the 12V supply. This resistor provides a “wetting” current for the points to ensure there is a good contact between the two mating faces when they are closed. The wetting current is sufficient to keep the contacts clean but not so high as to damage them. The ignition module version is shown in Fig.6(b). This is essentially the same as the points input except that a transistor inside the ignition module switches the input to ground instead. This type of input has been included because some electronic ignition systems do not provide access to the actual trigger (usually a reluctor) and the only output is the ignition coil driver transistor. In this case the coil is replaced with the 100W resistor to provide the necessary pull-up to +12V when the transistor is off. Fig.6(c) shows the Hall Effect trigger. It uses a 100W current-limiting resistor to feed the Hall sensor, while the 1kW resistor pulls the output voltage to +5V when the internal open-collector transistor is off. Conversely, the output signal is pulled to 0V when the internal transistor is on. Note that the same circuit is used for the Lumenition optical module. The engine management input circuit is shown in Fig.6(d) and is quite simple. Its 0-5V output signal connects siliconchip.com.au This inside view shows the assembled PC board for the Ignition Timing Module but without the optional Sensym MAP sensor fitted. The full assembly details will be in Pt.2 next month. to the trigger section of the main circuit in Fig.4. Reluctor sensors are catered for using the circuit in Fig.6(e). These produce an AC signal and so require a more complex input circuit. In this case, transistor Q5 switches on or off, depending on whether the reluctor voltage is positive or negative. It works as follows. Initially, with no reluctor voltage, Q5 is switched on via current through VR1 and a 47kW resistor. The voltage applied to Q5’s base depends on the 10kW resistor across the reluctor coil and the internal resistance of the reluctor. Trimpot VR1 is included to provide for a wide range of reluctor types. In practice, VR1 is adjusted so that Q5 is just switched on when there is no signal from the reluctor. The 10kW resistor provides a load for the reluctor, while the 470pF capacitor filters any RF signals that may have been induced. The 2.2nF capacitor ensures that Q5 quickly switches off when the reluctor signal goes negative. Finally, Fig.6(f) & Fig.6(g) show two different optical pickup circuits. Fig.6(f) is for a module that has a common 0V supply connection (eg, Crane), while Fig.6(g) is for a module that has a common positive supply (eg, Piranha). In each case, current for the LED is supplied via a 120W resistor, while the photodiode current is supplied via a 22kW resistor. Software The software for the Programmable Ignition is the largest and most complex we have developed to date. In all, the final assembler code totals some 6020 lines to perform all the necessary functions, including monitoring the ignition trigger and pressure sensor signals and providing an output based on the ignition timing map. Basically, the software includes several multiply and divide routines (some 24-bit) to calculate the timing, based on the RPM and load site. These routines are also used to calculate engine RPM and the interpolated advance/retard values and must be performed constantly to maintain the correct timing as engine RPM and load vary. We managed to perform all the required calculations in under 1ms – fast enough for high revving engines. A significant part of the software has also been devoted to the many functions accessible via the Hand Controller and to allow the Hand Controller to be used while the engine is running. In the end, we used all the data memory space of the PIC16F88 to store the ignition timing maps and the adjustable parameters, along with some SC 97% of the program memory. March 2007  27