Continue to Site

Welcome to EDAboard.com

Welcome to our site! EDAboard.com is an international Electronics Discussion Forum focused on EDA software, circuits, schematics, books, theory, papers, asic, pld, 8051, DSP, Network, RF, Analog Design, PCB, Service Manuals... and a whole lot more! To participate you need to register. Registration is free. Click here to register now.

Ac motor speed control

Status
Not open for further replies.

venkates2218

Full Member level 6
Joined
Sep 30, 2016
Messages
354
Helped
1
Reputation
2
Reaction score
1
Trophy points
1,298
Activity points
4,306
images.JPG


Hai friends,
In my project I have to control speed of AC230V,50HZ,4A,single phase motor.I tried TRIAC BT136 with optocoupler 3041 but it switching on when the PWM is high but in low pulse its not working.....Then removed the optocoupler it working fine.
Then used IRF540 but it always in ON condition.Its not responsible with PWM.


Please provide suggestion to control the motor speed by using PWM controls
 

MOC3041 is zero crossing detector device, use MOC3021.
 

For starters..... you don't trigger a Triac with PWM. You trigger it with phase control.

Phase control is a trigger delay from zero the zero crossing.
Additionally, not all single-phase motors are suitable for speed control. They are limited mostly to shaded pole ones.
 
  • Like
Reactions: burai

    burai

    Points: 2
    Helpful Answer Positive Rating
BTA16a.PNG

This is my circuit used to control the speed of the motor.
But I not working...Motor is either switching ON or OFF condition only....

I can't control the speed of the motor by using the PWM pin..
PWM is working fine,i checked it by connecting an LED with PWM pin which used for control the speed of the motor.

- - - Updated - - -

For starters..... you don't trigger a Triac with PWM. You trigger it with phase control.

Phase control is a trigger delay from zero the zero crossing.
Additionally, not all single-phase motors are suitable for speed control. They are limited mostly to shaded pole ones.

No already speed of the motor is controlled by an mechanical switch...
 

Hi,

as schmittt trigger already mentioned: don´t use PWM. It won´t work.

Read basics about phase control.
In short: You need to detect zero cross of line voltage --> Then use a variable delay (the shorter the delay, the higher the speed) --> then trigger the Triac with the use of MOC3021.

Klaus
 

Hi,

as schmittt trigger already mentioned: don´t use PWM. It won´t work.

Read basics about phase control.
In short: You need to detect zero cross of line voltage --> Then use a variable delay (the shorter the delay, the higher the speed) --> then trigger the Triac with the use of MOC3021.

Klaus

If we SWITCHED the TRIAC using delay function means controller have to do that work only,because it will comes under infinite while loop.
To avoid this one I need PWM control..

Is their any other way to control the speed of the motor by using the PWM control..?
 

Variable delay doesn't necessarily mean software delay loop, it can also use zero crossing interrupt and hardware timer.
 

Hi,

A microcontroller PWM usually is not aligned (synchronized) to an external signal.

But for phase control you need the mains zero cross as timing reference.

--> any free running PWM (like a PWM usually works) will not work as phase control.

*****
Maybe you think the correct way, but in my eyes the phrase "PWM" is not useful (at least: misleading) for phase control.

Klaus
 

If we SWITCHED the TRIAC using delay function means controller have to do that work only,because it will comes under infinite while loop.
To avoid this one I need PWM control..

Is their any other way to control the speed of the motor by using the PWM control..?

No
It is not synchronized with the zero crossing.
 

you have to check for zero crossing signal and switch on the triac with a delay from 0-10 ms . 0ms full on and 10ms full off
 

i used to work at a shower company where they controlled the speed of an AC motor (for the shower water pump) with just with a TO220 triac and a isolated
Triac driver.
It was very very rough, and noisy, but it worked.
They were using PWM.
They just kept occasionally turning the driver off for varied intervals.....WHEN on , they just kind of kept the drive on so that the triac didnt always turn off when the mains
went back through zero.

It was very noisy...some customers used to complain about the noise, but it was cheap.
 

They were using PWM.

I am not so sure. Most of the simple controllers use use a phase delay control. Most use a RC circuit to generate the delay from the zero crossing. PWM is much more messy.

The noise is due to the controller? My kitchen fan makes noise like a jet engine but it does not have any regulator.

By the way, phase control (in some sense) is same as PWM (except that the waveform is not rectangular)...
 
Last edited:

The noise was from the motor

The noise in my exhaust fan is (my guess; no study) is due to (i) unbalanced blades (ii) resonance and (iii) airflow turbulence.

Noise due to blade unbalance is not going to change with speed (but the frequency and perception will change);

Resonance will peak at a particular speed and appear to reduce both above and below (the resonance speed);

Turbulence noise (airflow) perhaps depends on the geometry.

AND this may perhaps be the case in your motor too.
 

optocoupler.png

The output side of the optocoupler is given to the PIC18F4520's RB0 pin and the below program is used
Code:
void interrupt ssr() {
    if (INTCONbits.INT0IF == 1) { //INTF flag raised, so external interrupt occured
        zc = 1;
        INTCONbits.INT0IF = 0;
    }
}

void System_init(void) {

    TRISA = 0b00000011;
    PORTA = 0b00000011;

    ADCON1 = 0XFF;
    CMCON = 0X07;

    TRISB = 0b11111111;
    PORTB = 0b11111111;

    TRISC = 0b00000000;
    PORTC = 000000000;

    TRISD = 0b00000000;
    PORTD = 0b00000000;

    TRISE = 0X00;
    PORTE = 0X00;

    
    INTCONbits.GIE = 1; //Enable Global Interrupt
    INTCONbits.INT0E = 1;
    INTCON2bits.INTEDG0 = 1;
    INTCONbits.INT0IF = 0;

   
}

void main(void) {
 
    System_init();
 
    while (1) {
        if (zc == 1) { //zero crossing occurred
            triac_1 = 1;
            DelayMs(1);
            triac_1 = 0;
            zc = 0;
        }
    }

}


By changing the delay is it possible to control the speed of induction motor..?
 

By changing the delay is it possible to control the speed of induction motor..?
"The delay" in the present code doesn't change the trigger time. Triac trigger pulse must be delayed relative to zero crossing. And you need a zero crossing detector that works equally for positive and negative zero crossings.
 

venkates2218, I think your problem is not understanding how triacs and SCRs work. Think of them as a switch you turn ON with a pulse at any time there is a voltage across them but you cannot turn them OFF again until the voltage across them has fallen to zero. You have gone through various stages of getting nearer to a solution but still miss the target.

In the original design you use an optocoupler with zero crossing detector, this will only let you turn the triac ON at the point the AC reverses polarity and it will remain ON for the whole cycle. In other words you get the effect you noticed, it was on or off but had no 'mid' setting.

You then changed to a non-zero crossing optocoupler which can trigger at any time, regardless of the voltage across it. That is slightly better because it lets you chop the AC waveform to reduce the effective power but without any synchronizm to the AC waveform it will trigger randomly. If you want to use that method, you have to decide the trigger pulse position as a delay from zero crossing but you have no voltage detector to do that. That method is normally called "Phase Control" rather than PWM because the position of the pulse decides the power, not its width.

In your last code, assuming you take the output to RB0 from the emitter of the optocoupler and you ground the bottom of the 1K resistor, you get a low pulse near to zero crossing so you need to make sure you interrupt on the rising edge of the signal. However you then try to control the triac period by generating a variable width pulse. As I stated, triacs don't work like that, as soon as you trigger it ("triac_1 = 1;") it turns ON and stays ON. The delay and line "triac_1 = 0;" have no effect whatsoever. If you want to do it by phase control the delay has to be between the zero crossing point and the trigger pulse so your code is like this:
Code:
     while (1) 
     {
        if (zc == 1) 
        { //zero crossing occurred
            DelayMs(your delay goes here)
            triac_1 = 1;
            triac_1 = 0;
            zc = 0;
        }
    }
The delay can be anything from zero (maximum power) to the period of one whole AC cycle (20ms for 50Hz, 16.6mS for 60Hz) for minimum power.

As Treez pointed out, there is another way to do it but it can be very noisy and harsh on the motor, you can turn the triac on for whole cycles, then turn it off and wait a while before turning it on again. It is rather like turning full power on and off with a manual switch and relying on the drag/load on the motor to slow it down. In theory if you get the switch timing just right you can control the speed but the rapid burst of full power stresses the motor and the switch and tends to be unreliable.

Brian.
 

I strongly suggest you insert a small delay between the two statements: triac_1=1; and triac_1=0;

Logically it does not matter but perhaps it can improve reliability by holding on the triac_1 =1 for some time.

If you are using an optimization compiler, it may even ignore triac_1=1 completely (it may not understand what you are trying to do).

Just my opinion.
 

Depending on whether your goal is to learn how to do it right, or just quickly solve a problem and if you're willing to deal with the drawbacks mentioned above that will arise from that, the solution to trigger full cycle for some periods and turn off for others, is effective in few cases, such as if the mechanical inertia compared to torque is high so that in the closed loop control the variation in the speed of rotation of the set becomes imperceptible.
 

Status
Not open for further replies.

Similar threads

Part and Inventory Search

Welcome to EDABoard.com

Sponsor

Back
Top