Welcome to the SR20 Community Forum - The Dash.
Register
SR20 forum logo

Thread: Open Hardware COP controller

+ Reply To Thread
Posts: 41-50 of 75
2016-08-02 18:52:27
#41
Board received, just shot @ebinkerd a mail. Will be posting some stuff soon!
2016-08-03 09:16:23
#42
Here is the board:


It looks great, this particular board is 10*4cm big. Size is definitely not an issue, it could have been made way smaller/bigger, and still mount perfectly next to the ECU. There are two ways to mount this, either by the ECU or by the distributor. I'm gonna go by the ECU, since it offers more protection against the elements.

If we get into wiring this badboy up, you're gonna have to make some new wiring to the coils, and the rest of the signals can be intercepted at the ECU connector. Ebinkerd has a guide in the making, so for now, don't pay too much attention to this post regarding wiring.

The terminals are:

Start - Used to reset the board during starting
GND - Chassis ground, preferably next to the ECU
CR - Camshaft reference signal, taken from distributor
5Vin - 5V feed to the board. Taken from either Nismotronic ADC box or stock ECU TPS 5V feed if no NEMU available
CP - Camshaft position signal, taken from distributor
CYL1 - Output to Coil#1, needs to be a new wire added from board to coil
CYL2 - Output to Coil#1, needs to be a new wire added from board to coil
CYL3 - Output to Coil#1, needs to be a new wire added from board to coil
CYL4 - Output to Coil#1, needs to be a new wire added from board to coil
IGN - ?
SGND - Signal ground for ?
12V - 12V feed to the board

This post will be edited soon, don't pay too much attention to it.

To make things different, I'm gonna try to use this board with motorcycle coils. Honda CBR600 of a specific vintage should be just what the SR engine can use. I will update this thread when new info/parts arrive.
2016-08-03 10:26:02
#43
Thank you @Dala. You can stand those T0-220 components up right, I pushed them down for shipping.

This is very much a prototype/ test board due to the addition of the prototyping area on the right, and the edge connector that I use for testing.

The IC on the left hand side is the sequencer, or binary counter to be specific. That chip reads the CR and CP signals and decodes the cylinder position. The center IC is the bcd to decimal decoder. This changes the output from an 4 bit binary code to a decimal ouput, ie 1->2->3->4. The IC on the right is the ignition driver. That chip is an actual automotive ignition driver so that while it is costly, it provides excellent feedback protection. Essentially if a coil goes nova and shorts out, the ignition driver has an internal clamping mechanism that can protect the rest of the board. On the far right is the 5v regulator for the ignition driver. Currently the design requires two power sources for a specific reason. Basically the coils have a lot of inductance noise when the coil collapses and that noise causes a ringing in the ground circuit. Following the path of least resistance, I wanted all ringing to be isolated to a ground common to the driver vs the sequencer. The transistor on the left side is an inverter for the sequencer that tells it when to enable a count. And finally the T0-220 on the left hand side is a diode, two diodes actually. This is for the reset circuit to reset the sequencer once cylinder 4 has cycled.
Last edited by ebinkerd on 2016-08-03 at 10-27-04.
2016-08-03 17:53:44
#44
Since people on this forum are extremely performance/cost focused, I chose to go with maybe the cheapest type of coils you can use



These are "Denso Short" styled COP's, from a Honda CBR 600 motorcycle. As you can see from the above screenshot, they are extremely cheap, even with the wiring harness included.
2016-09-07 22:14:39
#45
I have been working on some code for the Arduino. If anyone else has some more experience than I in this language please give me some criticism. I'll try to get this on the bench this weekend to test functionality. It compiles ok, but that doesn't mean much.


const int CR = 2; // cylinder reference
const int CP = 3; // cylinder position
const int cyl1 = 4; //Cylinder 1
const int cyl2 = 5; //Cylinder 2
const int cyl3 = 6; //Cylinder 3
const int cyl4 = 7; //Cylinder 4
int buttonPushCounter = 0; // counts the amount of time the cylinder reference changes from high to low
int crButtonState = 0; // CR current state
int crLastButtonState = 0; // CR last button state
int buttonPushCounter1 = 0; // counts the ammount of times the cylinder position changes from high to low
int cpButtonState = 0; // CP current state
int cpLastButtonState = 0; // CP last button state


void setup() {
// put your setup code here, to run once:
pinMode(CR, INPUT); // Sets CR pin as Input
pinMode(CP, INPUT); // Sets CP pin as Input
pinMode(cyl1, OUTPUT); // Sets pin as output
pinMode(cyl2, OUTPUT); // Sets pin as output
pinMode(cyl3, OUTPUT); // Sets pin as output
pinMode(cyl4, OUTPUT); // Sets pin as output
}

void loop() {

crButtonState = digitalRead(CR);
cpButtonState = digitalRead(CP);
// compares the current button state to the last state, if different, push counter is incremented
if (crButtonState != crLastButtonState){
if (crButtonState == HIGH)(buttonPushCounter = buttonPushCounter + 1);

}// sets cyl output based on "buttonPushCounter" current value
if (buttonPushCounter == 1) digitalWrite(cyl1, HIGH);
else digitalWrite(cyl1, LOW);

if (buttonPushCounter == 2) digitalWrite(cyl2, HIGH);
else digitalWrite(cyl2, LOW);

if (buttonPushCounter == 3) digitalWrite(cyl3, HIGH);
else digitalWrite(cyl3, LOW);

if (buttonPushCounter == 4) digitalWrite(cyl4, HIGH);
else digitalWrite(cyl4, LOW);

// resets buttonPushCounter to 0
if (buttonPushCounter == 5) (buttonPushCounter = 0);


// If CR is high then CP start counting to 8 then resets buttonPushCounter1 and buttonPushCounter to 0
if (crButtonState == HIGH){
if (cpButtonState != cpLastButtonState){
if (crButtonState == HIGH)(buttonPushCounter1 = buttonPushCounter1 + 1);
}
if (buttonPushCounter1 == 8)(buttonPushCounter == 0);
}



}
2016-09-12 18:43:17
#46
It's been rather silent from my part, let me get you up to speed.

Got temporarily laid off, which caused the funds going to the car come to a grinding halt. Just now got enough funds to start purchasing more go fast bits. Since I am going to be trying out dumb coils, I need something to drive them. The AEM 4 channel coil driver seems like a reliable and affordable option:



Another thing I want to incorporate at the same time is switchable wasted spark. It can in theory be easily achieved, by firing the 1&4 , 2&3 at the same time. This allows for better emissions, something my car needs asap.


It can be achieved by fitting two small solid state relays, that join the two spark events together pre driver. The switch between wasted/fully sequential can then be triggered with Nismotronic. I can use a programmable output, to trigger on engine load. In other words, idle and low loads use wasted spark, but high engine load switches to fully sequential, which allows for the coils to charge longer inbetween spark events.

Now I just wait for the coil driver...
2016-09-12 19:00:47
#47
Originally Posted by ebinkerd
I have been working on some code for the Arduino. If anyone else has some more experience than I in this language please give me some criticism. I'll try to get this on the bench this weekend to test functionality. It compiles ok, but that doesn't mean much.


Late answer, but since you want to have code running quickly, here are a few tips

This setup
void setup() {
// put your setup code here, to run once:
pinMode(CR, INPUT); // Sets CR pin as Input
pinMode(CP, INPUT); // Sets CP pin as Input
pinMode(cyl1, OUTPUT); // Sets pin as output
pinMode(cyl2, OUTPUT); // Sets pin as output
pinMode(cyl3, OUTPUT); // Sets pin as output
pinMode(cyl4, OUTPUT); // Sets pin as output
}


Can be replaced with:

void setup() {
DDRD = DDRD | B11110000;
}


It doesn't maybe seem like much, but it's cutting down the program size with 16%.
EDIT: Scratch that, forgot that the benefit of having cyl1,2 etc is to make referencing easier further along in the program. Otherwise code looks good, did it work? And how does it handle integer overflows?
Last edited by Dala on 2016-09-12 at 19-09-23.
2016-10-02 18:33:18
#48
Coil driver showed up!



It's essential to keep it cool, so I mounted it to a huge chunk of aluminium along with thermal grease on its back. I now have all the parts to make it work, aiming for startup next weekend. Just gotta hack up my dash and install all the extra wiring. So excited!
2016-10-03 16:19:06
#49
anybody else going this route there are also coil drivers from other manufacturers, one that is reasonable is from holley (Holley 554-112) currently $80 shipped cheapest price.
2016-10-03 16:46:34
#50
Dala what is that other component next to the coil driver on the heatsink?
+ Reply To Thread
  • [Type to search users.]
  • Quick Reply
    Thread Information
    There are currently ? users browsing this thread. (? members & ? guests)
    StubUserName

    Back to top