×

Sale ends todayGet 30% off any course (excluding packages)

Ends in --- --- ---

Practical Reflash Tuning: Step 4: MAF/Injector Scaling

Watch This Course

$229 USD

-OR-
Or 8 easy payments of only $28.63 Instant access. Easy checkout. No fees. Learn more
Course Access for Life
60 day money back guarantee

Step 4: MAF/Injector Scaling

1.18.50

00:00 - Now we already know that we're going to need to make some adjustments to our MAF scaling to account for our new OTR intake system, however, in the GM ECUs this is actually a little bit more complex, so before we actually jump into our MAF scaling we're going to talk about the system the GM PCM uses, and how that's applied, and hence, what changes we're going to need to make, and what process we're going to have to go through, to properly scale this.
00:31 Now the way the GM ECUs work is they incorporate both a mass air flow system for directly measuring mass air flow, as well as a speed density system, based off manifold absolute pressure, for calculating the mass air flow, and in GM terms this is known as virtual VE, or virtual volumetric efficiency.
00:55 Now the way this system works is that the two inputs should always be calculating out to approximately the same number, and the ECU can use one or the other of these two inputs to decide on the current mass air flow, based on the current operating conditions.
01:15 So for example, on a transient response to a sharp throttle input, often we can see a lag in the response of the mass air flow signal, so the ECU can instantaneously revert to using the speed density lookup table, to decide how to deal with that particular transient event.
01:36 At higher rpm we find that the GM PCM will focus solely on the input from the mass air flow sensor.
01:46 Below the dynamic air flow thresholds which we're going to look at shortly, the ECU can use predicted air mass calculations based on both the air flow metre, the mass air flow metre, and the speed density or virtual volumetric efficiency tables.
02:03 So this presents a problem because now we're not only tuning one subsystem, we're not just interested in rescaling our mass air flow sensor, to do the job thoroughly, we also need to adjust and correctly tune our virtual volumetric efficiency table.
02:21 Let's have a look in the VCM Editor software and we'll see exactly what we're dealing with.
02:26 First of all, if we click on the General tab under Airflow we have our MAF Calibration so this is our mass air flow sensor calibration, and you can see that we have a two-dimensional table of values versus the frequency output from our mass air flow sensor, and the numbers in this table are simply mass air flow values in grammes per second.
02:49 If we look at the table graphically, you can see we have the sort of shape we would expect from a mass air flow sensor table, it's got an exponential shape to it.
03:00 So this is where we would scale and adjust our mass air flow sensor however, we also need to consider our speed density system, and when GM moved to these later ECUs, particularly the E38 ECU, or PCM that we're tuning here, we don't get to see a conventional volumetric efficiency table, as we might have expected, as we saw with the older Gen 3 LS1 PCMs.
03:31 So if we click on our Speed Density tab here, you can see that instead of a VE table, we simply have a range of coefficients, and what GM do with these coefficients is calculate the current volumetric efficiency on the fly, based on our current operating conditions, and the values in these coefficient tables.
03:56 Now unless you're a mathematician, these tables are going to be relatively meaningless and this has previously made our job quite difficult when it's come to scaling the volumetric efficiency side of the ECU's operation, generally if we wanted to do this we had to rely on a third-party piece of software that would convert these coefficients into something that we could visually recognise as a VE table, we could then make our changes, recalculate new coefficients, and import these back into the VCM Editor.
04:33 Fortunately with the Version 3 VCM Editor software we can do now do that directly, and if we click on the Edit dropdown menu, and go to Virtual Volumetric Efficiency, you can see that the VCM Editor directly generates a volumetric efficiency table, based on all of those parameters, and we can also view it graphically, so now we have something that we may recognise as a VE table.
05:05 One of the important points to understand here, and one of the reasons why GM has taken this approach is with their more sophisticated engines, we now have multiple VE modes so, you can see at the moment we are in Manifold Switch Closed, we also have Displacement on Demand, and Manifold Switch Open.
05:25 So where you're going to be operating is going to depend on your particular engine that you're tuning, you can also see for vehicles or engines fitted with continuously variable cam control, we can have different VE tables based on cam target, cam position, so this is why GM have gone through this process.
05:46 What we can do however now, is simply make changes to our VE table in a conventional way, any time we make a change, we'll find that this Calculate Coefficients tab here will be unshaded, and if we click on that, the VCM Editor software will generate new coefficients which will end up being put straight into our VE Coefficients tables here, so it makes the whole system relatively straightforward to tune.
06:17 We do now have a few options when it comes to how exactly we want to tune the ECU, and this is really going to depend on your personal preference as well as how much time you're prepared to devote to the tuning process.
06:33 So the technically correct approach, and this is what we're going to be going through in our worked example here, is to disable the speed density system, and then correctly scale the mass air flow sensor calibration to suit our changes to the engine.
06:51 Once we've got our MAF scaled so we've got minimal error between our target or commanded air fuel ratio and our measured air fuel ratio, we're then going to go back into our editor, we're going to flash those changes into the ECU, but at the same time we're also then going to run the ECU solely in speed density mode, so it's going to now ignore the input from the mass air flow sensor.
07:19 When we do this, we're then going to go through exactly the same process, and we're going to calibrate and correctly tune our virtual volumetric efficiency table.
07:30 Once we've done both our mass air flow scaling and our virtual VE tables, we've then corrected any errors that are due to the modifications we've made to the engine.
07:42 We can then flash the ECU back to stock, albeit we're going to obviously be keeping our new virtual VE values, as well as our new MAF scaling, but we're going to flash the ECU back into a mixed mode where it's using both the mass air flow sensor and the speed density or virtual VE system.
08:02 This is the way GM intended the ECU to operate, and this is likely to give you the best results.
08:12 An alternative option that a lot of tuners are using, is simply to focus solely on either the mass air flow sensor for all of the ECU's calculations, or alternatively the speed density subsystem, and we can do that by eliminating one or the other in the ECU settings which we're going to look at shortly.
08:35 Personally, I prefer to do the job thoroughly and correctly and make sure that we have correctly scaled both our mass air flow sensor and our virtual VE table, that's likely to give you the best possible results.
08:50 As a side note, if you are adding forced induction, you can rescale your virtual VE table to either 2 bar or 3 bar, to account for positive boost pressure.
09:04 OK, now that we understand how the mass air flow sensor and virtual VE systems integrate in the E38 PCM, let's move on and we'll actually see how we can apply that and make tuning changes to both of these aspects of the ECU's operation.
09:22 Before we actually get involved with any rescaling of either our MAF or our virtual VE tables, let's start by simply flashing our modified map into the ECU, so we've got that saved from our last step, and all I'm going to do here is click on the Write Vehicle icon, and at the moment I've got the ignition power to the vehicle on, and obviously my interface is connected to both a laptop and our OBD2 port.
09:52 We'll click on that, and we have our Vehicle Writer box open up and this gives us some control over exactly what we're going to write to.
10:00 Here we can write to our engine control module, which is our E38 ECM, or we can also choose to write at the same time to the automatic transmission control module.
10:14 Now, depending on what we're actually, what changes we're making to our calibration will depend on what we want to do here, in order to save time I'm going to select Do Not Write to our transmission control module because I don't want to make any changes to that.
10:31 Now I click on Write and we go through the process of flashing the ECU, which generally takes around about 45 seconds.
10:39 OK so our write's complete now, we can click Close, and what we're going to do is restart our engine, and, at this point I'm just simply going to have a look in our scanner, and see what our trims are doing, this is always useful just to simply get an idea of how close our tune is at the moment.
11:01 So, you can see we have our short term fuel trims being displayed here, and at the moment at idle they're actually pretty damn close to zero, that's pretty close to where we want them to be.
11:13 You can see because I have shut off my long term fuel trims those are both sitting at zero.
11:20 However, when we're looking at our fuel trims what we really want to do is give the engine an opportunity to come up to normal operating temperature, it's not useful to be looking at these trims immediately after we've restarted the engine, particularly if the engine's been sitting there and its soaked, it can take some minutes for the engine to reach normal equilibrium temperature, and then we're actually going to start getting valid data.
11:46 So let's just allow the engine to come up to temperature, you can see here we have our Engine Coolant Temperature and our Intake Air Temperature, we'll allow the engine a few minutes to reach normal operating temperature, and then we'll have another look at what our trims are doing.
12:00 Alright, so we've got our engine idling now, we're sitting at about 94, 95 degrees, and you can see that our fuel trims here at idle are now sitting quite positive, we're sitting somewhere around about positive 5 to 6%, obviously everything's moving around a little bit.
12:17 What I'm going to do is also just drop into gear, and we'll have a look at how those trims look when we've got a little bit more load and a little bit more rpm on board, so just bringing it into fourth gear now, and you can see, if I'm sitting now at about 1,200, 1,300 rpm, our trims are now negative, and again they're probably a little outside of the range of what I'd be comfortable or happy with.
12:44 Let's go one step further though, and we'll do a wide open throttle ramp run on the dyno, and just see what our measured air fuel ratio versus our commanded air fuel ratio looks like under wide open throttle use, let's do that now.
13:28 OK, so we've got our ramp run complete there, and our dyno's showing that we had 248 kilowatts at the wheels, not really interested in the power right now, what we're gonna do, is switch back to our scanner and see what we had on our scanner.
13:43 So, here what we're looking at is our chart of our commanded equivalence ratio versus our measured equivalence ratio, and you can see, if we look up the top here, we've got our engine rpm so you can see our engine rpm at the start of the run, and at the end of the run increasing smoothly, as we'd expect.
14:03 So our purple line down here is our measured equivalence ratio, measured lambda value I should say, coming from a wide band sensor fitted to the exhaust system.
14:14 And you can see at the start of the run here, our measured lambda is actually very very close to our target, we're sitting within about 1%, however what we can also see is through the mid range of the run here in particular, how we're sitting with a measured lambda of 0.82, versus our target of 0.85.
14:35 So another point I should mention here as you can see, because of the change that we made to our power enrichment table, you can see that our commanded lambda value sits at 0.85, any time we're at wide open throttle, so that's nice and consistent, which is exactly what we wanted.
14:53 We can see that's, in this mid range here of our table, of our run I should say, that we are a little bit richer, so this indicates we're going to have a little bit of work to do.
15:04 OK, now we're going to go through the process of actually correcting this error.
15:10 So we'll start by shutting down our engine, and I'm going to go back into our editor now, and the first aspect I'm going to look at, which is, probably if anything a little bit easier, is how we can go about scaling our mass air flow sensor.
15:28 So, what we need to do is first of all make sure that the ECU is only referencing the mass air flow sensor input and ignoring our speed density input, and we can do that by going to our Airflow Dynamic tab, and the High RPM Disable and High RPM Re-enable, these two parameters here define the rpm above which the speed density system will be completely ignored, and we're only going to be looking at our mass air flow input, so you can see by default these are set to 4,000 rpm and 3,900.
16:10 What I'm going to do is just set our upper limit to 400 rpm and our lower limit to 300, and essentially what this is doing is just ensuring that any time the engine is running, it's going to be using the input from our mass air flow sensor, and ignoring the virtual volumetric efficiency subsystem.
16:30 I've got a little bit more work to do yet though, what we want to do is go into our Fuel tab and our Open & Closed Loop.
16:38 Now when it comes to rescaling both our mass air flow sensor and our virtual volumetric efficiency tables, there are, as usual, a couple of options about how we can go about this.
16:51 If you've got a wide band connected to your tuning interface as we have, then the easiest and most accurate option there is to use that input, and work out a MAF channel which calculates the error between our commanded lambda and our measured lambda, and use that, because basically any time our measured lambda isn't on our target or our commanded value, it means that the ECU is either calculating or measuring more or less air than what is actually entering the engine.
17:27 The other option that a lot of tuners do use is to use the feedback from either the short term fuel trims or the combined short term and long term fuel trims in a histogram, that requires that we leave our short term and long term fuel trims active.
17:46 This will be effective to a point, particularly in closed loop, obviously in open loop where those trims aren't active, we cannot use this technique.
17:55 However it's also important to understand that the fuel trims are based off a narrow band oxygen sensor, there is some error in that system inherent, and there's also a delay in the operation switching from a positive trim to a negative trim, so if we're going to do that, we're probably likely to get slightly substandard results when compared to using the input from a wide band sensor.
18:23 So we're going to be looking at using the wide band technique, and to do that I need to go through and disable our short term fuel trims as well.
18:32 So we can do that here with our Closed Loop Enable parameters, and what I want do is open our Engine Coolant Temperature versus Startup Coolant Temperature table, and this essentially defines when the ECU short term fuel trims can become active, and, what I'm going to do is just maximise that table out, so the short term fuel trims will never become active, and at the same time we're going to do exactly the same to our O2 Readiness table, that can be set to 300 degrees and it will revert to our maximum value which is 256.
19:12 It's just simpler if we enter a value above the maximum value that we can actually enter into that particular table, the VCM Editor will automatically revert to that maximum value.
19:24 Now that we've eliminated our closed loop operation we also have to make a few more changes, just to ensure that we're always chasing a consistent target or commanded air fuel ratio.
19:37 So what we're going to do is go into our Open Loop tables here, and what I'm going to do is highlight any of these tables, these are all multipliers or they affect the commanded equivalence ratio, so what I'm going to do is set all of these tables to 1.0, and this is going to just make sure that we're always targeting our commanded air fuel ratio of 14.67.
20:07 OK, so we've covered our Open Loop tables there, again I'm ignoring the tables for alcohol because we are running a non-flex fuel system here.
20:17 Next we're going to come down to our Intake Valve Temperature Gain table and again, I'm going to set that to a value of one.
20:27 The next table we're going to adjust is our Injector Temperature Gain table, we don't really specifically need to understand what these tables are there to do, we're simply going to set them right now to a value of one, and what we're going to do once we've completed this task is we'll copy our original values back over from our base ROM file, and that's just another example of why it's so important to make sure we keep that base ROM file on hand.
20:56 Right, we've got a couple more tables we need to adjust, so I'm just going to continue going through and setting these to a value of 1.0, and, that's completed that task.
21:10 So now we've got a ROM file set up that we can flash into the ECU, that is going to have the engine running in open loop mode, we're going to have a consistent target commanded air fuel ratio of our stoichiometric AFR, and we're not going to have our short term fuel trims or long term fuel trims affecting our operation.
21:32 So let's save that now, we're going to go through the process of flashing that into the ECU, and once that's complete we're going to be able to start up, and we'll be able to scan some parameters and actually optimise and properly calibrate our MAF scaling tables, so let's see how that works.
21:50 Alright, so we've got our engine back up and running now, I've allowed it to reach a normal operating temperature here at idle, and the first thing that we need to inspect is make sure that we are in fact in open loop mode, so you can see that all of our fuel trims are sitting at zero, so that's great, that means that the ECU isn't correcting any error with our air fuel ratio.
22:13 So then we've also got our commanded lambda versus our measured lambda being displayed, just like last time, you can see that's sitting here at idle, we're actually sitting really close to our target of lambda one, we're sitting at 0.99, so around about 1% rich.
22:30 Now how we're going to use the input from our lambda sensor is with one of the histograms over here on the right-hand side, so let me just bring that across and I'll show you how that works.
22:44 So, we've got a histogram set up here, which is our equivalence ratio error for the mass air flow sensor, and, let's just have a look at the layout of that particular histogram.
22:58 So what we're using here, our parameter that we're going to be plotting on this histogram is our equivalence ratio error, and this is a MAF channel, we don't actually need to do any hard work here, this is provided by the VCM Scanner software.
23:14 So we're looking at a percentage error between our measured air fuel ratio and our commanded, and I'm displaying that as you can see here to two decimal places.
23:24 And what I've done, just so at a glance I can get an indication of what this trim is doing, you can see we have our shading here, so if we have a positive value, we're going to move red, and if we have a negative value we're going to go green, obviously it's safer if we've got a negative value because that means we are too rich.
23:44 OK, then the axis that we're using here is our Mass Air Flow Frequency, so this is the frequency from the mass air flow sensor, we don't want to be looking at mass air flow in grammes per second here, we want the actual frequency input from our mass air flow sensor, and you can see that the values for the breakpoints in this table are displayed down here.
24:07 Now if we're setting one of these up from scratch, which I'll show you shortly for our virtual VE table, we can simply grab these axes so that everything matches up.
24:18 If we go to our MAF Calibration here, and if I click somewhere on the table and I click Column Axis, Copy Labels, what that's going to do is it's going to copy all of the axis labels here or breakpoints to the clipboard, and then we'll be able to paste those into our scanner, it's really important that we have the same breakpoints listed there in our scanner so that the information where the error is, we can apply that to the right part of our MAF calibration curve.
24:52 OK, so while I've been sitting here talking you can see that, particularly at idle, our error is currently sitting really close to zero.
25:00 It's important here to also talk about what is realistic to achieve with our air fuel ratio targets and errors, you know, zero is obviously the ideal where our commanded and our measured air fuel ratio line up perfectly, in the real world that's really not that realistic, and generally if we can get within about 1% we're doing exceptionally well.
25:24 Alright, so let's actually get some data now and see what we need to do, what we need to log.
25:30 And when we're logging this sort of information we want to drive the engine very smoothly, we want to avoid any sudden, aggressive throttle applications, and that's going to make sure that we stay out of any transient enrichment, so we want to be very very slow and smooth with our throttle inputs.
25:51 What we're going to try and do, we're going to gather our data in two separate ways.
25:55 First of all, what we're going to do is use the dyno to hold the rpm steady, and, by increasing the rpm and our throttle position, we're going to access as much of this MAF calibration table as we can, out to around about 7,000 hertz.
26:14 Now you can see at the moment we're sitting here idling at about 2,700 to 2,800 hertz which is pretty typical, so we're going to try and access all of the area out to about 7,000 hertz in steady state.
26:27 Once we've tuned out to 7,000 hertz in steady state, we're going to then look at getting some data under a wide open throttle ramp run, and that's going to be looking at the higher frequency, higher air flow values, so we'll be able to cover the entire range of our MAF table.
26:46 So I'm just going to pull the car into gear now, and, you can see that every time we access a new cell, we see the numbers instantly move around a little bit, and, we don't want to be accessing any cells very briefly, we want to make sure that we spend as much time as possible in each cell in the table.
27:07 And actually if we click here you can see we have three options of the way we can display this data, at the moment we're sitting on A which stands for average, so that will average the values being logged in any of the cells we're accessing.
27:23 If we click on C, we can see that this is how many counts or how many samples the logger has seen in each of these particular cells, obviously we've been sitting at idle for a while so you can see we have a huge number of samples.
27:38 When we're doing this sort of logging we generally want to see at least 50 samples in each of the cells, that's going to give us a good average for our data.
27:48 So, what I'm going to do is we'll just allow the engine to start running, and, I'm going to just smoothly increase the throttle position, and I'm going to get us up into fourth gear, and then we're going to start using the dyno to help us control the amount of load that's being applied to the engine.
28:13 So I'm going to just bring our rpm down for a start, you can see that as we transition through there, as I was changing gears, we've now got this spike here at 3,450 hertz, where we've gone up to positive 3.5% so we've actually had a positive error where the air fuel ratio was leaner than our target.
28:35 Now, that doesn't really follow the trend that we're currently seeing so what I'm going to do is I'm just going to close my throttle down a little bit, and I'm going to do this really smoothly, and this is again why it's so important to drive the car smoothly.
28:48 See how I get back down now to our 3,450 rpm, sorry, 3,450 hertz cell, and now that error's actually gone negative, so we really need to be very smooth, very gradual with our changes, and I'm going to come down to 3,300 hertz and do exactly the same.
29:07 What we should see if we're doing our job properly here and we're getting good data, is we should see a nice smooth trend to the values in this table, that's a good indication that everything's working.
29:20 If we're starting to see really erratic jumps, one cell is positive five, the next is negative six, in that case then we're probably not getting good data.
29:30 Alright, so we've gone back and we've redressed those cells down below that we just glanced through briefly, as I was changing gear.
29:38 And another tip here is we can also stop the scanner, get into our gear that we're going to be performing our logging in, and then restart the scanner, that's another great way of avoiding any potential problems that come from the gear shifts, or transients.
29:56 Alright, so now we're in a relatively steady state so, what I'm going to do, each cell I visit I'm just going to basically sit in that cell, until I see the value relatively stable, and, we're just going to increase our throttle opening slowly, and, make sure that we hit every cell as many times as possible.
30:28 OK, well we've got up to about 4,200 hertz now, so we're just going to increase the throttle a little bit further, and we'll just keep moving through our table.
30:44 Particularly now we can see that we're sitting at around about 4,200, 4,300 hertz, you can see that we've got quite a large error, we're around about 5 to 6% too rich.
31:10 So I'm just going to continue to fill out this histogram here, until we get out to around about 7,000 hertz, which you can see we're creeping up on, and you can see in this area we do have a relatively constant error around about that 5 to 6%, and that's something we're definitely going to want to be correcting.
31:38 OK, so we've got out out to 7,200 hertz now, I'm actually going to stop the scanner before I back off the throttle, and the reason I'm going to do that, is that that prevents any errors creeping in as we scoot back through the table back down to our idle areas.
31:54 Well you can see we've got a good table there, a good histogram of data, and if we click on the Count tab, you can see that we've got a lot of hits in each of these cells so, as I said a minimum for good data we would want to see is probably around 50, and you can see that I'm getting generally a minimum of about 200, 250, so we've got really good data that we can rely on.
32:20 Now that we've got our data we need to do something with it to help correct our MAF transfer function, and there's a variety of options here.
32:28 One of the popular ones that a lot of tuners will use, is to use the Paste Special function in the VCM Editor, and to do this what we can do is simply copy all of the values out of our table here, so I'm going to do that now, if we highlight and copy all of the values in our table, and for simplicity I'm just going to go right the way through to the end of our curve, even though we don't have any data there.
32:55 I'm going to right-click and press Copy, or alternatively we could use the Control plus C function.
33:02 Now if I go back into our VCM Editor and we open up our MAF Calibration, if I right-click on our calibration, you can see we have the Paste Special options, and the two that we'll be interested in here are our Multiply by %, or Multiply by % - Half, so what this will do is either apply the full percentage change that we've just measured in our histogram to the MAF transfer function, or alternatively if we use the Half, obviously as its name implies it would provide half of the correction, so if we do that now we'll see that the values that we did log, everywhere from 2,700 up to 7,200 have now been changed.
33:45 Now let's have a look back at the values we actually had in our histogram, and decide if this is the best way of dealing with this data.
33:54 Now if we look at these values you can see that, despite my best efforts to keep a relatively smooth throttle opening, we still have some quite large jumps from one site to another, for example here between 4,000 and 4,200 hertz, we jump from minus 2 to minus 4.5%.
34:16 Now generally, I wouldn't expect to see such a dramatic change, I'm looking for a smooth shape to this curve, so my own personal preference is to look at this data and try and spot some trends, rather than blindly copying and pasting using the Special Paste function, and I generally find that this often gives me a better result.
34:39 So let's have a look at how we're going to do that now.
34:43 And what I'm going to do is simply go through our table and make the relevant changes.
34:48 So you can see for a start at 2,700 hertz we have a value of 1%, now that's as low as we can get down in our table, so what I'm going to do is I'm going to highlight our entire table, from 2,700 hertz and below, and I'm going to add 1%, and I can do that by multiplying by 1.01, so it's going to add 1% at 2,700 hertz and below.
35:15 You can see that we have, at 2,800 and 3,000 rpm we've got about a 0.5% change, I'm not really going to be chasing 0.5% at this point.
35:25 From 3,100 through to around about 3,600 we've got about a 1.5% negative trim, so let's make that 3,100 to 3,600, and we will just move out to 3,600, so, we go back and have a look at our percentage change, we were removing 1.5% approximately, so, what I can do to make that change is multiply it by 0.985.
35:56 Even if you are using the Special Paste function, I find that going through and manually doing it like this for our demonstration gives you a better indication of exactly what's going on in the software, if we have a good understanding of how this is working in the software, we're going to be able to apply the tuning technique ourselves more accurately as well.
36:15 OK, so we're out to 3,750 rpm, and you can see from, sorry, 3,750 hertz, and you can see that we're sitting at around about negative 2% out to 4,050 hertz, so let's do that, 3,750 hertz to 4,050, so we're now looking at a 0.98% change to take out 2%.
36:41 Now from 4,200 things get a little bit worse, we've got about a 4.5, let's call it a 5%, a 6.5, let's call it a 7%, and a 7% change, so we can make those now, 4.5, 6.5 and 7%.
36:57 To take out 4.5 we need to multiply it by 0.955, and then we wanted a 5.5, so that will be 0.945.
37:09 Alright I'm going to now just continue going through, up to our 7,200 hertz that we've registered so far, and follow the trends that I see.
37:18 Just, what I'm looking for here is smooth trends, I'm not trying to be precise to 0.5%, I'm just trying to make sure, more than that, that I keep a smooth and consistent shape to my MAF scaling, so let's carry on through and do that now.
38:08 OK, so we've transferred the trend over from our histogram into our mass air flow calibration table, so that covers our idle through to 7,000 hertz, which is generally about the point we're going to be transitioning into our power enrichment, wide open throttle.
38:25 Notice we've also carried on that trend down below our idle areas, and what this is going to result in, because I'm not picking out peaks and troughs, we're going to end up with a smooth shape to our MAF transfer function when we look at it graphically.
38:41 We can see there's still a slight bump here at about 7,200 hertz, and that's simply because we haven't done anything with the higher area of the scaling just yet, so now, let's have a look at how we can go about this.
38:56 This time we're going to go back to our scanner, we're going to start our scanner operating again, and this time what we're going to do is log some data into our histogram under wide open throttle operation.
39:08 We'll just get our engine operating in fourth gear again, and we can perform another run on our dyno.
39:14 So what we want to do here is, I've just stopped the scanner, I've gone to wide open throttle on the dyno, so I'm happy that everything's stable, I'm just going to start recording data again, and we can start our ramp run.
39:55 OK, so that's our ramp run complete, and you can see now on our histogram, I've stopped the data logger there while we were still at wide open throttle at the top of the run, for exactly the same reason, so we eliminate gathering data as we move back down through our air flow range so I really want to get good data at wide open throttle.
40:18 Now you can see that the trend we have here, if we look at where we were in this data, we actually started down quite a bit lower, we started our run at 5,500 hertz, but you can see that in general, as we'd hope and expect, the trim values that we've got in there, remember we went up to about 7,000 hertz, 7,200 hertz, are relatively similar to what we saw in steady state.
40:42 So what we're interested in now is completing the same task, we're this time going to be looking at what's happening above 7,200 hertz, so I'm simply gonna go through now and perform exactly the same job, copying through the trends that I see in this table into our MAF scaling so watch while I do that now.
41:10 OK so that's completed our first round of scaling adjustments to our mass air flow sensor so I'm going to simply save our modified calibration now, and we're going to write that back into the ECU, and following that we're going to go through and see how much closer we were to our last log file.
41:31 Alright we've got our engine running again and you can see we're sitting here idling now, and this time with that single round of modifications made to our MAF scaling you can see particularly right now we're sitting at 2,700 hertz, and our error is essentially zero, so that's looking really promising, what I'm going to do now is I'll get it into fourth gear, we'll stop our scanner, and once we're stable in fourth gear, we'll have a look through at the range of air flow, and see exactly how close we are now with that first round of changes made.
42:03 Alright, so I started the scanner here, and I'm not going to be too fussy at the moment, I just want to move through, and have a basic look and see how close we are, and you can see that most of the error that we were seeing in our first test is now gone, we're now sitting within about 0.5% of our target, just about everywhere we're looking, so this is all really promising.
42:27 Now this is exactly what we are hoping to see when we go through and make adjustments to our MAF scaling.
42:34 Now of course we're not always going to get this correct in one single attempt, and we may find some areas where we still need to go through and further refine our MAF scaling, to make further changes.
42:47 Now if you're using the Special Paste functionality in the VCM Editor, what I find is useful is, particularly when we're a long way away from our commanded air fuel ratio, when our error's quite large, perhaps 5 to 10%, then we can use the Paste by %, and then, when we're starting to get a little bit closer we can start making smaller changes by using the half, half the error paste, so, that's a good trick there.
43:15 So you can see that with my one single adjustment there to our MAF scaling, we're already really close, possibly what I would do is go through and make a change in here where we can see we're up around about 1% error, just about at 4,500 and 4,650 hertz, however, we're up to our 6,300 hertz and, you can see that again our error is still very slight.
43:44 If we are trying to choose what sort of error we want to see, it's always worthwhile actually aiming so that our air fuel ratio is slightly richer than target.
43:57 Now particularly if you've still got your long term fuel trims enabled, what that's going to do is it's going to mean that our long term fuel trims are negative, however, those negative trims don't get carried through into our open loop operation.
44:10 Alright, so let's do another wide open throttle ramp run on our dyno, and we'll see how close the wide open throttle area of operation is, so let's do that now.
44:20 I'll just get through to wide open throttle, and I will just restart our scanner so we're only really getting the data at wide open throttle, and we can begin our run.
44:55 Alright, so we've got our wide open throttle area of operation logged in, and you can see that this time we do have some areas that we do still need to go back and address, in particular, around about 8,250 hertz through to about 9,300, we probably want to go through there and add another couple of percent, and likewise if we scoot back across to the left a little bit, you can see that we've got an area, particularly down at 6,700 through to about 7,000 hertz where we're up at about a positive 3.5% trim.
45:31 So this is an iterative process, we're not always going to get this accurate in one single hit, we'll simply go through now, make a further change to our MAF scaling, until our errors are all within about 1% of zero.
45:43 Normally we'll find that if everything's working well, we're going to be able to correct our MAF scaling and get it within that 1% error, with about two or potentially three attempts so, I'm not going to continue and do that now, we're going to move on and look at how we can correctly scale the virtual volumetric efficiency side of the ECU's operation.
46:09 Once we've got our MAF scaling accurate and we're happy with that, the next step is to move through and do exactly the same with our virtual VE table, and we need to now set up the ECU to ignore the MAF sensor and work solely off the virtual VE tables.
46:25 So we can do that first of all by going back to our Dynamic Airflow tab, and this time what we want to do is max out our High RPM Disable and Re-enable, so we're going to set, we're not going to set them to 900, we're going to set both of these to 9,000 rpm which will have them revert to their maximum value of 8,192 rpm.
46:51 The next thing we're going to do is go into our Engine Diagnostics tab, and we're going to cause the ECU to ignore the input from our mass air flow sensor, and we can do that by setting our MAF Frequency Fail to a value of zero, so what this is going to mean that essentially any time air is flowing through our mass air flow sensor, it's going to determine that the mass air flow sensor is faulty and ignore the input from it.
47:22 At the same time it's useful to come into our DTCs, and if we move down to our Mass Air Flow Sensor Performance DTCs, we can see that these are all set to bring on the Service Engine Soon light, which we want, and the other thing there they're going to do is they're going to bring on the, they're going to report the error on the second error.
47:49 What I want to do is just adjust these so that as soon as we actually start the engine, the mass air flow sensor is straight away going to be reported as being faulty, being in error, and we're going to be running straight off our speed density tables.
48:08 Now, a key here that a lot of people make a mistake with, if you are going to set up the ECU to use the speed density system and rely on that, a lot of people will set this to No Error Reported, where in fact the ECU actually needs to report the error and see that mass air flow sensor as faulty in order to go and run in the speed density tables, so that's an important distinction there.
48:35 Alright, we're going to go back to our Engine tab, now I'm going to make one more change here, we're going to go into our Cutoff, or Deceleration Fuel Cutoff settings, and what we want to do is make sure that the engine won't go into deceleration fuel cutoff, and we can see our parameters for doing this are here.
48:57 So what we want to do is make sure that when we back out of the throttle the engine isn't going to cut off the injection, and that's going to mean that the data we're getting in our tables is still relevant.
49:10 OK, so our first setting, we're going to set our Enable Temperature here to 300, and we're going to set our Disable Temp to minus 40, so this is going to make sure that the system, the decel fuel cut will never be active at the same time.
49:28 We're going to set our Enable RPM to 9,000 rpm, so that will again mean that we aren't going to be able to activate this, and we're going to set our Disable RPM to zero.
49:41 So now we've set that up so that the decel fuel cut won't become active, we've got our speed density tables enabled, we can now save our file, save our ROM, and we're going to flash this into our ECU, and we're going to do some more logging.
49:59 Right, we've got our engine running again, and while it's reaching normal operating temperature, we're gonna go through the process in our scanner of creating a new histogram, so we can actually use the histogram data, our measured air fuel ratio error, to help us tune the engine's virtual VE table.
50:20 So let's start by adding a new graph that we can configure and I'm going to call this Equivalence Error, and I'm going to call this SD so we can differentiate between this and the histogram we've already set up, to help us with our MAF scaling.
50:37 So the parameter that we want to be looking at here, or logging into our histogram is our Equivalence Ratio Error, we can find that down under our Math functions, and we're going to look at that out to two decimal places, and I'm gonna setup some shading just so we can see exactly which way our error is going, just at a quick glance, this is just a nice, easy way of confirming exactly what's going on.
51:09 And now we can set up our Column Axis, we're going to set our Column Axis to Engine RPM, or Engine Speed, and then we're also going to select our Row Axis and we're going to set that to Manifold Absolute Pressure, gonna select that particular input.
51:34 And now what we need to do is get the axes, the values for our breakpoints for both of our axes, and we can do that by clicking back into our VCM Editor, and let's bring up our Virtual Volumetric Efficiency table.
51:48 We can click anywhere here, click on Column Axis and Copy Labels, and, we go back into our scanner now, our Column Axis, we can now click and paste, and that's going to paste in those breakpoints for our histogram.
52:05 We'll do the same again, and this time we'll do the labels for our Row Axis, we'll go back into our scanner and paste those in using the Control + V function.
52:16 So that's now set up our histogram, and you can see that that's now being displayed.
52:23 Now straight away you can see that it is being populated with our error values.
52:29 Now the process that we're going to go through to fill out this table is not a lot different to what we looked at with our mass air flow sensor, however we do have a lot more data to fill in and this is one of the reasons that a lot of tuners just simply won't take the time to do this, and will run the car solely on the mass air flow sensor.
52:51 Now we don't necessarily need to fill out the entire table though, remember the factory default value where it will change over to solely using the mass air flow sensor is about 4,000 rpm, so what we're going to do is try and fill in this table with as much data as we can, across that range.
53:10 Again the process is the same as what we already looked at, we want to drive the car really smoothly, very very small throttle inputs and we want to get as much data from each cell as possible so we're getting accurate and consistent results.
53:27 So let's go through that process now, we'll use our dyno to hold our rpm consistent, and I'm just going to start by getting us into fourth gear.
53:46 And we'll start with as little rpm as we can possibly get, so let's go back down to 1,000 rpm here, and you can see that at this point we're logging quite positive trims, we actually need to add a little bit of fuel in order to correct those trims.
54:05 So all I'm going to do is use the dyno here to hold my rpm consistent, and I'm going to just slowly open the throttle, and I'm trying to get us up to around about 90 kPa here.
54:20 We're going to look at tuning this in two separate ways, we're going to tune in steady state, in our closed loop, well, we are in open loop but where we're targeting an equivalence ratio or lambda of one, and then we're also going to do a wide open throttle ramp run and we're going to look at those high load areas where we're targeting our 0.85, 12.5:1 air fuel ratio.
54:45 So I'm just gonna go through now and fill in this table with as much data as I can.
57:08 Alright, so you can see that following that test we now have our histogram full of quite a lot of data, I've managed to accurately hit most of the cells between 1,000 rpm and 3,800, I'm not really interested in going much further than that, remember out cutoff, if we're going to continue keeping the MAF and speed density systems enabled is 4,000 rpm, so, we're right out to there and we've got good data.
57:38 If we click on our Counts we can see that we've got, in general, a lot of hits in all of those cells, again, general guideline, we want to make sure that we've got at least 50 hits in each of the cells, but while I'm doing this I'm also watching and making sure that the value in the cell stabilises at a sensible number.
58:00 Now this is obviously relatively easy to do on the dyno and it is a little bit more difficult to do out on the road, and in particular on the road it is incredibly difficult to do this with a nice smooth throttle input, and managing to hit all of those cells, particularly if you are, regardless whether you're doing this on the road or on the dyno, you also want to make sure that your engine coolant temperature, and more particularly your intake air temperature is relatively stable across your entire test.
58:30 If your air temperature is skyrocketing through the test that's going to actually influence your results, and also while we're doing this test on the dyno here, we're applying a lot of load to the engine for a long period of time and that can result in high coolant temperature.
58:47 OK, so now what I'm going to do is we'll have a look at how we can use the Paste Special function.
58:55 Again our options here are really dependent on your own preference, we can choose to spot trends in the columns of our histogram here, so let's say for example at the 1,000 rpm column, we can see that from about 32.5 kPa, through to around about the end of our log here at 90 kPa, in general we need to add around about 2.5% more fuel, we do have this area in here in the middle where we're closer to about 4%, so we could do this manually, by spotting trends.
59:37 Particularly if you've got some really haphazard data which you're quite likely to do if you're doing this on the road, that is generally the best way to get great results.
59:46 Let's have a look though, considering our data is reasonably consistent and use the Special Paste function.
59:54 So what I'm going to do here is highlight the entire histogram and I'm going to press Copy.
01:00:00 I'm gonna come back to our editor, and I've got our Virtual VE Editor open.
01:00:07 Now, the mode that you're going to edit is quite important here, so for our particular engine we don't have displacement on demand or a manifold switch so the actual VE table that it operates off is our Manifold Switch Open VE mode.
01:00:25 So what I'm going to do now is click Paste Special, and I'm going to click on the Multiply by %, and you can see that straight away that's made those changes that we've just seen to those areas of the VE table.
01:00:42 And what that's also done is you can see now our Calculate Coefficients button is no longer greyed out, we can click on that.
01:00:50 Before we do though we're gonna make one more test run, this time we're gonna grab some data at wide open throttle, and we're going to see exactly what our error is under wide open throttle, so this is exactly the same as what we did for our MAF scaling.
01:01:07 If you are planning on keeping both the MAF and speed density systems active together, we don't really need to do a full run here, right through the entire rev range, we're really only interested in the dynamic air flow cutover point which is around 4,000 rpm.
01:01:24 So that's what we're going to do now, we're going to get our engine running in fourth gear.
01:01:29 I'll record in our data, so we've got some data to look at.
01:01:35 What I'm actually going to do is I'll reset this log, as soon as we're actually up and running, so that we have nice clean data at wide open throttle.
01:01:45 So I'm going to go to wide open throttle now, we'll start our data logging, and all I'm going to do is just wait for my error in this particular cell, in this case 95 kPa, and 1,200 rpm, to stabilise, I don't want to run through this until we've got some stable data.
01:02:08 OK, we can press Go and start our run.
01:02:30 OK, so we've completed our ramp run there, and you can see on the wide open throttle our error actually isn't too significant, what we've got, between about 1,400 rpm and 2,600 rpm, you can see we were very slightly rich and the scanner shows that we have an error of around about 1.5, maybe 2%.
01:02:52 As we move higher in the rev range you can see that we're actually really really close, our only area that I probably would consider making a change to is 3,800 and 4,000 rpm we're starting to need to add a little bit of fuel, so let's make those particular changes manually.
01:03:11 So what I'm going to do first of all is between 1,400 and 2,600 rpm, from 92 kPa and above, we're going to remove 1%, so let's go back to our scanner.
01:03:24 So 1,600 rpm and 92.5 kPa and above, and I'm just going to extrapolate those changes all the way down to 105 kPa, even though we're not going to get there, and we're going to remove 1%, so that is multiplied by 0.99.
01:03:44 And then if we go back to our scanner, you can see the other change that I wanted to make here, is at 3,800 and 4,000 rpm, and in this case I'm going to add 0.5%.
01:03:55 So 3,800 and 4,000 rpm, and this time we were starting to actually drift down towards 90 kPa, so I'm going to add 1.005, to add 0.5%.
01:04:11 OK, so that's given us one round of adjustments to our virtual VE table.
01:04:19 Again this comes down to your own personal preference, if you're going to be relying on your histogram and the Special Paste function, I would generally recommend using the polynomial smoothing function, which we can find here, so this will smooth our entire table, or the bounds of our table, and what we can do is highlight the table, and click that one time, and that's going to just take out any erratic values and smooth them.
01:04:50 If you are manually spotting trends that's generally not necessary, so really it comes down to your own personal preference as to how you're applying your tuning changes.
01:05:00 If you are going to use the smoothing function, I would only use it a maximum of one time, if you continue to smooth this you're going to end up with a beautifully smooth looking VE table, however, it's probably also going to not represent what the engine is actually needing.
01:05:19 OK, so now what we can do is click on our Calculate Coefficients, and if we close down our editor, and we go back to our Airflow and Speed Density, you can now see that the relevant VE Coefficient tables are now showing in pink, that shows that they have been altered.
01:05:36 So now let's save that particular calibration, I'm going to leave us at the moment running in speed density only, and we're going to flash that map in and just have another look and see if we're any closer.
01:05:50 Alright, so we've got our engine running again on the dyno after our first change to our virtual VE table, you can see at the moment I'm sitting in fourth gear at 1,200 rpm at 40 kPa, and we're just having a look again through the table at our errors.
01:06:06 And you can see that we still have some error present, but however that error is now much smaller than our first look at the table.
01:06:16 And again we're trying to get as close to zero as we can here, if we do need to err on one direction, we'd always like the air fuel ratio to be a little bit rich, and if we're a little bit rich what that's going to mean is that the short term fuel trims and the long term if you've still got those active, are going to be removing fuel, that's a safer way of operating, and also the long term fuel trims then will not be carried over into our wide open throttle, open loop operation.
01:06:48 So you can see here I've got, at 1,200 rpm, we're down to about 85 kPa, and essentially my error has been reduced to a maximum of about 1%, so I mean it all looks really positive and you can see we've made that with just one single change to our virtual VE table.
01:07:08 This is always an iterative process so, it's quite common that we may need to make two or three attempts at getting this really closely dialled in, but you can see already how much closer we are, and how that was still a relatively quick and easy process.
01:07:23 What we're going to do now is have a look at what our fuel trims are doing under wide open throttle, and see if we need to make any adjustments to that area as well, so let's just do another ramp run, we're gonna do this again just out to about 4,000 rpm, the area we're actually interested in.
01:07:59 OK so we've got our second full throttle ramp run there done, and you can see this time we've got a little bit more work on our hands, we do have this area here at the end of our run where we do need to go through and add a little bit more to our VE table in order to correct that error.
01:08:17 Likewise I'd probably go through and remove a little bit more from our VE table down at the start of that run, where we were a little bit rich.
01:08:25 In essence though this is the process we go through using the histogram to help us decide what changes we need to make to our virtual VE table, flashing those changes in, and then testing again, exactly the same process as we looked at for our mass air flow sensor.
01:08:44 One more aspect I want to discuss, regarding editing our virtual VE table, and it doesn't matter if we're using our Special Paste function, or we're manually copying trends from our histogram data and editing our virtual VE table, we're going to find that there's areas in the virtual VE table that we simply can't get to, we can't log any solid data.
01:09:06 So we've got our virtual VE table in front of us here, and we can see that particularly here at lower rpm and higher load we haven't been able to get any data there, and likewise at moderate to high rpm and very low manifold pressures we haven't been able to get any data in these areas.
01:09:24 Likewise we have a small blank space here between where we've performed our steady state tuning at an equivalence ratio target of lambda one, and then when we've moved into our power enrichment and done our wide open throttle ramp runs.
01:09:40 So what we want to do though, before we move on, is copy any trends that we're seeing, across into these areas that we haven't been able to get to.
01:09:50 So what I mean by this is, we're going to look here at the data that we have, the changes that we've been making at 1,000 and then perhaps 1,200 rpm here, and we're going to simply extrapolate that data out to these untuned areas, to these areas that we haven't been able to actually log on the dyno and get good data.
01:10:13 Likewise, the data that we do have in our areas down here at lower loads and moderate to high rpm, we're going to simply extrapolate that data down into these lower areas where we haven't been able to get to.
01:10:31 So what this means is that, while we haven't been able to get the data we're just copying the trend, and this is going to keep a consistent shape to our VE table.
01:10:40 And the reason for this is if, for example, we are a little bit rich in this area here at 2,000 and 2,200 rpm, we're going to expect that the current VE table is probably going to carry on that trend, and in these lower load areas down at 23 kPa and below, we're probably going to also be a little bit rich so by copying and extrapolating that trend down into these lower manifold vacuum areas that we can't get to, we're going to get our tune, our VE table closer.
01:11:17 Now while we can't always get to these areas on the dyno, what we will find is that we may occasionally pass through these under certain circumstances out on the road, so this just helps keep our VE table more accurate, and get us closer to a perfectly tuned VE table.
01:11:35 Likewise, the area that we've occasionally going to have, where we've got no data between our steady state histogram data and our wide open throttle histogram data, we're simply going to look at the trends we have, both under steady state and wide open throttle, and we're going to extrapolate that trend into these areas, so this just keeps our entire table complete and accurate.
01:11:59 Now once we've got our virtual VE table calibrated correctly, on this particular engine we're not running displacement on demand and it doesn't have intake manifold runner control, so we've been making our tuning changes here in the Manifold Switch Open VE mode.
01:12:16 What I like to do here is to copy this VE table and paste it into our other three VE tables, so they're all the same and you'll notice that this is the way the calibration on this particular vehicle was, from factory.
01:12:29 And this means if for any reason the PCM does end up accessing one of those other VE modes, we know that our VE table is still going to be correct, so we can do this by pressing Control + C to copy our VE table, and then we simply need to change to the other modes and Control + V, or our Paste icon will paste the data into our new VE mode.
01:12:54 Each time we do this we do need to click on the Calculate Coefficients button, so that that data isn't lost, so we'll just go through now and copy that into our other three tables, and we've now got that complete.
01:13:08 So we've now got our virtual VE table correctly calibrated, we know it's accurate, and we've copied that into our other three tables so they're all identical.
01:13:18 Now once we've got our virtual VE and our mass air flow sensor calibrations dialled in and optimal, where we're exactly where we want with no error or very little error, what we can then do is go ahead and revert our tune back to stock in terms of using both the mass air flow sensor and the volumetric efficiency table, now you remember we made quite a few changes initially to set that up.
01:13:46 Now the quickest and easiest way of getting back to stock, is if we open a compare file, and we use our base file as the compare.
01:13:56 What we can do then is see anywhere, anywhere in the tables we have a difference, those are highlighted by those tables showing up as green, now obviously we've changed our VE Coefficients so we want to leave those changes valid.
01:14:11 What we want to do though is go to any of our tables we did change and, for example, our Deceleration Fuel Cutoff parameters.
01:14:20 In order to copy those parameters back across from our base file, we can simply use our icons here.
01:14:28 The left icon shows our main file, this is the file we're working on, the next one shows our compare file, remember this is our base file, and then finally we can also see the difference between the file.
01:14:40 So in this case we can see that our Enable Temp and Disable Temp were 30 and 25 degrees, and our RPMs were 1,100 and 1,200, we can make those changes to our main file, and you can see that now we have no difference between our base file and our new calibration.
01:15:11 So the process is simply to go through and make changes to any of those tables that we originally changed, and remember we made a lot of changes to our Open Loop tables so that we were always targeting an equivalence ratio of one, so we want to go through and copy all of those changes across as well.
01:15:31 With tables like this we can also use the Compare function to make our job really easy, if we look at our compare file, remember this is our base file, and we can then simply click to highlight the entire table, and we can press Control + C on our keyboard, or alternatively our Copy icon here, and go back to our main file, the one we're working on, and we can click on the Paste, or we can also use the Control + V function, and you'll see when I close that down, that that table has reverted to the same as our base file, we've changed it.
01:16:10 It's a really quick and easy way to go through and correct any of those tables that we've adjusted.
01:16:15 We can put the PCM back into blended mode where it's utilising both of those inputs for its mass air flow calculation.
01:16:24 So there's a couple of areas we need to look at here, first of all we have our Dynamic Airflow settings, and at the moment I've just got our base map still loaded up, so we can simply look at what the settings were in our base map and our factory calibrations so, in this case our Dynamic Airflow settings are already at our factory settings.
01:16:44 Let's go through to our Engine Diagnostics and you'll remember that in order to scale our virtual volumetric efficiency tables correctly, we had failed the mass air flow sensor, so this means that the PCM was ignoring the input from the mass air flow sensor, so what we want to do again is copy our stock settings back in, so that our mass air flow sensor will be re-enabled.
01:17:10 So we can do that by clicking on our Show Compare File icon here, we can see that the values that we had in our base file are 14,500 hertz and then 300 hertz.
01:17:23 Let's go back to our current file, and we'll make the same changes to this file, so now that's re-enabled our mass air flow sensor.
01:17:33 And the other thing to keep in mind is if you have changed your Diagnostic Trouble Codes for the mass air flow sensor, if you had disabled in particular the Check Engine light, we want to re-enable that now so that we do in fact see a Check Engine light if we do get a genuine mass air flow sensor error.
01:17:55 Alright, so that's the process of scaling both our MAF as well as our virtual VE tables.
01:18:01 It is a little bit labor-intensive, but you'll see when we move into the next section of this worked example that the effort that we've spent there is going to be repaid because it's going to make the rest of our tuning exercise so much easier.
01:18:15 I can't stress enough that all of the ECU's calculations are based on solid data from both the mass air flow sensor, as well as our virtual VE tables, and if either of those are wrong, particularly if you're still using both inputs as per the factory calibration, this is going to affect the way the engine performs, it's going to also affect the drivability so it is worth understanding how these function, and taking the time to properly optimise both.

We usually reply within 12hrs (often sooner)

Need Help?

Need help choosing a course?

Experiencing website difficulties?

Or need to contact us for any other reason?