Strona 23 z 25

: piątek 15 mar 2019, 21:55
autor: Pyra
Witam

Kod: Zaznacz cały

 //zgrzew2
  while (pozwoleniePracy2 == 1) {
    zeroCrossState = digitalRead(zeroCrossPin);
    if (zeroCrossState != lastZeroCrossState) {
      if (zeroCrossState == HIGH) {
        delay(100);
        digitalWrite(3, HIGH);
        delay(czasZgrzewaniaTriak2);
        digitalWrite(3, LOW);
        krokCyklu++;
        lastZeroCrossState = zeroCrossState;
>>    pozwoleniePracy = 0;
        delay(timeMidWeld);
        lcd.clear();
      } 
Zdaje się, że powinno tu być:

Kod: Zaznacz cały

        pozwoleniePracy2 = 0;
Pozdrawiam

: sobota 16 mar 2019, 00:15
autor: ProLight
Niestety dalej to samo. [/code]

: sobota 16 mar 2019, 08:40
autor: maciex93
Pisząc drugi strzał masz na myśli drugi puls, czy drugie wyzwolenie zgrzewania?

: sobota 16 mar 2019, 08:58
autor: ProLight
Drugie wyzwolenie.

Ustawiam na pojedyńcze impuls, robię jeden zgrzew.
Po chwili chce zrobić drugie pojedyncze wyzwolenie i niestety zawiesza się.

: sobota 16 mar 2019, 09:11
autor: Pyra
Witam

Spróbuj tak:

Kod: Zaznacz cały

  krokCyklu = 1;
  //zgrzew właściwy
  while (pozwoleniePracy == 1) {
    zeroCrossState = digitalRead(zeroCrossPin);
    if (zeroCrossState != lastZeroCrossState) {
      if (zeroCrossState == HIGH) {
        delay(100);
        digitalWrite(3, HIGH);
        delay(czasZgrzewaniaTriak);
        digitalWrite(3, LOW);
        krokCyklu++;

      }
  }
        lastZeroCrossState = zeroCrossState;
        pozwoleniePracy = 0;
        delay(timeMidWeld);
        lcd.clear();
  }


  
  krokCyklu = 1;
  //zgrzew2
  while (pozwoleniePracy2 == 1) {
    zeroCrossState = digitalRead(zeroCrossPin);
    if (zeroCrossState != lastZeroCrossState) {
      if (zeroCrossState == HIGH) {
        delay(100);
        digitalWrite(3, HIGH);
        delay(czasZgrzewaniaTriak2);
        digitalWrite(3, LOW);
        krokCyklu++;

      }
  }
        lastZeroCrossState = zeroCrossState;
        pozwoleniePracy = 0;
        delay(timeMidWeld);
        lcd.clear();
  
  }
Wydaje mi się, że w poprawionej wersji, poprzedni stan przycisku, był zapisywany tylko wtedy, kiedy stan przycisku był wysoki, a powinien zawsze, czyli powinien być poza "ifem" który to sprawdza. W związku z tym, tylko raz widzi zmianę stanu pinów z 0 na 1.

Pozdrawiam

: sobota 16 mar 2019, 09:15
autor: maciex93
Nom,powinno działać 😀

: sobota 16 mar 2019, 09:49
autor: ProLight
Teraz jest coś dziwnego.

Ustawiłem czas 900ms
Klikam na wyzwolenie i nie za każdym razem jest uruchomione trafo.
Nie ma reguły, raz uruchomi trafo dopiero po 3 kliknięciu wyzwolenia, a czasami po 5 kliknięciu.
Przy tym jeśli nie ma uruchomienia trafa to na LCD też widzę że szybciej wraca do menu.

Jeśli nie ma zgrzewu to szybko wraca na LCD do menu, ale jeśli jest zgrzew to jest informacja na LCD tak długo jak trwa praca.

Program się nie zawiesza.

Nie wiem czy udało mi się to jasno przekazać.

: sobota 16 mar 2019, 11:15
autor: maciex93
Co masz podpięte pod pin 2?.

: sobota 16 mar 2019, 13:16
autor: ProLight
Jeśli dobrze zaznaczyłem to na 2 pinie nie ma nic.
Obrazek

Z lewej strony, 6 od góry, oznaczenie na PCB A2

: sobota 16 mar 2019, 14:16
autor: Pyra
Witam
Czy masz na pewno dobrze podłączone...

Tu jest prawidłowa numeracja pinów:
Obrazek

Pozdrawiam

: sobota 16 mar 2019, 14:57
autor: ProLight
Raczej nie ma możliwości podłączyć inaczej:

Obrazek

Obrazek

Kabelki idą do płytki z przyciskami i LCD

Jeśli dobrze zaznaczyłem PIN2 we wcześniejszym poście, to na płytce PCB zgrzewarki do tego pinu nie ma żadnej ścieżki

Obrazek

: sobota 16 mar 2019, 19:13
autor: maciex93
Jeżeli nie ma nic na pinie 2 (D2) , to kolejny warunek w kodzie można wywalić, a jeżeli coś jest, to jest to prawdopodobnie detektor przejścia napięcia w sieci przez zero. Dlatego też może nie zawsze dać się wyzwolić impuls prądu. To zależy jak się "wstrzelisz" wciśnięciem guzika w przebieg sieci. Można by to inaczej zrealizować, ale ja nie mam czasu siedzieć w tym kodzie.
krokCyklu = 1;
//zgrzew właściwy
while (pozwoleniePracy == 1) {
delay(100);
digitalWrite(3, HIGH);
delay(czasZgrzewaniaTriak);
digitalWrite(3, LOW);
krokCyklu++;
pozwoleniePracy = 0;
delay(timeMidWeld);
lcd.clear();
}



krokCyklu = 1;
//zgrzew2
while (pozwoleniePracy2 == 1) {
delay(100);
digitalWrite(3, HIGH);
delay(czasZgrzewaniaTriak2);
digitalWrite(3, LOW);
krokCyklu++;
pozwoleniePracy = 0;
delay(timeMidWeld);
lcd.clear();

}

: sobota 16 mar 2019, 20:08
autor: ProLight
No właśnie o tym pomyślałem że chodzi o wstrzelenie się w sinusa.

Prześledziłem dokładnie płytkę i z pinu2 D2 idzie na transoptor 4N25

Bez przejścia przez 0 zgrzewy będą nie równomierne? Raz wyjdzie mocniejszy raz słabszy.

: sobota 16 mar 2019, 20:43
autor: maciex93
Tak, mogą być nierówne.

: sobota 16 mar 2019, 22:20
autor: Pyra
Witam

Teraz dopiero zaskoczyłem, o co chodzi z tymi 10ms.
1s = 1000ms,
50Hz * 2 = 100 (bo okres ma dwie połówki),
1000ms / 100 = 10ms

Ponieważ triak nie potrafi się wyłączyć, o ile płynie przez niego prąd, a załączenie jest w czasie przejścia przez zero, to minimalny czas zgrzewu to 10ms, no około, bo trochę czasu na włączenie a wyłączenie nastąpi chwilę przed przejściem przez zero. Z drugiej strony, prąd zdolny do zgrzewania, płynie przez około 75% czasu.
Jedyną więc metodą do zejścia czasem zgrzewu o wartość mniejszą niż krotność 10ms, jest sterowanie fazowe, czyli opóźnione załączanie triaka, względem przejścia przez zero.

Można by z tego wybrnąć stosując jako element wykonawczy tranzystor w układzie z mostkiem Graetza. Niestety, trudno przewidzieć, jak wtedy zachowa się transformator.

Pozdrawiam