EMI (Radiated) caused by I2C. Need help.  - Page 1
Forum section: electronics / general

author: guscrown
author_rank: Regular Contributor
timestamp: March 29, 2011, 12:20:00 am
content: Hey everyone,On my current project I am experiencing some EMI issues (Radiation over 300MHz) coming from a harness. The harness is used to connect the main IC to an outside board. The harness is carrying some voltage lines (3.3V) and I2C lines (SDA and SLC). During the debug I detected that the root cause of the noise were the I2C lines.Can anyone recomend a filter or something that may help reduce this noise? The noise is horrible, it is not a peak + harmonics type of noise. It's like a "burst" type noise, I do not know another way to describe it. I am operating at 100KHz and my harness is 670mm in length.Any ideas?

author: Lawsen
author_rank: Frequent Contributor
timestamp: March 29, 2011, 01:08:12 am
content: The harness is acting as a transmitting antenna, a radiator. RF choke can be installed in the harness to cancel the RF energy out by push and pull signal cancellation. I do not know what "push and pull," means. RF metal choke cancels out the waves by localizing it to just at the harness. How does an RF choke works? Some quality consumer electronics have them between the device and power supply plugged into the wall power cable or wire.Lawsen

author: guscrown
author_rank: Regular Contributor
timestamp: March 29, 2011, 02:47:01 am
content: I have not tried using a Ferrite Core on the cable yet. I am hoping I can fix this from the board side. Ferrite Cores are expensive, and when the product is going to be produced on masse it will probably increase the price too much.

author: jahonen
author_rank: Super Contributor
timestamp: March 29, 2011, 06:46:17 am
content: Are you sure that it is not common mode noise? Or are you sure that it is not the power lines radiating (switch-mode power supplies create sometimes this kind of noise if done improperly). If that happens to be the case, it is difficult to get rid of, when it develops, as it is usually symptom of fundamental ignorance of basic rules of good low-EMI design. Can you tell more about the board and the components what you are using? Are you using a multilayer board?It certainly sounds that I2C itself is not the problem, but something else. Anyway, you could try putting small (something like 100 pF or so, experiment with it) capacitors to I2C bus lines near the IC you are driving the I2C bus, that would work if I2C device has internal noise leakage from noisy nodes to the I2C lines. I have seen this happening several times. Of course, this works only if you have proper ground (i.e. plane) to work with.Regards,Janne

author: RayJones
author_rank: Frequent Contributor
timestamp: March 29, 2011, 07:20:44 am
content: Another possibility is to try low value series R on the ouput of the driver. Something like 22R or 33R.The series R will help slow the current surge on the switching edges, reducing the rise time and thus reduce harmonic content.Similarly parallel small caps also slug the rise times, but still draw max current from the driver.

author: deephaven
author_rank: Frequent Contributor
timestamp: March 29, 2011, 12:14:30 pm
content: Quote from: guscrown on March 29, 2011, 12:20:00 amRemember that both ends of an I2C bus can drive the lines, so any filtering should be done at both ends. Murata do quite a collection of filters and chokes, have a look in Farnell who stock a lot of their stuff. A quick test would be useful by winding the offending cable with a few turns through ferrite rings at each end.

author: guscrown
author_rank: Regular Contributor
timestamp: March 29, 2011, 01:33:12 pm
content: Quote from: jahonen on March 29, 2011, 06:46:17 amThe design is a little big. 3 boars total: Power Supply, Board 1 (4 layers) and Board 2 (1 layer). I deduced it was the I2C lines because I removed the I2C lines from the harness going from the Board 1 to Board 2 and the noise disappeared. So it is related by the I2C lines. I checked the waveforms and found a little bit of noise on the Board 2 side, a small oscillating signal @ 58MHz but that was it.Today I will dwell in deeper and see what I can do. I already have a 100R series resistor on the lines, maybe I can try 330R?

author: scrat
author_rank: Frequent Contributor
timestamp: March 29, 2011, 03:31:17 pm
content: Another vote for trying with a common mode choke, as deephaven says it costs you almost nothing, and gives you an idea of the problem cause.Can you specify what you mean with "harness"? What kind of cable are you using?With some SPI links between two boards we had heavy noise, in one case it was generated by the clock (it was present only when the clock was on) in another by the high-voltage inverter switching on the board (connection got lost when voltage reached a certain threhold). Using a shielded cable solved both.

author: comox
author_rank: Regular Contributor
timestamp: March 29, 2011, 04:14:45 pm
content: I run I2c over 3m of 28AWG wire; however, the wire is shielded and earthed. I2C bus is running at 100khz.What is your I2C bus frequency?How are you measuring the noise?I too have put resistors at both ends of the bus. Cannot remember the resistance, but can get it for you if interested.

author: jahonen
author_rank: Super Contributor
timestamp: March 29, 2011, 04:36:45 pm
content: The noise is very likely not due to I2C communication, but something couples noise into bus lines (MCU?). I understood that noise occurrence does not depend on the bus communication.That's why I suggested adding capacitors near the bus device, to filter this noise near its source. Common-mode choke is something I consider as "band-aid solution", which should not be used, unless all other means have been tried.I have seen EMC problems with low-speed (or even unused) IO-lines, due to coupled noise from high-speed lines. Putting those capacitors near the source eliminated the noise cost-effectively.Regards,Janne

author: Neilm
author_rank: Super Contributor
timestamp: March 29, 2011, 06:08:48 pm
content: The problem could also be caused by poor signal returns. Books on the subject will quite often mention that board interconnects (harnesses, pins, plugss etc) should have a large proportion of returns for all the signals - ideally one return per signal. It might be that there is something about the signal tracks and returns that are causing problems.If I were doing this I would recommend putting a ferrite on the harness as a test. If that works, then put it on the I2C wires (if you can). If it still passes, then look for the SMD ferrite / filter solutions. They are much cheaper than a large ferrite on the harness.For further information on EMC including practical tips / tricks / layout (and design) suggestions seehttp://www.compliance-club.com/. Look for articals by Keith Armstrong - I have found them easy to follow and very helpful for EMC debugging.YoursNeil

author: monpjc
author_rank: Contributor
timestamp: March 29, 2011, 08:26:34 pm
content: EMC is never as easy as what should I do as unfortunately there is never a easy answer. But I have an view I'll postNever forget your grounding-! For any energy travelling along the SDA/SCL lines then energy is moving on the 0 volt line too. its needs to have very low impedance.Noise if from the nice sharp edges on the square waves you are passing up and down. Filtering and values of pull-ups will effect its shape.> filters need to stop only high problem frequencies, block more and you will be seeing bumps not square waves and you receiving devices will have trouble edge detecting.> resistors will alter the rise time and roll off the top edges, again too little and edge detection becomes a problem.You also have to consider your wires as a transmission line - reflections off the ends of the cables can cause issues. high value termination resistors between SDA & SCL and ground will help stop this.Lastly - which I find odd no one commented - OK I use I2C over similar length cable but its not designed for this.Line repeaters are good at blocking noise and cleaning up signals: example PCA9515A >|pp=[t=pip,i=PCA9515A]]http://www.nxp.com/#/pip/pip=[pip=PCA9515A]|pp=[t=pip,i=PCA9515A]I'd also consider using differential I2C line drivers too which work over long lengths and make your system less exposed to noise from other equipment: example PCA9600 >http://www.google.com/url?sa=t&source=web&cd=4&ved=0CCsQFjAD&url=http%3A%2F%2Fwww.nxp.com%2Fdocuments%2Fleaflet%2F75016081.pdf&rct=j&q=i2c%20repeater%20differential%20driver&ei=yD6STcipBIexhAfIk_nRAw&usg=AFQjCNG_B92JBNMXxSjJnzP7281Zk_3HWA&sig2=S-IWiASg9kKJkvQNVv-Z_g&cad=rja

author: allanw
author_rank: Frequent Contributor
timestamp: March 29, 2011, 09:05:05 pm
content: Would a shielded cable help? And lowering the drive strength if possible.

author: guscrown
author_rank: Regular Contributor
timestamp: March 29, 2011, 09:26:40 pm
content: Quote from: comox on March 29, 2011, 04:14:45 pmIt's running at 100KHz. And I am using a Certified EMC Chamber.

author: guscrown
author_rank: Regular Contributor
timestamp: March 29, 2011, 09:32:25 pm
content: Quote from: allanw on March 29, 2011, 09:05:05 pmThanks everyone for all the suggestions. I have some chamber time again in a few days and I will try the following:1.- Ferrite beads on the SDA/SCL lines on both ends2.- Improve the grounding lines between boards. so far only one ground line is connecting between the 2, versus I2C, Serial Comm, 3.3V power. I have space for 3 more grounds, I will connect them and see the result.3.- Shielding the I2C lines, and grounding the shield.

author: scrat
author_rank: Frequent Contributor
timestamp: March 30, 2011, 09:30:01 am
content: If you're going to use multiple grounds, start ground cables close to the local load (e.g. the R-C, or at least R, at each end, as many suggested to add a load, and I agree), and twist each signal-ground couple.As monpjc said, differential signalling is the best option (it is also used, for example, for incremental encoders for motors, which work on long cables into a very noisy environment), and it adds the same number of cables as multiple grounds, together with some cheap drivers.

author: RayJones
author_rank: Frequent Contributor
timestamp: March 30, 2011, 06:52:14 pm
content: How does differential signal reduce radiated EMI?For sure it helps with rejecting common mode noise upon reception, but for Tx you now have two signals happy to radiate into the ethos.Our classic instance was walk bridge at work between two building that had a swap of CAT5 cables.AM radio was severely affected as you drove a car beneath this bridge due to the EMI radiation from the twisted pair transmissions.

author: guscrown
author_rank: Regular Contributor
timestamp: March 31, 2011, 02:43:29 am
content: Update from the lab:Twisting SDA+VCC and SCL+GND help removed the "burst" type noise (I don't know how to call it), but now I have a lot of peaks from 300MHz to 1000Mhz spaced out 25MHz. This is the main clock frequency that is hitching a ride on my cable.I tried shielding the cable and grouding the shield but another noise coupled into the shield and I got a huge broadband noise around 76MHz.I guess now my option is to test ferrite beads on both boards and see how it behaves.I really hate EMI

author: guscrown
author_rank: Regular Contributor
timestamp: March 31, 2011, 03:20:49 am
content: Quick question (still at the lab):My current I2C frequency is 100KHz.I want to try some ferrite beads but I am unsure of the impedance value. I have broadband noise @ 76MHz and peak-type noise starting at 300MHz until 1000MHz.Any recommendation?

author: jahonen
author_rank: Super Contributor
timestamp: March 31, 2011, 05:30:10 am
content: Quote from: guscrown on March 31, 2011, 03:20:49 amTypically, you want it as high impedance as possible (think it as voltage divider to the impedance of the vacuum, 337 ohms), and since I2C does not have fast transitions, you might use 1000 ohms @ 100 MHz. However, don't expect miracles, 6-10 dB reduction at best. You might still want to try the capacitors (these will shunt the noise currents near the source, reducing emissions) near the MCU or wherever the I2C goes, that generates the noise.Regards,Janne

author: scrat
author_rank: Frequent Contributor
timestamp: March 31, 2011, 08:12:57 am
content: Quote from: RayJones on March 30, 2011, 06:52:14 pmWe know that, ideally, a balanced current/voltage applied to two conductors physically on the same path will produce null magnetic field.The closest thing to that is a twisted pair. If the voltages with respect to ground were symmetrical, the electric field would be null, but driving with two single ended signals applies common mode voltage from ground. At least, you can reduce the magnetic field, which is expected to be the principal coupling mode if the impedance on both ends is low, but I expect there still is radiated EMI due to the electric one (both wires acting as a singel antenna).If a dual voltage (+-V) driver would be used, I think the electric field would also decrease very much, but this costs a little more...If someone more competent in EMI/RF issues is reading, please correct me if I'm wrong, I'm a simple EE trying to apply what he knows about EM field

author: RayJones
author_rank: Frequent Contributor
timestamp: March 31, 2011, 09:31:45 am
content: Yeah OK, that makes sense.For some reason I was thinking twice the electric field would exist and thus radiate more - ala a yagi's driven elements.The canceling effect of the close coupled magnetic field counters that without doubt, not like the opposing elements in the yagi.

author: jahonen
author_rank: Super Contributor
timestamp: March 31, 2011, 02:39:18 pm
content: Differential signaling reduces only differential mode radiation. It does not reduce radiated common-mode noise, which is typically the most problematic form of EMI. Like in case you have noise in ground and VCC, coupling into all IO-lines, regardless if they are switching or not, like in OP's case. Furthermore, the balance is very delicate. It is very difficult to get perfect symmetry also at high frequencies. This is magnified by the fact that only few µA's of RF-current is needed to exceed the allowed radiated noise limits for most practical cable lengths.Regards,Janne

author: guscrown
author_rank: Regular Contributor
timestamp: March 31, 2011, 10:02:53 pm
content: Update 2:I'm at the lab again. Ferrite Beads did not help at all. Next option is trying adding a cap to ground. If that doesnt work I don't know what to do now.

author: scrat
author_rank: Frequent Contributor
timestamp: March 31, 2011, 10:06:40 pm
content: You've still to try with common mode chokes, haven't you?

author: guscrown
author_rank: Regular Contributor
timestamp: March 31, 2011, 11:28:40 pm
content: Quote from: scrat on March 31, 2011, 10:06:40 pmPCB Macro will not allow common mode choke coils unfortunately. PCB relayout at this stage is almost impossible I think.

author: scrat
author_rank: Frequent Contributor
timestamp: March 31, 2011, 11:38:09 pm
content: Quote from: guscrown on March 31, 2011, 11:28:40 pmIt's one of the first options you had, by applying cores on the cables. Since the other solutions didn't work (but, of course, try with capacitive loading), it will be helpful to know if chokes work.

author: guscrown
author_rank: Regular Contributor
timestamp: April 01, 2011, 02:24:08 am
content: I think I have found the culprit. One of the lines in my cable is carrying a control line to powering an LED (typical green LED that indicates the equipment is ON). I disconnected this line and voila, noise gone.This is a typical LED circuit, anode is connected to 3.3V, and I control the LED state via the cathode. Something ODD is going on.