3 puan yazan GN⁺ 2023-12-17 | 1 yorum | WhatsApp'ta paylaş
  • CH32V003 tabanlı bir USB-C MIDI synth’i yaklaşık 12 mm’lik bir karta sığdıran bir proje; “smallest and worst” MIDI synthesizer serisinin yeni bir deneyi
  • Donanımsal USB’si olmayan 48MHz CH32V003 üzerine CNLohr’un rv003usb yazılım USB yığını eklenerek USB-MIDI aygıtı olarak çalıştırılıyor
  • Dikey montajlı USB-C konnektörü, QFN MCU, SC-70 regülatör, 0603 pasif bileşenler ve piezo buzzer’ı piezo buzzer çapının içine sığdırmak temel zorluktu
  • 2 katmanlı 6/6mil kart, çift taraflı montaj, panel jig’i, piezo pin çakışması ve USB-C fan-out gibi mekanik ve PCB kısıtları tasarım yinelemeleriyle çözüldü
  • Nihai ürün USB-C hub ve telefonlarda çalıştı, ancak dizüstü bilgisayara doğrudan bağlandığında enumerate olmadı; bu yüzden USB-C kablolaması veya pull direnç değerlerinin doğrulanması hâlâ gerekiyor

CH32V003 ile yapılmış USB-MIDI oyuncak synth

  • Proje, “en küçük ve en kötü” MIDI synthesizer serisinin yeni bir çalışması; flash synth bu listenin dışında tutuluyor
  • Kullanılan mikrodenetleyici CH32V003
    • 32-bit RISC-V mikrodenetleyici
    • Oldukça ucuz bir parça
    • Donanımsal USB yok, ancak işlemci 48MHz’de çalışıyor
  • Başlangıçta hem öğrenme hem pratik amaçla doğrudan bit-bang USB kütüphanesi yazılması düşünülmüş, ancak CNLohr zaten rv003usb’yi gerçekleştirmişti
  • O sırada USB-MIDI demosu tamamlanmadığı için önce lehimlenmiş geliştirme kartıyla test aygıtı kuruldu

İlk USB-MIDI deneyleri

  • İlk kart, TSOP20 breakout ile Micro-USB breakout’un birleştirilip regülatör, kapasitör ve direnç eklenmiş hâliydi
  • Programlama başlığı 2 pinden oluşuyordu, ancak USB takılıyken GND bağlamaya gerek kalmadığından tek bir D1 pini ile programlama yapılabiliyordu
  • Buton girişiyle USB-MIDI aygıtının nota çalması sağlandı
  • MIDI verisi çipe ulaştığında piezo buzzer kare dalga üretiyordu
    • Çipin donanımsal timer’larından biri kullanıldı
    • Sesi artırmak için differential mode çıkışı kullanıldı
  • USB MIDI mesajları 4 bayt ve low-speed USB endpoint’i 8 bayta kadar desteklediğinden, normalde paket başına 2 MIDI mesajı gönderilebiliyor
    • Bu basit demoda her mesaj bir sonraki USB interrupt’ına kadar bloklanıyor
  • Host tarafında MIDI loopback kullanılarak “gerçekten berbat bir oyuncak klavye” gibi çalıştırıldı

CH32V003 için USB geliştirme kartı

  • Mevcut CH32V003 geliştirme kartlarında donanımsal USB olmadığı için USB pinlerinin bağlanmadığı görülmüş; tekrar tekrar kablo çekmemek için küçük bir USB geliştirme kartı yeniden tasarlandı
  • Kart özellikleri:
    • Gerekli tüm pinler breakout olarak sunuluyor
    • Tüm pinler iki yüzde de etiketleniyor
    • 1.5K direnç D5 veya VDD’ye lehimlenebiliyor
    • Yazılımsal USB yeniden bağlama gerekmiyor ve D5 başka amaçla kullanılacaksa VDD tarafına bağlanabiliyor
    • Alt yüzdeki USB veri hatları gerekirse kesilip seri direnç eklenebiliyor
  • Sağ üstteki 3 pin 3V3, GND ve D1; bunlar programlama başlığı olarak kullanılıyor
    • USB çıkarılıp programlama yapılacaksa üçü de bağlanabiliyor
    • Sadece D1 ve GND bağlanabiliyor ya da USB aynı makineye takılıysa yalnızca D1 de yeterli olabiliyor
  • Kenar pinleri 0.1 inç pitch’e sahip ve kartın toplam boyutu 15.2mm × 20.3mm
  • KiCad tasarım dosyaları GitHub ve git.mitxela.com üzerinde yayımlandı

USB-C sürümüne küçültme süreci

  • CH32V003’ün ucuz olması ve az sayıda destek bileşeni gerektirmesi, eski USB ATtiny projelerini yeniden üretme fikrine yol açtı
  • stylocard, doğrudan okuma yöntemine iyileştirilmek istenirse en az 22 GPIO gerektiriyor; ancak tek bir CH32V003 ile klavyeyi okumak ve USB’yi aynı anda yürütmek için yeterli pin yok
    • Ucuz CH32V003’ten iki tane kullanmanın mümkün olduğu düşünülüyor
    • Biri klavyenin yarısını okurken diğeri kalan yarı ile USB’yi yönetiyor
  • Sonraki fikir, mevcut smallest USB MIDI synth projesini USB-C çağına uyarlayarak yeniden yapmak oldu
  • Elektriksel olarak USB-C’ye geçiş, birkaç direnç ve uygun bir konnektör eklemekten ibaret; ancak USB-C fişinin içine elektronik devreyi kolayca yerleştirmek zor
  • Sonunda dock üretimi için kullanılan dikey montajlı bir USB-C konnektörü seçildi
    • Parça numarası USB4151
    • Benzer parçalar birçok tedarikçide bulunuyor

USB-C konnektörü ve 2 katmanlı kart yönlendirmesi

  • USB-C konnektörünün fan-out’u zor ve tasarımcı sanki yüksek yoğunluklu kartlar ile mikrovia kullanımını varsaymış gibi görünüyor
  • Seçilen konnektör footprint’i tek başına bile standart 6/6mil süreç özelliklerini teknik olarak aşıyor; daha iz eklenmeden önce bile ciddi kısıtlar var
  • Plastik standoff’lar, kaplamalı deliklere çok yakın kaplamasız geçişli delikler gerektiriyor
    • Bu oyuncak projede daha yüksek tolerans maliyeti ödememek için DRC ihlalleri görmezden gelindi
    • Üretim başarısız olursa plastik standoff’ları bıçakla kesme planı vardı
  • Hedef, USB-C fişinin altına giren kartı mümkün olduğunca küçültmek ve sıradan bir piezo buzzer’ın çapı içine sığdırmaktı
    • Buzzer pin aralığı 7.62mm, yani 0.3 inç
    • Dış çap 13.8mm
    • Potting compound içindeki çukur bölüme sığması için azami çap yaklaşık 12mm olmalıydı
  • Piezo pinlerinin USB destek pinleriyle çakışmadığı bir yön bulunamadığından footprint aralığı genişletildi
    • Tasarım yinelemeleri sonunda piezo pin aralığı 8mm’ye kadar indirildi
    • Gerekirse pinler hafifçe dışa bükülebilir veya törpülenebilir
  • USB 3 pinleri bağlanmadı
    • Dört SuperSpeed çifti ve iki SBU pini kullanılmıyor
    • CC1 ve CC2 bağlanmak zorunda olduğundan toplam 14 pin bağlanmalı
  • Kaplamalı deliklerin etrafındaki bakır halka en aza indirilerek gereken tüm izler güçlükle çıkarıldı
  • Shield pinlerinin hepsi bağlı olduğundan kartta tüm GND’yi bağlamayan bir dolambaçlı yol mümkün olsa da, sonunda GND de yönlendirildi
  • Alt yüzde, yeterli iz alanı açmak için QFN parça merkezden dışarı itildi
    • Kullanılmayan GPIO’ların GND’ye veya başka sinyallere bağlanmasında sakınca olmadığından, GND çipin ortasından geçirilebildi
  • Regülatör için SC-70 paket kullanıldı
    • Daha küçük regülatörler de mümkün, ancak alan sorunu o kadar büyük değildi
    • Etrafındaki direnç ve kapasitörler 0603 boyutunda seçildi
  • Ön yüzde güç, GND ve D1 (SWIO) programlama için 3 test pad’i yer aldı
    • Gerçek programlama için USB-C’yi uzatma kablosuyla takıp D1 pad’ine bir kablo değdirmek yeterliydi

Panelin montaj jig’i olarak kullanılması

  • Çok küçük kartları solder paste stencil sırasında tutmak zor olduğundan özel bir panel tasarlandı
  • Bu kartta iki yüzde de bileşen olduğu için, bir yüz lehimlendikten sonra diğer yüzü stencil’lemek özellikle zordu
  • Panele tasarım iki kez yerleştirildi ve ikincisi ters çevrilerek tüm yapı simetrik hâle getirildi
    • Böylece bir yüz stencil’lenip kart çevrilerek diğer yüz de stencil’lenebiliyor
  • Panel çerçevesi aynı zamanda USB-C fişini tutan bir jig olarak da kullanıldı
    • Ortadaki oval delik USB-C fişine sıkı oturacak şekilde tasarlandı
    • FR4, reflow fırınına dayanabildiği için destek malzemesi olarak uygun
  • KiCad 3D görüntüleyici hata önlemede yardımcı oldu
    • Footprint lehim maskesi eksikliği veya yanlış katman çıktısı gibi hatalara karşı ek bir savunma hattı işlevi gördü
    • Piezo pinleriyle footprint arasındaki uyumsuz çakışmalar da 3D render’da hemen görülebiliyordu

Montaj ve lehimleme

  • Çok küçük kartlarda üreticiler düşük tolerans ve küçük boyut koşullarında fiyat desteği verebiliyor
  • Bu proje kâğıt üzerinde USB 3.2 Gen 2 konnektörün 2 katmanlı 6/6mil toleranslı karta yerleştirilmiş hâliydi; ancak üretici footprint’i sorun etmedi ve üretim sorunsuz tamamlandı
  • Doğru montaj sırası, küçük bileşenleri önce lehimlemek ve USB konnektörünü en sona bırakmak
    • USB konnektörü through-hole yapıda olduğundan önce takılırsa karşı yüzün stencil’lenmesi mümkün olmuyor
  • USB konnektörü, vakum nozulla tutulabilecek bir plastik kapakla geliyor
  • Başta birkaç tanesini reflow ile lehimleme planlandı, ancak boyut çok küçük olduğu için sonunda hepsi sıcak hava ile lehimlendi
    • Alt yüzde daha önce lehimlenmiş parçalar olsa bile yüzey gerilimi bunları yerinde tutabiliyor
    • Gerekirse farklı erime noktalarına sahip iki tür lehim alaşımı da kullanılabilir
  • Lehimleme sonrası panelden dikkatlice ayrıldı ve pürüzlü kenarlar biraz törpülendi
  • Montajdan sonra en yüksek tek parçanın kapasitör olduğu görüldü; daha küçük kapasitör kullanılabilirdi ama artık çok geçti
  • Beklendiği gibi piezo buzzer pinleri çok sıkıydı, ancak kart düz oturacak kadar içeri bastırıldıktan sonra pinler kesilip dikkatlice lehimlendi
  • Ek olarak sipariş edilen piezo buzzer’lar, eldeki stoktan çok küçük tasarım farkları gösteriyordu

Hub’da çalışıyor, ancak dizüstü bilgisayara doğrudan bağlanınca başarısız

  • Dikey montajlı USB-C konnektörü aslında telefon veya tablet dock’larının içine girecek şekilde tasarlanmış; bu yüzden kalıplanmış plastik kasanın dışına taşacak bir uzunluğa sahip
  • Devreyi ve konnektörün alt kısmını kapatan küçük bir 3D baskı kapak da düşünüldü, ancak görünümünün iyi olmayacağı kanaatine varıldı
  • USB-C uzatma kablosu standartlara göre izinli değil, ancak güç vermek ve SWIO pinine prob değdirerek programlamak için kullanıldı
  • Dört synth’e, DAW içinde ayırt edilebilmeleri için farklı aygıt adları flash’landı
    • Kullanılan DAW, Wine üzerinde çalışan 1998 tarihli Cakewalk’tu
  • Test için ayrıca 4 portlu bir USB-C hub satın alındı
    • Yalnızca dört USB-C portu sunan bir hub bulmak zordu
    • Çoğu ürün USB-C’yi USB-A, HDMI, SD kart gibi başka konnektörlere dönüştürüyordu
  • Tamamlanmış ürün USB-C hub ve telefonlara bağlandığında çalıştı
  • Dizüstü bilgisayara doğrudan bağlandığında enumerate olmadı
    • Standart dışı USB-C uzatma kablosunun ucunda enumerate olabiliyordu
    • USB-C port kablolamasında küçük bir hata olabilir ya da USB bağlantı türünü belirleyen pull direnç değerleri tam doğru olmayabilir
  • Proje kaynak kodu GitHub ve git.mitxela.com üzerinde yayımlandı

1 yorum

 
GN⁺ 2023-12-17
Hacker News yorumları
  • Bu adam geçimini gerçekten böyle işlerle mi sağlıyor? Ortaya çıkardıkları her zaman çok üst düzey ve özgün oluyor
    Şirketin boğazıma çöktüğü, Jira'ya yeterince iş kaydedip kaydetmediğim ve her hafta yeterli sprint puanı kadar çıktı gösterip göstermediğim konusunda endişelenmeme neden oluyor
    İstediğin işi, istediğin zamanda, kendi hızında özgürce yapıp bu kadar zaman, emek ve kaynağı bir hobi projesine ayıran bir hayatı hayal etmek zor
    Parasal olarak büyük bir yatırım olmayabilir. Prototip malzemeleri muhtemelen 100-200 dolar civarındadır, ama ne kadar zaman alır? İşten sonra her gün ya da gece birkaç saat, yıllar boyunca mı?

    • On yıllardır çalışıyorum ama düzenli olarak haftada 40 saatin üstüne çıkmam gereken bir işim hiç olmadı
      Olsa olsa yılda birkaç kez nadir durumlar yüzünden birkaç saat fazla çalıştım; daha iyi işverenler kesinlikle var
    • Yazar 2018'de bu konuda kendi deyimiyle bir “rant” yazısı yazmış
      https://mitxela.com/rants adresinde Spare Time and Hard Work başlığına kadar inmek yeterli
    • https://mitxela.com/support
      Patreon'un ilk dönemlerinde dijital sanatçı olarak destek alan birini tanıyordum; ondan önce Twitch'te yayın yapıyor ve profilinde PayPal bağış düğmesi bulunduruyordu
      Zaten her zaman oldukça iyi bir sanatçıydı ama sadece birkaç kişi abone olmaya başlayınca faturaların ne kadar hızlı çözülmesine şaşırmıştım
      Toplu para üzerinden düşününce sadece birikimle yaşamak zor görünebilir, ama her ay gelen tutar yaşamı sürdürebilir hale gelince hesap çok daha gerçekçi bir hale geliyor. Yine de izleyici kitlesini korumak gerekiyor
    • Donanım tarafının insanı değilim ama sanki rüya gibi bir hayat yaşıyor
      Eğlendiği için bir şeyleri hackliyor. Birçok insanın zaman ayırıp plan yapması ve bunu gerçekten uygulamaya koyması zor
      Alaycı yorumları da güzel ve 1998 çıkışlı yazılım araçlarını Linux üzerinde Wine ile çalıştırıyor gibi görünmesi de hoşuma gidiyor
    • Deneyimli bir mühendisseniz bu proje, işten sonra günde birkaç saat ayırarak 3-5 gün sürer gibi görünüyor
      Buna video düzenleme, kargo süreleri ve telefondan arada yapılan ufak tefek araştırmalar da dahil
      Daha hızlı da yapılabilir ama o zaman iş gibi hissettirmeye başlar
      Elinde zaten araç gereç olan biri için maliyet 50 dolara yakın bile olabilir
      Kurşunlu lehim pastası kullanmaya razıysanız daha ucuz ve kolay hale gelebilir ama ben bunu asla istemem
  • Onun volumetrik mum projesi gerçekten inanılmaz https://mitxela.com/projects/candle

  • Her porta 10 Gig etiketi yapıştırılmış bir hub'a bunların takılı olması epey komik

  • Parmak ucu pedlerinin makro yakın çekimi o kadar net ki bu video belki de bir parmak izi güvenlik sızıntısı olarak görülmeli
    İnsanların yanlışlıkla ev anahtarlarının göründüğü fotoğrafları paylaşmasından bile daha kötü olabilir

    • Zaten parmak izini kimlik doğrulama için kullanacak birine pek benzemiyor
  • Yüksek çözünürlüklü fotoğraflarda parmak izi görülmesi insanı biraz irkiltiyor

  • Yapım günlüğü inanılmaz derecede ayrıntılı ama ses demosu fazla kısa
    Temelde yalnızca kare dalga çıkarıyor gibi görünüyor; bu yüzden gerçek sentez, modülasyon ya da filtreleme olmadan buna sentezleyici demek zor
    Buna “USB-MIDI eklenmiş bir tebrik kartı ses çipi” demek daha doğru olur; karmaşıklığı düşük olduğu için PSG olarak sınıflandırmak bile zor olabilir

    • Tek osilatörlü bir sentezleyici hâlâ bir sentezleyicidir
      Sadece kare dalga da yok ve sesi başlatıp durdurma seçenekleri olduğu için bir envelope da var sayılır
      Neredeyse işe yaramayacak kadar temel ama[1] muhtemelen amaç da buydu
      [1]: Benzer özelliklere sahip Stylophone adlı bir cihaz Space Oddity'de de kullanılmıştı. Ayrıntılar: https://en.m.wikipedia.org/wiki/Stylophone
  • Komik ama aslında bunun bir sentezleyici olmadığını düşünüyorum. Kare dalga çalmaktan başka bir şey yapabiliyor mu ki?

    • Yine de farklı uzunluklarda gayet iyi kare dalga benzeri dalga şekilleri sentezliyor. Bence bu kadarı yeterli
  • “Sadece belli bir yönde çalışan bir tane var ve bu, USB-C'nin aslında amaçladığının tam tersi olduğu için aşırı sinir bozucu”
    Nokia 2780 Flip'te USB-C şarj portu var ama kutuda Micro-USB yazmasına rağmen yalnızca tek yönde çalışıyor

  • Çift taraflı reflow sırasında böyle bir SMT konnektörü yerinde tutmak için kırmızı ısıyla sertleşen chip glue tavsiye ederim

  • Gerçekten çok güzel bir demo ve bana güçlü biçimde 8 bit mikro bilgisayar döneminin seslerini hatırlatıyor