e57ba8f4-f953-4a7d-ad81-6d4ebc451eed 0x10000 52 1.0.7 Don Starr Tech Edge interface Version 2.0 Data frame -Fixed status issues -added more list items for checking -corrected Lambda 16 calculation -added lambda from Ipx(1) calculation -added raw data list view to use with TechEdge emulator for testing 19200 1 Converts Ipx(1) to Lambda - derived from TechEdge emulator 1 3 0 91 33 17 2.0 Data Frame Format 1 - Frame Header byte 1 (0x5A) 2 - Frame Header byte 2 (0xA5) 3 - Frame Sequence counter 4 - Tick [high] (1 tick = 1/100 Second) 5 - Tick [low] byte 6 - L-16 or Ipx(0), (or ADC) [high] byte 7 - L-16 or Ipx(0), (or ADC) [low] byte 8 - Ipx(1) high](8192=F/A,4096=Ipx[0]) 9 - Ipx(1) [low] byte 10 - User 1 ADC [high] (V1 input) 11 - User 1 ADC [low] byte 12 - User 2 ADC [high] (V2 input) 13 - User 2 ADC [low] byte 14 - User 3 ADC [high] (V3 input) 15 - User 3 ADC [low] byte 16 - Thermocouple1 ADC [high] (T1 Input) 17 - Thermocouple1 ADC [low] 18 - Thermocouple2 ADC [high] (T2 Input) 19 - Thermocouple2 ADC [low] 20 - Thermocouple3 ADC [high] (T3 Input) 21 - Thermocouple3 ADC [low] 22 - Thermis 200 26 0 26 0x5A 0xA5 uses dual slope graph as found on the techedge website 3 3 0 3 16 16 480.000000 6300.000000 0.000000 187.500000 10 0xE47D9456 0xE47EC9B6 0xB723E534 0x00000000 Exceeded OK 0x17 0x00000010 AND 0x00000010 0x00000000 Exceeded OK 0x18 0x00000010 AND 0x00000010 Lookup table for Status byte 26. 1 4 1 8 1 4 1 8 Lookup table for Status byte 27. 1 4 1 8 This Table converts the TechEdge Thermister A/D value to mV. Their web site has a spreadsheet that shows the conversion from the A/D value to temperature in °C. I then added the conversion from degC to mV using the type K tables to come up with the values used below. The input below is the TechEdge A/D value from the Thermister and the Ouput is Type K mV. 3 3 0 39 Lookup table to convert Type K Thermocouple mV to EGT in °C. 3 3 0 254 6 Lookup table to convert cold junction Thermister A/D counts to cold junction temperature in °C 1 3 0 41 byte 3 is the frame sequence counter and simply counts from 0 to 255 and then repeats, and allows the receiver to keep track of possible lost data frames. All these values are included in the CRC calculation. 0x00 0 3 Bytes 4 & 5 count relative time in Ticks - measured in 1/100 of a second (ie. 10 mSec/tick). The count goes from 0 to 65535 (unsigned) and will overflow in just under 11 minutes (10 minutes, 55 seconds & 35 mSec) and should be sufficient to act as a timebase for most logging tasks. 0x01 16 2 2 Bytes 6 & 7 defined to be Lambda-16 for all controllers except 3H1. if (L16 < 36864) L = (L16 / 8192 ) + 0.5 else L = 5.0 + ((L16 - 36864 ) / 128) AFR = (( L16 / 8192 ) + 0.5 ) * AFRstoich Where AFRstoich is the AFR value at stoich for the fuel used (14.7 for unleaded). 0x03 16 5 3 33 22 Shows the raw Lambda16 info. 0x03 16 0 3 Bytes 6 & 7 defined to be Lambda-16 for all controllers except 3H1. if (L16 < 36864) L = (L16 / 8192 ) + 0.5 else L = 5.0 + ((L16 - 36864 ) / 128) AFR = (( L16 / 8192 ) + 0.5 ) * AFRstoich Where AFRstoich is the AFR value at stoich for the fuel used (14.7 for unleaded). 0x0000000C 0x03 16 4 3 30 21 Normilized Pump Current After a calibration factor has been applied to the raw pump current, the resulting normalised pump current Ipx has a free-air value of 8192 and a zero pump current value of 4096 (which is not quite the stoich point). A value of 0 represent the richest condition that can be sensed by the WB unit (less than AFR=10). 0x05 16 5 3 33 22 AFR calculated from Ipx(1) 0x00 16 4 3 30 21 Bytes 8 & 9 is the (single channel) Ipx or Normalised Pump Current. After a calibration factor has been applied to the raw pump current, the resulting normalised pump current Ipx has a free-air value of 8192 and a zero pump current value of 4096 (which is not quite the stoich point). A value of 0 represent the richest condition that can be sensed by the WB unit (less than AFR=10). 0x05 16 0 3 These are the three 0 to 5.00 Volt user inputs U1, U2 & U3 (there's an additional user input available on version 2.0 compared to 1.5). Although these inputs are sampled just once, they are shifted to be in the range 0 to 8184 (ie. 1024 steps - 0, 8, 16 .. 8176, 8184) for version 1.5 compatibility. 0x07 16 0 3 24 17 Raw User 1 A/D counts 0x07 16 0 3 These are the three 0 to 5.00 Volt user inputs U1, U2 & U3 (there's an additional user input available on version 2.0 compared to 1.5). Although these inputs are sampled just once, they are shifted to be in the range 0 to 8184 (ie. 1024 steps - 0, 8, 16 .. 8176, 8184) for version 1.5 compatibility. 0x07 16 2 3 Raw User 2 A/D counts 0x09 16 0 3 These are the three 0 to 5.00 Volt user inputs U1, U2 & U3 (there's an additional user input available on version 2.0 compared to 1.5). Although these inputs are sampled just once, they are shifted to be in the range 0 to 8184 (ie. 1024 steps - 0, 8, 16 .. 8176, 8184) for version 1.5 compatibility. 0x09 16 2 3 Raw User 3 A/D counts 0x0B 16 0 3 These are the three 0 to 5.00 Volt user inputs U1, U2 & U3 (there's an additional user input available on version 2.0 compared to 1.5). Although these inputs are sampled just once, they are shifted to be in the range 0 to 8184 (ie. 1024 steps - 0, 8, 16 .. 8176, 8184) for version 1.5 compatibility. 0x0B 16 2 3 These are the three thermocouple inputs T1, T2 & T3. The raw thermocouple voltage is amplified by a factor of 101 before sampling by the ADC at 10 bits of resolution, giving a value from 0 to 1023 (1024=5.00 Volts). For a K-type thermocouple, a sampled count of 512 corresponds to a thermocouple voltage of (512/1024)*5.00/101 = 24.75 mV and, after consulting tables, this is an uncompensated thermocouple temp of about 596 °C. A count of 1023 gives 49.46 mV or a temp of about 1217° C. This conversion then uses the cold junction to caclulate the compensated thermocouple temperature in °C. To do this, you measure the Cold Junction temperature and convert it to the equivalent junction voltage and add it to the measured thermocouple voltage to get the compenstated themocoouple voltage. This value is then converted to temperature using Type K conversion tables. 0x0D 16 2 3 Thermocouple 1 - no cold junction compensation 0x0D 16 2 3 0x0D 16 2 3 Raw thermocouple A/D 0x0D 16 0 3 See thermocouple 1 for description and set-up 0x0F 16 0 3 Raw thermocouple A/D 0x0F 16 0 3 See thermocouple 1 for description and set-up 0x11 16 0 3 Raw thermocouple A/D 0x11 16 0 3 10 bit thermistor count can be used for cold junction compensation (CJC) to calculate each thermocouple's absolute temperature. This one converts to mV 0x13 16 3 3 10 bit thermistor count can be used for cold junction compensation (CJC) to calculate each thermocouple's absolute temperature. This one converts to °C and the conversion comes from the TechEdge website. 0x13 16 1 3 10 bit thermistor Raw A/D count. 0x13 16 0 3 RPM count and has the same format as the 1.5 frame (ie. count 1 = 5 uSec) but with the additional feature of averaging two successive triggering events to cater for odd fire engines that may be triggered from the one coil. the RPM count measures how many 5 microsecond time periods are counted between successive positive pulse edges on the COIL or RPM Pulse input pins. As the frequency of the pulses increases (RPM goes up), the count goes down. For a four cylinder 4 stroke engine (that produces two spark events per revolution), at 6,000 RPM there are 100 revolutions per second and 200 spark events and therefore the COIL input will measure 5,000 microseconds between sparks, or an RPM count of 1,000 for bytes 10 and 11. Note that if the pulse rate is lower than 20 per second then the unit will "time out" and return an invalid count. RPM = 6000000/(# of 5usec counts) for a 4 cylinder 0x00000004 0x15 16 0 3 6 4 0x15 16 0 3 0x17 16 4 0 0x17 16 0 3 Status high byte 0x17 2 0 This Value is masked to return only bits 0 1 & 2. The value returned then uses a lookup to return the appropriate text for the corresponding bit. Value Byte 26 -- Vs/Ip PID (wideband) State 0 null/off state 1 Sense state, looking for presence of sensor. 2 Cold state, heating up sensor, PIDs not yet operational 3 Warm state, PIDs operational 4 Config state, used for system testing 5 unused 0x17 4 0 This Value is masked to return only bits 5 6 & 7. The value returned then uses a lookup to return the appropriate text for the corresponding bit. Bit 765 PID Operation 000 operating normally 001 Integral accumulator at lower clamp value 010 Integral accumulator at upper clamp value 011 Output control value at lower clamp 100 Output control value at upper clamp 0x17 7 1 Status low byte 0x18 2 0 This Value is masked to return only bits 0 1 & 2. The value returned then uses a lookup to return the appropriate text for the corresponding bit. Value Byte 27 -- Heater PID State 0 Normal Operation state 1 Vbatt high 2 Vbatt low 3 Heater short 4 Heater open circuit 5 FET failure 6 unused 0x18 4 1 This Value is masked to return only bits 5 6 & 7. The value returned then uses a lookup to return the appropriate text for the corresponding bit. Bit 765 PID Operation 000 operating normally 001 Integral accumulator at lower clamp value 010 Integral accumulator at upper clamp value 011 Output control value at lower clamp 100 Output control value at upper clamp 0x18 0 1 when added to all the other bytes in the frame, and truncated to 8 bits, should result in the value 0xFF. If not then at least one bit in the frame has been zapped and the frame's data should not be trusted. As the sequence counter constantly changes, then the CRC value will also change 0x19 2 1