Mitsubishi Outlander AC Compressor: Difference between revisions

From openinverter.org wiki
Jump to navigation Jump to search
m (Adding details for the refrigerant connections and links to 3D scans.)
m (Adding can bus messages.)
Line 35: Line 35:
[[File:Heater Connector Pins.png|none|thumb|1 - 12v, 2 - GND, 3 - CAN H, 4 - CAN L]]
[[File:Heater Connector Pins.png|none|thumb|1 - 12v, 2 - GND, 3 - CAN H, 4 - CAN L]]


=== High Voltage Connection ===
The compressor is connected with a 40amp fuse to high voltage.
=== Control Messages ===
0x185 controls the compressor and 0x285 is also required for operation, much like other outlander components. It broadcasts a few ids, 0x388 seems to be useful and contains it's status.
==== 0x185 - Control Message ====
The first byte, byte 0 controls the state of the compressor 0x08 is standby and 0x0B is start command
The second byte, data[1] doesn't seem to have a function.
The third byte is unknown but  0x1D works.
The forth and fifth also seem to not do anything.
Sixth byte is RPM control, 0x08 is inactive, 0x09 to 0x54
Seventh is also unknown, 0x00 works
Eighth is also unknown either 0x00 or 0x03 work
==== 0x388 - Status Message ====
First byte, 0x01 is HV present. 0x02 is No HV present, 0x7C is startup/running.
Third and Fourth bytes seem to be RPM feedback.
Eighth byte status 0x00 is no CAN, 0x01 CAN error, 0x02 is 0x285 receive error and 0x03 other error
==== Example control code ====
void sendCANframeE() { //AC compressor
        outframe.id = 0x185;            // 0x185 0B 00 1D 00 00 08 00 03
        outframe.length = 8;            // Data payload 8 bytes
        outframe.extended = 0;          // Extended addresses - 0=11-bit 1=29bit
        outframe.rtr=1;                //No request
        if(digitalRead(AC_pin) == LOW) { //AC pin is active       
        outframe.data.bytes[0]=0x0B; // status command 08 stbd, 0B start
        } 
        else {
        outframe.data.bytes[0]=0x08; //if we sense LOW we go to standby
        }             
        outframe.data.bytes[1]=0x00; //
        outframe.data.bytes[2]=0x1D; // 1D works
        outframe.data.bytes[3]=0x00; //
        outframe.data.bytes[4]=0x00; //
        if(digitalRead(AC_pin) == LOW) { // AC is active
        if (ACrpm <= 3800) { // Power for spinup
        outframe.data.bytes[5]=0x25; // RPM command 08 to 54
        }
        else if ((ACrpm > 3500) && (ACrpm <= 4200)) { // power is reduced
        outframe.data.bytes[5]=0x20; // RPM command 08 to 54       
        }
        }
        else {
        outframe.data.bytes[5]=0x08; //AC pin is inactive
        }       
        outframe.data.bytes[6]=0x00;
        outframe.data.bytes[7]=0x03; // can be 00 or 03, it does not differentiate
        if(debug) {printFrame(&outframe,1);} //If the debug variable is set, show our transmitted frame           
        if(myVars.CANport==0) Can0.sendFrame(outframe);    //Mail it
          else Can1.sendFrame(outframe);
This thread contains more detail information and is recommended reading: https://openinverter.org/forum/viewtopic.php?t=1997&start=25
[[Category:OEM]]  
[[Category:OEM]]  
[[Category:Mitsubishi]]  
[[Category:Mitsubishi]]  
[[Category:HVAC]]
[[Category:HVAC]]

Revision as of 12:57, 12 July 2022

The Outlander PHEV has a CAN bus controller AC compressor. One thing to note, your old system components will likely need flushing of the old oil as it's damaging to compressor motor wiring lacquer. It can cause shorts. When getting your system refilled, it needs to contain compatible lubricating oil, POE MA68EV is listed in the manual, likely the same as other hybrids/electric cars.

Weight 6.2kg
Length 19cm
Height 20cm
Width 12cm

3D scans are here: https://grabcad.com/library/outlander-phev-ac-compressor-1

Height
Height
Length
Length
Width
Width

Refrigerant Connections

The part numbers for the Mitsubishi hoses are AMD45418, AMD46168. Unconfirmed, but thought that these fit https://www.evcreate.nl/shop/airconditioning/adapter-set-airconditioning-compressor/

AC Connection.jpg
AC Connection2.jpg

Low Voltage Connection

The mating connector is Sumitomo 6189-0126 https://www.auto-click.co.uk/6189-0126?search=90980-10942 and the pinout is the same as the water heater. Connector also available cheap on aliexpress.

1 - 12v, 2 - GND, 3 - CAN H, 4 - CAN L

High Voltage Connection

The compressor is connected with a 40amp fuse to high voltage.

Control Messages

0x185 controls the compressor and 0x285 is also required for operation, much like other outlander components. It broadcasts a few ids, 0x388 seems to be useful and contains it's status.

0x185 - Control Message

The first byte, byte 0 controls the state of the compressor 0x08 is standby and 0x0B is start command

The second byte, data[1] doesn't seem to have a function.

The third byte is unknown but 0x1D works.

The forth and fifth also seem to not do anything.

Sixth byte is RPM control, 0x08 is inactive, 0x09 to 0x54

Seventh is also unknown, 0x00 works

Eighth is also unknown either 0x00 or 0x03 work

0x388 - Status Message

First byte, 0x01 is HV present. 0x02 is No HV present, 0x7C is startup/running.

Third and Fourth bytes seem to be RPM feedback.

Eighth byte status 0x00 is no CAN, 0x01 CAN error, 0x02 is 0x285 receive error and 0x03 other error

Example control code

void sendCANframeE() { //AC compressor
       outframe.id = 0x185;            // 0x185 0B 00 1D 00 00 08 00 03 
        outframe.length = 8;            // Data payload 8 bytes
        outframe.extended = 0;          // Extended addresses - 0=11-bit 1=29bit
        outframe.rtr=1;                 //No request 
        if(digitalRead(AC_pin) == LOW) { //AC pin is active        
        outframe.data.bytes[0]=0x0B; // status command 08 stbd, 0B start
        }   
        else {
        outframe.data.bytes[0]=0x08; //if we sense LOW we go to standby
        }              
        outframe.data.bytes[1]=0x00; // 
        outframe.data.bytes[2]=0x1D; // 1D works
        outframe.data.bytes[3]=0x00; //
        outframe.data.bytes[4]=0x00; //
        if(digitalRead(AC_pin) == LOW) { // AC is active
        if (ACrpm <= 3800) { // Power for spinup 
        outframe.data.bytes[5]=0x25; // RPM command 08 to 54
        }
        else if ((ACrpm > 3500) && (ACrpm <= 4200)) { // power is reduced 
        outframe.data.bytes[5]=0x20; // RPM command 08 to 54        
        } 
        }
        else {
        outframe.data.bytes[5]=0x08; //AC pin is inactive
        }        
        outframe.data.bytes[6]=0x00;
        outframe.data.bytes[7]=0x03; // can be 00 or 03, it does not differentiate
       if(debug) {printFrame(&outframe,1);} //If the debug variable is set, show our transmitted frame             
       if(myVars.CANport==0) Can0.sendFrame(outframe);    //Mail it
         else Can1.sendFrame(outframe);


This thread contains more detail information and is recommended reading: https://openinverter.org/forum/viewtopic.php?t=1997&start=25