Hi all,
My first post here after spending a while reading the various threads on this forum. And it's going to be a long one!
I've owned a few GS450h cars over the years and recently ended up with a FD RX7 shell. I'm looking at turning it into an EV using GS450h hardware, due to the low cost, availability, size/form factor, and power output, which all seem to suit my needs.
I purchased a used GS450h motor drive unit ("transmission" / "gearbox") and an inverter at the end of last year and have only just had a chance to look at it.
Having read through the forum thread from bigmouse here, I knew it was possible to communicate with this unit. It seems that there isn't much information about them in the public domain, but the below post form hilux.2sv is a great starting point:

I pulled the unit apart to inspect the board. I drew a brief schematic for the relevant parts:

The board appears to use a proprietary transceiver, a DENSO SE617. There is no datasheet for this unit. I guessed the pin names from examination of the board.
A pair of 62R resistors with a capacitor to ground, and a dual choke (common mode, I guess, there is no info on the product code) provides the only protection and noise suppression.
The microcontroller used is a NED 76F0080GC. Again, no datasheet or specs for this.
The 5V rail for the transceivers is shared with the microcontroller, the resolver-to-digital converters, and some other parts, here's a brief look at it, I didn't examine too far, I guess it's a buck converter from the 12v input. Not much in the way of noise suppression?

I'll likely piggyback off of this 5V supply for my own controller.
So, the control signals....
It appears to be SPI over LVDS. Basically using a differential signal to extend the range/reliability of SPI in noisy environments. As hilux.2sv said above, the Toyota names for the pins are likely alternate names for MOSI, MISO, CLK.
HTM = High-voltage ecu To Motor-generator ecu - since the HV ECU (the Hybrid ECU) in the car is the master, this is MOSI. This is the signal which we will need to replicate to control the inverter.
MTH = Motor-generator ecu To High-voltage ecu - This is MISO. From this we get status updates back from the inverter.
CLK = This is the SPI clock. The Lexus system uses a 500KHz clock. The data packets from MOSI and MISO don't generally exceed 100 bytes, and I've managed to get stable packets without overlap from as low as 250KHz. Data from MTH will output in time with this clock (on a rising edge)
REQ = this is the status request line from the inverter. For the Lexus, this is a 1ms high pulse followed by a 3ms space, basically a 250Hz square wave at 25% duty cycle. In reality, the inverter outputs a packet of around 100 bytes whenever it detects the leading edge of a pulse, so a CS or SS line can be used to trigger this. The pulse can be helf high for the duration of the packet, or as long as you like. One pulse = one packet.
When talking about high and low here, I am referring to the differential signal. Since these are normally inverting, in reality the microcontroller likely receives a low pulse to trigger a packet output.
I set up the inverter on the bench, and fed it the following:
A typical packet looks like below:

The packet follows the SPI convention, with a start bit, 8 data bits, and a stop bit, as below:

The packet is 100 bytes wide, with many bytes being 0. A typical packet looks like below:
After sampling a few hundred of these, it seems that the inverter output (for an inverter on the bench with no motor connected) is below:

I ran the same test with the inverter connected to the car. I am only able to connect to one of the 4 lines at a time, id I try multiple, the - lines ground through the logic analyser and causes the car to generate a DTC and disable the hybrid system. I tried using diodes on the grounds to allow for some separation, this worked, but the data I received was corrupt.
I'll attach an Excel file showing a few hundred packets of the inverter both on the bench and on the car.
I also did the same to the HTM line, to see what the hybrid ECU sends the inverter on startup. As expected, the first few (hundred!) packets are unique, and then it seems to settle down. Again, it's in the spreadsheet.
Next up is to request torque from the motors (shift into R or D and move the car) and see how the states change.
I'm also starting to get parts together to talk to this unit with a microcontroller, rather than a signal generator and logic analyser. I purchase a TI SN65LVDT41PW LVDS Transceiver which contains 4x transmitters and 1x receiver. I have a spare Teensy 3.2 which I plan to use to replicate the CLK and REQ lines, and hopefully this can read packets back from the inverter and log changes in a more elegant way (it takes about an hour to convert the bit-stream from the analyser to a format which can be read by Excel!)
Of course, any knowledge on this subject would be greatly appreciated! I'm somewhat of a novice at programming, and have barely touched SPI, hopefully I'll be able to build something useable to control this unit!
Thanks
My first post here after spending a while reading the various threads on this forum. And it's going to be a long one!
I've owned a few GS450h cars over the years and recently ended up with a FD RX7 shell. I'm looking at turning it into an EV using GS450h hardware, due to the low cost, availability, size/form factor, and power output, which all seem to suit my needs.
I purchased a used GS450h motor drive unit ("transmission" / "gearbox") and an inverter at the end of last year and have only just had a chance to look at it.
Having read through the forum thread from bigmouse here, I knew it was possible to communicate with this unit. It seems that there isn't much information about them in the public domain, but the below post form hilux.2sv is a great starting point:
This is useful info, when compared to the connector on the inverter unit (all pictures are click-for-big!):

I pulled the unit apart to inspect the board. I drew a brief schematic for the relevant parts:

The board appears to use a proprietary transceiver, a DENSO SE617. There is no datasheet for this unit. I guessed the pin names from examination of the board.
A pair of 62R resistors with a capacitor to ground, and a dual choke (common mode, I guess, there is no info on the product code) provides the only protection and noise suppression.
The microcontroller used is a NED 76F0080GC. Again, no datasheet or specs for this.
The 5V rail for the transceivers is shared with the microcontroller, the resolver-to-digital converters, and some other parts, here's a brief look at it, I didn't examine too far, I guess it's a buck converter from the 12v input. Not much in the way of noise suppression?

I'll likely piggyback off of this 5V supply for my own controller.
So, the control signals....
It appears to be SPI over LVDS. Basically using a differential signal to extend the range/reliability of SPI in noisy environments. As hilux.2sv said above, the Toyota names for the pins are likely alternate names for MOSI, MISO, CLK.
HTM = High-voltage ecu To Motor-generator ecu - since the HV ECU (the Hybrid ECU) in the car is the master, this is MOSI. This is the signal which we will need to replicate to control the inverter.
MTH = Motor-generator ecu To High-voltage ecu - This is MISO. From this we get status updates back from the inverter.
CLK = This is the SPI clock. The Lexus system uses a 500KHz clock. The data packets from MOSI and MISO don't generally exceed 100 bytes, and I've managed to get stable packets without overlap from as low as 250KHz. Data from MTH will output in time with this clock (on a rising edge)
REQ = this is the status request line from the inverter. For the Lexus, this is a 1ms high pulse followed by a 3ms space, basically a 250Hz square wave at 25% duty cycle. In reality, the inverter outputs a packet of around 100 bytes whenever it detects the leading edge of a pulse, so a CS or SS line can be used to trigger this. The pulse can be helf high for the duration of the packet, or as long as you like. One pulse = one packet.
When talking about high and low here, I am referring to the differential signal. Since these are normally inverting, in reality the microcontroller likely receives a low pulse to trigger a packet output.
I set up the inverter on the bench, and fed it the following:
- 12V to both 12V pins
- 0V to both 0V pins
- ILKI and ILKO both grounded (not sure this matters yet)
- HSDN to 12V (not sure this matters yet)
- Shorting wire in the interlock connector for the AC compressor (not sure this matters yet)
- 250KHz square wave to CLK+ and -
- 250Hz square wave at 25% duty cycle to REQ+ and -.
- Logic analyser to CLK, REQ and MTH. All 3 of the - line are tied together by this, they don't seem to mind (they really do mind if you do this on the car, however!)
A typical packet looks like below:

The packet follows the SPI convention, with a start bit, 8 data bits, and a stop bit, as below:

The packet is 100 bytes wide, with many bytes being 0. A typical packet looks like below:
Code:
00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,11111111,11111111,00000000,00000000,00100100,01100000,00000000,00000000,10011000,00000000,00000000,00000000,00000001,11001000,01000000,00000000,00000000,00000000,00000000,10000000,00000000,00000100,00000000,00000001,10000011,10111111,11111111,11111111,11111111,01101011,01010000,00000000,00000000,00011000,10011000,00000000,00000000,00000100,01110010,11110001,00001000,00000000,00000000,00000000,00000001,01001000,01000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,10000000,10100000,00000000,10000000,00000000,00011000,00000000,00011000,00000000,00000000,11010111,10000000,00000000,00100000,11111111,00000000,01110011,00011011,10110000
After sampling a few hundred of these, it seems that the inverter output (for an inverter on the bench with no motor connected) is below:

I ran the same test with the inverter connected to the car. I am only able to connect to one of the 4 lines at a time, id I try multiple, the - lines ground through the logic analyser and causes the car to generate a DTC and disable the hybrid system. I tried using diodes on the grounds to allow for some separation, this worked, but the data I received was corrupt.
I'll attach an Excel file showing a few hundred packets of the inverter both on the bench and on the car.
I also did the same to the HTM line, to see what the hybrid ECU sends the inverter on startup. As expected, the first few (hundred!) packets are unique, and then it seems to settle down. Again, it's in the spreadsheet.
Next up is to request torque from the motors (shift into R or D and move the car) and see how the states change.
I'm also starting to get parts together to talk to this unit with a microcontroller, rather than a signal generator and logic analyser. I purchase a TI SN65LVDT41PW LVDS Transceiver which contains 4x transmitters and 1x receiver. I have a spare Teensy 3.2 which I plan to use to replicate the CLK and REQ lines, and hopefully this can read packets back from the inverter and log changes in a more elegant way (it takes about an hour to convert the bit-stream from the analyser to a format which can be read by Excel!)
Of course, any knowledge on this subject would be greatly appreciated! I'm somewhat of a novice at programming, and have barely touched SPI, hopefully I'll be able to build something useable to control this unit!
Thanks