3 पॉइंट द्वारा GN⁺ 2023-12-17 | 1 टिप्पणियां | WhatsApp पर शेयर करें
  • यह CH32V003-आधारित USB-C MIDI synth प्रोजेक्ट है, जिसमें लगभग 12mm के बोर्ड में सब कुछ फिट किया गया है; यह “smallest and worst” MIDI synthesizer series का नया प्रयोग है
  • हार्डवेयर USB के बिना 48MHz CH32V003 पर CNLohr का rv003usb software USB stack चलाकर इसे USB-MIDI device की तरह काम कराया गया
  • वर्टिकल-माउंट USB-C connector, QFN MCU, SC-70 regulator, 0603 passive components, और piezo buzzer को buzzer के ही व्यास के भीतर समेटना सबसे बड़ी चुनौती थी
  • 2-layer 6/6mil board, दोनों तरफ़ component mounting, panel jig, piezo pin interference, और USB-C fanout जैसी mechanical·PCB constraints को कई बार design iterate करके हल किया गया
  • तैयार device USB-C hub और फ़ोन पर चला, लेकिन laptop में direct connect करने पर enumerate नहीं हुआ; इसलिए USB-C wiring या pull resistor values की पुष्टि अभी बाकी है

CH32V003 से बना USB-MIDI खिलौना synth

  • यह प्रोजेक्ट “सबसे छोटा और सबसे खराब” MIDI synthesizer series का नया काम है, और flash synth को इस सूची से बाहर रखा गया है
  • इस्तेमाल किया गया microcontroller CH32V003 है
    • 32-bit RISC-V microcontroller
    • बहुत सस्ता component
    • हार्डवेयर USB नहीं है, लेकिन processor 48MHz पर चलता है
  • शुरुआत में लक्ष्य अपना bit-banged USB library लिखकर सीखना और काम निकालना दोनों था, लेकिन CNLohr पहले ही rv003usb बना चुके थे
  • उस समय USB-MIDI demo पूरा नहीं हुआ था, इसलिए test device के लिए पहले एक development board solder करके तैयार किया गया

शुरुआती USB-MIDI प्रयोग

  • पहला board TSOP20 breakout और Micro-USB breakout को जोड़कर बनाया गया था, साथ में regulator, capacitor और resistor जोड़े गए थे
  • programming header 2-pin का था, लेकिन USB लगे होने पर GND जोड़े बिना भी सिर्फ़ D1 pin से programming की जा सकती थी
  • button input के ज़रिए USB-MIDI device को notes बजाने के लिए सेट किया गया
  • जब MIDI data chip तक पहुँचता है, तो piezo buzzer square wave आउटपुट करता है
    • इसके लिए chip का एक hardware timer इस्तेमाल होता है
    • volume बढ़ाने के लिए output को differential mode में चलाया गया
  • USB MIDI message 4-byte का होता है और low-speed USB endpoint 8 byte तक संभाल सकता है, इसलिए आम तौर पर हर packet में 2 MIDI messages भेजे जा सकते हैं
    • इस simple demo में हर message के बाद अगले USB interrupt तक block किया जाता है
  • host-side MIDI loopback का उपयोग करके इसे “वाकई बेहद खराब खिलौना keyboard” की तरह चलाया गया

CH32V003 के लिए USB development board

  • मौजूदा CH32V003 development boards में USB pins जुड़े नहीं दिखे, शायद इसलिए कि इसमें hardware USB नहीं है; बार-बार wiring से बचने के लिए एक छोटा USB development board नया डिजाइन किया गया
  • board की विशेषताएँ:
    • सभी ज़रूरी pins breakout किए गए हैं
    • सभी pins को दोनों sides पर label किया गया है
    • 1.5K resistor को D5 या VDD से solder किया जा सकता है
    • USB software reconnect की ज़रूरत नहीं होती, और अगर D5 को किसी और काम में लेना हो तो VDD side से जोड़ा जा सकता है
    • नीचे की तरफ़ USB data lines को ज़रूरत पड़ने पर काटकर series resistor जोड़ा जा सकता है
  • ऊपर दाईं तरफ़ के 3 pins 3V3, GND और D1 हैं, जिन्हें programming header के रूप में उपयोग किया गया
    • USB हटाकर programming करनी हो तो तीनों pins जोड़े जा सकते हैं
    • सिर्फ़ D1 और GND जोड़े जा सकते हैं, या अगर USB उसी machine में लगा हो तो केवल D1 भी काफ़ी है
  • edge pins का pitch 0.1 inch है, और पूरे board का आकार 15.2mm × 20.3mm है
  • KiCad design files GitHub और git.mitxela.com पर उपलब्ध हैं

USB-C version तक छोटा करने की प्रक्रिया

  • CH32V003 सस्ता है और इसके लिए support components भी कम चाहिए, इसलिए इससे पुराने USB ATtiny project को दोबारा बनाने का विचार आया
  • stylocard को direct-read तरीके से बेहतर बनाने के लिए कम से कम 22 GPIO चाहिए, लेकिन एक CH32V003 में keyboard reading और USB दोनों साथ संभालने के लिए pins कम पड़ते हैं
    • दो सस्ते CH32V003 इस्तेमाल करना भी संभव माना गया
    • एक आधा keyboard पढ़े और दूसरा बाकी keyboard तथा USB संभाले
  • अगला विचार पुराने smallest USB MIDI synth को USB-C युग के हिसाब से फिर से बनाना था
  • electrical रूप से USB-C में बदलना बस कुछ resistors और सही connector जोड़ने जैसा है, लेकिन USB-C plug के अंदर electronics फिट करना आसान नहीं है
  • अंत में dock बनाने के लिए इस्तेमाल होने वाला vertical-mount USB-C connector चुना गया
    • component number USB4151 है
    • ऐसे मिलते-जुलते parts कई suppliers के पास हैं

USB-C connector और 2-layer board routing

  • USB-C connector का fanout कठिन है, मानो इसे high-density board और microvia के हिसाब से डिजाइन किया गया हो
  • चुने गए connector footprint से ही standard 6/6mil process की technical limits लगभग पार हो जाती हैं, यानी traces जोड़ने से पहले ही काफ़ी पाबंदियाँ हैं
  • plastic studs के लिए plated holes के पास non-plated through holes चाहिए होते हैं
    • इस toy project में ज़्यादा tolerance cost दिए बिना DRC violations को नज़रअंदाज़ किया गया
    • अगर manufacture न हो पाता तो plastic studs को चाकू से काटने की योजना थी
  • लक्ष्य USB-C plug के नीचे जाने वाले board को जितना हो सके उतना छोटा बनाना था, ताकि वह एक सामान्य piezo buzzer के व्यास के भीतर समा जाए
    • buzzer pin pitch 7.62mm यानी 0.3 inch है
    • बाहरी व्यास 13.8mm है
    • potting compound के धँसे हुए हिस्से में फिट करने के लिए अधिकतम व्यास लगभग 12mm होना चाहिए
  • piezo pins किसी भी दिशा में USB support pins से टकरा रहे थे, इसलिए footprints के बीच ज़्यादा spacing रखनी पड़ी
    • कई design iterations के बाद piezo pin spacing को 8mm तक घटाया गया
    • ज़रूरत पड़ने पर pins को थोड़ा बाहर मोड़ा या घिसा जा सकता है
  • USB 3 pins को जोड़ा नहीं गया
    • चार SuperSpeed pairs और दो SBU pins का उपयोग नहीं किया गया
    • CC1 और CC2 जोड़ना ज़रूरी है, इसलिए कुल 14 pins जोड़ने पड़े
  • plated holes के आसपास copper ring को minimum रखकर सभी ज़रूरी tracks किसी तरह निकाले गए
  • shield pins आपस में जुड़े हुए थे, इसलिए board पर GND को पूरा route न करने का workaround संभव था, लेकिन अंततः GND भी route किया गया
  • नीचे की तरफ़ QFN part को center से हटाकर traces के लिए पर्याप्त जगह बनाई गई
    • unused GPIO अगर GND या किसी दूसरे signal से जुड़े हों तो भी समस्या नहीं थी, इसलिए GND को chip के बीच से निकाला जा सका
  • regulator के लिए SC-70 package चुना गया
    • इससे भी छोटा regulator संभव था, लेकिन जगह सबसे बड़ी समस्या नहीं थी
    • आसपास के resistors और capacitors 0603 size के रखे गए
  • सामने की तरफ़ power, GND और D1(SWIO) programming के लिए 3 test pads रखे गए
    • असली programming में USB-C को extension cable से जोड़कर केवल D1 pad पर wire छुआना काफ़ी था

panel को assembly jig की तरह इस्तेमाल करना

  • बहुत छोटे boards को solder paste stencil करते समय पकड़ना मुश्किल होता है, इसलिए एक custom panel डिजाइन किया गया
  • इस board पर दोनों sides में components हैं, इसलिए एक तरफ़ solder करने के बाद दूसरी तरफ़ stencil करना खास तौर पर मुश्किल था
  • panel में design की दो copies रखी गईं, और दूसरी को उल्टा रखा गया ताकि पूरी assembly symmetrical रहे
    • इससे एक side stencil करके board पलटकर दूसरी side भी stencil की जा सकती है
  • panel frame को USB-C plug पकड़ने वाले jig की तरह भी इस्तेमाल किया गया
    • बीच का oval hole USB-C plug को कसकर पकड़ने के लिए बनाया गया
    • FR4 reflow oven झेल सकता है, इसलिए support material के रूप में उपयुक्त है
  • KiCad 3D viewer गलती रोकने में मददगार रहा
    • footprint solder mask छूट जाना या गलत layer output जैसी गलतियों के खिलाफ़ यह अतिरिक्त सुरक्षा की तरह काम करता है
    • piezo pins और footprint के mismatch interference को भी 3D render में तुरंत देखा जा सकता है

assembly और soldering

  • बहुत छोटे boards के मामले में manufacturers कभी-कभी low-tolerance और tiny-size conditions पर भी कीमत को subsidize कर देते हैं
  • यह project नाममात्र के तौर पर USB 3.2 Gen 2 connector को 2-layer 6/6mil tolerance board पर रखता था, फिर भी manufacturer ने footprint पर आपत्ति नहीं की और production बिना दिक्कत के हो गया
  • सही assembly order यह था कि पहले छोटे parts solder किए जाएँ और USB connector सबसे अंत में लगाया जाए
    • USB connector through-hole mount है, इसलिए अगर उसे पहले लगा दिया जाए तो दूसरी side पर stencil नहीं हो सकती
  • USB connector में vacuum nozzle से उठाने के लिए plastic cap शामिल है
  • शुरुआत में कई boards को reflow करने का विचार था, लेकिन वे इतने छोटे निकले कि अंत में सबको hot air gun से solder किया गया
    • नीचे की तरफ़ पहले से solder किए गए parts होने पर भी surface tension उन्हें जगह पर पकड़े रख सकती है
    • ज़रूरत पड़े तो अलग melting point वाली दो solder alloys भी इस्तेमाल की जा सकती हैं
  • soldering के बाद board को panel से सावधानी से अलग किया गया और खुरदुरे किनारों को थोड़ा घिसा गया
  • assembly के बाद पता चला कि capacitor सबसे ऊँचा single component है; चाहें तो इससे छोटा capacitor लिया जा सकता था, लेकिन तब तक देर हो चुकी थी
  • उम्मीद के मुताबिक piezo buzzer pins काफ़ी tight थे, लेकिन board को समतल बिठाने लायक अंदर दबाकर pins काटे गए और सावधानी से solder किया गया
  • अतिरिक्त मंगाए गए piezo buzzers का design पुराने stock से बहुत हल्का अलग निकला

hub पर काम करता है, लेकिन laptop में direct connect विफल

  • vertical-mount USB-C connector मूल रूप से phone या tablet dock के अंदर जाने के लिए बना है, इसलिए इसकी लंबाई ऐसी है कि यह molded plastic case के बाहर निकलता है
  • circuit और connector के निचले हिस्से को ढकने वाला छोटा 3D-printed cover भी सोचा गया, लेकिन उसका रूप अच्छा नहीं लगता
  • USB-C extension cable specification के अनुसार allowed नहीं है, फिर भी उसे power देने और SWIO pin को probe करके programming के लिए उपयोग किया गया
  • चारों synths में DAW में अलग पहचान के लिए अलग-अलग device names flash किए गए
    • इस्तेमाल किया गया DAW Wine पर चलने वाला 1998 का Cakewalk था
  • testing के लिए अलग से 4-port USB-C hub खरीदा गया
    • सिर्फ़ चार USB-C ports देने वाला hub ढूँढना मुश्किल था
    • ज़्यादातर hubs USB-C को USB-A, HDMI, SD card जैसे दूसरे connectors में बदलते हैं
  • तैयार device USB-C hub और phone से जोड़ने पर काम करता है
  • laptop में सीधे जोड़ने पर यह enumerate नहीं होता
    • specification के बाहर वाले USB-C extension cable के सिरे पर यह enumerate हो जाता है
    • संभव है USB-C port wiring में थोड़ी गलती हो, या USB connection type तय करने वाले pull resistor की value बिल्कुल सही न हो
  • project source code GitHub और git.mitxela.com पर उपलब्ध है

1 टिप्पणियां

 
GN⁺ 2023-12-17
Hacker News की राय
  • क्या यह व्यक्ति ऐसे काम से अपनी आजीविका चलाता है? नतीजे हमेशा इतने हाई-लेवल और अनोखे होते हैं
    इससे लगता है जैसे कोई कंपनी गला दबोचे बैठी हो और यह चिंता करवाए कि क्या Jira में पर्याप्त काम दर्ज किया, और क्या हर हफ्ते पर्याप्त sprint points के बराबर नतीजे दिखा रहे हो
    बस आज़ादी से जो मन हो, जब मन हो, अपनी रफ्तार से करते हुए इस स्तर का समय, मेहनत और संसाधन किसी hobby project में लगाना—ऐसी ज़िंदगी की कल्पना करना मुश्किल है
    पैसों के हिसाब से यह बहुत बड़ा निवेश न भी हो सकता है। prototype materials शायद 100~200 डॉलर के होंगे, लेकिन समय कितना लगा होगा? नौकरी के बाद हर दिन या रात में कुछ-कुछ घंटे, कई सालों तक?

    • मैंने दशकों तक काम किया है, लेकिन कभी ऐसी नौकरी नहीं की जहाँ नियमित रूप से सप्ताह में 40 घंटे से ज़्यादा देना पड़ता हो
      ज़्यादा से ज़्यादा साल में कुछ बार किसी दुर्लभ स्थिति में कुछ घंटे अतिरिक्त काम किया, और इससे बेहतर employer भी निश्चित ही हैं
    • लेखक ने 2018 में इस विषय पर खुद “rant” नाम से एक लेख लिखा था
      https://mitxela.com/rants में Spare Time and Hard Work शीर्षक तक नीचे जाएँ
    • https://mitxela.com/support
      Patreon के शुरुआती दौर में मैं एक digital artist को जानता था जो support लेता था, और उससे पहले वह Twitch पर stream करता था और अपनी profile में PayPal donation button लगा रखता था
      वह हर बार देखने पर काफ़ी शानदार artist था, लेकिन यह देखकर हैरानी हुई कि जैसे ही कुछ लोगों ने subscribe करना शुरू किया, bills कितनी जल्दी संभलने लगे
      एकमुश्त बड़ी रकम के नज़रिये से देखें तो सिर्फ savings पर जीना मुश्किल लगता है, लेकिन अगर हर महीने आने वाली रकम से जीवन चल सकता हो, तो हिसाब कहीं ज़्यादा वास्तविक लगने लगता है। बस audience को बनाए रखना पड़ता है
    • मैं hardware वाला व्यक्ति नहीं हूँ, लेकिन वह सपनों जैसी ज़िंदगी जीता हुआ लगता है
      वह मज़े के लिए उन चीज़ों को hack कर रहा है जो उसे दिलचस्प लगती हैं। बहुत से लोगों के लिए समय निकालना, योजना बनाना और उसे अमल में लाना मुश्किल होता है
      तंज भरी टिप्पणियाँ भी अच्छी लगती हैं, और यह बात भी कि वह शायद 1998 के software tools को Linux के Wine में चला रहा है
    • किसी अनुभवी engineer के लिए यह project नौकरी के बाद रोज़ कुछ घंटे देकर 3~5 दिन में हो जाना चाहिए
      इसमें video editing, shipping time, और फुर्सत के पलों में मोबाइल पर की गई तरह-तरह की research भी शामिल है
      इससे भी तेज़ किया जा सकता है, लेकिन तब यह काम जैसा महसूस होने लगेगा
      जिनके पास tools पहले से हैं, उनके लिए लागत 50 डॉलर के क़रीब भी हो सकती है
      अगर leaded solder paste इस्तेमाल करने में आपत्ति न हो तो यह और सस्ता व आसान हो सकता है, लेकिन मैं ऐसा बिल्कुल नहीं करना चाहूँगा
  • उसकी volumetric candle सचमुच कमाल की है https://mitxela.com/projects/candle

  • जिस hub के हर port पर 10 Gig लिखा है, उसमें ये चीज़ें लगी हुई दिखना काफ़ी मज़ेदार है

  • उंगलियों के पोर के pad का macro close-up इतना साफ़ है कि शायद इस वीडियो को fingerprint security leak मानना चाहिए
    यह शायद उससे भी बुरा हो सकता है जब लोग गलती से ऐसी तस्वीरें साझा कर देते हैं जिनमें घर की चाबी दिख रही हो

    • वह अपने fingerprints को authentication के लिए इस्तेमाल करने वाले इंसान जैसा तो नहीं लगता
  • high-resolution photo में fingerprints साफ़ दिखने वाला दृश्य थोड़ा चौंका देता है

  • build log बेहद विस्तार से है, लेकिन sound demo बहुत छोटा है
    यह मूल रूप से सिर्फ square wave निकालता हुआ लगता है, इसलिए असली synthesis, modulation, या filter के बिना इसे synthesizer मानना मुश्किल है
    इसे “USB-MIDI वाला greeting-card sound chip” कहना ज़्यादा सही होगा, और complexity कम होने के बावजूद इसे PSG कहना भी शायद मुश्किल है

    • single-oscillator synthesizer भी synthesizer ही होता है
      इसमें सिर्फ square wave ही नहीं है, आवाज़ शुरू और बंद करने का विकल्प भी है, तो एक तरह से envelope भी है
      यह लगभग बेकार लगने जितना बुनियादी है[1], लेकिन शायद यही इसका मकसद था
      [1]: Stylophone नाम की मिलती-जुलती क्षमताओं वाली डिवाइस Space Oddity में भी इस्तेमाल हुई थी। विवरण: https://en.m.wikipedia.org/wiki/Stylophone
  • मज़ेदार तो है, लेकिन असल में यह synthesizer नहीं लगता। क्या यह square wave चलाने के अलावा कुछ और भी कर सकता है?

    • फिर भी यह अलग-अलग लंबाई वाली काफ़ी अच्छी square-wave जैसी waveform synthesize करता है। मेरे हिसाब से इतना काफ़ी है
  • “एक चीज़ है जो सिर्फ एक खास दिशा में काम करती है, और यह USB-C के मूल उद्देश्य के बिल्कुल उलट है, इसलिए बहुत परेशान करती है”
    Nokia 2780 Flip में USB-C charging port है, लेकिन डिब्बे पर Micro-USB लिखा है, और फिर भी यह सिर्फ एक दिशा में काम करता है

  • दो-तरफ़ा reflow के दौरान ऐसे SMT connector को अपनी जगह पर टिकाए रखने के लिए मैं लाल thermosetting chip glue की सलाह दूँगा

  • यह सचमुच सुंदर demo है, और 8-bit microcomputer युग की आवाज़ की बहुत तीखी याद दिलाता है