AIM SmartyCam CAN: Difference between revisions
(updated channel params) |
No edit summary |
||
Line 79: | Line 79: | ||
|} | |} | ||
=Integration Cable= | |||
==Build your own== | |||
You can patch up your own cable using a Binder 5 pin series 702 patch cable and splice it with an RJ45 network cable. | |||
==Get a pre-made cable== | |||
AIM integration cables are available in our online store: | |||
[[Image:AIM_RCP_integration_cable.jpg]] | |||
[[Image:add_to_cart.png|link=http://www.autosportlabs.com/product/]] | |||
=Integration Script= | =Integration Script= |
Revision as of 00:25, 15 April 2016
Introduction
This CAN bus integration maps CAN bus data from AIM systems using the CAN protocol used for the SmartyCam camera system.
Connecting to the AIM system
BMW E46 (including M3) | ||||||
---|---|---|---|---|---|---|
Connection | AIM Pin | RaceCapture/Pro Pin | ||||
CAN High | 1 | 2 | ||||
CAN Low | 4 | 3 | ||||
Ground | 2 | 1 |
Available Channels
This integration enables the following channels
BMW E46 (including M3) | ||||||
---|---|---|---|---|---|---|
AIM Channel Name | RaceCapture channel name | |||||
RPM | RPM | |||||
Gear | Gear | |||||
WaterTemp | EngineTemp | |||||
Oil Press | OilPress | |||||
Oil Temp | OilTemp | |||||
Throttle Position | TPS | |||||
Head Temp | HeadTemp | |||||
Exhaust Temp | EGT | |||||
Brake Pos | BrakePos | |||||
Clutch Pos | Clutch | |||||
Brake Press | Brake | |||||
Steer Position | Steering | |||||
Lambda | Lambda | |||||
FuelLevel | FuelLevel |
Integration Cable
Build your own
You can patch up your own cable using a Binder 5 pin series 702 patch cable and splice it with an RJ45 network cable.
Get a pre-made cable
AIM integration cables are available in our online store:
Integration Script
--AIM Smarty Cam Stream For Race Capture --how frequently we poll for CAN messages tickRate = 30 --the CAN baud rate CAN_baud = 1000000 --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 = 0 --add your virtual channels here tpsId = addChannel("TPS", 10, 0, 0, 100, "%") tempId = addChannel("EngineTemp", 1, 0, 0, 120, 'C') oilTempId = addChannel("OilTemp", 1, 0, 0, 170, 'C') rpmId = addChannel("RPM", 10, 0, 0, 10000, 'RPM') oilPresId = addChannel("OilPress", 10, 2, 0, 10, 'Bar') fuellevelId = addChannel("FuelLevel", 1, 0, 0, 120, "L") temp1Id = addChannel ("HeadTemp" , 1, 0, 0, 170, 'C') temp2Id = addChannel ("EGT" , 10, 0, 0, 1000, 'C') ch1Id = addChannel ("BrakePos", 10, 0, 0, 100, "%") ch2Id = addChannel ("ClutchPos", 10, 0, 0, 100, "%") ch3Id = addChannel ("Brake", 1, 0, 0, 150, "Bar") ch4Id = addChannel ("Steering", 1, 0, -300, 300, "Deg") ch5Id = addChannel ("Lambda", 10, 2, -1, 1, "C") fuelPresId = addChannel ("FuelPress", 10, 2, 0, 10, "Bar") gearId = addChannel ("Gear", 10, 0, 0, 7, "#") --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 = { [1056] = function(data) map_chan(rpmId, data, 0, 2, 1, 0) map_chan(gearId, data, 4, 2, 1, 0) map_chan_le(tempId, data, 6, 2, 0.1, 0) end, [1057] = function(data) map_chan(temp1Id, data, 0, 2, 0.1, 0) map_chan(temp2Id, data, 2, 2, 0.1, 0) map_chan(oilTempId, data, 4, 2, 0.1, 0) map_chan_le(oilPresId, data, 6, 2, 0.01, 0) end, [1058] = function(data) map_chan(ch3Id, data, 0, 2, 0.01, 0) map_chan(tpsId, data, 2, 2, 1, 0) map_chan(ch1Id, data, 4, 2, 1, 0) map_chan(ch2Id, data, 6, 2, 1, 0) end , [1059] = function(data) map_chan(ch4Id, data, 0, 2, 1, 0) map_chan(ch5Id, data, 2, 2, 0.01, 0) end, [1060] = function(data) map_chan(fuellevelId, data, 0, 2, 1, 0) map_chan(fuelPresId, data, 2, 2, 0.1, 0) end } function onTick() processCAN(CAN_chan) 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, little endian format function map_chan_le(cid, data, offset, len, mult, add) offset = offset + 1 local value = 0 local shift = 1 while len > 0 do value = value + (data[offset] * shift) shift = shift * 256 offset = offset + 1 len = len - 1 end setChannel(cid, (value * mult) + add) end --Map CAN channel, big endian format function map_chan_be(cid, data, offset, len, mult, add) offset = offset + 1 local value = 0 while len > 0 do value = (value * 256) + data[offset] offset = offset + 1 len = len - 1 end setChannel(cid, (value * mult) + add) end map_chan = (be_mode == 1) and map_chan_be or map_chan_le initCAN(CAN_chan, CAN_baud) setTickRate(tickRate)