How to stop EMI from a pwm-fan

It took me a week to install a nice radial pwm-fan with airfilter in my robot but now some functions don't work anymore from EMI i guess.

This fan is not brushless though, i read those give less emi....will my issue be solved with a brushless fan?

The wires of the fan are twisted, would it help if i replace those by shielded wires?

What else can i do to block the EMI? Strange thing is that a pwm-signal to arduino works fine but another pwm-wire (which is much further away) has issues, that gets pwm-signal from the rc-receiver.

I would like to get rid totally (if possible) from the EMI because i'll install much more sensitive systems in the robot. What would be the best way? All shielded wires? Do they come in thicker versions than awg24??

I love pwm but EMI is a serious problem...all tips are welcome.

I wrapped the whole fan plus wires in aluminiumfoil and now the emi is gone.

Will try shielded wires first and buy a brushless fan...

Don't you guys have problems like that or did you use shielded boxes or wires for everything? Or capacitors and diode's at all motors?

I'm willing to learn all those tricks.

No tricks at all are involved. Have you installed bypass capacitors on the leads to the fan and on the leads picking up the interference?

Paul

Hi,
Are your power supply wires for the fan going directly back to the power supply terminals?

How are you powering the controller ,Arduino Model?

Can you please post a copy of your circuit, in CAD or a picture of a hand drawn circuit in jpg, png?

Thanks.. Tom.. :slight_smile:

Paul_KD7HB:
No tricks at all are involved. Have you installed bypass capacitors on the leads to the fan and on the leads picking up the interference?

Paul

I have some capacitors here, 50V 470 UF

Can i use one on the plus/ground of the fan? Which wire of the capacitor is the plus-side? The long or short one?

The lawmmower motor doesn't work when i use the fan, i guess the EMI is on the pwm-lead to control it but it might be on the power leads...again, how do i place the capacitor on the powerleads? Same as the fan?

The high amp leads to lawnmower and drivemotors are further away but not twisted, should i twist them or even cover with some shielding? I want to get rid of all the EMI if possible because i'll install many more sensors/camera's etc.

Here is the electric scheme, hopefully this forum can show it… ALL grounds are connected to eachother, also for the lower voltages.

I don’t know how to make this file (from Windows Notes) viewable on this forum.

Hi,
Thanks for the diagram, but it doesn't show your wiring and pinouts.
Your 42Vdc dc-dc converters how are they wired in.

With the complexity and stage at which you have your project I would have expected a concise and labelled circuit diagram.

Do you have 0.1uF capacitors, they will bypass noise better than the 470uF Electo caps you have.
Place 0.1uF at where the wires go into the motor and where you terminate the supply wires.
0.1uF on each of your powrr supply output terminals too.

Tom.. :slight_smile:

TomGeorge:
Hi,
Thanks for the diagram, but it doesn't show your wiring and pinouts.
Your 42Vdc dc-dc converters how are they wired in.

With the complexity and stage at which you have your project I would have expected a concise and labelled circuit diagram.

Do you have 0.1uF capacitors, they will bypass noise better than the 470uF Electo caps you have.
Place 0.1uF at where the wires go into the motor and where you terminate the supply wires.
0.1uF on each of your powrr supply output terminals too.

Tom.. :slight_smile:

To clarify, if you don't already understand, Tom means to connect one short lead of the capacitor to the + power lead and the other short capacitor lead to the ground connection.

Paul

Tom i don't get it, do you want to know which pwm-ports i used on arduino?

The capacitors i have were meant for the power-transformers, another expert adviced me those but i never used it. They were for the bl-motordriver from a drone which couldn't run my bl-lawnmowermotor...But that problem is solved now. Another motordriver runs it fine.

I bought a new brushless fan, too bad i didn't know i needed the capacitors you recommend, they had loads of them.

What Paul recommends i also don't understand, i thought capacitors had a plus lead but if it's the long or short one i can't figure out (didn't try google yet).

Well i'll try the new fan first, is there a good softwareprogram for windows-ink (pen) to draw electrical scheme's? Not that i'm good in that but i would like to learn it. Windows Notes is not easy to use. Something like MS-visio from the past?

The brushless fan doesn't make any EMI, everything else works fine..

BUT.....the new fan only goes full speed and won't slow down by pwm signal like the brushed one does.

It is this fan and they claim it can use PWM...

Should i try this one on another frequency maybe? I use 25khz now on arduino pwm-pin 8. Everytime i solve a problem there's a new one.

Hi,
Your fan looks okay, i can find data sheets on it , but none say what the PWM frequency should be.

If it is a PC fan then

google PC pwm fan control frequency

It refers to a PWM frequency of 25kHz.

I know these are old posts but they may help'

http://forum.arduino.cc/index.php/topic,15514.0.html

http://forum.arduino.cc/index.php/topic,18742.0.html

Tom... :slight_smile:

PWM INPUT VOLTAGE RANGE:
High level= 2.8 to 20 VDC
Low level= 0 to 0.4 VDC
PWM INPUT CURRENT (IPWM) RANGE:
40uA to 20mA
To control signal line of the fan shall be able to accept a 30Hz to 30kHz.
The preferred operating point for the fan is 0%~100% of duty cycle.

http://www.delta-fan.com/Support/ApplicationNotes.htm


So it will work on my frequency as well.

My program though works with analogwrite...can it be that this brushless fan needs digitalwrite??

With this brushless fan there is no EMI causing problems but i only have to get it to work on pwm. So shall i close this thread and start a new one with the question "how to controll a brushless fan by pwm on arduino" ? or just google more for it?

I read that some fans have their own pwm controller onboard, don't know if this fan has it but i read on several websites that this fan can do pwm. Also when i connect the blue wire to ground it doesn't slow down (i know it wasn't smart to do that, hope it's still good).

Only electrolytic capacitors have + and - markings. They need to be wired so the voltages match the markings on the capacitor body.

The small capacitors we were referring to are not polarized and can be installed any direction.

Paul

Paul_KD7HB:
Only electrolytic capacitors have + and - markings. They need to be wired so the voltages match the markings on the capacitor body.

The small capacitors we were referring to are not polarized and can be installed any direction.

Paul

Allright thanks, i googled that already and the bigger ones i have here have the plus on the long lead.

But i'll solve the problem by using a brushless fan if i can get it working at least...it only goes full speed and doesn't care for the pwm from my code which is analogwrite at 25khz.

If i can't get it working i'll try the capacitors but i would have to solder them in the leads and put tape around it, that all doesn't look good to me. Brushed fans cause EMI so i want to get rid of it and install much more microelectronics.

This is a weird fan, this guy has exactly the same fan as me (all numbers the same) and he claims it works fine when he uses the yellow wire as pwm-wire.

Another website says it has automatic speedcontrol…well it all goes beyond my hat.

've made such a small set of furniture. This is a server cooling turbine, while arduino is acting as a speed controller by generating a PWM signal.
PWM control works fine. Turbine can not slow down to zero because it has its own electronics - soft-start system.
PROBLEM: The blue wire seems to generate a rotary signal, I connected it as instructed in one of the tutorials. Theoretically, but the faster the turbine works, the more unreliable the value is. At maximum speed there is something hanging at a constant value of about 1500 (but what I do not know).
For me it is strange that at the window counting for about 0.5s gives almost 5000 pulses … How is it possible at all? It seems to me that the speed sensor in this turbine is something other than the Hall sensor in general. Of course, documentation of this exact version of the turbine I did not find, so I’m a little wandering around: P.

Turbine: Delta Electronics BFB1012VH-5D84

Picture of its and schematic in the attachments. The blue circuit is just this sensor cable. Yellow is PWM.

#include <Wire.h>
#include <TimerOne.h>
#include <LiquidCrystal_I2C.h> // pobrany lib od I2C

#define btnUp 4
#define btnDown 5
#define ctrlPwm 3
#define sensePin 2

// LCD na 0x3F
LiquidCrystal_I2C lcd(0x3F, 2, 1, 0, 4, 5, 6 ,7, 3, POSITIVE);

// speed
unsigned int ctrl;
unsigned int pwm;
unsigned int rpm;
unsigned int counts;

void licznik() {
counts++;
}

void pomiarRPM() {
Timer1.detachInterrupt();
rpm = counts;
counts=0;
Timer1.attachInterrupt(pomiarRPM);
}

void bar() {
switch (ctrl){
case 1:
lcd.setCursor(5,0);
lcd.print("");
break;
case 2:
lcd.print("[# ]");
break;
case 3:
lcd.print("[## ]");
break;
case 4:
lcd.print("[### ]");
break;
case 5:
lcd.print("[#### ]");
break;
case 6:
lcd.print("[##### ]");
break;
case 7:
lcd.print("[###### ]");
break;
case 8:
lcd.print("[####### ]");
break;
case 9:
lcd.print("[######## ]");
break;
case 10:
lcd.print("[#########]");
break;
}
}

void sterowanie() {
while(digitalRead(btnUp) == LOW){
if(ctrl < 10){
ctrl++;
lcd.setCursor(5,0);
bar();
delay(200);
} else {
lcd.setCursor(5,0);
lcd.print("[ - MAX - ]");
delay(200);
}
}
while(digitalRead(btnDown) == LOW){
if(ctrl > 1){
–ctrl;
lcd.setCursor(5,0);
bar();
delay(200);
} else {
lcd.setCursor(5,0);
lcd.print("[ - MIN - ]");
delay(200);
}
}
}

void regulacja() {
unsigned int spd;
spd = ctrl*20+55;
// sprawdzenie czy za wolno
if(pwm < spd){
for (pwm; pwm < spd; pwm++) {
analogWrite(ctrlPwm, pwm);
delay(50);
lcd.setCursor(3,1);
lcd.print((pwm/10)*4);
lcd.print("%");
}
} else {
}
// sprawdzenie czy za szybko
if(pwm > spd){
for (pwm; pwm > spd; --pwm) {
analogWrite(ctrlPwm, pwm);
delay(50);
lcd.setCursor(3,1);
lcd.print((pwm/10)*4);
lcd.print("%");
}
} else {
}
lcd.clear();
}

void setup() {
// sterowanie (przyciski)
pinMode(btnUp, INPUT_PULLUP);
pinMode(btnDown, INPUT_PULLUP);
pinMode(ctrlPwm, OUTPUT);
// pomiar
pinMode(sensePin, INPUT);
Timer1.initialize(500000); // 0,5 sekund
attachInterrupt(digitalPinToInterrupt(sensePin), licznik, RISING);
Timer1.attachInterrupt(pomiarRPM);
// reset zmiennych
ctrl = 1;
pwm = 0;
// wyswietlacz
lcd.begin(16,2);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("REG: ");
lcd.setCursor(0,1);
lcd.print("P: ");
lcd.setCursor(8,1);
lcd.print("R: ");
}

void loop() {
unsigned int spd;
spd = ctrl*20+55;
// czytanie przyciskow
sterowanie();
// uruchomienie
if(pwm == 0){
analogWrite(ctrlPwm, 75);
pwm = 75;
} else {
}
// sprawdzanie
if(pwm != spd){
regulacja();
} else {
lcd.setCursor(0,0);
lcd.print("REG: ");
bar();
lcd.setCursor(0,1);
lcd.print(“P: “);
lcd.print((pwm/10)*4);
lcd.print(”%”);
}
lcd.setCursor(8,1);
lcd.print("R: ");
lcd.print(rpm);
delay(25);
//koniec
}