Forum » Practical Dyno Tuning » Closed Loop PID configuration

Closed Loop PID configuration

Practical Dyno Tuning

Discussion and questions related to the course Practical Dyno Tuning

Page 1

Hello everyone, I'm from Brazil and now I'm tuning the Formula SAE car from my University (Universidade de São Paulo). The engine runs on E100 and I'm tuning on crank Dyno using an Fueltech FT600 standalone,in low rpm range the engine is oscillating a lot in closed loop, but I'm very confused to configure the PID, in the closed loop settigs I can configure only one fixed loop time( in Hz) and only fixed numbers of Proportional,Integral and Derivative gains the software doesn't allow-me to configure this gains and loop time for each specific rpm range, how can I reduce my rpm oscillation without sacrifice the closed loop efficiency at high rpm?

Attached Files
  • WhatsApp-Image-2017-11-11-at-15.57.39.jpeg
  • Attachments may only be downloaded by paid Gold members. Read more about becoming a Gold member here.

Back up a bit.

You've got an engine running E100 bolted directly to an engine dyno, correct? What kind of dyno is it? Is it an eddy current, water brake, or motoring dyno?

What are you trying to do with the dyno? Are you trying to hold a fixed engine speed with the dyno or a fixed torque? What are those gains for? are those gains for the dyno brake (to hold speed) or are those gains for the fuel control feedback? What's your spark timing? What's your air fuel ratio look like? Can you post a data log (.csv or whatever format)? Do you have your engine dyno automation software recording data from the ECU or do you have separate files that you are trying to put together?

Yes, the engine is running on E100 bolted directly to an engine dyno, it's a motoring dyno.In the dyno I'm trying to extract the maximum torque of the engine, in the tune I try to fix the engine speed and increase ignition timing until reach the maximum torque varying the load on dyno, I try to cover the entire ignition map, and for the points that I couldn't reach I interpolate using matlab.This process is done after tuning the fuel map.The AFR is around 0,80-0,87 lambda in high load and 1 for cruise conditions.The dyno is very old and doesn't have any software, it shows just a value in mV.Those gains are for fuel control feedback, reading more about PID system I realized that my proportional gain is too high and probably it's causing this oscilations.Tomorrow I will do a log trying to cover all conditions and I post here.

If you only have 1 set of gains to cover the entire engine operating area, you have to balance the trade off of response vs stability.

High response (fast adjustment) --> not so good stability

Good stability (slow adjustment) --> slow response

Try focusing on "good stability" before you adjust to "fast response."

If your feed forward fuel control is good enough, try slowing down the PID gains. Set D gain to 0. Also, if the I gain is too strong, you can get what's called "integral wind up." Integral wind up is basically when the integral keeps learning the error and swings the controller in each direction. So if we are too negative, integral gain adds too much, we overshoot and are too positive. Then the gain subtracts too much, we overshoot and are too negative again.


What closed loop system you are talking about? Closed loop lambda?

Most PID algorithm in engine application use a fast forward table. This means you have to turn off all closed-loop algorithm and tune the open loop table (fast forward table) first. If you have this as close to the target as possible (usually 1-2%), you can activate closed loop control.

A good practice to tune your PID is if you apply an instant change of the target and watch how the closed loop system acts. There are different methods for tuning. One that I found works well is the Ziegler-Nichols method.

If you want to go deeper into control loop tuning methods. Here is a good read which gives you an overview.

This fast foward table that you're talking about is the normal VE table or the lambda target table? Yes Adrian it's a closed Loop lambda.Thank you guys I'll try to configure it soon.

Yes in case of closed loop lambda the ve table is the fast forward table.

I use the follow procedere to tune it.

1. setup all fuel related base tables and settings like injector lag time, short pulse wide adder, stochiometric ratio, fuel density, IAT correction table, charge temp estimation table etc.

2. Set your AFR Target table

3. Turn off closed loop lambda control

4. Tune your VE table as close as possible to your AFR target table. Shoulf be within 1-2% during steady state and ramp run.

5. Turn on closed loop lambda. Start with low PID gain. Set the settings that the system is off during transient conditions, accel enrich, rpm limit, shift limits and cold start.

6. Change your AFR table higher and back lower and log what closed loop lambda system is doing to achive your new target.

7. Try to adjust PID according ziegler- niclause. First target to get a stable system rather then speed.

8. If you achived a stable PID setting, try to optimise it to react as fast as possible without overshooting too much.

9. Change your VE table instead of AFR Target table up and back down by 5% and watch if the system reacts still like you want it at different load and RPM conditions.

10. Log your car on the street and track and watch if closed loop is doing what you want on real world conditions.

Thank you Adrian, probably for this year this tuning will not be possible due to the date of the competition, but for the next year I will try to do this tune, it seems to be much more solid and reliable.