AIM SmartyCam CAN: Difference between revisions
No edit summary |
|||
| Line 27: | Line 27: | ||
=Available Channels= | =Available Channels= | ||
This integration enables the following channels | This integration enables the following channels. | ||
This assumes the AIM channels 1-5 are defined with the following configuration. You can customize this mapping based on your particular AIM configuration. | |||
{| class="wikitable" | {| class="wikitable" | ||
| Line 59: | Line 61: | ||
|EGT | |EGT | ||
|- | |- | ||
|Brake Pos | |Brake Pos (channel 1) | ||
|BrakePos | |BrakePos | ||
|- | |- | ||
|Clutch Pos | |Clutch Pos (channel 2) | ||
|Clutch | |Clutch | ||
|- | |- | ||
|Brake Press | |Brake Press (channel 3) | ||
|Brake | |Brake | ||
|- | |- | ||
|Steer Position | |Steer Position (channel 4) | ||
|Steering | |Steering | ||
|- | |- | ||
|Lambda | |Lambda (channel 5) | ||
|Lambda | |Lambda | ||
|- | |- | ||
Revision as of 16:23, 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.
This assumes the AIM channels 1-5 are defined with the following configuration. You can customize this mapping based on your particular AIM configuration.
| 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 (channel 1) | BrakePos | |||||
| Clutch Pos (channel 2) | Clutch | |||||
| Brake Press (channel 3) | Brake | |||||
| Steer Position (channel 4) | Steering | |||||
| Lambda (channel 5) | Lambda | |||||
| FuelLevel | FuelLevel | |||||
Integration Cable
Build your own
AIM uses a Binder 5-pin series 702 connector - you can modify an existing compatible cable, or make a custom cable with the appropriate connectors and splice it with an RJ45 network cable.
Get a pre-made cable
We have AIM integration cables available in our online store:
AIM Integration Script
Copy this entire Lua script into the script window of RaceCapture app, and write the configuration back.
- Note - ensure any existing script is removed before copying in the AIM 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)

