Picproje Elektronik Sitesi

DİJİTAL & ANALOG ELEKTRONİK => Malzeme Bilgisi => Konuyu başlatan: görkem - 11 Şubat 2021, 14:46:57

Başlık: INMP441 Mems Mikrofon Nasıl Test Edebilirim ?
Gönderen: görkem - 11 Şubat 2021, 14:46:57
Merhaba Arkadaşlar,
INMP441 stm32f4 ile I2S Protokolü ile haberleşiyorum 48 Khz ile 512 adet örnek alıyorum sesiz ortamda veriler geliyor fakat gerçekten doğru verilerin geldiğini nasıl test edebilirim ?
Sessiz ortamdada sensörden veriler geliyor.
Arm ın fft kütüphanesini kullanarak spectrum oluşturmaya çalıştım 128 örnek aldım fakat çalışmıyor. Mikrofondan doğru veri alamıyorum diye düşünüyorum kodları ofise geçtiğim anda ekleyeceğim görüşleriniz nedir ?
Başlık: Ynt: INMP441 Mems Mikrofon Nasıl Test Edebilirim ?
Gönderen: z - 11 Şubat 2021, 15:21:41
Gelen datalari DACdan  cikacak sekile getir ve DAc cikisini dinle. Yada verilerin grafigini ciz.

Sacmalik varsa hemen belli olur.
Başlık: Ynt: INMP441 Mems Mikrofon Nasıl Test Edebilirim ?
Gönderen: OG - 11 Şubat 2021, 16:52:48
Alıntı YapI2S Protokolü ile haberleşiyorum 48 Khz ile 512 adet örnek alıyorum sesiz ortamda veriler geliyor fakat gerçekten doğru verilerin geldiğini nasıl test edebilirim ?
Sessiz ortamdada sensörden veriler geliyor.

Sessizlik de bir değerdir, karşılığı sıfır bile olsa bir değer, I2S de değerleri seri formatta göndermenin bir usulüdür.
Başlık: Ynt: INMP441 Mems Mikrofon Nasıl Test Edebilirim ?
Gönderen: Sozuak - 11 Şubat 2021, 17:02:26
PC de belli frekansta ses üretip ortama yayıp, po sesi de dinleyerek örneklediğiniz sesin spektrumda doğru görünüp görülmediğine bakabilirsiniz.
Başlık: Ynt: INMP441 Mems Mikrofon Nasıl Test Edebilirim ?
Gönderen: görkem - 11 Şubat 2021, 23:07:55
@z stm32f4 discovery de sanırım direk dac a veriyi verdiğimizde kulaklık çıkışından bir sinyal alamıyoruz d class anfisi var o kısmı kontrol etmemiz gerekiyor. o kısım çok zamanımı alacağa benziyor.
sinyali kesdiğimde dc bileşenin fft kısmında düzgün çalıştığını stm studio ile takip edebildim bar grafikte.
512 adet örneğin fft uzunluğu 256 oluyor dc bileşende sinyal kesik iken 256 değerini elde ettim.

@OG Sessizlik evet bir değer fakat bu değer sıfıra yakın olması gerektiğini düşünüyorum ama bendeki değerlerin hiç alakası yok ortamdaki sese görede sesin sinyalini alamıyorum. I2S protokolü evet verilerin seri şekilde gönderilme şekli fakat benim problemim  eksik yaptığım bir işlem sanırım okurken.Mikrofondan  aldığım veriyi PDM ye convert etmeme gerek var mı bilemedim datasheet de öyle bir bilgi yok.Neden verileri düzgün alamıyorum hala anlamış değilim.

@Sozuak o Şekilde baktım hiç bir şekilde tepki alamıyorum frekansa göre sürekli bir gürültü varmış gibi değerler değişiyor.

Kodlarım aşağıda.



168 Mhz hızında çalışıyor işlemcim.


while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
HAL_I2S_Receive(&hi2s2,(uint16_t *)buffer,512,100);

for (i = 0; i < SAMPLES; i+=2) {
     
Input[(uint16_t)i] = (float32_t)((buffer[i/2] - (float32_t)4294967295.0) / (float32_t)4294967295.0);
           
      Input[(uint16_t)(i+1)] = 0;
}

arm_cfft_radix4_init_f32(&S, FFT_SIZE, 0, 1);

arm_cfft_radix4_f32(&S, Input);

arm_cmplx_mag_f32(Input, Output, FFT_SIZE);

arm_max_f32(Output, FFT_SIZE, &maxValue, &maxIndex);


for(uint16_t k=0;k<FFT_SIZE/2;k++)
{
deger[k]=(float32_t)Output[k];
}

  }
  /* USER CODE END 3 */
}


I2S Konfigurasyon

static void MX_I2S2_Init(void)
{

  /* USER CODE BEGIN I2S2_Init 0 */

  /* USER CODE END I2S2_Init 0 */

  /* USER CODE BEGIN I2S2_Init 1 */

  /* USER CODE END I2S2_Init 1 */
  hi2s2.Instance = SPI2;
  hi2s2.Init.Mode = I2S_MODE_MASTER_RX;
  hi2s2.Init.Standard = I2S_STANDARD_MSB;
  hi2s2.Init.DataFormat = I2S_DATAFORMAT_24B;
  hi2s2.Init.MCLKOutput = I2S_MCLKOUTPUT_DISABLE;
  hi2s2.Init.AudioFreq = I2S_AUDIOFREQ_44K;
  hi2s2.Init.CPOL = I2S_CPOL_LOW;
  hi2s2.Init.ClockSource = I2S_CLOCK_PLL;
  hi2s2.Init.FullDuplexMode = I2S_FULLDUPLEXMODE_DISABLE;
  if (HAL_I2S_Init(&hi2s2) != HAL_OK)
  {
    Error_Handler();
  }
  /* USER CODE BEGIN I2S2_Init 2 */

  /* USER CODE END I2S2_Init 2 */

}

I2S source clock  98 Mhz de
Başlık: Ynt: INMP441 Mems Mikrofon Nasıl Test Edebilirim ?
Gönderen: z - 12 Şubat 2021, 11:09:21
Kulaklik cikisindan ses almayacaksin. Dac cikisina minik bir amplifikator baglaman yeterli.

https://www.picproje.org/index.php/topic,35896.15.html DAC konusuna bakabilirsin.
Başlık: Ynt: INMP441 Mems Mikrofon Nasıl Test Edebilirim ?
Gönderen: görkem - 12 Şubat 2021, 22:54:53
@z hocam gerek kalmadı sanırım lojik analizör ile verilere baktım benim stm den okuduğum değerler arasında dağlar kadar farkvar.

problem sensör 24 bit veri gönderiyor ve 32 bit paketler halinde geliyor fakat I2S receive fonksiyonu max 16 bitlik değer alabiliyor

diziyi 32 bit tanımlayıp  fonksiyonda 16 bitlik pointer olarak tanımlıyorum hata burdan kaynaklanıyor 24 biti nasıl okuyabilirim fikriniz var mı ?
Başlık: Ynt: INMP441 Mems Mikrofon Nasıl Test Edebilirim ?
Gönderen: görkem - 13 Şubat 2021, 02:43:15
Problemi çözdüm 16 bit okuma yapabildiği için, 32 bit için 2 kere okuma yaptığımda problem çözüldü.
Dikkatimi çeken bir durum oluştu.
Mikrofonun breadboard da standart jumper kablolarına temas ettiğim anda gürültüler son bulmakta muhtemelen jumper uzunluğu örnekleme hızından kaynaklı bir parazit durumu oluşturuyor olabilir mi ?
Başlık: Ynt: INMP441 Mems Mikrofon Nasıl Test Edebilirim ?
Gönderen: Sozuak - 13 Şubat 2021, 10:37:13
Alıntı yapılan: görkem - 13 Şubat 2021, 02:43:15Problemi çözdüm 16 bit okuma yapabildiği için, 32 bit için 2 kere okuma yaptığımda problem çözüldü.
Dikkatimi çeken bir durum oluştu.
Mikrofonun breadboard da standart jumper kablolarına temas ettiğim anda gürültüler son bulmakta muhtemelen jumper uzunluğu örnekleme hızından kaynaklı bir parazit durumu oluşturuyor olabilir mi ?

Blendajlı (shield) kablo yada burulu kablo şeklinde dener misiniz?
Başlık: Ynt: INMP441 Mems Mikrofon Nasıl Test Edebilirim ?
Gönderen: power20 - 13 Şubat 2021, 11:10:16
Bu dijital  mikrofon elemanı, metal, kapalı kutu olup dijital çıkış veriyor. Üzerinde ses almak için ufak delik var. Bu durumda blendajlı kablonun etkisi ne olacak? Çıkışta dijital sinyal mi bozuluyor?

Benim tahminim, besleme hattı üzerindeki parazitler etkiliyor. Dahili ADC bunları okuyor.
Parçanın besleme noktasına çok yakın olacak şekilde 47..220uF gibi büyük kapasite eklenmesi sorunu kesin çözer sanıyorum
Başlık: Ynt: INMP441 Mems Mikrofon Nasıl Test Edebilirim ?
Gönderen: Sozuak - 13 Şubat 2021, 11:49:40
Dijital sinyalde de parazit olur, shield li ethernet, rs 232 , usb kaloları var. Bence çözerse düşük değerli kapasite de çözer.
Başlık: Ynt: INMP441 Mems Mikrofon Nasıl Test Edebilirim ?
Gönderen: power20 - 13 Şubat 2021, 12:12:28
USB kablodaki D+ ve D- hatlarının analog olduğu kanaatindeyim
Başlık: Ynt: INMP441 Mems Mikrofon Nasıl Test Edebilirim ?
Gönderen: OG - 13 Şubat 2021, 13:03:02
Alıntı yapılan: Kılıç - 13 Şubat 2021, 12:12:28USB kablodaki D+ ve D- hatlarının analog olduğu kanaatindeyim
Data ve Clock olarak kullanılırken digital
diğer işleri sense ederken analog (şarj, version vs)
gibi.
Başlık: Ynt: INMP441 Mems Mikrofon Nasıl Test Edebilirim ?
Gönderen: power20 - 13 Şubat 2021, 13:06:19
Data ve clock değil o.
Ethernet kablosundaki gibi diferansiyel çalışıyor
Başlık: Ynt: INMP441 Mems Mikrofon Nasıl Test Edebilirim ?
Gönderen: OG - 13 Şubat 2021, 13:15:16
ben de öyle biliyorum ama bazı yerlerda data/clock şeklinde tanımlıyorlar diye öyle yazdım

D+, D- differential yapılarda tanımlama şekli
mesela
https://www.picproje.org/index.php/topic,59991.0.html
Başlık: Ynt: INMP441 Mems Mikrofon Nasıl Test Edebilirim ?
Gönderen: görkem - 13 Şubat 2021, 13:43:57
kapasite eklemek sorunumu çözmedi besleme hattına 220 ile ve 1000uF ile deneme yaptım. Elimde shieldli kablo olmadığı için alüminyum folyo ile sardım gnd ye bağladım etkisi olmadı.
Sensörün vdd gnd ve sd pinlerine dokunup biraz bastırdığımda parazit kesiliyor lehimlerini elden geçirdim.
sd pini 100k ile pulldown yapılmış pcbsinde fakat datasheet de ki şemada stereo bağlantıda 100k bağlantısını gösteriyor
Başlık: Ynt: INMP441 Mems Mikrofon Nasıl Test Edebilirim ?
Gönderen: OG - 13 Şubat 2021, 14:36:31
madem kablon ekranlı değil
testini yaparken kablolar çok kısa olsun, hemen mcu'nun yanında gibi

bu mikrofon omnidirectional yapıda imiş, yani her yonden gelen seslere açık
üzerine küçük bir konik yapıp ses alma alanını daralt, bu konik mümkünse sünger gibi gürültü üretmeyecek şeylerden olsun
mesela bir süngerin ortasına bir delik açarak gibi

testleri yaparken cihaz/karta dokunma sürtme olmasın
bunun için de kartı yine bir sünger üzerinde konumlandır
koblolara falan el sürtmesin

bu ve bunun gibi önlemleri aldıktan sonra yazılımının doğruluğunu test et,

aldığın sesi bir hoparlöre veriyor isen hoparlör mümkün olduğunca çok çok uzakta olsun,
ses olabildiğince kısık olsun, geri dönüş yapar.
Başlık: Ynt: INMP441 Mems Mikrofon Nasıl Test Edebilirim ?
Gönderen: görkem - 13 Şubat 2021, 14:55:52
Kabloları kısaltınca sorunum kalmadı teşekkür ederim ilgilenen herkese.