I know that there is a do not sue us line in the Arduino/ATMega data sheet about using it in automotive application. Before I use this in an actual car/truck application I planed on using it in a controlled environment. The question I have is how fast does a micro controller have to be to keep up with an engine running at 8000+ rpm? I know that to drive the ignition coils and fuel injectors you use a MOSFET to switch the coils on and off.
It depends entirely how clever your control algorithm is, and how many cylinders you have. Modern production ECUs are extremely complex and powerful. But you could get an engine to run on a very simple controller, if you aren't bothered too much about refinement, getting maximum power and efficiency, fault tolerance, ease of starting and throttle response and so on.
8000 RPM = 133.3 Rev/sec = 480,000 degrees per second = 20.833 uS per degree
Spark timing should be within 1 degree. You can run an engine with less resolution, but 1 is usually the minimum control for production systems. Racing engines time spark to 1/4 or 1/10 degree.
Fuel injection is not quite so critical, but most systems time the start and end of fuel injection to 1 degree.
Throttle body injection is continuous, so it is not nearly as critical; usually it's just a PWM.
Steve
For the ignition it would be sensible to use an external EDIS controller rather than try to deal with real-time crank timing issues on an Arduino. Fuel injection duration is critical but phasing is not, so you just need to maintain the injection frequency to match the engine frequency and vary the duty cycle with load and revs. I don't see any problem with that part. But deciding what fuel and ignition timing to apply can get very complicated if you're trying to run the engine as well and as reliably as a modern production ECU. On the other hand if you just want it to run and aren't fussed about economy, maximum power, emissions, tractibility, ease of starting, fault tolerance and so on then you can probably get away with a very crude algorithm which the Arduino could certainly cope with.
Throttle body fuel injection is not timing critical and can be driven by a continuous PWM signal.
Timing for port fuel injection is not as critical as ignition, but you need accurate pulse width to deliver the right quantity of fuel and you want to deliver the pulse at the right time. You don't want to squirt fuel on the back of a closed valve. You want to inject the fuel when the valve is open and the piston is near mid-stroke and air velocity is highest to get good air-fuel mixing.
All other points are well taken. We used to run engine with 4 MHz, 8 bit micros with 32K of memory, but that was with port fuel injection and mechanical ignition systems (perhaps with electrical advance / retard). I don't recall any port fuel injection systems using 6811 or 8051 based micros, but there could have been some.
Steve Turner
sdturner:
you want to deliver the pulse at the right time. You don't want to squirt fuel on the back of a closed valve. You want to inject the fuel when the valve is open and the piston is near mid-stroke and air velocity is highest to get good air-fuel mixing.
For sequential injection, the timing is critical. However, a large number of FI engines use bank fired injection where all injectors in the bank fire at the same absolute crank angle so at a different phase wrt the engine cycle for each cylinder.
For production engines I think you usually do want to inject when the valve is closed. By boiling the fuel off the back of the valve while the intake header is stagnant you can get maximum evaporation and charge mixing. It's not what I expected when I started playing with sequential injection, but I discovered that's how it's normally done and that's what worked best for me. Conceivably there are some exotic engines where the fuel is applied in phase with the air - this is what I had assumed and what I initially set out to achieve - but I don't think it's typical for sequential injection systems to work like that on the sort of engines we see in production cars.
For sequential firing you need a crank AND cam pick up, so you can determine which rotation of the crank each cylinder fires on.
Advance is handled on GM DIS by the DIS sending an ignition pulse to the ECM/PCM and the PCM advancing it and sending it back to the DIS.
Most GM ECMs/PCMs drop sequential firing and drop to batch firing of the injectors above a prescribed RPM.