Hi all.
I have started a project which involves making an exhaust valve controller. I have an exhaust valve kit which I got from China. All works as it should and the quality is surprisingly good. The servo motors look identical to the BMW OEM valves.
https://drive.google.com/file/d/1kODZQRlraVWlBe_12k6P4q1tDN9BoG6L/view?usp=sharing
I could just fit them as they are and be done with it, but where is the fun in that.
I haven't opened the valves as I don't want to compromise the watertight seal. I did, however, find this picture online.
https://drive.google.com/file/d/1BSzoeBEYh86eMxuGCRtSuqhLYpue2kdc/view?usp=sharing
It's not the best picture but some of you pros may be able to work it out. I'm thinking maybe an H bridge?
I had a look in the controller itself and got pictures of the circuit board. It runs on a Nuvoton N76E003AT20 chip and the PWM signal is bumped up to 12V.
https://drive.google.com/file/d/1WrrtmuB0xuGuOOZ3hGxiFKxPYOYSFXFL/view?usp=sharing
https://drive.google.com/file/d/1FOr9XAujwiZ0xaACfYAVlk4Fm9zgo7bZ/view?usp=sharing
I have been working on some code with the help of some of the guys on here to control 2 servo motors. I have got the code to do all the things it needs to do to move the valves from 0 to 180 and so on, every time a button is pressed.
I connected the Arduino circuit up to an oscilloscope and you can see the results in the following pictures.
At 180,
https://drive.google.com/file/d/1LQfvC1vZmd0faboLnpJmYx0ok5YT6Udz/view?usp=sharing
https://drive.google.com/file/d/1hrqO0bovOCBghC8Da-FTtMaBhOaLf-U-/view?usp=sharing
And at -180 or 0
https://drive.google.com/file/d/1f1HVEnEfYJmuyypoSCN8RhwcdaXfHgYh/view?usp=sharing
https://drive.google.com/file/d/1e1ou9MIAFmtwxXt4q8nuZ7p5E8T78AGl/view?usp=sharing
This is fine for the micro servos on the Arduino but not for the exhaust valves.
I hooked up the oscilloscope to the valve controller and came up with the following results.
There is a constant 11-12v signal being produced and when the button on the remote is pushed it looks like the PWM signal drops to around 0V like a reversed PWM signal if that is the correct term. see the following photos.
when the controller is at idle, constant 11-12V.
https://drive.google.com/file/d/16Oi6elP4Dn8oqVMvZdappC09suJVNqC_/view?usp=sharing
When the OFF button is pressed (Valve Closed).
https://drive.google.com/file/d/1lq-EAeitjpsRkRLM4j3EwtbiKrSMtWis/view?usp=sharing
https://drive.google.com/file/d/1UCPo3eMPeBMM2_4ZrB9OSkiiZOCfFUW-/view?usp=sharing
When the ON button is Pressed (Valve open).
https://drive.google.com/file/d/1aZ2VZ-hzyTajETbnBM77nJ-aqyX6u-IL/view?usp=sharing
https://drive.google.com/file/d/1OMwDldNCrwTSCN0ak69UY46zLPuZ0o40/view?usp=sharing
Now to me, the signal looks the same when pressing ON or OFF but if you keep pressing the ON button when the controller is ON you can see the signal on the scope but nothing happens until you press the OFF button and the same goes for the OFF button. When each button is pressed it pulses for around a second and then returns to the constant 11-12v signal.
this is the first time using an oscilloscope so I may be doing it all wrong and hopefully, you guys can point me in the right direction if so.
Now the big question is..... Can I replicate the frequency and duty cycle of the valve controller and place it in the correct places in my code?
I basically want to control the valves with a momentary push button and in the future ad geofencing and time disable (Valve Closed) so not to wake the neighbours on early morning starts.
I have found a link to a BMW site with information of their valves which may be similar to my valves.
https://www.newtis.info/tisv2/a/en/...-electronics/exhaust-emission-system/Im2GgsKi
Kind Regards,
Mike.
I have started a project which involves making an exhaust valve controller. I have an exhaust valve kit which I got from China. All works as it should and the quality is surprisingly good. The servo motors look identical to the BMW OEM valves.
https://drive.google.com/file/d/1kODZQRlraVWlBe_12k6P4q1tDN9BoG6L/view?usp=sharing
I could just fit them as they are and be done with it, but where is the fun in that.
I haven't opened the valves as I don't want to compromise the watertight seal. I did, however, find this picture online.
https://drive.google.com/file/d/1BSzoeBEYh86eMxuGCRtSuqhLYpue2kdc/view?usp=sharing
It's not the best picture but some of you pros may be able to work it out. I'm thinking maybe an H bridge?
I had a look in the controller itself and got pictures of the circuit board. It runs on a Nuvoton N76E003AT20 chip and the PWM signal is bumped up to 12V.
https://drive.google.com/file/d/1WrrtmuB0xuGuOOZ3hGxiFKxPYOYSFXFL/view?usp=sharing
https://drive.google.com/file/d/1FOr9XAujwiZ0xaACfYAVlk4Fm9zgo7bZ/view?usp=sharing
I have been working on some code with the help of some of the guys on here to control 2 servo motors. I have got the code to do all the things it needs to do to move the valves from 0 to 180 and so on, every time a button is pressed.
Code:
const int buttonPin = 2; // the pin that the pushbutton is attached to
const int servoPin1 = 9;
const int servoPin2 = 10;
// Variables will change:
int buttonState; // current state of the button
int lastButtonState; // previous state of the button
bool servoFacingLeft;
#include <Servo.h>
Servo myservo1;
Servo myservo2;
void setup()
{
Serial.begin(9600); // setup serial
// initialize the button pin as a input with pullup, active low
pinMode(buttonPin, INPUT_PULLUP);
//initialize button states
buttonState = digitalRead(buttonPin);
lastButtonState = buttonState;
//servo
myservo1.attach(9);
myservo2.attach(10);
Serial.println("Exhaust Valves ");
}
void loop()
{
// read the pushbutton input pin:
buttonState = digitalRead(buttonPin);
// compare the buttonState to its previous state
if (buttonState != lastButtonState) //changed
{
if (buttonState == LOW) //new press, so change servo flag
{
servoFacingLeft = !servoFacingLeft;
}
delay(50);
}
lastButtonState = buttonState; // save the current state as the last state, for next time through the loop
if (servoFacingLeft) //positions the servo
{
myservo1.write(-180); // 180 or -180 depending on type of valve
myservo2.write(-180); // 180 or -180 depending on type of valve
Serial.print("Valve Status: ");
Serial.print(" Valve Open");
Serial.println(" (Loud Mode)");
{
}
} else
{
myservo1.write(180); // 180 or -180 depending on type of valve
myservo2.write(180); // 180 or -180 depending on type of valve
Serial.print("Valve Status: ");
Serial.print(" Valve Closed");
Serial.println(" (Quiet Mode)");
}
}
At 180,
https://drive.google.com/file/d/1LQfvC1vZmd0faboLnpJmYx0ok5YT6Udz/view?usp=sharing
https://drive.google.com/file/d/1hrqO0bovOCBghC8Da-FTtMaBhOaLf-U-/view?usp=sharing
And at -180 or 0
https://drive.google.com/file/d/1f1HVEnEfYJmuyypoSCN8RhwcdaXfHgYh/view?usp=sharing
https://drive.google.com/file/d/1e1ou9MIAFmtwxXt4q8nuZ7p5E8T78AGl/view?usp=sharing
This is fine for the micro servos on the Arduino but not for the exhaust valves.
I hooked up the oscilloscope to the valve controller and came up with the following results.
There is a constant 11-12v signal being produced and when the button on the remote is pushed it looks like the PWM signal drops to around 0V like a reversed PWM signal if that is the correct term. see the following photos.
when the controller is at idle, constant 11-12V.
https://drive.google.com/file/d/16Oi6elP4Dn8oqVMvZdappC09suJVNqC_/view?usp=sharing
When the OFF button is pressed (Valve Closed).
https://drive.google.com/file/d/1lq-EAeitjpsRkRLM4j3EwtbiKrSMtWis/view?usp=sharing
https://drive.google.com/file/d/1UCPo3eMPeBMM2_4ZrB9OSkiiZOCfFUW-/view?usp=sharing
When the ON button is Pressed (Valve open).
https://drive.google.com/file/d/1aZ2VZ-hzyTajETbnBM77nJ-aqyX6u-IL/view?usp=sharing
https://drive.google.com/file/d/1OMwDldNCrwTSCN0ak69UY46zLPuZ0o40/view?usp=sharing
Now to me, the signal looks the same when pressing ON or OFF but if you keep pressing the ON button when the controller is ON you can see the signal on the scope but nothing happens until you press the OFF button and the same goes for the OFF button. When each button is pressed it pulses for around a second and then returns to the constant 11-12v signal.
this is the first time using an oscilloscope so I may be doing it all wrong and hopefully, you guys can point me in the right direction if so.
Now the big question is..... Can I replicate the frequency and duty cycle of the valve controller and place it in the correct places in my code?
I basically want to control the valves with a momentary push button and in the future ad geofencing and time disable (Valve Closed) so not to wake the neighbours on early morning starts.
I have found a link to a BMW site with information of their valves which may be similar to my valves.
https://www.newtis.info/tisv2/a/en/...-electronics/exhaust-emission-system/Im2GgsKi
Kind Regards,
Mike.
Last edited: