Forced Induction Superchargers | Turbochargers | Intercoolers

Variable Speed PWM Fan Control under $25 or less DIY

Thread Tools
 
Search this Thread
 
Old Oct 18, 2023 | 02:52 PM
  #501  
LSswap's Avatar
Thread Starter
TECH Fanatic
10 Year Member
Liked
Loved
Community Favorite
 
Joined: Nov 2014
Posts: 1,301
Likes: 658
Default

Originally Posted by AutobahnSolo
First off, much appreciation to all of you for contributing to this thread. It’s been a huge help so far.

wondering if someone can help me figure this out.
I have Bosch brushless fans that run their power and control wire through their matching Battery junction box. Then control runs up to the ECU, which I swapped out.
what’s confusing me is the control wire coming out of the fuse box is 12v, low mA. My assumption is the old ecu was controlling PMW via -5v (or ground signal PMW via mosfet?)

this is where my understanding is fuzzy… I’d like to keep the power and control going through battery junction box as it already is fused and regulates shorts but that 12v coming from it to the ecu is confusing. Can’t recall exact reading but it’s a very low milliamp 12v signal.



Current existing setup.
So what you're saying is that your current ECU does not have a working PWM line. The you need to decide what alternative is the best one for you.
Does it have a low high relay signal or was it a PWM style ECu and the PWM part is broken?

There are a number of alternatives proposed in this thread that can work for you. The first page has an index to possibly help you hunt down the best one based on your needs and skill level.
Reply
Old Oct 18, 2023 | 07:19 PM
  #502  
SAT's Avatar
SAT
Teching In
 
Joined: Oct 2023
Posts: 4
Likes: 1
From: KURDISTAN
Default

Originally Posted by LSswap
Code:
// This a test program, no warranties are implied or given. PWM BMW ext temp sensor V1
// Use, copy any modify this test program any way you want, at your own risk. Then test, test, test
// It reads a extermal 10K thermister temperature probe and controls a BMW PWM fan.
// BMW fan: 5% duty = full, 95% = off, no PWM = full Freq = 100Hz, PWM signal is 12 volt, Temps in Centigrade
#include <PWM.h>
/*----------------------- User adjustable variables and preferences section ---------------------------------*/
// FYI a PWM duty ranges from 0 to 255. Set desired temperature range below
const int tempForFanStartup = 74; // target low temp. below this temperature, the fan will be off
const int tempForFanOnFull = 99; // target High temp. above this temperature, the fan will be on at full power

// adjust these for PWN to for fan off, fan start and fan full on
const int fanOnFullDuty = 26; // duty for 10% (full speed = 10% of 255)
const int fanDutyOff = 242; // duty for 95% (off fan speed = 95% of 255)

/*----------------------- end of User adjustable variables and preferences -----------------------------------*/
const int fanPwmOutPin = 9; // Arduino forces this pin to 0 or 5 volts.
const int tempSensorPin = A0; // Pin to read analog voltage from the temp sensor.

void setup() { /* ++++++++++++++++++ Setup is run once when the arduino boots ++++++++++++++++++++++++++*/
Serial.begin(115200); // set up serial port for 115200 baud (optional)
InitTimersSafe(); // set pwm frequency to 100 Hz for BMW pwm
SetPinFrequency(fanPwmOutPin, 100); // set pwm frequency to 100 Hz for BMW pwm
pwmWrite(fanPwmOutPin, 0); // start with fan off
analogReference (EXTERNAL); // note, this is using the 3.3 volt supply as the analog reference for more accuracy.
} // end setup

void loop() { /* ++++++++++++++++++ Main Loop, continuously loops forever ++++++++++++++++++++++++++++*/
int currTempC = get_temperature_sensor(); // read and translate the temp sensor
int pwmDuty = calculate_PWM_duty(currTempC); // calculate the needed pwm
pwmWrite(fanPwmOutPin, 255 - pwmDuty); // send PWM to output pin (invert pwm for 12 volt transistor)
Serial.print(F("Temp C: ")); Serial.print(currTempC);
Serial.print(F(" pwmDuty: ")); Serial.println(pwmDuty);
delay(1000);
} // end main loop

int calculate_PWM_duty(int currTemp) { /* ++++++++ subroutine to calculate and set PWM duty cycle ++++++++++++++*/
int duty = map(currTemp, tempForFanStartup, tempForFanOnFull, fanDutyOff, fanOnFullDuty ); // calc PWM Duty
int contrainedDuty = constrain(duty, fanOnFullDuty, 255 ); // PWM duty is never allowed ouside of min or max duties
return(contrainedDuty);
} // end calculate_PWM_duty

int get_temperature_sensor() {/* +++++ returns temp for extermal 10K thermister temperature probe ++++++++++*/
float R0 = 10000; // The base resistance of the NTC sensor used. 10K with a 3435 Beta.
float Beta = 3435; // The Beta of the sensor used. Very commonly available
int tmp = analogRead(tempSensorPin); // read temperature sensor (range 0 to 1023)
float r = ((1023.0*R0)/(float)tmp)-R0; // for a 10K thermister with a beta of 3435
tmp = (int) (Beta/log(r/0.09919) - 273.15 + .499); // for a 10K thermister with a beta of 3435
return(tmp);
} // end get_temperature_sensor

IT working well with my BMW f21 fan .but could you pls add AC overall 50%of the fan speed ?
THANK YOU VERY MUCH for your help.
Reply
Old Oct 19, 2023 | 12:34 AM
  #503  
LSswap's Avatar
Thread Starter
TECH Fanatic
10 Year Member
Liked
Loved
Community Favorite
 
Joined: Nov 2014
Posts: 1,301
Likes: 658
Default Brushless BMW (probably most brushless) fans with A/C input from clutch.

Brushless BMW (probably most brushless) fans with A/C input from clutch.



Code:
// This a test program, no warranties are implied or given. PWM BMW ext temp sensor V1
// Use, copy any modify this test program any way you want, at your own risk. Then test, test, test
// It reads a extermal 10K thermister temperature probe and controls a BMW PWM fan.
// BMW fan: 5% duty = full, 95% = off, no PWM = full Freq = 100Hz, PWM signal is 12 volt, Temps in Centigrade
// also turn fan 0n 50% if A/C is on and engine cold.
#include <PWM.h>
/*----------------------- User adjustable variables and preferences section ---------------------------------*/
// FYI a PWM duty ranges from 0 to 255. Set desired temperature range below
const int tempForFanStartup = 74; // target low temp. below this temperature, the fan will be off
const int tempForFanOnFull = 99; // target High temp. above this temperature, the fan will be on at full power
const int A_C_Start_temp = tempForFanStartup + ((tempForFanOnFull - tempForFanStartup)/2); // set this to 50% of tempForFanStartup and tempForFanOnFull

// adjust these for PWN to for fan off, fan start and fan full on
const int fanOnFullDuty = 26; // duty for 10% (full speed = 10% of 255)
const int fanDutyOff = 242; // duty for 95% (off fan speed = 95% of 255)

/*----------------------- end of User adjustable variables and preferences -----------------------------------*/
const int fanPwmOutPin = 9; // Arduino forces this pin to 0 or 5 volts.
const int tempSensorPin = A0; // Pin to read analog voltage from the temp sensor.
const int AC_ClutchPin = A1; // Pin to A/C Clutch via 1K/10K Voltage Devider

void setup() { /* ++++++++++++++++++ Setup is run once when the arduino boots ++++++++++++++++++++++++++*/
Serial.begin(115200); // set up serial port for 115200 baud (optional)
InitTimersSafe(); // set pwm frequency to 100 Hz for BMW pwm
SetPinFrequency(fanPwmOutPin, 100); // set pwm frequency to 100 Hz for BMW pwm
pwmWrite(fanPwmOutPin, 0); // start with fan off
analogReference (EXTERNAL); // note, this is using the 3.3 volt supply as the analog reference for more accuracy.
} // end setup

void loop() { /* ++++++++++++++++++ Main Loop, continuously loops forever ++++++++++++++++++++++++++++*/
int currTempC = get_temperature_sensor(); // read and translate the temp sensor

if (analogRead(AC_ClutchPin) > 20 ) { // A/C is on
// When the A/C Clutch is On, Voltage > .32V at Analog Input ( is ~ 1.4V when A/C is On )
if (currTempC < tempForFanStartup) {
currTempC = A_C_Start_temp; // Override NTC Temp Sensor Reading with 50% if A/C On & Engine Cold
}
}

int pwmDuty = calculate_PWM_duty(currTempC); // calculate the needed pwm
pwmWrite(fanPwmOutPin, 255 - pwmDuty); // send PWM to output pin (invert pwm for 12 volt transistor)
Serial.print(F("Temp C: ")); Serial.print(currTempC);
Serial.print(F(" pwmDuty: ")); Serial.println(pwmDuty);
delay(1000);
} // end main loop

int calculate_PWM_duty(int currTemp) { /* ++++++++ subroutine to calculate and set PWM duty cycle ++++++++++++++*/
int duty = map(currTemp, tempForFanStartup, tempForFanOnFull, fanDutyOff, fanOnFullDuty ); // calc PWM Duty
int contrainedDuty = constrain(duty, fanOnFullDuty, 255 ); // PWM duty is never allowed ouside of min or max duties
return(contrainedDuty);
} // end calculate_PWM_duty

int get_temperature_sensor() {/* +++++ returns temp for extermal 10K thermister temperature probe ++++++++++*/
float R0 = 10000; // The base resistance of the NTC sensor used. 10K with a 3435 Beta.
float Beta = 3435; // The Beta of the sensor used. Very commonly available
int tmp = analogRead(tempSensorPin); // read temperature sensor (range 0 to 1023)
float r = ((1023.0*R0)/(float)tmp)-R0; // for a 10K thermister with a beta of 3435
tmp = (int) (Beta/log(r/0.09919) - 273.15 + .499); // for a 10K thermister with a beta of 3435
return(tmp);
} // end get_temperature_sensor
Reply
Old Oct 27, 2023 | 05:08 PM
  #504  
SAT's Avatar
SAT
Teching In
 
Joined: Oct 2023
Posts: 4
Likes: 1
From: KURDISTAN
Default

Originally Posted by LSswap
Brushless BMW (probably most brushless) fans with A/C input from clutch.



Code:
// This a test program, no warranties are implied or given. PWM BMW ext temp sensor V1
// Use, copy any modify this test program any way you want, at your own risk. Then test, test, test
// It reads a extermal 10K thermister temperature probe and controls a BMW PWM fan.
// BMW fan: 5% duty = full, 95% = off, no PWM = full Freq = 100Hz, PWM signal is 12 volt, Temps in Centigrade
// also turn fan 0n 50% if A/C is on and engine cold.
#include <PWM.h>
/*----------------------- User adjustable variables and preferences section ---------------------------------*/
// FYI a PWM duty ranges from 0 to 255. Set desired temperature range below
const int tempForFanStartup = 74; // target low temp. below this temperature, the fan will be off
const int tempForFanOnFull = 99; // target High temp. above this temperature, the fan will be on at full power
const int A_C_Start_temp = tempForFanStartup + ((tempForFanOnFull - tempForFanStartup)/2); // set this to 50% of tempForFanStartup and tempForFanOnFull

// adjust these for PWN to for fan off, fan start and fan full on
const int fanOnFullDuty = 26; // duty for 10% (full speed = 10% of 255)
const int fanDutyOff = 242; // duty for 95% (off fan speed = 95% of 255)

/*----------------------- end of User adjustable variables and preferences -----------------------------------*/
const int fanPwmOutPin = 9; // Arduino forces this pin to 0 or 5 volts.
const int tempSensorPin = A0; // Pin to read analog voltage from the temp sensor.
const int AC_ClutchPin = A1; // Pin to A/C Clutch via 1K/10K Voltage Devider

void setup() { /* ++++++++++++++++++ Setup is run once when the arduino boots ++++++++++++++++++++++++++*/
Serial.begin(115200); // set up serial port for 115200 baud (optional)
InitTimersSafe(); // set pwm frequency to 100 Hz for BMW pwm
SetPinFrequency(fanPwmOutPin, 100); // set pwm frequency to 100 Hz for BMW pwm
pwmWrite(fanPwmOutPin, 0); // start with fan off
analogReference (EXTERNAL); // note, this is using the 3.3 volt supply as the analog reference for more accuracy.
} // end setup

void loop() { /* ++++++++++++++++++ Main Loop, continuously loops forever ++++++++++++++++++++++++++++*/
int currTempC = get_temperature_sensor(); // read and translate the temp sensor

if (analogRead(AC_ClutchPin) > 20 ) { // A/C is on
// When the A/C Clutch is On, Voltage > .32V at Analog Input ( is ~ 1.4V when A/C is On )
if (currTempC < tempForFanStartup) {
currTempC = A_C_Start_temp; // Override NTC Temp Sensor Reading with 50% if A/C On & Engine Cold
}
}

int pwmDuty = calculate_PWM_duty(currTempC); // calculate the needed pwm
pwmWrite(fanPwmOutPin, 255 - pwmDuty); // send PWM to output pin (invert pwm for 12 volt transistor)
Serial.print(F("Temp C: ")); Serial.print(currTempC);
Serial.print(F(" pwmDuty: ")); Serial.println(pwmDuty);
delay(1000);
} // end main loop

int calculate_PWM_duty(int currTemp) { /* ++++++++ subroutine to calculate and set PWM duty cycle ++++++++++++++*/
int duty = map(currTemp, tempForFanStartup, tempForFanOnFull, fanDutyOff, fanOnFullDuty ); // calc PWM Duty
int contrainedDuty = constrain(duty, fanOnFullDuty, 255 ); // PWM duty is never allowed ouside of min or max duties
return(contrainedDuty);
} // end calculate_PWM_duty

int get_temperature_sensor() {/* +++++ returns temp for extermal 10K thermister temperature probe ++++++++++*/
float R0 = 10000; // The base resistance of the NTC sensor used. 10K with a 3435 Beta.
float Beta = 3435; // The Beta of the sensor used. Very commonly available
int tmp = analogRead(tempSensorPin); // read temperature sensor (range 0 to 1023)
float r = ((1023.0*R0)/(float)tmp)-R0; // for a 10K thermister with a beta of 3435
tmp = (int) (Beta/log(r/0.09919) - 273.15 + .499); // for a 10K thermister with a beta of 3435
return(tmp);
} // end get_temperature_sensor


thank you bro ,but it work like a temp switch it start in full speed when it cools down the engine it turns off the fan , I see u answer this question and I tried this correction but it makes the fan work always in slow . when the temp increased just as before the fan work in full speed.

Yes, I found the bug. it was within the subroutine that calculates the PWM duty.
statement with error: int contrainedDuty = constrain(duty, fanOnFullDuty, 255 ); // PWM duty is never allowed ouside of min or max dutie
Corrected: int contrainedDuty = constrain(duty, fanDutyOff, fanOnFullDuty ); // PWM duty is never allowed ouside of min or max duties

I'll correct it in the code I posted above.


Here's my question, because what i've tested now is we have only 2 settings for Fanspeed,, Fan off or Fan On Full Speed when it reads 98 Celcius in my example.
Is it possible to have more steps for Fan Speed when temps are increasing ?
Reply
Old Oct 28, 2023 | 12:03 AM
  #505  
LSswap's Avatar
Thread Starter
TECH Fanatic
10 Year Member
Liked
Loved
Community Favorite
 
Joined: Nov 2014
Posts: 1,301
Likes: 658
Default

Originally Posted by SAT
thank you bro ,but it work like a temp switch it start in full speed when it cools down the engine it turns off the fan , I see u answer this question and I tried this correction but it makes the fan work always in slow . when the temp increased just as before the fan work in full speed.

Yes, I found the bug. it was within the subroutine that calculates the PWM duty.
statement with error: int contrainedDuty = constrain(duty, fanOnFullDuty, 255 ); // PWM duty is never allowed ouside of min or max dutie
Corrected: int contrainedDuty = constrain(duty, fanDutyOff, fanOnFullDuty ); // PWM duty is never allowed ouside of min or max duties

I'll correct it in the code I posted above.


Here's my question, because what i've tested now is we have only 2 settings for Fanspeed,, Fan off or Fan On Full Speed when it reads 98 Celcius in my example.
Is it possible to have more steps for Fan Speed when temps are increasing ?
I'll load the code into my test setup. More to follow.

There should be more speeds than 2. What PWM is your fan expecting for off, low speed and max speed?

Last edited by LSswap; Oct 28, 2023 at 12:13 AM.
Reply
Old Oct 28, 2023 | 05:01 PM
  #506  
SAT's Avatar
SAT
Teching In
 
Joined: Oct 2023
Posts: 4
Likes: 1
From: KURDISTAN
Default

Thank you bro , I changed these two lines ,fanonfullduty was 26 and fandutyoff was 242,
const int fanOnFullDuty = 242; //
const int fanDutyOff = 0; //

-my fan works in 100hz depends on PWM generator .
now it works fine..im really happy now ..
THANK you again and againLSswap .. for making this code..



Reply
Old Dec 16, 2023 | 11:52 PM
  #507  
miniCotulla's Avatar
Teching In
 
Joined: Dec 2023
Posts: 4
Likes: 1
Default Audi PWM brushless fans

I want to use these fans for my project, they are from an Audi SQ5. I already bought a PWM Generator and tested it. It responds to 10Hz and is off at 10% Duty Cycle, starts spinning at 13%. It's not for an LS car but here is so much info on PWM Fan control that I hope I'm welcome here. What confused me is the wiring, some show transistors and resistors on the PWM line, others don't. What do I need to control these with an arduino? I just hooked up the PWM line from the generator to the fan, nothing in between.

Also with the arduino is there a way to detect charging voltage(14,4V vs. 12V) from the generator? I want to switch some other stuff (water pump and power steering) but only when the engine is running not with just the ignition on.

PartNr. of the fan: 4H0959455AE



Reply
Old Dec 17, 2023 | 12:59 AM
  #508  
LSswap's Avatar
Thread Starter
TECH Fanatic
10 Year Member
Liked
Loved
Community Favorite
 
Joined: Nov 2014
Posts: 1,301
Likes: 658
Default

Originally Posted by miniCotulla
I want to use these fans for my project, they are from an Audi SQ5. I already bought a PWM Generator and tested it. It responds to 10Hz and is off at 10% Duty Cycle, starts spinning at 13%. What confused me is the wiring, some show transistors and resistors on the PWM line, others don't.
The fact that you got it working with just a PWM generator that is connected to 12V means that your fans control is tolerant of a 0 - 12V PWM signal. Some are a 5V PWM signal and will burn out with 12V PWM.

An arduino only can put out a 0-5V PWM. Arduinos (actually all computers) don't like 12V and need to be protected from 12V. If your fan needs a 0-12V PWM or if your fan needs just an open source sink to the ground and has it's own 12V pullup, then you must use the transistor to both provide the 12V and to protect the arduino from the 12V. If you have only the transistor and no pullup resistor, then it will only be able to sink to ground. If you add a pullup resistor to the transistor, then it can provide a 0 - 12V PWM (and protect the arduino from 12V) The PWM generator actually has in it, a transistor and a pullup resistor to the supply voltage (whatever that voltage is 5V or 12V or any V) and works exactly like the transistor with the pullup resistor.


Originally Posted by miniCotulla
Also with the arduino is there a way to detect charging voltage(14,4V vs. 12V) from the generator? I want to switch some other stuff (water pump and power steering) but only when the engine is running not with just the ignition on.
Sure, however, you can't connect 14.4 or 12 volts directly to the analog ports or it will burn them out. So instead, you would use a voltage divider (similar to the one used in one of the circuits above to detect the A/C compressor). This needs to insure that even though you are reading a maximun worst case of let's say 20V, the arduino never sees more than 5V at the analog port. Then you would scale your reading to the proportion of the voltage divider.

Originally Posted by miniCotulla
I want to switch some other stuff (water pump and power steering) but only when the engine is running not with just the ignition on.
For that you would need to find some voltage that changes when the engine is running. Ideally a 0-5 voltage like a hall effect sensor on the cam or crank. Then you could connect that to one of the digital inputs and check that it's changing from on to off every so often which means the engine is running. If it stays on or off for a long time, then the engine is not running. If you have a VR sensor, then that's much more difficult. You could also use an injector signal, but since injectors are 12V, then you need the voltage divider again and use an analog port.

Reply
Old Dec 18, 2023 | 12:35 PM
  #509  
miniCotulla's Avatar
Teching In
 
Joined: Dec 2023
Posts: 4
Likes: 1
Default

Originally Posted by LSswap
The fact that you got it working with just a PWM generator that is connected to 12V means that your fans control is tolerant of a 0 - 12V PWM signal. Some are a 5V PWM signal and will burn out with 12V PWM.

An arduino only can put out a 0-5V PWM. Arduinos (actually all computers) don't like 12V and need to be protected from 12V. If your fan needs a 0-12V PWM or if your fan needs just an open source sink to the ground and has it's own 12V pullup, then you must use the transistor to both provide the 12V and to protect the arduino from the 12V. If you have only the transistor and no pullup resistor, then it will only be able to sink to ground. If you add a pullup resistor to the transistor, then it can provide a 0 - 12V PWM (and protect the arduino from 12V) The PWM generator actually has in it, a transistor and a pullup resistor to the supply voltage (whatever that voltage is 5V or 12V or any V) and works exactly like the transistor with the pullup resistor.



Sure, however, you can't connect 14.4 or 12 volts directly to the analog ports or it will burn them out. So instead, you would use a voltage divider (similar to the one used in one of the circuits above to detect the A/C compressor). This needs to insure that even though you are reading a maximun worst case of let's say 20V, the arduino never sees more than 5V at the analog port. Then you would scale your reading to the proportion of the voltage divider.




For that you would need to find some voltage that changes when the engine is running. Ideally a 0-5 voltage like a hall effect sensor on the cam or crank. Then you could connect that to one of the digital inputs and check that it's changing from on to off every so often which means the engine is running. If it stays on or off for a long time, then the engine is not running. If you have a VR sensor, then that's much more difficult. You could also use an injector signal, but since injectors are 12V, then you need the voltage divider again and use an analog port.
guess I was lucky with the 12V PWM

A solution via hall effect sensor sounds more robust. It does have normal hall effect sensors on crank and cam, how do I detect the correct RPM?
Reply
Old Dec 18, 2023 | 06:08 PM
  #510  
LSswap's Avatar
Thread Starter
TECH Fanatic
10 Year Member
Liked
Loved
Community Favorite
 
Joined: Nov 2014
Posts: 1,301
Likes: 658
Default

Originally Posted by miniCotulla
guess I was lucky with the 12V PWM

A solution via hall effect sensor sounds more robust. It does have normal hall effect sensors on crank and cam, how do I detect the correct RPM?
Ah, so before you only asked to know if the engine is running. Now, you want to know the actual RPM. Scope creep. LOL

Nevertheless, since you have a hall effect cam sensor (assuming it's a 5 volt one) connect it directly to port 2 or 3 on the arduino and set that port as an input. These two ports are special because they support interrupt processing which means that whatever the arduino is doing, it will temporarily leave that to go and do what is in the interrupt routine and then go back to what it was doing. In your interrupt subroutine, record the time that signal went from 0 to 5V. Then the next time the signal goes from 0 to 5v and again triggers the interuupt routine, you can subtract the current time (these are in microseconds, so it's very accurate) from the time you recorded previously and calculate your exact RPM. For the cam, it's often one 0 to 5v transition per revolution. For the crank, it can be many more per revolution, for example a 24 tooth or 52 or lots of other numbers depending on manufacturer. Stick to the cam sensor, it's simpler.

Looks like you're diving deeper into the rabbit hole.

Reply
Old Dec 19, 2023 | 12:33 AM
  #511  
miniCotulla's Avatar
Teching In
 
Joined: Dec 2023
Posts: 4
Likes: 1
Default

Originally Posted by LSswap
Looks like you're diving deeper into the rabbit hole.
yes, I also ordered a PWM controlled water pump yesterday. The arduino can do multiple PWM outputs at the same time right?
Reply
Old Dec 19, 2023 | 12:37 AM
  #512  
miniCotulla's Avatar
Teching In
 
Joined: Dec 2023
Posts: 4
Likes: 1
Default

Originally Posted by LSswap
Ah, so before you only asked to know if the engine is running. Now, you want to know the actual RPM. Scope creep. LOL

Nevertheless, since you have a hall effect cam sensor (assuming it's a 5 volt one) connect it directly to port 2 or 3 on the arduino and set that port as an input. These two ports are special because they support interrupt processing which means that whatever the arduino is doing, it will temporarily leave that to go and do what is in the interrupt routine and then go back to what it was doing. In your interrupt subroutine, record the time that signal went from 0 to 5V. Then the next time the signal goes from 0 to 5v and again triggers the interuupt routine, you can subtract the current time (these are in microseconds, so it's very accurate) from the time you recorded previously and calculate your exact RPM. For the cam, it's often one 0 to 5v transition per revolution. For the crank, it can be many more per revolution, for example a 24 tooth or 52 or lots of other numbers depending on manufacturer. Stick to the cam sensor, it's simpler.

Looks like you're diving deeper into the rabbit hole.


the crank might be simpler on my car as the cam hast multiple different teeth. Maybe I'll just stick to engine running with a few seconds delay instead of actual rpm to keep it simpler.
Reply
Old Dec 20, 2023 | 07:47 AM
  #513  
LSswap's Avatar
Thread Starter
TECH Fanatic
10 Year Member
Liked
Loved
Community Favorite
 
Joined: Nov 2014
Posts: 1,301
Likes: 658
Default

MiniCotulla, start another thread with questions that are not fan related. Don't want to muck this thread up more than it already is.
Reply
Old Mar 1, 2024 | 07:04 PM
  #514  
inertia8's Avatar
Teching In
 
Joined: Mar 2024
Posts: 4
Likes: 3
Default

Originally Posted by V8 Supra Builder
I took my Fusion controller apart so I could take some pics. See below. I'd like to see what if any differences there are with the C6 and Mercedes controllers. According to the Megasquirt forum post I linked, the Mercedes controller has 8 gauge input wires while these on the Fusion are 10 gauge. That being the case, it would seem the Mercedes internals would have to be heftier. I'm not great with circuit boards, but it looks like the two smaller terminals on each side are not connected to anything.

After reading his posts again, it seems like if you can delay the ignition power input to the MB controller until after it gets a PWM signal, it works properly. I found a 12V relay with an adjustable delay time that could possibly work for this.




Sorry to drag up an old thread but it is a beauty!

I'm in Australia and looking to use a Mercedes module because it's more likely I'll be able to find one at a wrecker and my SPAL fan (VA01-AP90/LL-66A / upto 38amps) is likely going to exceed the power handling capability of the Mazda/Mitsu modules first mentioned in this thread.

I've noted for the Merc units, the PWM pin on thier labels shows it is the top left pin and the center pin is labelled pin#15, whereas for the C6 units the labels show the PWM pin is the center pin and the top left pin is unused.

Sorry if this has been answered but I couldn't find with a quick search. When using the Merc module, do I ignore Pin#15 and just put the PWM to the top left pin?

Specifically looking at the ESG700 units, Merc Part# 0275456432 or substitute.




Last edited by inertia8; Mar 1, 2024 at 09:53 PM. Reason: added part# and image
Reply
Old Mar 1, 2024 | 10:14 PM
  #515  
LSswap's Avatar
Thread Starter
TECH Fanatic
10 Year Member
Liked
Loved
Community Favorite
 
Joined: Nov 2014
Posts: 1,301
Likes: 658
Default

Originally Posted by inertia8
Sorry to drag up an old thread but it is a beauty!

I'm in Australia and looking to use a Mercedes module because it's more likely I'll be able to find one at a wrecker and my SPAL fan (VA01-AP90/LL-66A / upto 38amps) is likely going to exceed the power handling capability of the Mazda/Mitsu modules first mentioned in this thread.

I've noted for the Merc units, the PWM pin on thier labels shows it is the top left pin and the center pin is labelled pin#15, whereas for the C6 units the labels show the PWM pin is the center pin and the top left pin is unused.

Sorry if this has been answered but I couldn't find with a quick search. When using the Merc module, do I ignore Pin#15 and just put the PWM to the top left pin?

Specifically looking at the ESG700 units, Merc Part# 0275456432 or substitute.
I've never seen one like that. If I had to guess, the most logical use for an extra wire is an ignition on signal. Someone would have to look at the donor car wiring diagram to confirm that.
Reply
Old Mar 1, 2024 | 10:26 PM
  #516  
Project GatTagO's Avatar
TECH Senior Member
20 Year Member
Liked
Loved
Top Answer: 1
iTrader: (7)
 
Joined: Mar 2003
Posts: 10,604
Likes: 1,881
From: Little Austin
Default

Originally Posted by inertia8
Sorry to drag up an old thread but it is a beauty!

I'm in Australia and looking to use a Mercedes module because it's more likely I'll be able to find one at a wrecker and my SPAL fan (VA01-AP90/LL-66A / upto 38amps) is likely going to exceed the power handling capability of the Mazda/Mitsu modules first mentioned in this thread.

I've noted for the Merc units, the PWM pin on thier labels shows it is the top left pin and the center pin is labelled pin#15, whereas for the C6 units the labels show the PWM pin is the center pin and the top left pin is unused.

Sorry if this has been answered but I couldn't find with a quick search. When using the Merc module, do I ignore Pin#15 and just put the PWM to the top left pin?

Specifically looking at the ESG700 units, Merc Part# 0275456432 or substitute.
If it was me, I would cut your losses and not mess with that 20 year old stuff. Replace your fan with a modern brushless fan that has the controller built in already. There are numerous such fans discussed in this thread. They can be sourced from any number of new BMWs, MB, Volvo, etc...

Andrew
Reply
Old Mar 2, 2024 | 07:29 AM
  #517  
inertia8's Avatar
Teching In
 
Joined: Mar 2024
Posts: 4
Likes: 3
Default

Originally Posted by Project GatTagO
If it was me, I would cut your losses and not mess with that 20 year old stuff. Replace your fan with a modern brushless fan that has the controller built in already. There are numerous such fans discussed in this thread. They can be sourced from any number of new BMWs, MB, Volvo, etc...

Andrew
I take your point but most of the modern stuff is too big to fit my application, which is a supercharged 1990 Toyota Corolla hatch with water/air intercooler, aircon and radiator. Packaging is tight, so using a SPAL 10in fan from their high output series (truck) to suck through all three cooling cores but the inrush when it kicks in is brutal!
Reply
Old Mar 2, 2024 | 08:45 AM
  #518  
inertia8's Avatar
Teching In
 
Joined: Mar 2024
Posts: 4
Likes: 3
Default

Originally Posted by LSswap
I've never seen one like that. If I had to guess, the most logical use for an extra wire is an ignition on signal. Someone would have to look at the donor car wiring diagram to confirm that.
I believe you are correct, found some info and wiring diagram that suggests it is provided power (12v) via the SAM (signal acquisition module).. I'll grab one when I can and test it on the bench using a PWM generator and note what happens when that wire is given 12v v disconnected, same for PWM. My understanding is when PWM signal is lost, fans go full speed.
Reply
Old Mar 2, 2024 | 04:40 PM
  #519  
Project GatTagO's Avatar
TECH Senior Member
20 Year Member
Liked
Loved
Top Answer: 1
iTrader: (7)
 
Joined: Mar 2003
Posts: 10,604
Likes: 1,881
From: Little Austin
Default

Originally Posted by inertia8
I believe you are correct, found some info and wiring diagram that suggests it is provided power (12v) via the SAM (signal acquisition module).. I'll grab one when I can and test it on the bench using a PWM generator and note what happens when that wire is given 12v v disconnected, same for PWM. My understanding is when PWM signal is lost, fans go full speed.
Let us know what you find!

Andrew
Reply
Old Mar 2, 2024 | 07:33 PM
  #520  
inertia8's Avatar
Teching In
 
Joined: Mar 2024
Posts: 4
Likes: 3
Default

Originally Posted by Project GatTagO
Let us know what you find!

Andrew
will do! I'm too busy at present, have bought the Arduino and associated bits, will likely be mid April by the time I get to a wreckers and find a pwm control module and organise sensors.

Still trying to wrap my head around piggybacking the existing sensors, I have a dual temp gauge and have the water temp sensors in my top radiator hose and in the coolant tank for the water to air system.

The corolla's factory fan system was a two fan system which used relays to trigger and power both fans in serial more (half speed) or in parallel on (full speed) depending on the coolant temp switch in the thermostat housing, aircon demand and aircon pressure.l switch.

I plan to program the Arduino to take into account engine coolant temp, coolant switch, W2A coolant temperature, aircon state and aircon pressure switch. I may end up ditching the aircon as it's not yet gassed/charged since rebuilding the engine.

This thread has been a great help and inspiration this far and so if I find new info on the above Merc controllers I will post it.. would love to know the significance of their labelling with either A B or C within the larger wiring pins...
Reply



All times are GMT -5. The time now is 07:31 AM.