Up until recently I was working on my own version of the LTO conversion
, using the Orion2 BMS to completely replace the stock BCM. Unfortunately I've had to abandon the project because of health issues, but at JimE's recommendation I'm going to try and document my work in case anyone else wants to give it a try.
I should also mention that all of the hard work was basically done by Peter/retepsnikrep before I ever started working on this project, and although I haven't checked on his BCM Replacer thread in a while it seems like the A Board from the Replacer will ultimately do what I was planning to, only better. I was also planning on getting my Orion2 battery profile (minus some CANbus settings) from Captain Torque, who has already gotten an Orion2 set up with the Honda Fit LTO packs and a grid charger/discharger. Anyway...
Big picture, my plan was to build a small "translator" board that would take data from the Orion2 and convert it into a format that the MCM can understand. This could then be mounted on top of the MCM along with the current hack, and the Orion2 could be mounted where the stock BCM would go.
The Orion2 is designed to output charge and discharge current limits, in amps or kilowatts, which represent how much you should be charging/discharging your pack based on a bunch of calculations by the BMS. According to the Orion2 docs these calculations are very fancy, and take into account things like cell voltages, pack temperature, and overall pack health. Bare minimum, you're supposed to design your integration so that a charge limit of 0 from the Orion2 completely disables charging, and a discharge limit of 0 completely disables discharging. From Peter's work on the BCM Interceptor we already know how to send BATTSCI packets to the MCM that hard-disable assist and/or regen, as well as how voltage, current, and temperature data are formatted over BATTSCI. Therefore, all the translator board would need to do is recieve voltage, current, and charge/discharge limits from the Orion2 via CANbus (temperature is factored into its limit calculations, so it makes sense to send a constant temp of 25C for optimal IMA performance), and use the current limits to send exactly the same data that the Interceptor would, albeit with voltage and current replaced by actual data from the Orion2. If the charge limit is 0A it sends "disable regen" packets, if the discharge limit is 0A it sends "disable assist" packets, etc.
To do all this we'd need a board with a CANbus input for data from the Orion2, an RS485 input for the METSCI line (certain bytes from which are used to generate our BATTSCI packets), and an RS485 output to send data to the MCM over BATTSCI. Peter designed and built this exact board as part of his work on the BCM Replacer, here
Since voltage hacking is necessary to get the LTO integration working (even if we take out the BCM, the MCM still reads the pack voltage over a couple different wires), and current hacking can be used to get more assist/regen out of the pack, the translator would also have to reduce the voltage/current numbers it receives from the Orion2 by a set percentage, to match the values of the resistors used in the hack(s). My plan was to use 10KOhm resistors for the voltage hacking, corresponding to a 10% decrease in voltage, and the fixed current hack board for a 30% decrease in current. Because I'm not an EE and terrified of screwing something up, my plan was to hard-code these values as constants in the software, rather than trying to add dip switches to change them on the fly. There's also a chance that the MCM doesn't actually compare the pack voltages it reads to the ones it receives on BATTSCI, making voltage hacking unnecessary, but that seems unlikely.
The only thing that bugged me about the translator as I've described it so far was that it wouldn't let us see the actual SOC of the pack on the dashboard. Just like when using the Interceptor, you would see 19 bars of charge most of the time, 20 bars when regen was disabled, no bars when assist was disabled, and four bars when both were disabled. The Orion2 can send SOC over the CANbus, but we don't fully understand how BATTSCI works yet, so there's no known way to send SOC to the MCM outside of the four values mentioned above. We DO understand how METSCI works, though, so I figured out a hack that would allow the translator to display the actual SOC on the dash while still allowing the Orion2 to control assist/regen.
METSCI is basically a one-way line that sends data from the MCM to the BCM and dash. The dash uses this data to update the SOC, assist, and regen gauges, while the BCM just takes the second byte of any packet starting with 0xB3 or 0xB4 and sends it back to the MCM on BATTSCI as a way of saying "hey, I'm still here." Therefore, instead of putting the translator on the BCM end of the line, we can have it intercept METSCI on the way to the dash
, set aside the B3/B4 bytes to send back to the MCM, and then alter any SOC packets (which begin with 0xE1) to reflect the actual SOC sent from the Orion2. All this would require from an electronics standpoint is another RS485 output, connected to any two free pins on our PIC. I'm pretty sure you also have to put a terminating resistor across the BCM end of the METSCI line, otherwise it might interfere with data being sent properly.
I've got the pseudocode for doing all this, plus some pictures of how I was physically going to set everything up, but they're on my old phone and I can't get to them right now. I'll post them later when I get home. Hope any of this is helpful!