I'm trying to find frequency (i.e.; rotations per second) of a balanced three phase generator. Output peak voltage of the generator goes up to 150V.

One solution I found is to attenuate rectified and filtered versions of this AC by voltage divider resistor network (Ra, Rb, Rc and Rd), so that the rectified one swings over the filtered one, and then input them to a comparator to find the frequency data.

I would like to know if there is a better way of doing this.

Note: There is already a bridge rectifier in my circuit for other purposes, and the GND is taken from it as it is seen in the image below. I can't afford changing GND position at this design level.

enter image description here


3 Answers 3


As the generator gives balanced 3-phase, you can use three large same resistors witch give you the neutral point and then find the frequency from neutral point and one of phases.


simulate this circuit – Schematic created using CircuitLab

In the previous schematic we divided the \$100M\Omega\$ resistor into \$3M\Omega\$ and \$97M\Omega\$ to reduce the output voltage. By the generator's peak voltage (\$150V\$) the output on \$3M\Omega\$ voltage will have less than \$5V\$ peak and can be determined easily by an Op-Amp.

Another way:

Of course it is possible to find out frequency of generator from voltage of one line to another. For example from \$R\$ to \$S\$.

The waveform of \$R-S\$ voltage is like this: enter image description here

This is the plot of \$f = Sin(x)-Sin(x-2 \pi / 3)\$ (Plotted by Fooplot). The period of f witch can be found by finding the \$f(x)=f(x + T)\$ is same as \$Sin(x)\$. So The frequency of generator is also can be determined by \$l-l\$ voltage. And a simple zero crossing detector can help to find the frequency.

  • 1
    \$\begingroup\$ I am removing your edits to my answer because they are unnecessary. If you feel you need to provide more information add the edits to your post. \$\endgroup\$
    – Andy aka
    Commented Nov 14, 2013 at 23:10
  • 1
    \$\begingroup\$ how does this idea allow the OP to have a clean signal representative of the power AC waveform referenced to the negative side of his bridge rectifier? I think you also need to point out that there is a safety issue with this method because there is no inherent isolation of the signal and this could be dangerous. \$\endgroup\$
    – Andy aka
    Commented Nov 14, 2013 at 23:40
  • \$\begingroup\$ @Andyaka: Thanks. I added the waveform of L-L and safety to my answer. \$\endgroup\$ Commented Nov 15, 2013 at 4:46

Why don't you just attenuate the voltage on one pair of wires and feed it into an opto-isolator like this: -

enter image description here

This picture was taken from here and the major benefit of using an opto isolator/coupler is that you don't have to have your electronics directly connected to potentially lethal AC voltages. This makes them safe to work on and easier to get working as a prototype.

And if you really want to do it via a bridge rectifier here is a site that has a schematic: -

enter image description here

  • \$\begingroup\$ @Passerby - the edits you approved were not needed and I have removed them \$\endgroup\$
    – Andy aka
    Commented Nov 14, 2013 at 23:14
  • \$\begingroup\$ @Rev1.0 - the edits you approved were not needed and I have removed them. \$\endgroup\$
    – Andy aka
    Commented Nov 14, 2013 at 23:15

enter image description here

I first decided to directly compare voltage levels of any two different phases with the simple circuit above. In order to see what would happen, I simulated the scenario to see the voltage levels.

enter image description here
Red: Waveform of R with respect to GND.
Magenta: Waveform of S with respect to GND.

It looks OK. But there is a moment at which both the phase voltages become zero with respect to the GND. It is not clear what would happen at this moment; any noise at opamp input may count as dozens of generator frequency. I gave it a second though and decided to compare one of the phases with average of other two.

enter image description here
Note: C1 and C2 are for noise prevention, because of high resistor values.

In this case, the waveforms of \$V_R\$ and \$\dfrac{V_S + V_T}{2}\$ are as seen in the plotting below.

enter image description here

Now there is no indefinite region or moment when comparing signal levels. I am going to implement my circuit like this. I hope it works OK.

(Note: Dimensions of the images of the plottings are big enough; just open them in a new tab to see the details and read the texts on them.)

MATLAB code for generating these plottings:

V_PEAK          = 200.0;
FREQ            = 100;
PERIOD          = 1 / FREQ;
TMIN            = 0.0;
TMAX            = 3 * PERIOD;
VMIN            = -V_PEAK - 10.0;
VMAX            = +V_PEAK * sqrt(3) + 10.0;
POINTS_PER      = 100000;
PHASE_000       =   0 * pi / 180;
PHASE_120       = 120 * pi / 180;
PHASE_240       = 240 * pi / 180;

t               = linspace(TMIN, TMAX, POINTS);
V000            = zeros(1, POINTS);
V120            = zeros(1, POINTS);
V240            = zeros(1, POINTS);
VDC             = zeros(1, POINTS);
VLINE000        = zeros(1, POINTS);
VLINE120        = zeros(1, POINTS);
VLINE240        = zeros(1, POINTS);

for i = 1 : 1 : POINTS
    V000(i) = V_PEAK * sin(2*pi*FREQ*t(i) - PHASE_000);
    V120(i) = V_PEAK * sin(2*pi*FREQ*t(i) - PHASE_120);
    V240(i) = V_PEAK * sin(2*pi*FREQ*t(i) - PHASE_240);
    if      ((V000(i) > V120(i)) && (V000(i) > V240(i)))
        Vmax = V000(i);
    elseif  ((V120(i) > V000(i)) && (V120(i) > V240(i)))
        Vmax = V120(i);
        Vmax = V240(i);
    if      ((V000(i) < V120(i)) && (V000(i) < V240(i)))
        Vmin = V000(i);
    elseif  ((V120(i) < V000(i)) && (V120(i) < V240(i)))
        Vmin = V120(i);
        Vmin = V240(i);
    VDC(i)      = Vmax - Vmin;
    VLINE000(i) = V000(i) - Vmin;
    VLINE120(i) = V120(i) - Vmin;
    VLINE240(i) = V240(i) - Vmin;

close all;
hFig = figure;
hold on;
set(hFig, 'Position', [1200 50 700 950]);
plot(t, V000, 'Color', [0, 0, 1]);
plot(t, V120, 'Color', [0, 1, 0]);
plot(t, V240, 'Color', [0, 1, 1]);
plot(t, VDC,  'Color', [0, 0, 0]);
plot(t, VLINE000, 'Color', [1, 0, 0]);
plot(t, (VLINE120 + VLINE240) ./ 2, 'Color', [1, 0, 1]);
xlim([TMIN, TMAX]);
ylim([VMIN, VMAX]);
  • \$\begingroup\$ Would you mind explain why did you compare the R and S? \$\endgroup\$ Commented Nov 16, 2013 at 12:28
  • 1
    \$\begingroup\$ I didn't compare R and S. I copared R and (S+T)/2 (not exactly but close to their average). Because, this method seemed to be a good solution to me. Did you check the plottings? In your method, the neutral point is obtained by very high resistor values; sensing voltage from high impedance source gave me some worries. \$\endgroup\$ Commented Nov 16, 2013 at 12:39

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.