PWM Sinyalindeki Titreşimler

Başlatan apsis, 18 Temmuz 2018, 00:34:28

apsis

Merhabalar,
ADUM4223 entegresi ile bir mosfet sürücü devresi kurdum . Sürücü entegresi galvanic isolasyonlu bir entegre.



Şemada gözükmeyen boot diyodu ve önüne bağlı bir dirençte var. Yine şemada olmayan gate devre aşağıdaki gibidir



STM32F429 kitimle girişlerine comp.pwm uyguladım(TIM1 - PE8,PE9). İstediğim frekansı ayarlayıp scope'dan ölçebiliyorum. Mosları 30V-80V'da ve 2kHz ile 16.5kHz frekanslarında test ettim.
Moslar düşük gerilimdeyken sıkıntı yok ancak 80V'da 16.5kHz'de iken moslar ısınmaya başlıyor. Ani bir ısınma değil ancak yavaş yavaş ısınıyor.

Not: Devrede yük yok

Scope resimleri:
30V 2kHz
 







80V 2kHz:





80V 16.5kHz:



Sarı: işlemci'nin bir çıkışına bağlı
Mavi: mosfet çıkışı

İşlemci çıkışnda da ripple oluyor ve sürücü bunu kuvvetlendirerek çıkışa kadar aktarıyor. İlk kez yüksek gerilimde çalıştığım için böyle bir problem karşıma çıktı. Isınma anahtarlama kaybı oluşuyor diye düşünüyorum.
Yardımlarınız için şimdiden teşekkür ederim.
"Makineye Beyin" MEKATRONİK

deneme_1234

Gate sürücüyü 3.3V ile sürme, en az 5V kullan.
Bu arada kullanması ne gıcık entegreymiş az datasheet kurcaladım da.

ADuM4135 ya da 2ED020I12 varken bu sürücü biraz dandik kaçmıç

Bence ilk böyle bir şey süreceksen bilindik TLP250 gibi optolara yönelebilirdin. Nasılsa klasik süreceksin ve DESAT kullanmayacaksın.

apsis

Hocam entegre 3v'u destekliyor. Çalışmamı bu çiplerle sürdüreceğim. Problem bence sürücü entegresinde değil. Sorun yüksek gerilimde ve yüksek frekanstaki problem. Bunun nedenini merak ediyorum.
"Makineye Beyin" MEKATRONİK

devrecii

En alttaki resim sorunlu sarı renk ile mavi renk aynı incelikte olması gerekirdi. Mavi lkare dalga olmuş.

A ve B girişleri bağlı mı yoksa tekini mi bağladın disable pini mi kullnuyorsun A resimde peki B de ne var.


apsis

iki comp. pini bağlı.Sarı olan Vca.
Cboot 1uF paralelinde 100nF bağlı.
"Makineye Beyin" MEKATRONİK

devrecii

#5
Tavsiyem ilk önce cpu iki çıkışını osiloskop resmini ekle ,  daha sonra mosfetleri bağlama , gnda ve gndb ikisini de eksiye ver
ve adum entegresinin mosfet gate çıkışlarını  osiloskopla resmini çek o zaman sorun daha iyi anlaşılır.



Yük bağlı değilken pik olmaz , 16khz gayet normal bir değer. 500khz olsa yük yokken ısı problemi olabilridi ama 16khz de olmaz.

 

apsis

daha net bir şekilde görüntülenmiş hali

işlemci çıkışı sürücü bağlı değilken: (sarı:pwm, mavi:pwm_n)



Sürücü çıkışı gnda ve gndb ground'da moslar bağlı değilken: (sarı:high_side, mavi:low_side)



Mos'lar bağlı ve mosfet beslemesi kapalıyken: (sarı:high_side, mavi:low_side)



Moslarda 80V varken gate sinyalleri: (sarı:high_side, mavi:low_side)




High-side ve köprü çıkışı: (sarı:high_side, mavi:çıkış)




poems by Jeffrey Harrison

Low-side ve köprü çıkışı: (sarı:low_side, mavi:çıkış)




80V bağlıyken üst mos alt mos'a göre daha fazla ısınıyor. Girişteki gürültü kuvvetlenerek çıkışta daha büyük etkiye neden oluyor sanırım.
"Makineye Beyin" MEKATRONİK

apsis

Şöyle bir durum fark ettim. PWM'de dead time var ve işlemci çıkışlarında bu durum gözüküyor. Ancak moslar bağlıyken 3.fotoğraftaki high-side sinyalinin sağında hafif bir eğim oluşuyor. Bu durum mosfetlere de enerji verince daha belirgin oluyor ve mosfetler sanırım anlık bir kısa devreye düşüyor. Acaba doğrumu düşünüyorum?
"Makineye Beyin" MEKATRONİK

tunayk

Evet  doğru düşünüyorsun.  Gerçek voltaj ve kablolar devreye g
irdiğinde kaçak endüktanslar nedeni ile mos hemen kesime girmiyor. Bu yüzden de besleme gerilimi çok kısa süreliğine kısa devre oluyor.  Aslında akım sinyaline bakıyor olsan muhtemelen durum daha net görünecek. 
Şu durumda dead time değerini uzatıp duruma bakarsın.

apsis

Hocam dead-time'ı düşürsem de yükseltsem de her türlü çakışıyorlar. İşlemci çıkışından bir filitreleme yapmam mı gerekli?
"Makineye Beyin" MEKATRONİK

apsis

static void MX_TIM1_Init(void)
{

  TIM_MasterConfigTypeDef sMasterConfig;
  TIM_OC_InitTypeDef sConfigOC;
  TIM_BreakDeadTimeConfigTypeDef sBreakDeadTimeConfig;

  htim1.Instance = TIM1;
  htim1.Init.Prescaler = 0;
  htim1.Init.CounterMode = TIM_COUNTERMODE_UP;
  htim1.Init.Period = 10909;
  htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
  htim1.Init.RepetitionCounter = 0;
  if (HAL_TIM_PWM_Init(&htim1) != HAL_OK)
  {
    _Error_Handler(__FILE__, __LINE__);
  }

  sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
  sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
  if (HAL_TIMEx_MasterConfigSynchronization(&htim1, &sMasterConfig) != HAL_OK)
  {
    _Error_Handler(__FILE__, __LINE__);
  }

  sConfigOC.OCMode = TIM_OCMODE_PWM1;
  sConfigOC.Pulse = 7000;
  sConfigOC.OCPolarity = TIM_OCPOLARITY_LOW;
  sConfigOC.OCNPolarity = TIM_OCNPOLARITY_LOW;
  sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
  sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET;
  sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET;
  if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_1) != HAL_OK)
  {
    _Error_Handler(__FILE__, __LINE__);
  }

  sBreakDeadTimeConfig.OffStateRunMode = TIM_OSSR_DISABLE;
  sBreakDeadTimeConfig.OffStateIDLEMode = TIM_OSSI_DISABLE;
  sBreakDeadTimeConfig.LockLevel = TIM_LOCKLEVEL_OFF;
  sBreakDeadTimeConfig.DeadTime = 128;
  sBreakDeadTimeConfig.BreakState = TIM_BREAK_DISABLE;
  sBreakDeadTimeConfig.BreakPolarity = TIM_BREAKPOLARITY_HIGH;
  sBreakDeadTimeConfig.AutomaticOutput = TIM_AUTOMATICOUTPUT_DISABLE;
  TIM1->CR1|=512;
  if (HAL_TIMEx_ConfigBreakDeadTime(&htim1, &sBreakDeadTimeConfig) != HAL_OK)
  {
    _Error_Handler(__FILE__, __LINE__);
  }

  HAL_TIM_MspPostInit(&htim1);

}
"Makineye Beyin" MEKATRONİK

apsis

duty'i düşürüp low-sideın pwm'inin kaydığını gördüm nedendir bu?



"Makineye Beyin" MEKATRONİK

devrecii

#12
Dostum yukarıdaki resimler çok iyi idi ama son verdiğin resim yanlış,

En alttlaki resimin cpu dan iki çıkışını osiloskopla çekebilirmisin.


İki mosfetin çakışmasını görmek için high side mosfetin  hemen drain yada sourcesine  bir 22ohm gibi bir direnç bağla
ve osiloskopu direncin uclarına bağla (aman dikkat osiloskpu yakma), çakışmayı daha net görebilirsin.

Tabi ilk başta driverda lojik bir problem mi var ona bak sen . Öyle görünüyor.

(VDDA ve GNDA arasındaki voltajı heralde diyot ile veriyorsun ,  orada da voltaj sabit mi? belki düşüyordur bu da chipi yanıltabilir tahmin) 



apsis

#13
@iboibo high-side'da mosfet beslmesi yokken besleme gerilimi 15V'u gösteriyor. Mosfetleri besleyince yüksek gerilime çıkıyor.
"Makineye Beyin" MEKATRONİK

devrecii

VDDA  GNDA arası asla 15v geçmemeli eğer 20-30v geçmişse mosfetin gate bozunuma uğramıştır. Demek ki sorunun bu imiş.


Şu şekilde bağlayabilirsin