Rob's web

Automatische ster/driehoek controller met start en stop knoppen

Besturing voor 3-fase motoren met ster/driehoek omschakeling.

Hoofdstroom circuit
Hoofdstroomcircuit

Omdat relais' tijd nodig hebben om te schakelen dienen we via hulpcontacten, verbreekcontacten, op de ster en driehoek relais plaatsen zodat bij het schakelen van ster naar driehoek de driehoekrelais pas inkomt als de sterrelais is afgevallen, zodat er geen kortsluiting kan ontstaan. Even zo kan het sterrelais ps opkomen als het driehoekrelais uit is. We doen dit door de hulpcontacten in serie met de relaisspoelen te plaatsen.

De sourcecode is beveiligd voor verkeerde werking. Te denken valt als de motor loopt het drukken op de starttoets geen effect heeft.

Met de stopknop kan in ster en driehoek de motor worden uitgeschakeld. Herstarten pas na 3 sec.

Benodigdheden

Iedere Arduino.

Knoppen schakelen naar massa.

Gebruikte poorten

Twee vrije ingangen en drie uitgangen per motor.

Sketch

Deze code kan ook deels in andere projecten gebruikt worden.

#define b_start A1
#define b_stop A2

#define r_net 10
#define r_ster 11
#define r_driehoek 12

int run = 0;
int ster = 0;
int driehoek = 0;

void setup() {
  pinMode(b_start, INPUT);
  pinMode(b_stop, INPUT);

  pinMode(r_net, OUTPUT);
  digitalWrite(r_net, LOW);
  pinMode(r_ster, OUTPUT);
  digitalWrite(r_ster, LOW);
  pinMode(r_driehoek, OUTPUT);
  digitalWrite(r_driehoek, LOW);
}


void loop() {
  int start, stop;
  unsigned long timer;

  start = digitalRead(b_start);
  stop = digitalRead(b_stop);

  if (start == LOW && stop == HIGH) {
    run = 1;
    timer = millis();
    digitalWrite(r_net, run);
  }

  //Automatische ster-driehoek omschakeling
  if ((run == 1) && (driehoek == 0)) {
    ster = 1;

    if (ster == 1 && millis() <= (timer + 5000)) {
      digitalWrite(r_ster, run);
      }
    else {
      ster = 0;
      digitalWrite(r_ster, LOW);
      driehoek = 1;
    }
  }
  
  //Bedrijf in driehoek
  if (driehoek == 1) {
    digitalWrite(r_driehoek, run);
  }

  // Stilzetten
  if (stop == LOW) {
    run = 0;
    ster = 0;
    driehoek = 0;
    digitalWrite(r_net, run);
    digitalWrite(r_ster, run);
    digitalWrite(r_driehoek, run);
    delay(3000);                   //Voorkomt dat de motor te snel weer opstart. Optioneel.
  }    
}

Sketch