History of MembersPage/NickLaTech/MarcellCode
Older Newer
2005-02-19 16:38:05 . . . . NickLaTech


Changes by last author:

Added:
-----

Marcell's Solution with my Comments

-----

Actual Code

http://cvs.sourceforge.net/viewcvs.py/megasquirtavr/firmware/boostcontrol.c?view=markup

-----

There is the code sniplet:

[code]

// going to 12 bits:

boost += boost;

if( (boost >> 4) > (uint16_t)config.boost_minpressure ){

uint16_t pid_result;

// TODO: boostcut (above configurable boost) in fuelcalc.c

pid_set_target( &boostcontrol_pid, boost_target() );

// with pid15() high-boost will decrease command (more DLOW)

// which is consistent with DLOW above

pid_result = pid15( &boostcontrol_pid, boost );

// pid_result useful range is -2048 .. +2047 (consider this in PID config)

// offset going to 0..4095 ( 0.5 fixed offset should be OK )

pid_result += 2048;

// prevent underflow, overflow.

// 3 outputs possible: always low, always high

// and something between

if( pid_result >= 0x8000 || pid_result < BOOSTACT_MINTIME){

// always OFF

schedule_needed = 0;

output = DLOW;

} else if( pid_result >= 4096 ){ // compare against (4096 - BOOSTACT_MINTIME) ?

// fully ON! good luck Mr. Gorsky!

schedule_needed = 0;

output = DHIGH;

} else {

schedule_needed = 1; // true !!!

output = DHIGH;

// when pid_result is 4095, we want appr.

// (BOOSTCONTROL_PWM_PERIOD_8MS * 2048) * 4 usec ON-time

command16 = mult16_8( pid_result, BOOSTCONTROL_PWM_PERIOD_8MS);

command16 >>= 1;

}

} else {

/*

Don't activate boost valve below/equal a configurable boost:

there is no need to wear the valve at cruising

at low boost where the wastegate is known not to open anyway.

Without this, the pid15() would raise command, so DHIGH would be likely

*/

schedule_needed = 0;

output = DLOW;

}

[/code]