[DRIVING] Opel Omega B2 + GS450H (the "EVOmega")

Tell us about the project you do with the open inverter
Jacobsmess
Posts: 644
Joined: Thu Mar 02, 2023 1:30 pm
Location: Uk
Has thanked: 324 times
Been thanked: 89 times

Re: [DRIVING] Opel Omega B2 + GS450H (the "EVOmega")

Post by Jacobsmess »

Oh this is interesting, I'd been thinking of fabricating an adapter for mine to match with the 6 bolt flange on my prop shaft.
User avatar
celeron55
Posts: 802
Joined: Thu Jul 04, 2019 3:04 pm
Location: Finland
Has thanked: 37 times
Been thanked: 133 times
Contact:

Re: [DRIVING] Opel Omega B2 + GS450H (the "EVOmega")

Post by celeron55 »

This one was made possible by having the same amount of bolts almost at the same radius which allowed me to interlace them. And the Omega propshaft having the same pilot pin diameter as the gearbox. Also, the backside of the gearbox output flange happens to be machined, which also was crucial.

I think you'll have to install the adapter on the "correct" side of the gearbox output flange, and instead of nuts and bolts you'll have to make it quite thick and tap threads to it. You could simply add some washers to utilize the indented machined surfaces on that side of the output flange.
User avatar
celeron55
Posts: 802
Joined: Thu Jul 04, 2019 3:04 pm
Location: Finland
Has thanked: 37 times
Been thanked: 133 times
Contact:

Re: [DRIVING] Opel Omega B2 + GS450H (the "EVOmega")

Post by celeron55 »

I've been testing the GS450H low gear on the Omega yesterday and today. Also did a quick and dirty auto shift implementation in the VCU code.

This car still uses the old GS450H VCU with my custom firmware. The plan is to move to Zombie, but that's not easy when it's partially a daily driver. Anyway...

With the low gear it's easy to see with the 78S battery MG2 looses its oomph already at like 5000rpm. It definitely likes voltage. I set the upshift point to 6000rpm(MG2) and downshift to 2000rpm for now. It's kind of silly to even use the low gear, it's like tractor mode or a 2L on a transfer case. Yeah I know, actually it's geared roughly like 1st gear on most manual gearboxes. But 1st gear on manual gearboxes makes almost zero sense on EV conversions.

The car easily spins the rear wheels on a gravel road but not on dry asphalt, with its 1 year old summer tyres. It does have the LSD so it won't do easy one wheel burnouts. Always two tyre sized holes in the gravel, to shovel back in.

My auto shift code looks roughly like this. I won't promise it won't explode your GS450H gearbox if you try it, but it hasn't yet exploded mine:

Code: Select all

#define SHIFT_UP_RPM 6000
#define SHIFT_DOWN_RPM 2000
#define SHIFT_DELAY_MS 100

enum class ShiftState {
    ENGAGED,
    TORQUE_ZERO_IDLE,
    SHIFT_COMMANDED,
};
struct Shift {
    uint8_t target_gear = 0; // 0 = low, 1 = high
    uint8_t current_gear = 0;
    ShiftState state = ShiftState::ENGAGED;                                                     
};
Shift shift;

void set_solenoid_outputs_idle()
{ 
    digitalWrite(TransSL1, LOW);
    digitalWrite(TransSL2, HIGH);
    digitalWrite(TransSP, LOW);
} 
  
void set_solenoid_outputs_gear(bool high_gear)
{ 
    if(high_gear){
        digitalWrite(TransSL1, LOW);
        digitalWrite(TransSL2, LOW);
        digitalWrite(TransSP, LOW);
    } else {
        digitalWrite(TransSL1, HIGH);
        digitalWrite(TransSL2, HIGH);
        digitalWrite(TransSP, HIGH);
    }
} 
  
void shift_step()
{      
    if(shift.state == ShiftState::ENGAGED){
        shift.target_gear = [&](){
            if(shift.current_gear == 0){
                return mg2_speed > SHIFT_UP_RPM ? 1 : 0;
            } else {
                return mg2_speed < SHIFT_DOWN_RPM ? 0 : 1;
            }
        }();
        if(shift.target_gear != shift.current_gear){
            set_solenoid_outputs_idle();
            // NOTE: Torque will be set to 0 in control_inverter()
            // Start waiting for torque=0 and idle commands to propagate
            shift.state = ShiftState::TORQUE_ZERO_IDLE;
        } else {                      
            set_solenoid_outputs_gear(shift.current_gear);
        }
    }
    else if(shift.state == ShiftState::TORQUE_ZERO_IDLE){
        // Torque=0 and idle commands are assumed to be propagated now
        // Now select the new gear
        set_solenoid_outputs_gear(shift.target_gear);
        // Start waiting for gear selection to propagate
        shift.state = ShiftState::SHIFT_COMMANDED;
    }       
    else if(shift.state == ShiftState::SHIFT_COMMANDED){
        // Gear selection is assumed to apply now. Switch to engaged state so
        // that torque will be applied again
        shift.current_gear = shift.target_gear;
        shift.state = ShiftState::ENGAGED;
    } else {
        shift.state = ShiftState::ENGAGED;
    }
}

...

    EVERY_N_MILLISECONDS(SHIFT_DELAY_MS){
        shift_step();
    }
Post Reply