Gs450h electric parking Brake

Topics concerning the Toyota and Lexus inverter drop in boards
Post Reply
joeflickers
Posts: 102
Joined: Mon Oct 24, 2022 8:46 am
Has thanked: 33 times
Been thanked: 10 times

Gs450h electric parking Brake

Post by joeflickers »

I've been running zombieverter with Gs450h and it's a beautiful setup.. Thanks to Damien,Tom and everyone else involved.. I recently changed the manual parking lever intergrated in the motor and now using BMW F30 lever.. I was wondering if theres anyone who has already intergrated the electric parking brake actuator for the Lexus.. My thoughs for engaging the parking is via a servo motor, arduino that reads F30 CAN messages for parking message and possibly reads the Zombie Vcu for motor speed and combination of the brake pedal so as to engage parking.. Wondering if there is someone who has already implemented this and eager to learn and share
xp677
Posts: 442
Joined: Sat Jul 27, 2019 10:53 am
Location: UK
Has thanked: 1 time
Been thanked: 15 times

Re: Gs450h electric parking Brake

Post by xp677 »

I used a window motor from an Audi A4 (cheapest on eBay) connected to where the GS's shift lever used to fit. The PRNDL switch on the side of the gearbox provides feedback telling the motor when to stop turning.

The Audi A4 unit has two relays built in, one for up and one for down, cross wired to provide the two directions. There was also a PCB with various IC's on there, it's likely CAN driven. I ripped out the PCB and drive the relays diretly from digital outputs via a MOSFET and some protection.

If you use a dumb motor then you'd need a H bridge, relays, etc to handle control. Maybe a stepper motor would be a good solution. The window motor was good for me as it comes with a gearbox already and is quite compact. And cheap.

Code is from a larger function but here's what I used. Sorry.

Code: Select all

//Parking Lock
#define LOCK_PARK 0
#define LOCK_NEUTRAL 1
#define LOCK_NEITHER 2
#define LOCK_ERROR 3
#define VEH_SPEED_SHIFT_THRESHOLD_LOW 1 //speed below which gear shift / park lock will happen
#define VEH_SPEED_SHIFT_THRESHOLD_HIGH 10 //speed above which prnd input is ignored
byte parking_lock = 2;
bool shifting = 0;

    //read park lock state
    if (!digitalRead(pin_trans_neutral) && digitalRead(pin_trans_park))parking_lock = LOCK_NEUTRAL;
    else if (digitalRead(pin_trans_neutral) && !digitalRead(pin_trans_park))parking_lock = LOCK_PARK;
    else if (digitalRead(pin_trans_neutral) && digitalRead(pin_trans_park))parking_lock = LOCK_NEITHER;
    else if (!digitalRead(pin_trans_neutral) && !digitalRead(pin_trans_park))parking_lock = LOCK_NEITHER;
    
    
    if (current_gear == GEAR_PARK || shifting) //currently in park, request to come out of park
    {
      shifting = 1;
      if (veh_speed_kph < VEH_SPEED_SHIFT_THRESHOLD_LOW && veh_speed_kph > -VEH_SPEED_SHIFT_THRESHOLD_LOW)
      {
        Serial.print("\tParking Lock: ");
        switch (parking_lock)
        {
          case LOCK_PARK: Serial.print("Engaged (Park)"); break;
          case LOCK_NEUTRAL: Serial.print("Disengaged (Neutral)"); break;
          case LOCK_NEITHER: Serial.print("Neither"); break;
        case LOCK_ERROR: default: Serial.print("Error"); break;
        }
        Serial.print("\treleasing parking pawl\n");

        if (parking_lock == LOCK_PARK || parking_lock == LOCK_NEITHER)
        {
          digitalWrite(pin_trans_motor_neutral, 1);
          digitalWrite(pin_trans_motor_park, 0);
        }
        if (parking_lock == LOCK_NEUTRAL)
        {
          digitalWrite(pin_trans_motor_neutral, 0);
          current_gear = prnd_gear; //after parking lock has finished, update the current gear
          shifting = 0;
        }
        Serial.println(digitalRead(pin_trans_motor_park));
        Serial.println(digitalRead(pin_trans_motor_neutral));

      }
      return;
    }

    if (prnd_gear == GEAR_PARK || shifting) //currently not in park, request to go into park
    {
      shifting = 1;
      current_gear = GEAR_NEUTRAL;
      if (veh_speed_kph < VEH_SPEED_SHIFT_THRESHOLD_LOW && veh_speed_kph > -VEH_SPEED_SHIFT_THRESHOLD_LOW)
      {
        Serial.print("\tParking Lock: ");
        switch (parking_lock)
        {
          case LOCK_PARK: Serial.print("Engaged (Park)"); break;
          case LOCK_NEUTRAL: Serial.print("Disengaged (Neutral)"); break;
          case LOCK_NEITHER: Serial.print("Neither"); break;
        case LOCK_ERROR: default: Serial.print("Error"); break;
        }
        Serial.print("\tlocking parking pawl\n");

        if (parking_lock == LOCK_NEUTRAL || parking_lock == LOCK_NEITHER)
        {
          digitalWrite(pin_trans_motor_neutral, 0);
          digitalWrite(pin_trans_motor_park, 1);
        }
        if (parking_lock == LOCK_PARK)
        {
          digitalWrite(pin_trans_motor_park, 0);
          current_gear = prnd_gear;
          shifting = 0;
        }
        Serial.println(digitalRead(pin_trans_motor_park));
        Serial.println(digitalRead(pin_trans_motor_neutral));

      }
      return;
    }
    
Note that I never used the VCU or the ZombieVerter, those were both forked from my early code (just after I got the inverter working), so I doubt anything I post here would be compatible.
Attachments
IMG_20191202_173128.jpg
joeflickers
Posts: 102
Joined: Mon Oct 24, 2022 8:46 am
Has thanked: 33 times
Been thanked: 10 times

Re: Gs450h electric parking Brake

Post by joeflickers »

xp677 wrote: Wed Mar 19, 2025 10:04 pm I used a window motor from an Audi A4 (cheapest on eBay) connected to where the GS's shift lever used to fit. The PRNDL switch on the side of the gearbox provides feedback telling the motor when to stop turning.

The Audi A4 unit has two relays built in, one for up and one for down, cross wired to provide the two directions. There was also a PCB with various IC's on there, it's likely CAN driven. I ripped out the PCB and drive the relays diretly from digital outputs via a MOSFET and some protection.

If you use a dumb motor then you'd need a H bridge, relays, etc to handle control. Maybe a stepper motor would be a good solution. The window motor was good for me as it comes with a gearbox already and is quite compact. And cheap.

Code is from a larger function but here's what I used. Sorry.

Code: Select all

//Parking Lock
#define LOCK_PARK 0
#define LOCK_NEUTRAL 1
#define LOCK_NEITHER 2
#define LOCK_ERROR 3
#define VEH_SPEED_SHIFT_THRESHOLD_LOW 1 //speed below which gear shift / park lock will happen
#define VEH_SPEED_SHIFT_THRESHOLD_HIGH 10 //speed above which prnd input is ignored
byte parking_lock = 2;
bool shifting = 0;

    //read park lock state
    if (!digitalRead(pin_trans_neutral) && digitalRead(pin_trans_park))parking_lock = LOCK_NEUTRAL;
    else if (digitalRead(pin_trans_neutral) && !digitalRead(pin_trans_park))parking_lock = LOCK_PARK;
    else if (digitalRead(pin_trans_neutral) && digitalRead(pin_trans_park))parking_lock = LOCK_NEITHER;
    else if (!digitalRead(pin_trans_neutral) && !digitalRead(pin_trans_park))parking_lock = LOCK_NEITHER;
    
    
    if (current_gear == GEAR_PARK || shifting) //currently in park, request to come out of park
    {
      shifting = 1;
      if (veh_speed_kph < VEH_SPEED_SHIFT_THRESHOLD_LOW && veh_speed_kph > -VEH_SPEED_SHIFT_THRESHOLD_LOW)
      {
        Serial.print("\tParking Lock: ");
        switch (parking_lock)
        {
          case LOCK_PARK: Serial.print("Engaged (Park)"); break;
          case LOCK_NEUTRAL: Serial.print("Disengaged (Neutral)"); break;
          case LOCK_NEITHER: Serial.print("Neither"); break;
        case LOCK_ERROR: default: Serial.print("Error"); break;
        }
        Serial.print("\treleasing parking pawl\n");

        if (parking_lock == LOCK_PARK || parking_lock == LOCK_NEITHER)
        {
          digitalWrite(pin_trans_motor_neutral, 1);
          digitalWrite(pin_trans_motor_park, 0);
        }
        if (parking_lock == LOCK_NEUTRAL)
        {
          digitalWrite(pin_trans_motor_neutral, 0);
          current_gear = prnd_gear; //after parking lock has finished, update the current gear
          shifting = 0;
        }
        Serial.println(digitalRead(pin_trans_motor_park));
        Serial.println(digitalRead(pin_trans_motor_neutral));

      }
      return;
    }

    if (prnd_gear == GEAR_PARK || shifting) //currently not in park, request to go into park
    {
      shifting = 1;
      current_gear = GEAR_NEUTRAL;
      if (veh_speed_kph < VEH_SPEED_SHIFT_THRESHOLD_LOW && veh_speed_kph > -VEH_SPEED_SHIFT_THRESHOLD_LOW)
      {
        Serial.print("\tParking Lock: ");
        switch (parking_lock)
        {
          case LOCK_PARK: Serial.print("Engaged (Park)"); break;
          case LOCK_NEUTRAL: Serial.print("Disengaged (Neutral)"); break;
          case LOCK_NEITHER: Serial.print("Neither"); break;
        case LOCK_ERROR: default: Serial.print("Error"); break;
        }
        Serial.print("\tlocking parking pawl\n");

        if (parking_lock == LOCK_NEUTRAL || parking_lock == LOCK_NEITHER)
        {
          digitalWrite(pin_trans_motor_neutral, 0);
          digitalWrite(pin_trans_motor_park, 1);
        }
        if (parking_lock == LOCK_PARK)
        {
          digitalWrite(pin_trans_motor_park, 0);
          current_gear = prnd_gear;
          shifting = 0;
        }
        Serial.println(digitalRead(pin_trans_motor_park));
        Serial.println(digitalRead(pin_trans_motor_neutral));

      }
      return;
    }
    
Note that I never used the VCU or the ZombieVerter, those were both forked from my early code (just after I got the inverter working), so I doubt anything I post here would be compatible.
Such a great approx, thanks for sharing
Jahnkeanater
Posts: 1
Joined: Mon Mar 23, 2026 9:28 pm

Re: Gs450h electric parking Brake

Post by Jahnkeanater »

I'm going to assume most Toyota hybrid parking brake actuators are relatively similar. Here's how the Gen 2 Prius motor works.
Basically it's just a 12v stepper motor. It has 3 phase wires and a common wire.

The 4 larger pins are the motor. Pin 4 is ground. Pins 1,2,3 are the phases.
The smaller 5 pins are the hall effect position sensors. I assume it's 5 volts but it might be 12.
Looking at the diagram for the 502A hall effect sensors it looks like you need a 1.2k pull up resistor on the 3 outputs.

I was able to drive the motor with a simple program that just stepped through this sequence.
001,011,010,110,100,101
PXL_20240821_040715253.NIGHT~3.jpg
PXL_20240821_040618833~2.jpg
PXL_20240821_040609677.jpg
User avatar
johu
Site Admin
Posts: 7182
Joined: Thu Nov 08, 2018 10:52 pm
Location: Kassel/Germany
Has thanked: 552 times
Been thanked: 1913 times
Contact:

Re: Gs450h electric parking Brake

Post by johu »

Hi and welcome :) You can now attach your photos directly to the post to avoid them from vanishing. Thanks!
Support R/D and forum on Patreon: https://patreon.com/openinverter - Subscribe on odysee: https://odysee.com/@openinverter:9
User avatar
Bigpie
Posts: 1884
Joined: Wed Apr 10, 2019 8:11 pm
Location: South Yorkshire, UK
Has thanked: 91 times
Been thanked: 517 times

Re: Gs450h electric parking Brake

Post by Bigpie »

I've updated and attached the images for you. I couldn't workout how to embed the video though
BMW E91 2006
ZombieVerter
GS450h
Outlander Charger DC/DC
Outlander Compressor
Renault Kangoo 36kWh battery
FOCCCI CCS
Post Reply