The number one most important thing to decide for an engine control project is which EMS solution you're going to use. There are literally dozens of options available, but in terms of DIY, there are only a few choices each with distinct advantages and disadvantages.
No matter which system you choose there are two important all encompassing rules that should guide your choice:
- Choose as late as possible!!!
- Choose something that exists!!!
In other words, don't make your decision on EMS hardware a year before you plan to start installing it, wait until you have to start committing and buying things. And don't wait for products that are promised as coming soon, and yes, that includes FreeEMS firmware features and hardware implementations.
At this point, before proceeding further, you need to know your goals, desired outcome, desired results, acceptable timeframe and budget. These requirements will quickly and accurately dictate which system you choose, or perhaps that you need to rethink some of your goals to better match your timeframe and budget.
In terms of engine control requirements the fundamentals are as follows:
- Special engine hardware? ITBs? Dual plugs? 2 stroke? Odd fire? Siamese? Odd cyl count? Rotary? Staged injectors? etc.
- Sensors: RPM types? Temperatures? Load measurement? OEM or aftermarket?
- Injector control? How many? What type? What configuration?
- Ignition coil control? How many? What type? What configuration?
- Accessories? Fan control? Boost control? Idle control? Pump control? H2O injection? etc.
Each of these things requires support in both firmware and hardware, assuming that you have the physical engine hardware required in the first place.
The main things that need to be considered are outputs and output style. For example, the following limitations apply to each listed system type:
- MS1 - 2 Injector drives, 6 Ignition drives
- MS2 - 4 Injector drives, 6 Ignition drives
- MS3 - 8 Injector drives, 8 Ignition drives
- FreeEMS - 6 General purpose drives, used as either injector OR ignition drives
To understand how these limitations apply see this excellent thread
which explains what you can and can't do with FreeEMS at this time. Note, having only 6 output channels is a temporary restriction, but remember the two rules above (decide later, it could have changed, don't wait, it may take longer than you think). Support for more channels than you could ever hope to need is planned for early 2012 in release 0.4.0 of the firmware.
Some general (and obvious) considerations:
- Distributor ignition and batch injection require only one output each
- Odd cylinder counts (1,3,5, etc) can't be run in wasted spark or semi-sequential modes
- COP and sequential require the same number of outputs each as you have of cylinders
- Wasted spark and semi-sequential require the exactly half the number of outputs each as you have of cylinders
- Staged injectors double your injector drive count requirement (assuming the same style of operation)
The system also has to be able to handle your inputs properly. The critical sensors are the RPM and position sensors whose style varies significantly with each requiring custom and specific support. Each system listed below supports a varying number of systems at this time, and some are expanding daily.
- FreeEMS - A handful of key types supported, but, quite literally, infinite expansion possible due to a superior architecture. New types are added on demand within a short time frame, sometimes as short as a few minutes.
- MS1 - A good selection of types is supported, however it's done in a rudimentary way. Expansion is NOT possible without removing existing modes.
- MS2 - An excellent selection of types is supported, however not all are thoroughly tested or reliable. Expansion is NOT possible without removing existing modes.
- MS3 - A super-set of MS2 types is supported, however not all are thoroughly tested and reliable. Expansion is possible, however only by the development team, who aren't overly responsive, usually.
Support for more than two position sensors is limited in most designs, as is cam angle measurement and control.
Temperature sensors are usually straight forward, and not to be worried about. Likewise for load sensors, most MAP, MAF and TPS are easily supported.
If you have devices to control that aren't core engine control items then you'll need some way of handling those too. I'll run through each listed system with pros/cons in this regard.
MS1 - Common devices are supported, but implementations are usually crude, there aren't enough pins to run them all at the same time, there is no code space to add new stuff without removing other stuff anyway, and that would imply having the skill set required for assembly programming.
MS2 - A good selection of devices are supported, but implementations often carry regressions and faults that remain unfixed for, quite literally, years, there aren't enough pins to run them all at the same time, and the C code is really quite dirty and fragile and therefore difficult to modify without breaking it in the process.
MS3 - An excellent selection of devices are supported, the implementations, at the time of writing, are mostly exactly the same as MS2 and carry the same flaws and risks, but with an additional downside of not being able to fix them or customise them or add new features at all due to it being completely closed source. On the brighter side MS3 has sufficient pins to run almost everything at the same time, assuming the software is suitably flexible.
FreeEMS - Absolutely no accessory code exists at the time of writing (early December 2011) however it is straight forward to add such things as new user requirements pop up with new installs. Custom functionality not available in any of the MegaSquirt family of products can be added freely and custom hardware to cleanly (without masses of jumper wires and hacks) can be designed to support such functionality. This is not permitted with the MegaSquirt family of products.
Aside from having no accessory code and limited injector/ignition outputs for the time being, there are some other differences to consider.
Speed-density basics-only implementation
: This is only temporarily true, however for the time being there is very little in the way of basic normal run-of-the-mill features that you'd expect to find on almost any system. Things like rev limiters, transient enrichments, idle control, GP outputs, The reason is that such code only gets in the way while working on other aspects of the system and thus they are being left out until needed by an actual user who is installing or has installed FreeEMS on their vehicle.
Alpha development status
: Due to the fresh clean-sheet implementation and limited testing all users of FreeEMS will need and want to be actively involved in the development community in terms of testing new code, new hardware and providing feedback and issue reports for developers to more efficiently improve the system. This is not for everyone. Testing new code that relates to your ignition timing and AFR really is dangerous and this will be done entirely at your own risk. The same can be said about MS2 and MS3 (MS1 is pretty mature and stable with known manageable weaknesses), with two key differences:
- Transparent development process - publicly viewable and reportable issue tracker, publicly viewable source code repositories, and in general transparency and accountability not seen in the land of MegaSquirt what-so-ever.
- Pool of testers - MegaSquirt clearly has many orders of magnitude more testers than FreeEMS at this time, however that is rapidly changing and with great effect on development speed and consistency.
- Quality oriented approach - FreeEMS has always had a strong focus on quality. Testing and process at every level is generally excellent from source code to delivered binaries and all tools used to produce them and work with them. The goal is no regressions from one release to another.
I believe the above is a fair representation of the truth and I hope it helps you in deciding which direction to go in for your project, whatever that may be!