Megasquirt CAN: Difference between revisions

(update to filter TPS)
No edit summary
Line 12: Line 12:
Additional channels can be enabled by expanding the script.  
Additional channels can be enabled by expanding the script.  


=CAN Database=
 
[[CAN_Bus_database#Megasquirt_CAN_.28_MS2.2FMS3.2FMS3_Pro_.29|CAN Bus database for Megasquirt]]


==Megasquirt Wiring==
==Megasquirt Wiring==
===Megasquirt 2 V3===
Wire up the CANH / CANL internal jumpers according to the instructions in the [http://www.msextra.com/doc/pdf/MS2V30_Hardware-3.4.pdf Megasquirt Manual]
If connected per the guide, you CAN connections will be on the following port on the DB37
* CAN High - DB37 Pin 3 (SPR1)
* CAN Low - DB37 Pin 4 (SPR2)
Connect CAN High and CAN Low to the corresponding CAN High and CAN Low channel connections on RaceCapture/Pro
You can use a standard CAT-5 ethernet cable with RJ45 connectors to integrate with RaceCapture/Pro.
{| class="wikitable" style="text-align:center; width:700px; height:200px;"
|+ Power, ground and CAN bus connections to RaceCapture/Pro
|-
! Connection
! RaceCapture/Pro (RJ45 cable)
|-
| +12v
| Brown
|-
| Ground
| Orange/White
|-
| CAN 1 High
| Orange
|-
| CAN 1 Low
| Green/White
|}
These color codes assume EIA-T568B RJ45 cable (check printing on the cable to confirm)
* '''Note''': If you have RaceCapture/Pro powered through the terminal block and grounded at the same location, all you need to wire are the two CAN ligh/CAN low connections. You do not need to separately connect ground and power via the RJ45 port.
[[File:Canrj45.png]]
===MS3 Pro===
[http://www.diyautotune.com/downloads/ms3-pro/ms3pro_wiring.pdf MS3-Pro MS3-Pro wiring]
[http://www.diyautotune.com/downloads/ms3-pro/ms3pro_wiring.pdf MS3-Pro MS3-Pro wiring]


Line 24: Line 61:
==Photos==
==Photos==
[[Image:megasquirt_CAN_RCP.jpg|500px]]
[[Image:megasquirt_CAN_RCP.jpg|500px]]
==Enable Megasquirt Dashboard Mode==
In TunerStudio, enable CAN dashboard mode and burn it to the controller. Once this is done, RaceCapture/Pro will be receiving CAN bus data from the Megasquirt.
==Integration Script==
Paste this entire script into the Scripting window of RaceCapture/Pro. Ensure any existing script is completely overwritten - do not append to an existing script.


<pre>
<pre>

Revision as of 02:27, 17 July 2016

Megasquirt Dashboard CAN broadcast

This CAN script enables integration with the simplified dashboard mode CAN stream. Refer to the Megasquirt documentation for enabling Dashboard mode CAN broadcast.

Channels enabled:

  • Engine RPM (RPM)
  • Throttle Position (TPS)
  • Coolant Temperature (Coolant)
  • Manifold Absolute Pressure (MAP)
  • Air/Fuel Ratio (AFR)

Additional channels can be enabled by expanding the script.


Megasquirt Wiring

Megasquirt 2 V3

Wire up the CANH / CANL internal jumpers according to the instructions in the Megasquirt Manual

If connected per the guide, you CAN connections will be on the following port on the DB37

  • CAN High - DB37 Pin 3 (SPR1)
  • CAN Low - DB37 Pin 4 (SPR2)

Connect CAN High and CAN Low to the corresponding CAN High and CAN Low channel connections on RaceCapture/Pro

You can use a standard CAT-5 ethernet cable with RJ45 connectors to integrate with RaceCapture/Pro.

Power, ground and CAN bus connections to RaceCapture/Pro
Connection RaceCapture/Pro (RJ45 cable)
+12v Brown
Ground Orange/White
CAN 1 High Orange
CAN 1 Low Green/White

These color codes assume EIA-T568B RJ45 cable (check printing on the cable to confirm)

  • Note: If you have RaceCapture/Pro powered through the terminal block and grounded at the same location, all you need to wire are the two CAN ligh/CAN low connections. You do not need to separately connect ground and power via the RJ45 port.

Canrj45.png

MS3 Pro

MS3-Pro MS3-Pro wiring

CAN bus connections available on MS3-Pro white connector:

  • CAN High: Pin 34
  • CAN Low : Pin 33

Photos

Megasquirt CAN RCP.jpg

Enable Megasquirt Dashboard Mode

In TunerStudio, enable CAN dashboard mode and burn it to the controller. Once this is done, RaceCapture/Pro will be receiving CAN bus data from the Megasquirt.

Integration Script

Paste this entire script into the Scripting window of RaceCapture/Pro. Ensure any existing script is completely overwritten - do not append to an existing script.

--This example configured for Megasquirt Dashboard Mode

--how frequently we poll for CAN messages
tickRate = 30
--the CAN baud rate
CAN_baud = 500000
--CAN channel to listen on. 0=first CAN channel, 1=second
CAN_chan = 0
--1 for Big Endian (MSB) mode; 0 for Little Endian mode (LSB)
be_mode = 1

--add your virtual channels here
--addChannel(<name>, <sample rate>, [logging precision], [min], [max], [units label])
rpmId = addChannel("RPM", 10, 0, 0, 8000)
tpsId = addChannel("TPS", 10, 0, 0, 100, "%")
mapId = addChannel("MAP", 10, 0, 0, 105, "kPa")
cltId = addChannel("Coolant", 1, 0, 0, 250, "F")
afrId = addChannel("AFR", 10, 1, 0, 20)

--customize here for CAN channel mapping
--format is: [CAN Id] = function(data) map_chan(<channel id>, data, <CAN offset>, <CAN length>, <multiplier>, <adder>)
CAN_map = {
[1512] = function(data) map_chan(mapId, data, 0, 2, 0.1, 0) map_chan(rpmId, data, 2, 2, 1, 0) map_chan(cltId, data, 4, 2, 0.1, 0) map_chan(tpsId, data, 6, 2, 0.1, 0, filter_tps) end,
[1514] = function(data) map_chan(afrId, data, 1, 1, 0.1, 0) end
}

function onTick()
    processCAN(CAN_chan)
end

function filter_tps(value)
  --filter out overflow
  if value > 100 then value = 0 end
  return value

end

--===========do not edit below===========
function processCAN(chan)
    repeat
        local id, e, data = rxCAN(chan)
        if id ~= nil then
            local map = CAN_map[id]
            if map ~= nil then
                map(data)         
            end
        end
    until id == nil
end

--Map CAN channel, big endian format
function map_chan(cid, data, offset, len, mult, add, filter)
    offset = offset + 1
    local value = 0
    while len > 0 do
        value = (value * 256) + data[offset]
        offset = offset + 1
        len = len - 1
    end
    local cv = value * mult + add
    if filter ~= nil then cv = filter(cv) end
    setChannel(cid, cv)
end

initCAN(CAN_chan, CAN_baud)
setTickRate(tickRate)

References