advice needed for arduino as diesel injection brain...


hello,

for use on our tractor puller looking uc , since there lot of them looked @ open-source, large user group , support arduino obvious choice.
the device have react fast, within 20 microseconds , arduino's must not screwup coding.

so main question is; arduino platform capable?

our setup isn't complicated, since tractor puller no fancy stuff needed, have trigger injection , control injection time depending on throttle position. (potentio meter)
the potentio meter controls pressure of pump directly trough hardware , timing of injection done rotating disc , infrared led's not calculating things device.
i did try make code using examples , came following:

code: [select]

/*
  cuprum-2.0 simplified common rail injection system.
  use interrupts timing injections cycle, timing disc (alternator) mounted camshaft.
 
  attach center pin of potentiometer pin a0, , outside pins +5v , ground, output 0-1023.
  potentiometer used stereo, second line used control injection pump pressure.
 
  attach timing signals: cyl1 pin 10, cyl2 pin 11, cyl3 pin 12 , cyl4 pin 13.
 
  attach injector hardware: cyl1 pin 4, cyl2 pin 5, cyl3 pin 6 , cyl4 pin 7.
*/

// setup pin throttle potentiometer:
int throttlepin = a0;
int throttlevalue = 0;
// define throttle calibration values:
// 9000rpm = 150rps, 1000000us/150 = 6666us per rotation.
// 6666/360*30 = 555us injection time, 30 crank degrees @ 9000rpm.
// 1024/555 = 1.8
int rpm = 9000.0;
int angle = 30.0;
int throttlecalib = 1024.0/(1000000.0/(rpm/60.0)/360.0*angle);
// setup timer pins interrupts:
int cyl1 = 10;
int cyl2 = 11;
int cyl3 = 12;
int cyl4 = 13;
volatile int state = low;
// setup pins injector drivers:
int inj1 = 4;
int inj2 = 5;
int inj3 = 6;
int inj4 = 7;

void setup()
{
  // attach action when interrupt gets actived:
  pinmode(cyl1, output);
  attachinterrupt(0, inject1, rising);
  pinmode(cyl2, output);
  attachinterrupt(0, inject2, rising);
  pinmode(cyl3, output);
  attachinterrupt(0, inject3, rising);
  pinmode(cyl4, output);
  attachinterrupt(0, inject4, rising);
  // initialize digital injector pins output:
  pinmode(inj1, output);     
  pinmode(inj2, output);     
  pinmode(inj3, output);     
  pinmode(inj4, output);
}

void loop()
{
  // read input on analog pin 0:
  throttlevalue = analogread(throttlepin);
  // recalculate throttle value wanted microseconds:
  throttlevalue = throttlevalue / throttlecalib;
  // check interrupts:
  digitalwrite(cyl1, state);
  digitalwrite(cyl2, state);
  digitalwrite(cyl3, state);
  digitalwrite(cyl4, state);
}

void inject1()
{
  digitalwrite(inj1, high);
  delaymicroseconds(throttlevalue);
  digitalwrite(inj1, low);
}

void inject2()
{
  digitalwrite(inj2, high);
  delaymicroseconds(throttlevalue);
  digitalwrite(inj2, low);
}

void inject3()
{
  digitalwrite(inj3, high);
  delaymicroseconds(throttlevalue);
  digitalwrite(inj3, low);
}

void inject4()
{
  digitalwrite(inj4, high);
  delaymicroseconds(throttlevalue);
  digitalwrite(inj4, low);
}


quote
the device have react fast, within 20 microseconds , arduino's must not screwup coding.

so main question is; arduino platform capable?

react what? being hit sledgehammer? react that, instantaneously.

code: [select]
int rpm = 9000.0;
int angle = 30.0;

clearly, need learn difference between ints , floats.

code: [select]
  attachinterrupt(0, inject1, rising);
  pinmode(cyl2, output);
  attachinterrupt(0, inject2, rising);
  pinmode(cyl3, output);
  attachinterrupt(0, inject3, rising);
  pinmode(cyl4, output);
  attachinterrupt(0, inject4, rising);

after this, interrupt 0 has inject4 assigned callback function. might delete others.

you can not call form of delay in interrupt service routine.


Arduino Forum > Using Arduino > Programming Questions > advice needed for arduino as diesel injection brain...


arduino

Comments

Popular posts from this blog

Thread: PKI Client 5.00 install (for eToken Pro)

ATmega2560-Arduino Pin Mapping

Crossfader Arduino Tutorial