DIY: Getting data from Holley CAN BUS
#21
That’s good to know, I am still pretty green when it comes to all of the hardware options.
Question: I am currently running a Volvo Electric power steering pump that will run with battery +&- and ignition power (I think you run this same pump?). The Volvo pump runs at 70% power in limp mode but can be controlled fully by sending VSS and RPM via CAN. I found some Arduino code with the Volvo CAN protocol. Am I able to send CAN messages to the Volvo pump as well as send CAN messages to my GM gauge cluster while reading CAN data from the Holley ECU all with one Arduino? I need to learn up on how the CAN network works so I can answer questions like these for myself.[/QUOTE]
Question: I am currently running a Volvo Electric power steering pump that will run with battery +&- and ignition power (I think you run this same pump?). The Volvo pump runs at 70% power in limp mode but can be controlled fully by sending VSS and RPM via CAN. I found some Arduino code with the Volvo CAN protocol. Am I able to send CAN messages to the Volvo pump as well as send CAN messages to my GM gauge cluster while reading CAN data from the Holley ECU all with one Arduino? I need to learn up on how the CAN network works so I can answer questions like these for myself.[/QUOTE]
Last edited by Idahoan; 10-03-2023 at 02:55 PM.
#22
TECH Fanatic
Thread Starter
That’s good to know, I am still pretty green when it comes to all of the hardware options.
Question: I am currently running a Volvo Electric power steering pump that will run with battery +&- and ignition power. The Volvo pump runs at 70% power in limp mode but can be controlled fully by sending VSS and RPM via CAN. I found some Arduino code with the Volvo CAN protocol. Am I able to send CAN messages to the Volvo pump as well as send CAN messages to my GM gauge cluster while reading CAN data from the Holley ECU all with one Arduino? I need to learn up on how the CAN network works so I can answer questions like these for myself.
Question: I am currently running a Volvo Electric power steering pump that will run with battery +&- and ignition power. The Volvo pump runs at 70% power in limp mode but can be controlled fully by sending VSS and RPM via CAN. I found some Arduino code with the Volvo CAN protocol. Am I able to send CAN messages to the Volvo pump as well as send CAN messages to my GM gauge cluster while reading CAN data from the Holley ECU all with one Arduino? I need to learn up on how the CAN network works so I can answer questions like these for myself.
Yea I think I posted Volvo code I found somewhere on the forum. Maybe in the Vette forum.
You can have multiple devices on can as long as they all use the same general setups. The Holley CAN is 1Mhz,. Most other CAN setups I've seen are 500khz. It's been a while since I looked at the volvo, but my guess is no, need two canbus boards, but I'll have to check.
#23
TECH Fanatic
Thread Starter
That’s good to know, I am still pretty green when it comes to all of the hardware options.
Question: I am currently running a Volvo Electric power steering pump that will run with battery +&- and ignition power (I think you run this same pump?). The Volvo pump runs at 70% power in limp mode but can be controlled fully by sending VSS and RPM via CAN. I found some Arduino code with the Volvo CAN protocol.
Question: I am currently running a Volvo Electric power steering pump that will run with battery +&- and ignition power (I think you run this same pump?). The Volvo pump runs at 70% power in limp mode but can be controlled fully by sending VSS and RPM via CAN. I found some Arduino code with the Volvo CAN protocol.
BTW, I also run a Volvo Electric pump in my 77 Turbo Vette. I still run it in default mode, too lazy to connect it since it's fine in default.
#24
BTW, I also run a Volvo Electric pump in my 77 Turbo Vette. I still run it in default mode, too lazy to connect it since it's fine in default.[/QUOTE]
I am currently using the Volvo pump for my steering and a hydro boost setup on my Saab 9-7x. It really doesn’t like the hydro and I get big voltage drops when I used the brakes. That could have be a combination of Alternator output and other things so that is why turning up the speed on that pump is appealing.
I also purchased 7” dual diaphragm vacuum brake booster so I might slap that in and just deal with brake creep when I brake boost the old girl lol.
I am currently using the Volvo pump for my steering and a hydro boost setup on my Saab 9-7x. It really doesn’t like the hydro and I get big voltage drops when I used the brakes. That could have be a combination of Alternator output and other things so that is why turning up the speed on that pump is appealing.
I also purchased 7” dual diaphragm vacuum brake booster so I might slap that in and just deal with brake creep when I brake boost the old girl lol.
Last edited by Idahoan; 10-03-2023 at 04:45 PM.
#26
Should work on any holley ecu. On the terminator X Max you have to update to V3 and select Racepak output for canbus 2--the pins for canbus 2 on the Terminator X Max are the same as the dominator even though it's not documented by Holley (from what I found that is). I'm not sure if the normal Terminator X has the additional canbus output though...
The following users liked this post:
LSswap (10-16-2023)
#27
Thats what I have is the TX Max. I'm assuming V3 would be the firmware for the X Max?
#28
#29
a friend of mine has some aftermarket dash a guy made but he didnt need to set anything up in Holley.. meaning to enable Racepak for his Terminator. I'll try this, hopefully it works w my term setup
Last edited by tmm; 10-16-2023 at 10:49 AM.
#30
This is the fuel consumption display I built.
All the parts on the breadboard version are in the box, plus a voltage regulator. It adds up how much fuel has been used since the car was turned on. It can also count down from a preset fuel tank size (in this case it was 24 gallons). It can be calibrated and the countdown fuel tank size can be changed without having to reprogram the arduino. The switch changes from count up to count down mode.
Is this what you want to build?
All the parts on the breadboard version are in the box, plus a voltage regulator. It adds up how much fuel has been used since the car was turned on. It can also count down from a preset fuel tank size (in this case it was 24 gallons). It can be calibrated and the countdown fuel tank size can be changed without having to reprogram the arduino. The switch changes from count up to count down mode.
Is this what you want to build?
#31
TECH Fanatic
Thread Starter
Do you care to share your approach for fuel consumption calculation? I assume you used Injector Pulsewidth, fuel flow and duty cycle to calculate this? I assume you have some factor to adjust for calibration as you described. I'm looking to get the fuel consumption average and instantaneous displays in my gauge cluster of audi swap working. Thanks!
In any case, the Racepak protocol already has Holley doing the heavy lifting. If you use the Injector Pulsewidth, then you gotta do all the math. They actually provide an instantaneous fuel rate in gallons per hour or lbs per hour (I forgot which, find it in the link to the Racepack definition I provided), in the same packet as the injector pulsewidth.. The only caveat is that it's wrong when the engine is off, so only use that data when the engine is running. (say RPM > 300?) The instantaneous fuel rate is an integer and I would have liked to see more accuracy.
So instantaneous rate is easy. To see how much fuel is used, you keep track of the time that has passed from the last time you got the fuel rate. You use this time to extrapolate what fraction of a gallon has been used over this time and add it to how many gallons have been used so far. Keep in mind that this number is a small fraction, but they do add up. The instantaneous fuel data comes about a hundred times a second.
I did put in an ability to calibrate the rate without having to reprogram the arduino. The calibration and also the fuel cell size is stored in the Arduino's EEPROM, so it remembers the setting even after the power is turned off. All you need to do is connect to the main serial port from any serial device (laptop, etc) and type in the correct keywords and values and it changes the calibration.
Here is the code to check adjust the calibration and the fuel cell size:
Code:
// reads a serial command to change the calbration value for the fuel consuption algorithm /* ++++++++++++++++++++++++++++++++++++++++++++++++++++*/ void check_for_next_serial_char() { if (Serial.available() == 0) { return; } // command format must be "Cal" followed by 4 digit number from 0000 to 9999 ie "Cal0500" // where 5000 is equivalent to 0 change. Anything above 5000 increases the GPH rate, anything // below 5000 decreases the GPH rate. example 6120 is a 11.2 percent increase. // or command may be "Gal" followed by 4 digit number from 0000 to 9999 ie "Gal2413" = 24.13 gallons of fuel // all other messages are ignored. // msgStage based on reading incoming bytes: any invalid entry along the way and message stage resets to 0 // 0 no valid message // 1 got C or G // 2 got a // 3 got l // 4 got first digit // 5 got second digit // 6 got third digit // 7 got fourth digit incomingByte = Serial.read(); switch(msgStage){ case 0: if (incomingByte == 67) { // start of Cal (calibration) command "C" msgStage++; serialCommandType = 1; } else if (incomingByte == 71) {// start of Gal (fuel) command "G" msgStage++; serialCommandType = 2; } else { // invalid start of any command msgStage == 0; } break; case 1: if (incomingByte == 97) { // ignore all messages except "a" msgStage++; } else { msgStage == 0; } break; case 2: if (incomingByte == 108) {// ignore all messages except "l", lower case L msgStage++; } else { msgStage == 0; } break; case 3: if (incomingByte > 47 && incomingByte < 58) { // ignore anything not digit 0 - 9 firstDigit = incomingByte -48; msgStage++; } else { msgStage == 0; } break; case 4: if (incomingByte > 47 && incomingByte < 58) { // ignore anything not digit 0 - 9 secondDigit = incomingByte -48; msgStage++; } else { msgStage == 0; } break; case 5: if (incomingByte > 47 && incomingByte < 58) { // ignore anything not digit 0 - 9 thirdDigit = incomingByte -48; msgStage++; } else { msgStage == 0; } break; case 6: if (incomingByte > 47 && incomingByte < 58) { // ignore anything not digit 0 - 9 fourthDigit = incomingByte -48; msgStage++; } else { msgStage == 0; } break; } // end switch if (msgStage == 7) { // succesfully got a valid calibration request dataPayload = (1000 * firstDigit) + (100 * secondDigit) + (10 * thirdDigit) + fourthDigit; if (serialCommandType == 1) { // calibration command Serial.print(F("Cal request: ")); Serial.println(dataPayload); save_IN(dataPayload, 8); // save the number in position 8 of EEprom calculate_calibration_data(dataPayload); // re calculate the actual calibration number } if (serialCommandType == 2) { // fuel capacity command Serial.print(F("Gal request: ")); Serial.println(dataPayload); save_IN(dataPayload, 4); // save the number in position 4 of EEprom calculate_fuel_capacity(dataPayload); // re calculate the actual calibration number } msgStage = 0; // reset to wait for next command. } } // end check_for_next_serial_char
Code:
case 0x1E005000: // 0x1E005000 fuel packet currCANMessageTime = micros(); if ( currCANMessageTime < prevCANMessageTime) { // allow for timer overflow, very slight undercount prevCANMessageTime = currCANMessageTime; // skip reading when timer overflows. Once every 70 minutes. // I could calculate this, but it's not worth the effort accumulatedFuelUsage = accumulatedFuelUsage + (fuelFlowThisInterval/2.0); // return; } if (currRpm > 400) { // only accumualte fuel when engine is running data.payloadArray[0] = buf[7]; // shift the data from CAN buffer to unsigned long data.payloadArray[1] = buf[6]; data.payloadArray[2] = buf[5]; data.payloadArray[3] = buf[4]; // holley data is in lbs per hour so needs to be converted to microseconds and gallons. // Higher octane fuels weigh more. There is a calibration number that will get the result // closer to actual consumption measured. Assumptoin... Gallon of gas is 6 lbs. // So typical usage is 12 gallons an hour = 72 lbs per hour = 1.2 per minute = .02 per second // = .000000002 per microsecond lbsPerHourFromHolley = (float)data.payload / 256.0 ; // remove Holley 256 multiplier fuelFlowPayload = (int)lbsPerHourFromHolley; // for serial display only lbsPerHourFromHolley = lbsPerHourFromHolley + (lbsPerHourFromHolley * calibrationPercentage); // adjust per calibration value. usSinceLastCANMessage = currCANMessageTime - prevCANMessageTime; fuelFlowThisInterval = ((float)usSinceLastCANMessage / 360000.0) * lbsPerHourFromHolley / 600.0; accumulatedFuelUsage = accumulatedFuelUsage + fuelFlowThisInterval; displayValue = (int)(accumulatedFuelUsage + roundingInt499); } else { prevCANMessageTime = currCANMessageTime; } // display is very slow. Only write to display value when it needs to change. if (displayValue != prevDisplayValue ) { if (displayValue > 9999) { display.setSegments(generalError); } else { prevDisplayValue = displayValue; if (countUpMode) { display.showNumberDecEx(displayValue, (0x80 >> 1), false); } else { if (amountOfFuelInTank - displayValue < -999 ) { display.setSegments(generalError); } else { display.showNumberDecEx(amountOfFuelInTank - displayValue, (0x80 >> 1), false); } } } } // just for gettting performance stats to serial port if (debugOneOn) { if (millis() - durationMillisCounter > 60000) { Serial.print(F("5 min gph ")); Serial.println((accumulatedFuelUsage - durationPrevGallons) / 1.6666666 ); durationMillisCounter = millis(); durationPrevGallons = accumulatedFuelUsage; } // performance stats } lastTimeCANgotMsg = millis(); prevCANMessageTime = currCANMessageTime; // the following is for injector pulsewidth, but not used at this time data.payloadArray[0] = buf[3]; // shift the data from CAN buffer to unsigned long data.payloadArray[1] = buf[2]; data.payloadArray[2] = buf[1]; data.payloadArray[3] = buf[0]; currInjPulsewidth = (float)data.payload / 256.0; break;
The following 2 users liked this post by LSswap:
Kippdipp (10-27-2023), Project GatTagO (12-03-2023)
#33
TECH Addict
Second canbus?
the bus in canbus means you can connect as many devices as you want by daisy chaining them. It’s basically the same as how you wire a bunch of ac outlets in your house.
you just need the terminating resistor as the last ‘device’ in the chain.
the bus in canbus means you can connect as many devices as you want by daisy chaining them. It’s basically the same as how you wire a bunch of ac outlets in your house.
you just need the terminating resistor as the last ‘device’ in the chain.
#34
Last edited by Kippdipp; 10-27-2023 at 11:31 PM.
#35
TECH Senior Member
iTrader: (7)
The Terminator X only has one CAN bus which is wired to J1A connector. This bus broadcasts the Holley proprietary protocol that is used for all of the Holley devices, such as the dashes, USB to CAN programming cable, the I/O expansion module, the CAN EGT modules, etc....
The Terminator X Max and the Dominator ECUs have a second CAN bus that is pinned on the J3 connector (the HP and the Terminator X ECUs do now have this). This CAN bus can be configured as a Standard Holley CAN bus OR as the Racepak CAN protocol bus (Holley also calls this the 3rd party CAN protocol). The Racepak CAN protocol is what Carl posted in the beginning of this post. This information is available to the public, if you know where to look.
For the Terminator X Max, the CAN2 bus was not available until the release of V3 software.
To be clear, the only way that the ECU can receive CAN messages is through the Holley CAN protocol bus. This is how the I/O expander and the CAN EGT modules work. For instance, if you have the EGT CAN module, it does not use any of the ECU I/Os. The module collects the EGT data from the probes and sends that via Holley CAN to the ECU, where these data can be monitored and datalogged. The more I understand about CAN the more I understand why Holley does it this way.
The Racepak protocol is fairly limited but many of the useful channels are available. So if someone wants to tinker and make CAN enabled devices to do whatever you want to do, all that is possible.
All of the basic hardware rules for CAN apply here. Things like speeds, length, and termination of devices.
Hopefully that clarifies things for you guys that are interested in this stuff.
Andrew
#36
I totally missed this thread. Carl actually made the fuel consumption box for one of my endurance road race customers.
The Terminator X only has one CAN bus which is wired to J1A connector. This bus broadcasts the Holley proprietary protocol that is used for all of the Holley devices, such as the dashes, USB to CAN programming cable, the I/O expansion module, the CAN EGT modules, etc....
The Terminator X Max and the Dominator ECUs have a second CAN bus that is pinned on the J3 connector (the HP and the Terminator X ECUs do now have this). This CAN bus can be configured as a Standard Holley CAN bus OR as the Racepak CAN protocol bus (Holley also calls this the 3rd party CAN protocol). The Racepak CAN protocol is what Carl posted in the beginning of this post. This information is available to the public, if you know where to look.
For the Terminator X Max, the CAN2 bus was not available until the release of V3 software.
To be clear, the only way that the ECU can receive CAN messages is through the Holley CAN protocol bus. This is how the I/O expander and the CAN EGT modules work. For instance, if you have the EGT CAN module, it does not use any of the ECU I/Os. The module collects the EGT data from the probes and sends that via Holley CAN to the ECU, where these data can be monitored and datalogged. The more I understand about CAN the more I understand why Holley does it this way.
The Racepak protocol is fairly limited but many of the useful channels are available. So if someone wants to tinker and make CAN enabled devices to do whatever you want to do, all that is possible.
All of the basic hardware rules for CAN apply here. Things like speeds, length, and termination of devices.
Hopefully that clarifies things for you guys that are interested in this stuff.
Andrew
The Terminator X only has one CAN bus which is wired to J1A connector. This bus broadcasts the Holley proprietary protocol that is used for all of the Holley devices, such as the dashes, USB to CAN programming cable, the I/O expansion module, the CAN EGT modules, etc....
The Terminator X Max and the Dominator ECUs have a second CAN bus that is pinned on the J3 connector (the HP and the Terminator X ECUs do now have this). This CAN bus can be configured as a Standard Holley CAN bus OR as the Racepak CAN protocol bus (Holley also calls this the 3rd party CAN protocol). The Racepak CAN protocol is what Carl posted in the beginning of this post. This information is available to the public, if you know where to look.
For the Terminator X Max, the CAN2 bus was not available until the release of V3 software.
To be clear, the only way that the ECU can receive CAN messages is through the Holley CAN protocol bus. This is how the I/O expander and the CAN EGT modules work. For instance, if you have the EGT CAN module, it does not use any of the ECU I/Os. The module collects the EGT data from the probes and sends that via Holley CAN to the ECU, where these data can be monitored and datalogged. The more I understand about CAN the more I understand why Holley does it this way.
The Racepak protocol is fairly limited but many of the useful channels are available. So if someone wants to tinker and make CAN enabled devices to do whatever you want to do, all that is possible.
All of the basic hardware rules for CAN apply here. Things like speeds, length, and termination of devices.
Hopefully that clarifies things for you guys that are interested in this stuff.
Andrew
Can you expand on sending CAN messages to the Holley Can Protocol bus? I assume it runs at same speed as the 3rd party, but I haven’t been able to find any IDs posted on internet nor any mention of sending messages to the ECU. I will see if I can do some sniffing to identify if not… once I get a new starter to put the LS Audi put away for the winter that is. I would be very interested in this as I would like to send information over CAN, rather than try to mimic a 5V sensor, in an effort to get an 8HP transmission working as it requires ignition cut during aggressive shifting.
#37
TECH Senior Member
iTrader: (7)
Thanks Andrew, CAN2 also output the GM can messages if you select the 6L80 protocol.
Can you expand on sending CAN messages to the Holley Can Protocol bus? I assume it runs at same speed as the 3rd party, but I haven’t been able to find any IDs posted on internet nor any mention of sending messages to the ECU. I will see if I can do some sniffing to identify if not… once I get a new starter to put the LS Audi put away for the winter that is. I would be very interested in this as I would like to send information over CAN, rather than try to mimic a 5V sensor, in an effort to get an 8HP transmission working as it requires ignition cut during aggressive shifting.
Can you expand on sending CAN messages to the Holley Can Protocol bus? I assume it runs at same speed as the 3rd party, but I haven’t been able to find any IDs posted on internet nor any mention of sending messages to the ECU. I will see if I can do some sniffing to identify if not… once I get a new starter to put the LS Audi put away for the winter that is. I would be very interested in this as I would like to send information over CAN, rather than try to mimic a 5V sensor, in an effort to get an 8HP transmission working as it requires ignition cut during aggressive shifting.
As far as the regular Holley CAN protocol, I do not know anything about it, and if I did, I would not post any details. I make a living tuning Holley EFI, and the last thing I need is Holley's lawyers sending me nasty letter. LOL
Andrew
Last edited by Project GatTagO; 12-04-2023 at 06:27 AM.
#38
TECH Fanatic
Thread Starter
In addition to this Holley CANBUS data post, I enjoy doing other microcontroller projects and posting here and there. So I built myself a little test platform to let my imagination run bit wild.
It's a small PC board that fits in a nice enclosure and can support any combination of the following:
16MHZ Nano Module
CANBUS Module
OBDII
Bluetooth Module
4x 500ma sink drives with some pullup options.
1x 1.5A sink driver with some pullup options
2 different types of temperature inputs
3 PWM outputs (mix of sink only and some with pullups)
A/C clutch detect
Analog Sensor inputs
Potentiometer inputs
Digital Inputs
USB port
25 pin connector (optional) or wire directly to the external wires section of the board.
reverse polarity safety diode (optional)
Internal Fuse (optional)
Internal 1A 5V (optional) power supply for CANBUS or Bluetooth modules.
Here is the current schematic, it's a work in progress.
The above iteration has the processor and the CANBUS module.
Sky and imagination are the limit for what crazy things this combo of modules can be made to do. Right now I'm working on a Volvo electric power steering pump speed control which uses CANBUS. A guy on another forum might use this electric pump for both steering and hydroboost braking and I'm thinking about a dial to let the pump run about 1/2 speed normally and full speed when he hits the brake.
I've used the some same components that are on this board, in a number of different fan controllers, including primary cooling fans, oil cooler, trans cooler and the Holley CAN data and alternator voltage controllers.
What's next?
CANBUS keypad?
OBDII to relays control?
Bluetooth phone to Jeep winch control?
Bluetooth car show hood opener?
Extra ports for Holley ECM from CANBUS?
Holley ECM CANBUS to phone bluetooth dash?
Air to water pump controller?
VW air cooled oil pressure, temperature, etc to bluetooth phone?
Nitrous control?
Meth/water control from MAP or CANBUS or OBDII?
Phone bluetooth log from ......?
Diy OBDII scanner?
I had a small number of these boards made and I don't mind sharing them with experienced experimenters. If you can't read the schematic above, please don't ask me for a board.
LMK if you have ideas for projects, even if you don't know how to get them done. I'm curious to see what people would like to see built.
It's a small PC board that fits in a nice enclosure and can support any combination of the following:
16MHZ Nano Module
CANBUS Module
OBDII
Bluetooth Module
4x 500ma sink drives with some pullup options.
1x 1.5A sink driver with some pullup options
2 different types of temperature inputs
3 PWM outputs (mix of sink only and some with pullups)
A/C clutch detect
Analog Sensor inputs
Potentiometer inputs
Digital Inputs
USB port
25 pin connector (optional) or wire directly to the external wires section of the board.
reverse polarity safety diode (optional)
Internal Fuse (optional)
Internal 1A 5V (optional) power supply for CANBUS or Bluetooth modules.
Here is the current schematic, it's a work in progress.
The above iteration has the processor and the CANBUS module.
Sky and imagination are the limit for what crazy things this combo of modules can be made to do. Right now I'm working on a Volvo electric power steering pump speed control which uses CANBUS. A guy on another forum might use this electric pump for both steering and hydroboost braking and I'm thinking about a dial to let the pump run about 1/2 speed normally and full speed when he hits the brake.
I've used the some same components that are on this board, in a number of different fan controllers, including primary cooling fans, oil cooler, trans cooler and the Holley CAN data and alternator voltage controllers.
What's next?
CANBUS keypad?
OBDII to relays control?
Bluetooth phone to Jeep winch control?
Bluetooth car show hood opener?
Extra ports for Holley ECM from CANBUS?
Holley ECM CANBUS to phone bluetooth dash?
Air to water pump controller?
VW air cooled oil pressure, temperature, etc to bluetooth phone?
Nitrous control?
Meth/water control from MAP or CANBUS or OBDII?
Phone bluetooth log from ......?
Diy OBDII scanner?
I had a small number of these boards made and I don't mind sharing them with experienced experimenters. If you can't read the schematic above, please don't ask me for a board.
LMK if you have ideas for projects, even if you don't know how to get them done. I'm curious to see what people would like to see built.
The following 3 users liked this post by LSswap:
#40
BTW, I also run a Volvo Electric pump in my 77 Turbo Vette. I still run it in default mode, too lazy to connect it since it's fine in default.
I am currently using the Volvo pump for my steering and a hydro boost setup on my Saab 9-7x. It really doesn’t like the hydro and I get big voltage drops when I used the brakes. That could have be a combination of Alternator output and other things so that is why turning up the speed on that pump is appealing.
I also purchased 7” dual diaphragm vacuum brake booster so I might slap that in and just deal with brake creep when I brake boost the old girl lol.
I am currently using the Volvo pump for my steering and a hydro boost setup on my Saab 9-7x. It really doesn’t like the hydro and I get big voltage drops when I used the brakes. That could have be a combination of Alternator output and other things so that is why turning up the speed on that pump is appealing.
I also purchased 7” dual diaphragm vacuum brake booster so I might slap that in and just deal with brake creep when I brake boost the old girl lol.