Picproje Elektronik Sitesi

TEKNİK SERVİS => Endüstriyel Kartlar => Konuyu başlatan: gokhangokcen - 23 Kasım 2018, 15:34:40

Başlık: filtre için yardım isteği
Gönderen: gokhangokcen - 23 Kasım 2018, 15:34:40
Merhabalar, geçtiğimiz günlerde yapmış olduğum bir kat sahada sıkıntılar çıkarıyor. Endüstriyel bir makine üzerinde kullanmak için WS3813B modeli ledlerim var. Bu ledleri atmega328p işlemci ile tasarladığım kart üzerinden sürüyorum. Kart iş yerinde son derece normal çalışır iken makine üzerinde bulunan röle, kontaktör, sürücüler vs çalışıyor haliyle kartım belli bir süre sonra kilitleniyor. Elimden geldiğince aklımın yattığı şekilde tedbirleri almaya çalıştım. Ama hala net bir sonuca ulaşabilmiş değilim. Kart 24V dc gerilim ile çalışıyor. Kartın beslemesi panoda bulunan PLC,sürücü ve haberleşme birimlerini besleyen 24V smps güç kaynağından geliyor. Haliyle kablo motorlar kabloları, fan kablolarının olduğu kablo tavasından geliyor. Kullandığım kablo ekranlı kablo bir ucu panodan Toprak hattına bağlı. Kartın çizimi aşağıdaki gibidir;

proteus çizimi (https://yadi.sk/d/aLECV8vWEOfUKg)

versiyon farkından dolayı açamayan ya da resim olarak bakmak isteyenler için;

Kristale bağlı 22pf kondansatörleri haricen dışarıdan lehimledim. Şemada ve resimde olmayabilir.

alt yüz (https://yadi.sk/i/EaeNWsmV1XU3wQ)
üst yüz (https://yadi.sk/i/uhse-WV0Hjs88Q)

kartı kısaca özetleyecek olursam, 24V input var 3 adet, bu uçlara gelen sinyallere göre WS2813 chip'lerini kontrol ediyor. 1. uça sinyal geldiğinde ledler yeşil , 2. uca sinyal geldiğinde kırmızı 3. uca sinyal geldiğinde sarı olarak yanıyor.

Kart belli bir süre sonra gelen inputlara yanıt vermiyor. beslemeyi çekip verince düzeliyor. ama ilerleyen süreçte yine donuyor. Kod ise şu şekilde;

// Use if you want to force the software SPI subsystem to be used for some reason (generally, you don't)
// #define FASTLED_FORCE_SOFTWARE_SPI
// Use if you want to force non-accelerated pin access (hint: you really don't, it breaks lots of things)
// #define FASTLED_FORCE_SOFTWARE_SPI
// #define FASTLED_FORCE_SOFTWARE_PINS
#include "FastLED.h"

///////////////////////////////////////////////////////////////////////////////////////////
//
// Move a white dot along the strip of leds.  This program simply shows how to configure the leds,
// and then how to turn a single pixel white and then off, moving down the line of pixels.
//

// How many leds are in the strip?
#define NUM_LEDS 17

int start_pin = 0;
int stop_pin = 0;
int standby_pin = 0;



// Data pin that led data will be written out over
#define DATA_PIN 15

// Clock pin only needed for SPI based chipsets when not using hardware SPI
//#define CLOCK_PIN 4

// This is an array of leds.  One item for each led in your strip.
CRGB leds[NUM_LEDS];

#define BRIGHTNESS  255

// This function sets up the ledsand tells the controller about them
void setup() {

  pinMode(19, OUTPUT);
  pinMode(5, INPUT);
  pinMode(6, INPUT);
  pinMode(7, INPUT);

  // sanity check delay - allows reprogramming if accidently blowing power w/leds
  //delay(2000);

  // Uncomment one of the following lines for your leds arrangement.
  // FastLED.addLeds<TM1803, DATA_PIN, RGB>(leds, NUM_LEDS);
  // FastLED.addLeds<TM1804, DATA_PIN, RGB>(leds, NUM_LEDS);
  // FastLED.addLeds<TM1809, DATA_PIN, RGB>(leds, NUM_LEDS);
  //FastLED.addLeds<WS2811, DATA_PIN, RGB>(leds, NUM_LEDS);
  // FastLED.addLeds<WS2812, DATA_PIN, RGB>(leds, NUM_LEDS);
  //FastLED.addLeds<WS2812B, DATA_PIN, GRB>(leds, NUM_LEDS);
  FastLED.addLeds<NEOPIXEL, DATA_PIN>(leds, NUM_LEDS);
  // FastLED.addLeds<APA104, DATA_PIN>(leds, NUM_LEDS);
  // FastLED.addLeds<WS2811_400, DATA_PIN, RGB>(leds, NUM_LEDS);
  // FastLED.addLeds<GW6205, DATA_PIN, RGB>(leds, NUM_LEDS);
  // FastLED.addLeds<GW6205_400, DATA_PIN, RGB>(leds, NUM_LEDS);
  // FastLED.addLeds<UCS1903, DATA_PIN, RGB>(leds, NUM_LEDS);
  // FastLED.addLeds<UCS1903B, DATA_PIN, RGB>(leds, NUM_LEDS);

  // FastLED.addLeds<WS2801, RGB>(leds, NUM_LEDS);
  // FastLED.addLeds<SM16716, RGB>(leds, NUM_LEDS);
  // FastLED.addLeds<LPD8806, RGB>(leds, NUM_LEDS);
  // FastLED.addLeds<P9813, RGB>(leds, NUM_LEDS);
  // FastLED.addLeds<APA102, RGB>(leds, NUM_LEDS);
  // FastLED.addLeds<DOTSTAR, RGB>(leds, NUM_LEDS);

  // FastLED.addLeds<WS2801, DATA_PIN, CLOCK_PIN, RGB>(leds, NUM_LEDS);
  // FastLED.addLeds<SM16716, DATA_PIN, CLOCK_PIN, RGB>(leds, NUM_LEDS);
  // FastLED.addLeds<LPD8806, DATA_PIN, CLOCK_PIN, RGB>(leds, NUM_LEDS);
  // FastLED.addLeds<P9813, DATA_PIN, CLOCK_PIN, RGB>(leds, NUM_LEDS);
  // FastLED.addLeds<APA102, DATA_PIN, CLOCK_PIN, RGB>(leds, NUM_LEDS);
  // FastLED.addLeds<DOTSTAR, DATA_PIN, CLOCK_PIN, RGB>(leds, NUM_LEDS);

  for (int i = 0; i < NUM_LEDS; i = i + 1) {    //Yeşil söndürme bloğu
    leds[i] = CRGB::Black;
    FastLED.show();
    delay(10);
    leds[i] = CRGB::Black;
  }

  FastLED.setBrightness( BRIGHTNESS );
}

// This function runs over and over, and is where you do the magic to light
// your leds.
void loop() {

  start_pin = digitalRead(5);
  stop_pin = digitalRead(6);
  standby_pin = digitalRead(7);

  if (start_pin == HIGH) {
    delay(75);
    start_pin = digitalRead(5);
    if (start_pin == HIGH) {
      for (int i = 0; i < NUM_LEDS; i = i + 1) {         //Yeşil doldurma Bloğu
        leds[i] = CRGB::Green;
        FastLED.show();
        delay(50);
        leds[i] = CRGB::Green;
      }

      for (int i = 0; i < NUM_LEDS; i = i + 1) {    //Yeşil söndürme bloğu
        leds[i] = CRGB::Black;
        FastLED.show();
        delay(50);
        leds[i] = CRGB::Black;
      }

      while (start_pin == HIGH) {
        start_pin = digitalRead(5);
        delay(50);
        }
      }
    }



    if (stop_pin == HIGH) {
      delay(75);
      stop_pin = digitalRead(6);
      if (stop_pin == HIGH) {
        for (int i = 0; i < NUM_LEDS; i = i + 1) {    //Kırmızı bloğu
          leds[i] = CRGB::Red;
        }
        FastLED.show();
        delay(50);

        while (stop_pin == HIGH) {
          stop_pin = digitalRead(6);
          delay(75);
        }

        for (int i = 0; i < NUM_LEDS; i = i + 1) {    //Flash bloğu
          leds[i] = CRGB::Black;
        }
        FastLED.show();
        delay(50);
      }
    }

    if (standby_pin == HIGH) {
      delay(75);
      standby_pin = digitalRead(7);
      if (standby_pin == HIGH) {
        for (int i = 0; i < NUM_LEDS; i = i + 1) {    //mavi bloğu
          leds[i] = CRGB::Blue;
        }
        FastLED.show();

        while (standby_pin == HIGH)
        {
          for (int i = 0; i < NUM_LEDS; i = i + 1) {    //mavi bloğu
            leds[i] = CRGB::Blue;
          }
          FastLED.show();
          delay(100);
          standby_pin = digitalRead(7);
        }
        if (standby_pin == LOW) {
          for (int i = 0; i < NUM_LEDS; i = i + 1) {    //Sönme bloğu
            leds[i] = CRGB::Black;
          }
          FastLED.show();
        }
      }
    }


  }

ilaveten kartın besleme girişine SMPS'ten söktüğüm EMI (https://yadi.sk/i/-EmKrHcR88l1Ng) trafosunu bağladım biraz faydası oldu gibi ama yinede beni tatmin etmedi. başka bir önerisi olan beslemeye şunu yapabilirsin diyeceğiniz noktalar var mıdır?

Girişe sağlam güzel bir filtre tarzı bir şey düşünüyorum izleyeceğim yol nasıl olmalı? Ya da panodan beslemeyi ayırıp kart için ayrı bir güç kaynağı mı kullanmalıyım?(bu işlem oldukça zor ve maliyetli olacak).
Başlık: Ynt: filtre için yardım isteği
Gönderen: Melih1802 - 23 Kasım 2018, 20:58:32
Blendajli kablonun her iki ucu topraga bagli ise Topraklamaya en yakin kisim bagli kalsin diger tarafin blendajini bosta birakarak dene.
Başlık: Ynt: filtre için yardım isteği
Gönderen: tekosis - 23 Kasım 2018, 21:58:14
Kristale ait yollar simetrik değil, etkileme durumu olabilir. Dahili rc osilatorle bir deneyin.
Başlık: Ynt: filtre için yardım isteği
Gönderen: gokhangokcen - 23 Kasım 2018, 22:07:52
@Melih1802 hocam kablo ilk mesajımda belirttiğim üzere sizin söylediğiniz ile aynı.
@tekosis kristal yollarının simetrisi o kadar problem oluşturacağını düşünmüyorum.Arduino derleyicisi ile yazmıştım. Sanırım iç osilatör seçemiyoruz.
Başlık: Ynt: filtre için yardım isteği
Gönderen: Kabil ATICI - 24 Kasım 2018, 00:25:45
watchdog timer kullanımı yardımcı olabilir.
Bu işlemcinin kilitlenmesi durumunda, işlemcinin kendiliğinden resetlenmesi için kullanıllan yapıdır.

 
Başlık: Ynt: filtre için yardım isteği
Gönderen: ladybird - 24 Kasım 2018, 02:27:58
Hocam kartın beslemesini harici spms'den mi kulanıyorsunuz ? Besleme karta girmeden pi filtre ekleyip deneye bilirsiniz.
Başlık: Ynt: filtre için yardım isteği
Gönderen: gokhangokcen - 24 Kasım 2018, 12:24:19
@Kabil ATICI Üstad watchdog timer çok kullanmak istediğim bir çözüm yolu değil sonuçta işin kaynağını bulup kilitlenme sebebini çözmem gerekiyor. Kilitlendi hadi reset at geçiçi çözüm olarak görüyorum.Öneriniz için teşekkür ederim.

@ladybird Evet hocam kartın beslemesi PLC/HMI/Sürücülerin beslemesi ile aynı kaynak. Röle vs gibi donanımlarda bu smps üzerinden besleniyor. Pi filtre ile ilgili bir örnek paylaşabilir misiniz?
Başlık: Ynt: filtre için yardım isteği
Gönderen: mehmet - 24 Kasım 2018, 13:21:57
Brown Out en yüksek değerde
açık olsun.
Başlık: Ynt: filtre için yardım isteği
Gönderen: gokhangokcen - 24 Kasım 2018, 13:40:01
@mehmet üstad denedim. İşlemci hiç ayağa kalkamıyor bu seferde.Devre üzerinde işlemci +/- bacaklarının dibinde 100nf var haricen 1000uf,470uf,100uf,1uf gibi kondansatörlerin hepsini bağladım aynı anda.Acaba voltajda dalgalanma mı oluyor diye yine yok. Elimde osilaskop olmadığı için takip edemiyorum. Ölçü aletim var voltajı ölçtüğümde 23.9V ile 24.1V arasında çok az şekilde oynuyor. Diğer çalışan sistemler hiç sıkıntı olmadan çalışıyor. Ama benim ürün kilitleniyor.
Başlık: Ynt: filtre için yardım isteği
Gönderen: Emre_Tuncay_ - 24 Kasım 2018, 13:43:01
Cihazınızı metal bir kutunun içine koyma imkanınız varsa öyle deneyin bence. Ardunio pcb'si tasarlanırken EMI/EMC kurallarına pek uyulmamış sanırım. Bende aynı şeyleri çok yaşadım evde denediğim şey motor veya endüstriyel alanda çalışmıyordu.
Kolay Gelsin.
Başlık: Ynt: filtre için yardım isteği
Gönderen: gokhangokcen - 24 Kasım 2018, 13:50:00
@Emre_Tuncay_  hocam ürün led olduğu için mikadan yapılma bir borunun içerisinde kullanıyorum çift yüzlü pcb arka tarafı işlemci regüle vs olduğu kısım üst yüzeyinde ledler var. Ayrıca kart üzerinde hazır arduino değil Atmega328p işlemcisi var. Sadece kod arduino derleyicisinde yazıldı.
Başlık: Ynt: filtre için yardım isteği
Gönderen: fide - 24 Kasım 2018, 16:45:51
Besleme hattı üzerine tvs diyot ekleyin, bir de muhtemelen 24 voltu 5 volta switching ile düşürüyırsunuz. Switching entegresi çıkışına 5 volt tvs diyot koyup deneyin.
Başlık: Ynt: filtre için yardım isteği
Gönderen: mehmet - 24 Kasım 2018, 16:54:01
Pull-up / pull-down dirençlerini
1K civarına kadar düşürün. Özellikle
Reset bacağındaki direnci.
(Çiziminizi görmedim.)
Başlık: Ynt: filtre için yardım isteği
Gönderen: gokhangokcen - 24 Kasım 2018, 16:54:14
@fide evet hocam panodaki güç kaynağım 24V smps benim kart üzerindeki ekipmanları ve ledleri beslediğim elemanda lm2576-5 smps kullandım. TVS diyot ile ilgili biraz araştırdım forumumuzda şöyle (https://www.picproje.org/index.php?topic=47693.0) bir konu başlığı gördüm.

Sanırım oluşan pick/yüksek gerilimleri zener gibi davranarak absorbe ediyor.Doğru mu anlamışım hocam?

@mehmet hocam inputlardaki Pullup dirençlerim 1W 1K smd direnç şu anki hali ile zaten.Resette ise yine dediğiniz gibi +5V'a 1K direnç ile çekili 1K dirence paralel 100nf kondansatör var.
Başlık: Ynt: filtre için yardım isteği
Gönderen: fide - 24 Kasım 2018, 17:34:58
Switching esnasında yada dış kaynaklı iğne palslerde zener gibi davranarak voltajı traşlıyor.
Sizin de belirttiğiniz gibi zener gibi davranıyor.
Başlık: Ynt: filtre için yardım isteği
Gönderen: gokhangokcen - 24 Kasım 2018, 17:39:02
@fide Pazartesi günü alıp deneyeceğim üstad önerebileceğin model adı vs bir kodu var mıdır?
Başlık: Ynt: filtre için yardım isteği
Gönderen: fide - 24 Kasım 2018, 18:50:41
https://www.google.com.tr/url?sa=t&source=web&rct=j&url=https://www.vishay.com/doc%3F88390&ved=2ahUKEwiEtbqysO3eAhVwqIsKHTsdAfsQFjAAegQIBBAB&usg=AOvVaw1yC6KVj4OSkTm_3o14zfqq

Smaj5 önerebilirim.
Başlık: Ynt: filtre için yardım isteği
Gönderen: caglarpasli - 24 Kasım 2018, 19:59:04
Hocam merhabalar,
Senin problemin bir çok nedenden olabilir .
1.si şebekeden gelen burstden (yüksek frekans gürültüler) dolayı işlemci kilitleniyor olabilir. Bunun önüne geçmek için girişe filtre ve 24V tvs koyabilirsin.
2.si havadan gelen gürültülerden dolayı kilitleniyor olabilir. Bunun önüne geçmek içinde işlemcinin kullandığın pinlerin hepsine seri olarak küçük değerli direnç koyabilirsin. Bu işlemcinin pinlerden dolayı reset atmasını engeller.
3. Ground layoutuna iyi incelemek lazım. Loop olmadığına dikkat etmelisin. Groundlar birbirine uzak olursa yüksek frekansdan dolayı groundlar arasında yüksek gerilim farklılıkları oluşup işlemcinin kilitlenmesine sebeb oluyor olabilir.
Başlık: Ynt: filtre için yardım isteği
Gönderen: M.Salim GÜLLÜCE - 24 Kasım 2018, 21:57:28
Aziz dostum..
başıma geldi biliyorum ve Tecrübemden edindiğimi sana aktarayım..
1- Besleme geriliminiregüle etmezden önce tantal yada MLC kapasitörlerle güzelce filtre et
2- regülasyon sonrasında beslemeyi Ferrit Bead bobinden geçir ve MLC kapasitörlerle yeniden şaseleyerek filtre et.
3- 10 uF civarında MLC kapasitörü MCU nun en yakın besleme ve şase ayakları arasına bağla.

bu 3 ü mtlaka problemlerini çözecektir.
Bide yazılımına watchdog timer eklemeyi unutma

örnek kendi kullandığım devreyi ekliyorum
faydasını göreceğini sanıyorum

(https://ibb.co/x8C2D4K)
Başlık: Ynt: filtre için yardım isteği
Gönderen: gokhangokcen - 03 Aralık 2018, 11:43:32
Üstadlar yardımlarınız için teşekkür ederim. Biraz oğlanın rahatsızlığından dolayı ürünü düzenlemede geciktim. Son olarak ise düzeltmelerim şu şekilde oldu;

Devreyi komple dc-dc izolatör bağlayıp, optolar ile girişleri ve çıkışları yalıttım. Sonrasında girişinde smps'lerden söktüğüm EMI filtre bağladım kapasiteleri bir kaç farklı değerler kullanarak arttırdım. Kristalin gövdesini GND'ye bağladım. Şu an için sorunlarım çözüldü.

Tekrardan yardımcı olan herkese teşekkür ederim.
Başlık: Ynt: filtre için yardım isteği
Gönderen: frederic - 03 Aralık 2018, 12:08:48
Alıntı yapılan: Mehmet Salim GÜLLÜCE - 24 Kasım 2018, 21:57:28Aziz dostum..
başıma geldi biliyorum ve Tecrübemden edindiğimi sana aktarayım..
1- Besleme geriliminiregüle etmezden önce tantal yada MLC kapasitörlerle güzelce filtre et
2- regülasyon sonrasında beslemeyi Ferrit Bead bobinden geçir ve MLC kapasitörlerle yeniden şaseleyerek filtre et.
3- 10 uF civarında MLC kapasitörü MCU nun en yakın besleme ve şase ayakları arasına bağla.

bu 3 ü mtlaka problemlerini çözecektir.
Bide yazılımına watchdog timer eklemeyi unutma

örnek kendi kullandığım devreyi ekliyorum
faydasını göreceğini sanıyorum

(https://ibb.co/x8C2D4K)


Hocam şemanızda seri bağladığınız ferrit bead için malzeme kodu önerebilirmisiniz?
Başlık: Ynt: filtre için yardım isteği
Gönderen: gokhangokcen - 03 Aralık 2018, 12:14:13
@frederic üstad geçici olarak deneme için elimdeki arızalı smps'lerden söktüm. Değeri nedir bilmiyorum.