Minimal current measured with CTs within acceptable error

Hi everyone,

I’ve been following the OEM story for a few years now as I’m really impressed for all the work done so far.
I’ve been working in the energy monitoring sector (as a consultant) for 8 years now and would like to have a try with OEM (for myself).

I plan to buy a EmonBase and either a EmonTX or IoTaWatt. About the current sensors I’m not so sure yet.
I haven’t found any info on the minimal current on the 3 CTs.
The EmonTx is recommended to be equipped with 3 100A and 1 20A. Anyone tried to detect very low current with these sensors?

I want to be able to measure devices that are under 10W even 5W such as phone chargers, LED lamps, idle TVs, idle HiFi.
5W with 240V means 20mA.
Is that detectable with the SCT-013? the SCT-006?
On the reports/benchmarks done on the sensors I’ve seen that the lowest current tried was above 500mA and the error reached already 1.36% (Learn | OpenEnergyMonitor).

Any feedback will be more than welcome!

Thanks for your help

Detectable - just about, but with any degree of accuracy, definitely not.
However, you do not need to use those c.t’s. Any c.t. that is capable of generating 1.1 V across its burden at 50 mA (for full scale indication) can be used. Discounting errors inside the c.t, the input circuitry and the ADC are good to around 10% (of reading) accuracy or better at an amplitude of 12 counts out of 512, or about 2.5% of full scale. The SCT-013-000 is only specified (at ±3%) down to 10% of maximum current, i.e. down to 10 A, so your reading of 1.36% at 0.5% of maximum indicates that it was a long, long way inside specification!

Hi Robert, thank you for that.

I still have some difficulties to understand though :pensive: and have 4 more questions below.

The EmonTx has 4 inputs. If I understand well, all of them were designed for the SCT-013-000 only (according to this post EmonTx V3.4 - OpenEnergyMonitor Wiki and especially this one calculating the burden resistors EmonTx V3 - OpenEnergyMonitor Wiki)
The 3 inputs CT 1-3 have a 22 ohms burden resistances.
The input CT 4 has a 120 ohms burden resistances.

#1: Which means that with the EmonTx (and the fitted resistances) I can only use the SCT-013-000, am I right?

Moreover, I don’t understand the choice of putting a 4th input with a 120 ohms burden resistances. It means that we can’t measure a primary current over 20A with the SCT-013-000. But as you said, the range of the SCT-013-000 is from 10A to 100A (with a correct accuracy).
#2: Is this 4th input only there to measure a current between 10 and 20A?

All of the other SCT-013-xxx have an internal burden resistor (their output is in Volts). I believe I can’t use them with the EmonTx (and its fitted burden resistances).
#3: What are my choices of CT to use with the EmonTx?

#4: What you said in your post is that the CT 1-4 inputs can read a voltage from 0 to 1.1Vrms, with a sampling step of 1/512, then 2,15mV? and that the first 12 are out because of the accuracy? means that the input range is from 25,8mV to 1100mV?

I apologize if my questions are trivial, but I struggle to find some info on the website on:

  • how to design and choose the right CT according to the needs of the measurement campaign
  • how to ensure that the EmonTx (hardware, then settings) is capable of dealing with this or that CT

FYI I just did some quick measurements with IoTaWatt in the current ranges you are interested in using a solid core 1000:1 CT (ECOL09). Here’s what I got:

I setup my rig with a Fluke 175 True-RMS meter in series with the load using the 0-400 ma scale and plugged in an Ipad charger with Ipad connected. The fluke meter says 141ma.

That was pretty easy, so I changed the load to a small LED flood. The Fluke says 60 ma.

So the problem here is finding smaller loads. Here’s the USB power supply running my eMonPi. The Fluke is jumping around between about .32 and .44 ma.
image image
If I take the USB power supply running the IoTaWatt the Fluke says about 13 ma.

So my conclusion is that the RMS amps are being measured pretty well at least as low as 13 ma, which would be about 3W at unity pf at 230V. These power supplies are probably not unity PF, so watts may not be what you would expect.

IoTaWatt also filters power and doesn’t report less than 2W. But you may find that reading out the RMS amps is a better way to accomplish what you are trying to do.

You can use any current transformer (within the limitations that I’ve already mentioned) that gives 50 mA secondary current output at the maximum primary current that you want to measure.

No again,
It means only that it is good to a maximum of 18.3 A, given a 100 A : 50 mA c.t. Unfortunately, any c.t. loses accuracy as its load (i.e. the burden resistance) increases, so the 3% accuracy specification of the manufacturer no longer applies. Our users have found that this ‘high sensitivity’ input is useful for PV infeeds that are limited to 16 A. It will measure down to a significantly lower current than 10 A, but I cannot give you an estimate even of the accuracy.

You can easily remove the fitted SMT burden. There are holes provided for a wire-ended replacement of whatever value you choose.
There is not, as far as I am aware, a list of suitable low-current c.t’s. Unfortunately, there are very many c.t’s available with a 0.333 V output, but you are then using less than a third of the available input range, which limits the smallest current that you can measure accurately. The only solution I can suggest is you search for a c.t. that can generate around 1 V rms at the maximum current that you want to measure.


Also correct.

You are coming to the wrong conclusion from the right data. The wave is sampled something like 55 times per cycle, and the average over many cycles is calculated. The samples don’t occur at the same place on each cycle, so in effect you are oversampling.
What I said about the bottom 12 ADC steps was, when the signal amplitude falls to below about 12 steps (24 steps peak-peak), then accuracy starts to fall away rapidly, but unpredictably because it also depends on where the d.c bias point lies in relation to the ADC steps. It’s a very complicated relationship that I’ve not attempted to analyse in great detail.

I don’t think a full and complete guide exists, other than what is written in the ‘Learn’ section.
I think I’ve given you most of the information you need in my answers here, but continue asking if there are gaps I need to fill.

The CTs with the emonTx are surprisingly good, but you will have problems at such low current levels due to non linearity of the magnetising currrent at the bottom end. Phase shift introduced by the CT at low levels will also affect the power factor, and I hate to think what sort of harmonics most small plug packs produce. Having said that, and you will need an electrician to do this safely, an old power industry trick is to loop multiple primary turns through the clamp jaws. Say you loop 10 turns through, then 20 mA now looks like 200 mA which is getting more reasonable for the 20A CT. Don’t forget to scale the feed accordingly.

I use 24-bit ADCs and get pretty good dynamic range out of them, at least in the relatively clean environment of the lab on the calibrator. Once it’s out in the real world conditions of the fuse box I find crosstalk from other channels can be a bit of an issue when trying to measure really small signals.

As best I can tell, my big oven (not the microwave that I’m always banging on about) uses about 4W to run its electronics and clock and here’s how my monitor clocks it:

When the house is quiet at night it’s a pretty steady reading but once anything kicks off it shows up in that signal. I can clearly see the pool pump come on at 17:00-18:00 and 21:00-22:00 and those big sweeping humps during the day correlate very nicely with the PV output. So a reading range of 4 to 7 watts is pretty sloppy.

I know the crosstalk isn’t happening inside my monitor, i.e. it’s visible at the inputs. It may be in the mains leads themselves which are all bunched together in a big conduit box that runs from the meter box down the side of the house, or the CTs might be too close together, or the CT cables (unshielded twisted pairs) all run in the one conduit from the meter box to the adjacent monitor box. On my system, each 1W of power shows up as about 70uV at the inputs of the monitor, so there’s plenty of opportunity for noise there.

Thank you all for your helpful answers

Do you know if there is there such a limitation with the EmonTx ? (I’m in France, and IoTaWatt is not available in the openenergymonitor shop anymore)

Ok thanks, could you confirm then that the only difference between the 4th input and the other 3 is the burden? or there is something else I should take care of.
Do you know if it is possible to get a EmonTx from the shop without the burden installed?

Is your remark for all CTs or only the SCT-013 (range 0-100)
I wonder if there is such a phase shift issue with a 0-5A range CT to measure low currents.

In France, the max current for a flat is usually no more than 25A, sometimes 50. For a big house it’s between 40-60A.
What I noticed is that most of the time I get between 250 and 2500W so 1 to 10A.
The French standard in electrical boards is: 16A max for plugs, 10A max for lights, 20A max for specific devices.
I believe then that I should have one 0-50A CT, and three 0-20A CT to get the best accuracy on the measurements, and detect small currents.

Is there an easy way to set up the equation between the mV read by the EmonTx and the corresponding Amp? the same for the calculation of the power (W) according to the phase shift?

Thanks again for your help

That is the only physical difference. In software, the current and phase calibration constants are of course different.

To the best of my knowledge, the shop isn’t willing to modify the hardware. However, removing the burden resistor is a relatively simple operation - you just flick it off with a hot soldering iron.
(I did suggest to Glyn that there should be a link that could be cut with a knife, but there was no space for that.)

That applies to any c.t. The point at which errors increase - in terms of the percentage of rated current - is very likely to relate to how much you pay for the c.t. “Revenue” grade are significantly better, but more costly.

And of course the power factor error increases markedly at poor power factors (easier to visualise if you assume text-book sine waves, when voltage and current approach 90° phase difference).

Ideally, you need to look for c.t’s with those numbers as the current rating, and you also need them to have a high enough VA rating (often never specified) to be able to drive 1.1 V rms (approx) at the maximum rated current, given a value of burden that is within the range specified by the manufacturer of the c.t. I’m sorry I can’t be more specific - most manufacturers don’t specify a VA rating, but some do specify a maximum value of burden resistor. Knowing the current ratio, you can easily calculate whether you will have enough voltage to fully drive the emonTx’s input.

You are likely to have to compromise on burden value versus using the full input range. You are trading inaccuracy in the c.t. itself for inaccuracy in digitising its output.

The current calibration constant is the current that would give you 1.0 V across your burden resistor.

The only realistic way to set the phase error compensation with emonLib is by trial and error, as it depends on the difference between the phase errors of the voltage and current transformers, and on the time delay between the two readings. (And even then, it’s never perfect, because both phase errors vary according to the magnitude of the quantity being measured.)

There will be an equation to calculate it - I’ve never derived it.

Demand has outstripped supply, but it’s a temporary situation. I’ll let them speak for their intentions, but their shop is taking orders today.

I bought 4 CTs YHDC. 2x 60A/1V and 2x 30A/1V
I have to remove the burden resistors then.
I’ll try to test these CTs and give you my results (especially in low current).

The fitted SMT burdens are so small, I’m not used to work with such small components.

What I don’t really understand is what to cut, or remove, or weld.
According to the board map, the resistors are linked to the small metal holes.

But I don’t see the connection on my board:

What should I do before plugin my 4 CTs ?

Do you mean the software in the EmonCMS (template of the EmonTx), or do you mean the sketch within the EmonTx?

Yes, those are the ones.

You get a hot soldering iron, with a tip large enough to cover both ends of the resistor, and as the solder melts - you must do both ends at the same time - you flick the resistor off.
You do not need to replace it with anything.

Thanks @Robert.Wall, I managed to removed the 4 resistors.

Where can I change the constants to get the right “Values” in the Setup → Inputs in EmonCMS ?
Do I have to modify a sketch of the EmonTx ?

I noticed that in Setup → Device Setup, I can add the emontx3 template. I believe that I should be able to select which entry I would like to turn on/off and how to configure them. But I don’t find where.

I found in Setup → EmonHub → Edit:

nodename = emontx3
   names = power1, power2, power3, power4, vrms, temp1, temp2, temp3, temp4, temp5, temp6, pulse
   datacodes = h,h,h,h,h,h,h,h,h,h,h,L
   scales = 1,1,1,1,0.01,0.1,0.1, 0.1,0.1,0.1,0.1,1
   units =W,W,W,W,V,C,C,C,C,C,C,p
  • Is that the place to amend the scales? and to adapt the calibration of the probes?
  • Is there a way to get the Ampers, the Power Factor, and the Power for each one of the 4 measurements?
  • I believe that if I have to calibrate the measure of the voltage (vrms), changing the scale in here won’t affect the calculation of the 4 corresponding powers (which is done by the EmonTx I presume)

If you have a programmer and loaded the sketch yourself (or you can load the sketch yorself), then the best place is the sketch. You can do the full calibration there.

If you don’t have a programmer, the you can change the “scales = …” parameters in emonhub.conf
These are not designed for that purpose, you cannot adjust the phase error correction there.

that is indeed correct (power is calculated in the emonTx, not in emonHub)

Instructions for both methods are in Learn → Electricity Monitoring → Current & Voltage → Calibration Procedure.

Yes there is. It means editing the sketch in the emonTx and changing the definition for that node in emonhub.conf.

Take care: you must keep the length of the data packet to 66 bytes or less. This is a JeeLib limitation. Integers are 2 bytes, longs are 4 bytes. You don’t need to send values you don’t use (e.g all 6 temperatures if you only use one).

The values are already calculated, but not sent. You must add statements to extract the values and add them to the data packet sent by radio. Look at the standard sketch (get it from Github).
In src.ino, look at line 403


This does the calculation. If you look at emonLib (emonlib.h), you’ll find a list of all the values available to you. They are:

    double realPower,

So to use any or all of those, you add lines like the next two, 404 & 405, inventing names like “emontx.current1” etc. Do this similarly for all four c.t’s. You might want to multiply the currents by 10, 100 or 1000 because they will be sent as integers - multiplying by 100 here allows you to send 2 decimal places and you multiply by 0.01 with “scales” in emonhub to restore it; and you must do that for the power factor. The number range you can send this way is -32768 to
Then you must add the new values to the data packet. This is in lines 144 - 147:

typedef struct {
  int power1, power2, power3, power4, Vrms, temp[MaxOnewire];
  unsigned long pulseCount;
} PayloadTX;     // create structure - a neat way of packaging data for RF comms

Add the new names in there.

Finally, you must add the new variables in emonhub. The “names”, “datacodes”, “scales” & “units” map 1:1 to PayloadTX
The full details of emonhub.conf are here: emonhub/ at emon-pi · openenergymonitor/emonhub · GitHub

If the node definition in emonhub.conf does not match the length of the data you are sending, it fails and you get nothing. If the data types and positions do not match, your data will be totally mixed up.

Thank you @Robert.Wall for your long answer. I’ll try to to that then.
I understood that:

  • calculations are made within the EmonTx
  • the size of the pload is restricted by the lib we use: JeeLib
  • it’s possible to change the calculations and the pload in the EmonTx
  • I’ll have to change the EmonHub config file according to what I changed in the pload

Besides, which factor do I have to change on the CT4 to make it act like the 3 others? As I removed all the burden resistors, I would like to get 4 similar entries. But the 4th one is reduced by an unknown factor (hardware? sketch?)
I read your design calculations in here : EmonTx V3 - OpenEnergyMonitor Wiki but haven’t found my answer yet.

You removed all the burden resistors, you have done the only physical change necessary. The remaining change is in the current calibration coefficient. If you look at the emonTx sketch again, at line 94, there are 4 lines like const float Ical....= ....; – one for each input. As you have 4 c.t’s, 2 × 30 A & 2 × 60 A, you change the number from 90.9 (or 16.67) to 30 or 60 as appropriate.

That’s all about hardware design.
The very basic information you need to design / choose the front end hardware for the emonTx and get the software working is:

  1. My recommended maximum input voltage at the ADC is 1.1 V rms. Whether that comes out of a voltage-output c.t. or it’s developed by the burden of an ordinary c.t., or indeed an a.c. adapter and voltage divider doesn’t matter.
  2. The calibration coefficient is the quantity you are measuring (current or voltage) that gives 1 V at the ADC input.

Thanks again @Robert.Wall

What I found is what you did. There is a difference in the calibration factor for the 4th CT:

const float Ical1=                90.9;                                 // (2000 turns / 22 Ohm burden) = 90.9
const float Ical2=                90.9;                                 // (2000 turns / 22 Ohm burden) = 90.9
const float Ical3=                90.9;                                 // (2000 turns / 22 Ohm burden) = 90.9
const float Ical4=                16.67;                               // (2000 turns / 120 Ohm burden) = 16.67

float Vcal=                       268.97;                             // (230V x 13) / (9V x 1.2) = 276.9 Calibration for UK AC-AC adapter 77DB-06-09
//float Vcal=276.9;
//const float Vcal=               260;                             //  Calibration for EU AC-AC adapter 77DE-06-09

I understand why the 3rd and the 4th CT on the same wire do not give the same values.

Something else also, I measured the voltage with my voltmeter. I get 220Vrms when EmonCMS reports 248Vrms (*1.127). I believe that I should change the Vcal as well in the sketch then.

By the way, my aim is to develop energy monitoring in France. So I’ll be more than happy to contribute to OEM. I could start with writing some guidelines for those who want to use there EmonTx (or EmonPi) with other CTs than the SCT013-100. Where and how could I document this?

Glyn is trying hard to make the emonTx hardware as accurate as possible, but the major contributors to calibration and accuracy errors are the sensors. Our ‘standard’ current transformer is only specified to ±3% above 10 A, below that there is no specification at all. Our standard UK a.c. adapter is also specified to ±3%, for you in mainland Europe and those in the USA, your adapters are even worse at ±5% - and that is when you use the correct calibration constant.

All contributions are welcome.

That’s already been done - specifically for users in North America - where the 13 mm aperture c.t. cannot normally be used, so another page similar to the “Suitable Current Transformers” section of this page in the ‘Learn’ section would seem to be the way. Of course, some of the c.t’s mentioned there can usefully be used anywhere - they are not restricted to North America and 60 Hz systems.