2,58 ABD doları değerindeki HDMI-VGA adaptöründe analog sesi düzeltme
Nyanpasu64 tarafından yazıldı.
Yakın zamanda Nintendo Switch'imi CRT monitörüme ve harici hoparlörlerime bağlamak için ultra ucuz bir HDMI'dan VGA'ya DAC satın aldım. Ne yazık ki ses çıkış jakı, bilgisayarımın mikrofon jakının yanı sıra ses mikserimde de ciddi gürültü sorunlarına neden oldu. Empedans sorunlarını teşhis etmek, delta-sigma ses DAC'si için filtreleme prototipi oluşturmak ve donanımla elde edilebilecek en iyi kalitede sesi üretmek için PCB bileşenlerini yeniden düzenlemek için birkaç gün harcadım.
Teknik Analiz
🔗 Prequel: Eski HDMI DAC'imi onarıyorum
Ses DAC'sini satın almadan önce, video için ilk planım Switch dock'umu ICY-Box HDMI-VGA DAC'a takmaktı. I2C bloğumu yeniden çalışırken, birçok ize zarar verdim ve karttaki bileşenleri kaybettim ve bunların işlevselliğini öğrenmek için GIMP'deki I2C hatlarını takip ederek bunları yeniden yapılandırmak zorunda kaldım. (DAC'nin HDMI girişi bir I2C bağımlı/çevre birimidir, SDA/SCL hatlarında, benim atladığım 5V'ye kadar yüksek empedanslı çekme dirençleri ve veriyolunu toprağa çekmek için çipe yönelik düşük empedanslı dirençler vardı.)
Sistem Güvenliği
Bunu, Switch modchip kurulumu için kullanmadan önce, NH'nin önerdiği mıknatıs teli ve 3 saniyelik lehim maskesiyle mikro lehimleme pratiği yapma fırsatı olarak değerlendirdim. Emaye yalıtımı Kynar'a göre erimeye daha az eğilimli olduğundan ve tel kolayca kopmayacak kadar kalın ve aynı zamanda pedlerin yırtılmasını büyük ölçüde önleyecek kadar ince olduğundan 36 kalibrelik tel faydalı oldu. Lehim maskesi, üzerine lehim yapmak istemediğim açıkta kalan pedleri kapatabilir; Ayrıca yakınlarda çalışırken "bitmiş" lehim bağlantılarını ve telleri yerine sabitlemek için de kullandım, ancak PCB'ye yapışmasının zayıf olduğu kanıtlandı. Belki de yüzeyi daha fazla temizleyip pürüzlendirmem gerekiyordu ya da Relife yerine YCS'nin 3 saniyelik maskesini denemem gerekiyordu?
Fotoğraflarımda PCB'yi takip ederken, üst ve alt arasında gezinirken PCB'yi yanlış yönde okuyarak birkaç kez işleri karıştırdım. Bir dahaki sefere PCB'yi sembolik olarak modellemek için GIMP kalem aracıyla izleri izlemek yerine KiCad'in referans fotoğraf işlevselliğini kullanabilirim.
Nasıl Önlem Alınmalı?
🔗 Switch'imi ses mikserime bağlama
Şaşırtıcı bir şekilde kurulumumun en zor kısmı konsolumu harici hoparlörlerime bağlamaktı. ICY-Box DAC'de ses çıkışı yok (anlayabildiğim kadarıyla ITE IT6892FN yongası analog ses çıkışı vermiyor), Switch'in kulaklık jakı ise ses mikserime ve hoparlörlerime rahatsız edici parazit veriyor. Çeşitli kabloları ve bileşenleri çıkarıp değiştirerek saatler süren sorun giderme sonrasında, sonunda Switch'in uyku modunda değil de topraklama döngüsüne bağlandığında ses devresinin 60 hz uğultu alıp bunu çıkışa yükselttiği sonucuna vardım.
Çevrimiçi olarak sorduğumda, farklı düzeylerde uygulanabilirliğe sahip çok sayıda öneri aldım.
Topraklama döngüsü izolatörleri, ayrı topraklara sahip devre bölümleri arasındaki voltaj sapmalarını geçirmek için transformatörler kullanır. Küçük olanların bas ve diğer düşük frekanslı sinyalleri zayıflatma eğiliminde olduğunu, büyük olanların ise pahalı olduğunu okudum. Belki de ucuz bir topraklama döngüsü izolatörü hala dikkate alınmaya değerdir?
Uzmanların Görüşleri
Ses ekipmanımı dengeli diferansiyel sese dönüştürmek toprak döngülerini önleyebilir; profesyonel ses miksaj konsollarının yaklaşımı budur. Ancak ekipman pahalı görünüyordu ve DI kutuları genellikle voltajı mikrofon seviyesine düşürür (bu da gürültüye duyarlılığı arttırdığı için verimsiz görünmektedir).
Diğer bir seçenek de HDMI ses çıkarıcılardı, ancak kaos (👋) bana denediği her AliExpress HDMI-to-3.5mm veya TOSLINK çıkarıcının kalitesiz olduğunu, ses meraklısı ürünlerin ise pahalı olduğunu söyledi. Araştırmamda çoğu HDMI ses çıkarıcı, video sinyalini de işleyen tam bit akışı alıcılarının bir parçasıdır. Belki de yalnızca veri adalarını çıkarıp analog veya S/PDIF sese dönüştürmek de aynı derecede pahalıdır?
Gelecekte Ne Bekleniyor?
Negatif geri beslemeli ses optoizolatörlerinin iki alıcısı vardır ve LED, her iki alıcının voltajı giriş voltajıyla eşleşecek şekilde çalıştırılır. 1BitSquared Discord sunucusu beni bunları kullanmaktan vazgeçirdi ama nedenini bilmiyorum.
Zemin ve iki ses sinyalini diferansiyel amplifikatöre giriş olarak işlemeyi araştırdım. Amplifikatörün besleme raylarının dışındaki girişlerle nasıl çalıştırılacağını bilmediğim ve ortak mod gürültü reddinin zayıf olabileceği için bu fikirden vazgeçtim.
Sonuç ve Değerlendirme
Bulduğum en kolay çözüm, Switch'imin ses jakını maksimuma (kulaklık ses sınırlayıcısı kapalıyken) çevirmek, böylece oyun sesinin toprak döngüsü uğultusundan daha yüksek olmasını sağlamak ve ardından mikserimdeki sesi kısmaktı. Ancak yine de konsolumu her takıp çıkarışımda kulaklık jakını takıp çıkarmak zorunda kalıyordum ve konsolun ses yükselticilerinin uzun vadede zarar görmesinden endişeleniyordum. Ayrıca bir Apple USB-C ses donanım kilidini de test ettim ancak ses alamadım.
Detaylar ve Etkileri
(Aynı ses vızıltısını mikserime bir "arkadaşımın" Switch 2'si bağlandığında da yaşadım, ancak o sırada bunu üçüncü taraf HDMI dongle'ımla ilişkilendirdim. Bir ek not olarak, Switch emülatör geliştiricilerine dava açtıktan sonra asla yeni bir Nintendo konsolu satın almayacağım, bağımsız geliştiricileri kurumsal kasalarını doldurmak için yasal olarak korunan faaliyetler nedeniyle kişisel yıkımla tehdit etmek için kurumsal yasal bütçelerini kötüye kullanıyorlar ve GitHub'u çatallara karşı yayından kaldırmaya devam ediyorlar.)
🔗 HDMI'dan VGA'ya ses çıkarıcı
/crt/ Discord sunucusu, 3,5 mm ses çıkışlı bir AliExpress VGA dongle'ı önerdi; bu da 2,58 ABD doları artı nakliye maliyetiydi. (Fiyat zamanla biraz dalgalanıyor ve şu anda 4 Temmuz'daki geçici indirim hariç 2,71 $ seviyesinde bulunuyor.) Bir hafta sonra donanım kilidi geldikten sonra, VGA çıkışını video anahtarıma taktım, HDMI girişini Switch'imin video çıkışına bağladım, ses çıkışını ses mikserime bağladım... ve Switch'imden şimdiye kadar duyduğum en kötü çatırtıyı duydum.
Önemli Gelişmeler
Kafam karıştı, anakartımın mikrofon jakı aracılığıyla ses yakalamak için bilgisayarıma bağladım. Tuhaf bir etki keşfettim: Realtek sesin Mic Boost'unu kapattığımda gürültü neredeyse duyulmuyordu, ancak +30 dB'ye getirdiğimde (oyun sesinin doğru seviyede olması için sesi kıstığımda bile) normal ses çok fazlaydı. Bu noktada, ses donanım kilidinin ya ultrasonik harmonikleri dışarı pompaladığından ya da mikrofon yükseltmesini değiştirmek mikrofon jakımın giriş empedansını değiştirdiğinde yükselticisinin bozulduğundan şüphelendim.
Anahtar denetleyicisinin ana sayfa düğmesine bastığımda ve ses yavaş yavaş kesildiğinde, ses seviyesi sessizliğe doğru azaldıkça azalan bir gürültü taraması elde ediyorum.
Empedans teorisini test etmek için anakartımın ses girişi ile toprak arasındaki direnci osiloskopumla ölçtüm. Sinir bozucu bir şekilde giriş pinleri 2 voltun üzerinde sabit bir DC ofsetine sahipti; bu, toprağa kısa devre yapıldığında ortadan kayboldu ancak kısa devreyi kaldırdıktan birkaç dakika sonra yeniden ortaya çıktı. Bu, empedansın düzgün şekilde ölçülmesi şansını ortadan kaldıracaktır. Yılmadan, direnci her iki yönde de ölçtüm ve bir yönde açık devreyi, diğer yönde ise 300 ohm'u ölçtüklerini gördüm. Daha da önemlisi, Mic Boost seviyelerim değiştirildiğinde bu ölçüm değişmedi. Bu noktada osiloskopumu kullanarak sinyal sorunlarını kontrol etmem gerekecek.
🔗 Osiloskopumla sesi araştırıyorum
Ses çıkışını bir ara kabloya taktım ve osiloskopumla açıktaki kablo uçlarını inceledim. Orada, sesi kaplayan, 50 MHz'e varan harmoniklere sahip 500-600 mV'luk şaşırtıcı bir gürültü buldum.
Sigma-delta DAC'ın ham çıkışı, 600 mV'nin üzerinde bir tepeden tepeye genliğe ve ~80 ns'lik bir periyoda sahiptir, ancak 20 ns kadar düşük periyotlu alt salınımlarla doludur. Burada ham parçaları çıkaramazsınız.
Bu, neredeyse sessiz bir müzik zayıflamasını yakalıyor, ancak yine de 500 mV'lik gürültüyü ve sigma-delta bit akışlarının farklı alanları arasındaki hatalı geçişleri görebilirsiniz.
Böylece sesteki sorunun, MHz aralığındaki ultrasonik DAC anahtarlama gürültüsünün doğrusal olmayan amplifikatörler tarafından duyulabilir bozulmaya kadar modüle edilmesinden kaynaklandığını doğrulamıştım.
Bu noktada, içinde hangi çipin olduğunu görmek için dongle'ımı açtım. Bir fotoğrafta çipin bir NX3303X olduğu ortaya çıktı; Herhangi bir veri sayfası bulamadım, ancak Çin'deki bir web sitesinde çip için bir blok diyagram ve pin çıkışı vardı.
HDMI DAC cihazımdaki NX3303X çipinin pin şeması.
Bu çipin diğer kullanıcılarını ararken c0pperdragon'un (Lumacode şöhretinden) HDMI2SCART projesini buldum. Bu PCB, büyük ölçüde benimki gibi AliExpress DAC'lerden toplanan çipleri kullanıyor ve ayrıca ses çıkışlarını doğrudan hoparlörlere (bir DC engelleme başlığı aracılığıyla evet, ancak tiz filtresi olmadan) bağlıyor. Daha sonra onun da benimle aynı ses sorunuyla karşılaştığı ve çip çıkışı ile toprak arasına kapak eklemek zorunda kaldığı söylendi.
Deponun sorun izleyicisine göz atarken "NX3303X nereden alınır?" sorunuyla karşılaştım. . Bu konu, MX9291'in entegre ses çıkışına sahip başka bir HDMI'dan VGA'ya DAC yongası olduğunu ortaya çıkardı. Çevrimiçi olarak NX3303X'i ararken, MX9291 için bu çipin NX3303X'in yerini alabileceğini ve sigma-delta DAC'ye sahip olduğunu söyleyen bir broşür de buldum, bu da NX3303X'in de aynısını yaptığını gösteriyor. Ancak MX9292'nin (ve 9291'in) pin çıkışı sahip olduğum çipten farklı olduğundan daha fazla araştırma yapmadım.
MX9292 yongasının pin şeması. Pin konumları ses de dahil olmak üzere tamamen farklıdır.
🔗 Alçak geçiren filtre oluşturma
Ses pla'yı düzeltmek için Geriye dönüp, anahtarlama gürültüsünü kesmek için bir alçak geçiren filtre tasarlamam gerekirdi.
Sinyaller için bir filtre tasarlarken, genellikle filtrenin frekans tepkisini göstermek için Bode grafiklerinin oluşturulması önerilir. Filtrenin karmaşık transfer fonksiyonunu bir frekans taraması boyunca değerlendirerek tam eğriyi çizen bir Bode grafiği oluşturucu buldum.
50 kHz'lik bir kesme ile birinci dereceden bir LPF'yi (düşük geçiş filtresi) simüle etmek için, 10000000 (10 MHz) frekansından 10000 (10 kHz)'e kadar 1/(1+s/50000) grafiğini çizdim. Daha sonra 20 kHz'de (ideal insan işitmesinin üst sınırı) ne kadar tiz kaybettiğimizi ve 5-10 MHz'de (DAC'nin yaklaşık anahtarlama frekansı) anahtarlama gürültüsünü ne kadar bastırdığımızı kontrol edebiliriz.
Yan not: s kanonik olarak hayali radyan/s cinsindendir, ancak transfer fonksiyonları birim-değişmez olduğundan bunun döngü/s cinsinden olduğunu varsayabiliriz.
Artık 50 KHz'lik bir kesme frekansına karar verdiğimize göre, bu kesme frekansını oluşturmak için uygun direnç ve kapasitör değerlerini aramaya başladım. (Açık olacak nedenlerden dolayı bunun tamamen işe yaramayacağını unutmayın.)
Bir RC filtresinin kesim noktasını bulmak için f = 1 / (2π RC) ifadesini kullanabiliriz. qalc'a takın:
> f = 50 kHz > R = 31 ohm > 1/(2pi R "C") = f C ≈ 102,6806084 nF
Böylece seri olarak 31 ohm'luk bir direnç ve ardından toprağa 100 nF'lik bir MLCC ekleyebiliriz. Bu, X7R seramik kapasitörlerin titreşimleri sinyallere dönüştürmesi sorununu ortaya çıkarıyor, ancak oyun sırasında ses kalitesi kimse bu kadar umursamıyor ve bizim de endişelenmemiz gereken saat titremesi var...
Bulgularımı HDMI2SCART deposundaki bir soruna bildirdim. Yazar kısa süre sonra DAC gürültüsünü engellemek için filtre kapasitörleri eklemesi gerektiğini söyleyerek yanıt verdi. İlginç bir şekilde, filtre direnci olmadan 10 nF, hatta 1 nF'lik bir kapasitansın anahtarlama gürültüsünü engellemek için yeterli olduğunu buldu. (Öngörüyor...)
🔗 Yan Not: Ses saati titremesi
Osiloskopumda filtrelenmiş dalga biçimlerini incelerken, dalgaların periyodunda kayda değer bir titreşim fark ettim (oynatmadan önce Audacity'de uzun bir süre boyunca tamsayı sayıda örnek olmasına rağmen). Bu, DAC'ın ses çıkışının gözle görülür bir örnek saat titreşimine sahip olduğu ve örnekleri örneğin "gerçek" bir örnekleme hızına göre zaman içinde ileri geri kaydırdığı anlamına geliyordu. Her 1/48.000 saniyede bir 1 örnek.
Bunun istikrarlı bir testere dişi dalgası olması gerekiyordu, ancak farklı parçalar farklı hızlarda oynuyor. Yer değiştirme bantları sağdan sola doğru hareket ediyor gibi görünüyor.
Titreme neden oluyor? Doğrudan bir kanıtım yok, ancak bazı olasılıklar şunlardır:
Örnek sayısı sabit olmasa bile, ses örneklerinin her boşluk periyodundaki değerini bir sonraki tarama çizgisine uzatır.
DAC, örnek çıktısını zamanlamak için kararsız bir osilatör veya PLL kullanır.
DAC, HDMI'dan alınan ancak henüz oynatılmayan örnek sayısına göre ses oynatma hızını sürekli olarak ayarlıyor. Bu ara sıra duyduğum ses boşluklarını açıklıyor; DAC örnekleri çok hızlı oynattığında ve oynatılacak örnekler bittiğinde (yetersiz çalışma), yenilerinin gelmesini beklemek zorunda kalır.
Anladığım kadarıyla titreşimi azaltmak için, sabit bir ses saatini yeniden oluşturmak ve onu TMDS boşluk dönemleri üzerinden gelen sesle gevşek bir şekilde senkronize tutmak en iyisidir. Ses bilimi incelemelerinde ve benzerlerinde HDMI yeniden saatleme tartışması buldum, ancak çoğunun yılan yağı olduğundan şüpheleniyorum.
Her durumda titreşim, test tonlarında veya oyun seslerinde herhangi bir duyulabilir sorun üretmiyor ve genel ses çıkışı, oyun oynamak için "yeterince iyi", ancak aynı zamanda düşük ses seviyesi ve zaman zaman ses boşluklarından da muzdarip. Sanırım ödediğinizin karşılığını 3 dolarlık bir HDMI DAC ile alıyorsunuz.
🔗 Anahtarlama frekansını bulma
Bu noktada büyük ölçüde meraktan dolayı filtrelenmiş ses sinyalimin özelliklerini karakterize etmek istedim. Delta-sigma DAC'yi daha iyi anlamak ve mümkün olan en iyi filtre kesimini seçmek için anahtarlama gürültüsünün frekansını bularak başlardım.
DAC'yi sessiz çalışacak şekilde ayarladım ve RC filtresinden önceki ve sonraki sinyalleri ölçtüm. Çip, 76,8 ns periyotlu ve 175 mV genlikli bir kare dalga üreterek semboller (10) çıkarıyor. Filtre, salınımı sessiz üçgen benzeri bir dalgaya indirir.
Filtre takılıyken, aslında sigma-delta DAC çıkışının ayrı ayrı bitlerini görebilirsiniz.
Gelen bir sessizlik sinyali 10 ve 1100 sembolden oluşan bir zincir üretecektir. Delta sigma sinyalindeki her yüksek veya düşük darbenin periyodunu ölçerek her sembolün 37 ns uzunluğunda olduğunu tahmin ettim.
Yan not: ekran görüntüsü 10. periyodun 76.80 ns uzunluğunda olduğunu söylüyor. Eğer bu doğruysa semboller aslında 38,4 ns uzunluğundadır.
periyodu 76,80 ns uzunluğundaydı. Eğer bu doğruysa, semboller ar aslında 38,4 ns uzunluğundadır. 10 sembol 1/(37ns * 2) ≈ 13,5 MHz'de bir kare dalga üretti. (Osiloskopa göre frekans 1/(76,8 ns) ≈ 13,02 MHz’dir.)
Başlatma sırasında IIRC, DAC 1100 sembolden oluşan bir dizi çıkararak 151 ns'lik daha uzun bir süre üretir.
1100 sembol, 1/(37ns * 4) ≈ 6,76 MHz'de bir kare dalga üretti. (Osiloskopa göre frekans 1/151ns ≈ 6,62 MHz'dir.) İlginçtir ki bu frekanslar daha önce belirttiğim 50 MHz'den çok daha düşüktür. Belki de hızlı kenarlar artık RC filtresi tarafından gizlenen sinyal yansımalarıydı?
semboller 0'de bir kare dalga üretti. (Osiloskopa göre frekans .) DAC'ye sessiz olmayan bir ses gönderseydim, düzgün olmayan bir sembol karışımı çıktısı verirdi. Bu, periyodik olmayan bir ara spektral enerji dağılımı sinyali üretecektir.
Bu sayılara dayanarak, duyulabilir tizi 20 KHz'de korurken zayıflamayı 5-10 MHz'de maksimuma çıkarmalıyız. (Reddit'teki bir konu, 20 kHz'e yakın 1 dB'lik değişimin usta mühendisler için bile duyulamayacağını öne sürüyor.)
Devreyi incelerken DAC çıkışının ve filtrelenmiş ses sinyalinin voltajlarını/genliklerini de not ettim.
Ses DAC'nin çıkışı 1,675 V'ta ortalanmıştı, bu da 3,35 V'luk bir besleme rayında %50 görev döngüsü ürettiğini gösteriyordu.
Maksimum ses seviyesinde bir ses sinyali oynatılırken, voltaj salınımı {toprak veya 3,35 V} yolunun yaklaşık %50'si ile sınırlıydı. Bu, distorsiyon aşırı hale gelmeden önce pratik olarak %50 modülasyon derinliğine sahip olan delta-sigma DAC'ler hakkında internette okuduklarımla örtüşüyor.
Bu, DAC'nin sessizliğe göre yalnızca ±0,8375 volta kadar sinyal çıkarabileceği anlamına geliyordu. Bu, yüksek ses kaynakları için yeterli aralıktır, ancak lisanslı Switch oyunları daha düşük sese sahip olma eğilimindedir; bu, telafi etmek için hoparlörlerinizi veya mikserlerinizi açmanızı veya Switch oyunlarının sesini yükseltmek için MasterVolume homebrew'u kullanmanızı gerektirebilir. Ne yazık ki MasterVolume açılışta çalışmıyor ve emuMMC ile sysMMC arasında konsolunuzu her yeniden başlattığınızda ses seviyesini uygulamanız gerekiyor.
Anahtarlama gürültüsü beklendiği gibi çıkışta ortadan kalktı, ancak şaşırtıcı bir şekilde filtreleme direncinden önce de büyük ölçüde zayıfladı!
Filtreye giren DAC çipinin çıkışını incelediğimde anahtarlama gürültüsü 175 mV'a düştü! Filtre DAC'yi etkiliyor muydu?
Audacity'de üretilen DAC karemi ve testere dişi dalgalarımı besleyerek bu ses anormalliğini daha da derinlemesine araştırmaya karar verdim. Bazı beklenmedik adım tepkilerini fark etmeye başladım.
DAC'ye kare bir dalga besledim ancak seviyeler arasında kavisli geçişler elde ettim. Bu, dalganın alçaktan geçtiği anlamına gelir.
DAC'ye yükselen bir testere dişi dalgası besledim ve basamaklar yerine kavisli düşüşler elde ettim. (Garip zirveye Windows'un 44,1'den 48 kHz'e yeniden örneklemesi neden oldu.)
HDMI cihazlarının sıklıkla 48 kHz'i tercih ettiğini okudum. Cihazımın EDID'si 32, 44,1 ve 48 kHz'i kabul ettiğini iddia ediyor, ancak ben kolaylık olması açısından 48 kHz kullandım.
DAC'ın filtreden tam ölçekli bir dalga biçimi geçirmek için yeterli akımı sağlayamadığından şüpheleniyordum. Audacity'deki kazancı -16 dB'ye düşürmeyi denedim, ancak aynı alçak geçişli testere dişi dalgasını çukur çukurlarla gördüm. Bu, sorunun kesinti (ya da akım sınırlaması) olmadığını, muhtemelen benim amaçladığımdan ya da beklediğimden çok daha güçlü olan, zamanla değişmeyen doğrusal bir alçak geçiş olduğunu ima ediyordu.
Bu noktada hâlâ oyunların kulağa doğru geldiğini ve sorunun sentetik test durumları ya da Windows ses işleme etkisi olması gerektiğini düşünüyordum. Bu yüzden DAC'yi gerçek konsol donanımında test etmek için Switch'imi L4T Ubuntu 24.04'e başlattım, ancak kare ve testere dişi dalga yakalamalarım aynı şekilde yanlış çıktı.
Son bir test olarak Wind Waker OST'nin Molgera temasını hem dizüstü bilgisayarımda hem de HDMI DAC'de oynatmayı denedim ve her ikisini de ses mikserime besledim. Vurmalı ses, Switch'in ses çıkışında tamamen tanınmıyordu ve referans sese kıyasla neredeyse unutulacak kadar bastırılmıştı.
Alçak geçiren filtremi yanlış kurduğumu fark ettim. DAC o kadar az akım sağlayabiliyordu ki, filtre kapağımın şarj hızı, filtre direncimden ziyade DAC'nin iç direncinde darboğaz oluşturuyordu!
🔗 Gerilim ve akım üzerinden iç direncin hesaplanması
Çipin çıkış pininin amaçlanan düzleştirilmiş voltajına doğru üstel bir eğri izlemesine şaşırdım, bu da ohmik bir iç direnç olduğunu gösteriyor. Daha önce çipin, maksimum akımdan daha az sürdüğü sürece DAC çıkışını nominal voltaja zorlayabileceğini ve daha sonra çözünürlük boyunca belirli bir ΔV'yi koruyacağını varsaymıştım. maksimum akımını sağlamak için istor.
Çipi bir direnç olarak modelleyebileceğimiz göz önüne alındığında (akım sınırlı bir voltaj kaynağı yerine), iç direnci iki şekilde ölçmeyi denedim.
Filtre direncinden önceki voltaj aslında çipin ideal "voltaj kaynağı" ile filtre kapağının nispeten sabit voltajı arasındaki voltaj bölücünün orta noktasıydı. Gerilim bölücü, çipin "iç direncinden" ve ardından harici bir filtre direncinden oluşuyordu.
İdeal DAC'nin voltaj salınımına göre çipin çıkış voltajının voltaj salınımını ölçerek, harici filtre direncini toplam dirençle (dahili dahil) karşılaştırabiliriz. Orta noktası 1,675 V olan (gerçek voltaj 3,35V için) nominal 3,3V kaynaktan PWM çıkışında 175 mV'luk bir salınım gördüm. Gerilim bölücü formülünü qalc'ye beslemek:
> 175 mV / 3,35 V = 33 ohm / (33 ohm + "Rint") ((175 milivolt) / (3,35 volt)) = ((33 ohm) / ((33 ohm) + Rint)) Rint ≈ 598,7142857 Ω
RC filtre zaman sabiti:
B550M DS3H anakart ses arabirimimdeki arızalı ses çıkışını 192 kHz'de yakaladım. Yan not: MDFourier bana, bu anakartta 48 kHz çalmanın ve kaydetmenin ciddi bir faz çarpıklığına yol açtığını ve sesin analog kablo üzerinden gidiş-dönüş olması için 96 kHz veya daha yüksek bir değere ihtiyacınız olduğunu söyledi. Yine de yüksek örnekleme oranları, yüksek frekansları analiz etmek için daha iyidir.
HDMI DAC'imin kare dalga oynattığı 192 kHz'lik bir kayıt.
Devam etmeden önce filtrelenen kare dalganın bir uçtan 0 volta hareket etmesi için 8 örnek (192000 smp/s'de) gerekir. Bu nedenle LPF'nin yarı ömrü 8 smp / 192000 smp/s ≈ 41,667 us'tur.
. Bazı karmaşık cebirleri kullanarak yarı ömrü bir zaman sabitine dönüştürebiliriz. Zaman sabiti 41,667 us / ln(2) ≈ 60,11 us'tur.
τ ≈ 60,11 olduğunu bulduk.
. Yan not: f_c = 1/(2pi τ) kullanarak zaman sabitini kesme frekansına dönüştürebiliriz. 1/(2pi 60,11 us) ≈ 2,647 kHz
Geriye dönüp baktığımda, saatler süren oyun boyunca 2,6 kHz'de bir alçak geçiş filtresini nasıl fark etmedim? Splatoon 3'ün Switch hoparlörlerinde DAC'ımdan daha cızırtılı olduğunu fark ettim, ancak bunu kırık ses arayüzümden ziyade Switch'in teneke hoparlörlerine bağladım.
Şimdi kapasitansımızın 100 nF olduğunu bilerek zaman sabitini iç dirence dönüştürün. Zaman sabiti = RC olduğundan:
> 60,11229337 us = ("Rint" + 31 ohm) (100 nF) Rint = 570,1229337 Ω
Phew bu bir avuçtu. Artık ses DAC çipinin iç direncini iki ayrı şekilde hesapladık ve sonuçta birbirinin %5'i dahilindeki değerler elde ettik. Ve iç direnç, RC filtresi için amaçladığımız direnci kesinlikle gölgede bırakıyor. Bulgularımı hata raporu başlığında bildirdim.
🔗İç dirençle filtreleme
Böylece çipin çok fazla iç dirence sahip olduğunu öğrendik. Filtreye ekstra direnç eklemek, ses yüklerini yönlendirme yeteneğini daha da azaltacaktır. Alçak geçişli bir filtre tasarlamanın bildiğim en iyi yolu, R'yi iç direncimize ayarlamak ve istenen kesmeyi sağlayan bir C seçmektir.
Bu aynı zamanda kapasitörlerin toprağa bağlanmasından önce PCB'nin neden seri dirençlere sahip olmadığını da açıklıyor; PCB tasarımcıları iç direnci filtreleyecek şekilde inşa ettiler, ardından üreticiler maliyetleri azaltmak için filtre kapaklarını doldurmayı atladılar!
Alçak geçiren bir filtre için C'nin ideal değeri nedir? 50 kHz kesme frekansına nasıl ulaşılacağını hesaplayabiliriz:
> 1 / (2pi 590ohm "C") = 50kHz yaklaşık. C = yaklaşık. 5.395082817 nF
5,1 nF'nin seçilmesi iyi bir değer gibi görünüyor. Daha yüksek kapasitanslar daha fazla filtreleme ve daha düşük kesme frekansı sağlayacaktır.
PCB'de, DAC çıkışından toprağa kadar bir filtreleme kapasitörü için halihazırda doldurulmamış bir alan bulunmaktadır. Ayak izi 0402'dir; 0603 kapasitörünü sıkıştırabiliriz, ancak sıkışık olacak ve lehimlenmesi daha zor olacaktır, ancak 0402 bileşeni daha küçük ve tutulması daha zordur. Her ikisini de değiştirilmemiş bir karta yüklemeyi denemedim ve hangisiyle çalışmanın daha kolay olduğunu bilmiyorum.
Filtreleme dirençlerini takmak için zaten bazı ağır PCB ameliyatları yapmıştım. Elimde 5 nF'lik bir kapasitör olmadığından, bunun yerine seri halinde iki adet 10 nF'lik kapak taktım.
Kondansatörler seri bağlandığında kaçak akımları farklı olabilir ve aradaki voltajın kaymasına neden olabilir. Bu durumda DAC'ın 1,675 V DC ofsetini aşmaması gerekir ve pratikte sorun yaratmaz.
Endişelerden biri, ucuz X7R seramik kapasitörlerin mikrofonik ve piezoelektrik olması, dolayısıyla çevresel titreşimleri voltaj değişikliklerine dönüştürerek duyulabilir sesler üretmesidir. C0G kapasitörleri piezoelektrik değildir ve Ses devreleri için daha iyidir, ancak büyük kapasitelerde üretilmesi hantal ve pahalıdır. Neyse ki 5 nF kapasitansımız o kadar küçüktür ki LCSC bu kapasitansın 0402 C0G seramiklerini bir kuruşun bir kısmına satar.
Herhangi bir değişiklik yapmadan önce DAC'nin fotoğrafı. Filtreleme kapasitörleri eklemek istiyorsanız bunları ses kaynağı ile toprak arasına C2 ve C5'e takın. C1 ve C4, ses kaynağından kulaklık jakına gider ancak burada 0 ohm dirençlerle doldurulmuştur.
🔗DC engelleme kapakları?
Ayrıca ses kablosunu başka bir cihaza taktığımda veya çıkardığımda DAC'nin bir ses çıkardığını da fark ettim. Bunun nedeni, üreticilerin maliyetleri düşürmesi ve DC engelleme kapaklarını 0 ohm atlama telleriyle değiştirerek ses alan cihazın DC engelleme kapaklarına güvenmeyi seçmesidir. (Güç eklediğinizde veya çıkardığınızda da bir patlama elde edersiniz, ancak bu, büyük harfler mevcut olsa bile gerçekleşir.)
DC engelleyici kapaklar eklemenin kolay bir yolu olduğunu düşünmüyorum. 10 kohm'luk bir yük varsayarsak, basları 20 Hz'de oldukça iyi bir şekilde iletmek için 1 uF veya daha fazlasına ihtiyacınız vardır:
> 1/(2pi 10 kohm "C") = 10 Hz yakl. 'C' = yaklaşık. 1,591549431 uF
Bu kadar büyük kapasitans C0G olarak kolayca bulunamaz. Geleneksel X7R MLCC kapasitörleri piezoelektriktir ve çarpıldığında voltajı değiştirir, bu da seste parazite neden olabilir. Elektrolitik kapaklar bir seçenektir ancak 0402 seramiklerine yönelik pedlere pek uymaz.
Ek olarak, DC engelleme kapaklarının "dışarısına" toprağa yüksek değerli bir direnç takmadıysanız, ses kaynağı ile alıcının DC engelleme kapakları arasındaki voltaj, kapasitör sızıntısı nedeniyle yeniden sürüklenebilir. Bunun, başlaması yarım saat süren ses bozulmasına neden olabileceğini okudum, ancak bunu okuduğum web sitesini bulamadım.
Bu sorunu çözmek için kapasitör çıkışı ile toprak arasına ekstra dirençler eklemeniz gerekir; bu da tasarımcıların kapladığı alan sağlamaması nedeniyle PCB modlaması gerektirir. Sonuçta bu, daha önce olduğu gibi DC engelleme kapaklarını dışarıda bırakmaktan bile tamamen daha iyi olmayan bir nihai sonuç için çok fazla bodur çalışmadır.
🔗 Stereo kanalları değiştirme
Biraz daha Splatoon 3 oynadıktan sonra, sahnenin en sol kenarında durmak ve sahnenin dışında solumda büyük bir patlama duymak gibi bazı anlamsız ses pozisyonlarını fark etmeye başladım. Ses DAC'sinin ses kanallarını değiştirdiğinden şüphelenmeye başladım ve sol tarafıma eğitim düşmanı konumlandırıp silahını ateş etmesini sağlayarak ve sağ tarafımda atış sesleri duyarak bunu doğrulamayı başardım.
Ses yerleşimini düzeltmek için analog ses kanallarını kulaklık jakımın pinleri arasında değiştirmem gerekirdi. Eğer PCB'yi tasarlıyor olsaydım, ses sinyallerini kartın arkası ve önü arasına getiren yolların yerini değiştirirdim. Ancak tahtanın düzenine bu şekilde takılıp kaldığım için, tahta boyunca paralel ilerleyen ses hatlarını çaprazlamaya karar verdim.
Ucuz bir AliExpress dijital mikroskobuna bakarken, çalışmamı daha iyi görmek için tahtaya izopropil alkol sıkarak bakır izlerini bir X-Acto bıçağıyla kazıdım. İzler kesildikten sonra izlerin kopmuş uçlarındaki lehim maskesini kazıdım, bakırı akıttım ve kalayladım ve 36 ayar mıknatıslı tel kullanarak hatları geçtim. Her iki kabloyu da lehimledikten sonra, alkole batırılmış bir kağıt havlu ve bir diş fırçası kullanarak akıyı temizledim, ardından telleri UV lehim maskesine gömdüm, böylece birbirlerine sürtünerek kısa devre yapmamalı veya tahtadan kopmamalılar.
Bir multimetreyle izlerin çipe düzgün bir şekilde bağlandığını ve kısa devre yapmadığını kontrol ettim, ardından oyunumu yeniden başlattım. Hızlı bir test, stereo sorununun çözüldüğünü ortaya çıkardı!
Bu PCB'nin tasarımcısı ve üreticisinin bunu nasıl berbat etmeyi başardığını merak ediyorum. Görünüşe göre hiçbiri bu donanım kilidinin ses bölümünü, çeşitli cihazlarda doğru ses çıkardığından veya doğru stereo görüntülemeye sahip olduğundan emin olmak için anlamlı bir şekilde test etmedi. Sanki ses çıkışı, onların önemsediği işlevsellikten ziyade bir kutu işaretleme egzersiziymiş gibi...
🔗 Diğer donanım modları
Bu doğrudan ses sorunlarına ek olarak, çözmek istediğim başka sorunlarla da karşılaştım. Öncelikle, VGA vidaları çok uzundu ve sallanmayı önlemek için dongle'ı sokete sıkı bir şekilde tutmadan önce D-Sub soketlerinin dibine batıyordu. Vidaları bir Dremel ve zımpara kağıdı ile daha kısa kestim, ancak bu sorunu tamamen çözmek birkaç tur sürdü ve (soğutucuyu yerleştirmek için üst kısmı keserek kasayı daha az sert hale getirdiğimden beri) yalpalamanın büyük bir kısmı hala plastik mahfaza yerine PCB tarafından taşınıyor.
Dikkatimi çeken bir diğer konu çip aşırı ısınıyordu. Yarım saat kadar kullanımdan sonra çip o kadar ısındı ki çipe dokunduğumda parmağımı yaktım. Çipin maksimum güvenli sıcaklığını bilmesem de, bir soğutucu takarak ömrünü uzatabileceğimi düşündüm (yanlışlıkla USB3 cihazı olarak satılan, kısa devre yapıp çakmağa dönüşen AliExpress MS2109 cihazımın aksine, bunun aşırı ısınmadan mı yoksa silikon kusurundan mı olduğunu bilmiyorum). Başlangıçta 2021'den itibaren termal yapışkanlı bir mini soğutucu denedim, ancak çipe yapışmayı başaramadı; Tutkalın süresinin dolduğunu veya talaşın çok pürüzsüz olup olmadığını bilmiyorum, ancak yapışmayı iyileştirmek için talaşı zımparalamak ve mekanik hasar riskini göze almakla ilgilenmiyordum. Daha sonra eski Arctic Silver 5 macununu denedim; soğutucunun ve PCB'nin etrafına basınç uygulamak için bir tel sardım ve hareketi önlemek için sıcak tutkal ekledim; bu işe yaradı ancak soğutucu, daha küçük çipin üzerine ortalanarak monte edilmediğinde devrilme eğilimindeydi.
Daha sonra AliExpress'ten çift taraflı termal bant sipariş ettim ve gelmesi iki hafta sürdü; Li-Ion bataryalı bir UV lambası sipariş ettiğim için gümrükte bekletildiği için kargomun geciktiğinden şüpheleniyorum. Çip ve soğutucudaki termal macunu izopropil alkol ve kağıt havlu kullanarak temizledim, ardından bir kare bant kesip çipe yapıştırdım. (Soğutucuyu iki kez takmam gerekti, birleşme yüzeyi DAC çipinden daha büyüktü ve sanırım çipin üzerine bant yapıştırmak soğutucuyu ortalayarak takmayı kolaylaştırıyor?)
Testlerde, bandın ısıyı yeterince iyi ilettiği görülüyor (termal macuna benzer, ancak bu, aktif soğutma olmadan yalnızca ısınan düşük güçlü bir çiptir). Ayrıca soğutucunun termal macunda olduğu gibi kaymasını ve devrilmesini de önler. Soğutucunun döndüğünü fark ettim (çünkü çip benim soğutucumdan daha küçük ve sınırlı temas alanı minimum dönüş sertliği sağlıyor), ancak soğutucu şu ana kadar kullanımda düşmedi.
Çip, sigma-delta ses sinyali üretmek için sürekli voltajı değiştirdiği için, video üretmese bile, güç aldığında ısı üretiyor mu? Silikon termal tasarımı hakkında söyleyecek kadar bilgim yok, ancak RP2040'ın ses DAC'sinin 10 katı saat hızına sahip olmasına rağmen harika çalıştığını biliyorum. DAC, 600 ohm'luk dahili direncine rağmen daha fazla güç üretiyor mu?
Karşılaştığım bir diğer sorun da masama çarptığımda video sinyalinin kesilmesiydi; bunun HDMI ayırıcımın USB kablosunu tam olarak takmamaktan kaynaklandığı ortaya çıktı. Kabloyu tamir ettim ve o zamandan beri sorunu görmedim. Masamın altına girdiğimde bir sinyal kesintisi daha yaşadım, ancak bunun nedeni yanlışlıkla Switch dock'umun güç kaynağını uzatma kablosundan düşürmemdi. Switch, bir monitöre bağlanan diğer pille çalışan cihazların aksine, güç almadığı sürece video çıkışı yapmayacak şekilde sabit kodlanmıştır, bu nedenle Viture, taşınabilir ekran gözlükleri için tasarlanmış Switch dock'larına harici bir güç bankası eklemek zorunda kaldı. Sanırım özünde bir PC oyuncusuyum...
Switch'e özgü bir sorun, konsol çıkışımı CRT'ye 720p (çünkü 1080p sinyalin kenarlarını kestiği ve pikselleri çözemediği için), ancak LCD'me 1080p yapmak istememdi. Bir bilgisayarda, CRT'nin tanımlayıcısına 720p ve LCD'nin tanımlayıcısına 1080p çıktı verecek şekilde ayarlarsınız, ancak Switch yalnızca otomatik ve sabit çözünürlüklere sahiptir. Otomatik mod burada yardımcı olmaz çünkü HDMI DAC, CRT'min EDID verilerini düzenledi ve HDMI ön ayarlı TV çözünürlükleri bloğuna 1080p çözünürlük ekledi ve monitörün orijinal EDID'sini düzenleyerek bunu kaldıramadım.
Switch'in CRT'mi 720p olarak görmesini sağlamak için (256B VGA EDID emülatörümden), I2C hatlarını VGA ve HDMI bağlantı noktalarından kestim ve bunları bir kabloyla köprüledim; bu işe yaradı, ancak konektörün altını sabitleyen yalnızca iki senkronizasyon izi bıraktı ve birkaç hafta içinde bağlantılar koptu! Bu "eğlenceli" bir hata ayıklama oturumuydu; osiloskop probumu pinlere doğru ittiğimde senkronizasyon sinyalleri hala konektöre ulaşıyordu, ancak kontrol etmediğimde kayboluyordu.
🔗 Gelecek: İkinci dereceden alçak geçiren filtre tasarımları?
Devreyi Falstad'ın simülatöründe simüle ederken, 5 nF'lik optimum filtrelemeye rağmen ±20 mV'ye kadar anahtarlama gürültüsü sızdırdığını buldum.
Falstad devre simülatöründe 5.1nF kapasitörlü ses filtreleme devresinin yeniden oluşturulması. Alttaki osiloskop, 6,6MHz'de ±19,45 mV'lik bir çıkış üçgen dalgası gösterir. (bağlantı)
Kapasitörü 10 nF'ye yükseltebilirim, ancak kesme frekansını çok fazla düşürür:
> 1 / (2pi 590ohm 5 .1nF) ≈ 52,89296879 kHz > 1 / (2pi 590ohm 10nF) ≈ 26,97541408 kHz
27 kHz'lik bir alçak geçiş filtresinin tiz sesi ne kadardır? Bode grafiği üretecine 1/(1+s/26975) besledim, bu da filtremin 20 kHz sinyalleri -1,9 dB'ye kadar zayıflatacağını gösterdi. Bu benim mutlu olduğumdan daha fazla üç kat kayıptı.
Frekans yanıtı 10nF kapaklı bir ses filtresinin Bode grafiği.
Bir ara kapasitans seçebilir miyim? Belki gürültüyü biraz daha azaltır ve tizleri 5.1nF sınırından daha fazla azaltır.
Ses kalitesini anlamlı bir şekilde artırmak için ikinci dereceden (veya daha yüksek) bir filtreye ihtiyacımız var. Bir tane oluşturmanın en basit yolu, birden fazla RC bölümünü basamaklandırmaktır, ancak zaten 600 ohm'luk iç dirençle başladığımız göz önüne alındığında, bu zorlayıcıdır. Ayrıca, kademeli RC bölümleri, s-düzleminde birbirinin solunda ve sağındaki kutuplarla aşırı sönümlenir, bu da belirli bir tiz kaybı miktarı için daha az gürültü azalmasına neden olur.
İkinci dereceden Butterworth filtresi veya benzerini oluşturmak için bir indüktör (LC filtresi için) veya op-amp (Sallen-Key filtresi için) kullanmanız gerekir. Büyük indüktörlerin donanım kilidinin kabuğunun içine sığması zordur. Sallen-Key alçak geçiş filtreleri yalnızca dirençler ve kapasitörler gerektirir, ancak yine de mevcut PCB'ye ekstra filtreleme eklemekle ilgilenmiyordum (ister kabloları geçirerek ve bileşenleri yanlarına tutturarak, ister bileşenleri eklemek için bir op-amp'i baş aşağı sıcak yapıştırarak).
Ses filtrelemeyi geliştirmek isteseydik, ikinci dereceden bir Sallen-Key filtresi takmak için ayak izleri ve izleri olan yedek bir PCB (empedans uyumu ve sinyal bütünlüğü için dört katmanlı?) tasarlayabilirdik. Bu, HDMI2SCART ile hemen hemen aynı zorlukta olacaktır, ancak muhtemelen HDMI2SCART'ın 3D baskılı kasasının aksine mevcut kasayı ve vidaları yeniden kullanmak olacaktır. DAC çipini sıcak hava kullanarak çıkarıp yeni karta naklediyorduk. Yeterli yer olsaydı DC ofsetini engellemek için elektrolitik kapaklar ekleyebilirdik.
Çatallı montajlı VGA konnektörlerini nereden temin edeceğimi bilmiyorum. Alibaba'nın DAC'imde bulunan aynı parçayı açıklayan bir ürün listesi var, ancak gerçek ürünün resmi yok. Onlara mesaj attım ve örnek parça göndermeyi teklif ettiler, ancak konnektörü takacak PCB'm olmadığı için takip etmedim. Deneyimlerime göre, iki tarafa monteli konektörlerin Chipquik ile bile lehimini sökmek inanılmaz derecede zordur. Sıcak hava eklerseniz daha kolay olabilir, ancak bu yakındaki plastiklerin erimesine neden olabilir. Ayrıca, eğer kalkanı PCB'ye lehimlemezseniz (Aliexpress donanım kilidi bunu yapmadı), kartı kolayca kırmak için iki tarafa monteli VGA'yı da buldum.
c0pperdragon, DAC yongalarını, çevrimiçi olarak VGA DAC'leri sipariş ederek ve sıcak hava kullanarak lehimlerini sökerek elde ettiğini bildirdi (ancak bu, ekstra ısı stresi döngüleri ekler).
Bunların hepsi mümkündür... ancak titreşim ve ses kesintisi sorunlarını çözmeyen artımlı bir yükseltme için çok fazla iş gerekir. Bunu, daha fazla üretim çabası gerektiren ancak daha önce karşılanmayan bir kullanım durumunu karşılayan HDMI2SCART ile karşılaştırın; o zaman bile yazar daha iyi bir çip kaynağı bulamadığı için bunları kendisi satmayı bıraktı.
🔗Peki ya diğer HDMI dongle'ları?
Filtreleme pedlerinde doğru stereo ses ve kapasitörlere sahip daha iyi bir AliExpress cihazı var mı (isteğe bağlı olarak 0 ohm bağlantılarının yerine DC engelleme kapasitörleri takılıyor)? Şu ana kadar hiçbirini bulamadım.
HDMI2SCART çip kaynak bulma dizisi, farklı bir düzene sahip NX3303X tabanlı bir PCB'nin fotoğrafını gösteriyor, ancak aynı zamanda kapasitörlerin topraklanmasını da atlıyor (ve muhtemelen maliyetleri azaltmak için DC engelleme kapaklarını köprüliyor). Bu PCB muhtemelen stereo kanalları da tersine çeviriyor, ancak tek taraflı kart çekiminden emin olamıyorum.
/crt/ discord, HDMI pigtail'de (VGA çıkış fişi yerine) bulunan başka bir NX3303X DAC'yi sever, ancak PCB'sinde ayrıca ters stereo bulunur, toprağa giden filtreleme kapakları yoktur ve DC engelleme kapakları yerine 0 ohm dirençler vardır (resim, Discord, 2). En azından bu PCB'de çok fazla kullanılmayan alan var, bu da modlamayı ve hatta belki bir op-amp eklemeyi kolaylaştıracak.
3 DAC'nin tümü stereo sesi nasıl tersine çevirdi? Duyduğum teorilerden biri, veri sayfalarını kontrol etmeden veya stereo sesi test etmeden birbirlerinin devrelerini kopyaladıklarıydı.
Şu anda hangi dongle'ı tavsiye ederim? Geçici olarak HDMI örgüsü diyebilirim, çünkü konektör pinlerinin kırılması, bir cihaza sıkı bir şekilde bağlı bir donanım kilidine göre daha az olasıdır; Eğer modlamak istiyorsanız muhtemelen kasayı ikiye bölebilirsiniz, ancak soğutucu için açıklıklar eklemenin ne kadar kolay olduğunu bilmiyorum. Ayrıca MX929* tabanlı bir donanım kilidini de deneyebilirsiniz. vb stereo kanallar (gördüğüm PCB fotoğraflarından bunu anlayamıyorum ve her iki yönlendirme seçeneği de makul).
Her durumda, çalışan ses filtrelemeye sahip bir PCB bulabilirseniz bana bildirin; bu, okuyucuların ve /crt/ topluluğunun, zahmetli modlama çalışmalarına gerek kalmadan, HDMI tabanlı oyun konsollarından daha kaliteli ses elde etmesine yardımcı olacaktır!