[DRIVING] Opel Omega B2 + GS450H (the "EVOmega")
-
- 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")
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.
- 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")
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.
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.
- 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")
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:
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();
}