USB-C MIDI ซินธ์ที่เล็กที่สุด
(mitxela.com)- โปรเจ็กต์ที่ยัด USB-C MIDI synth บนพื้นฐาน CH32V003 ลงในบอร์ดขนาดราว 12 มม. เป็นการทดลองใหม่ในซีรีส์ซินธิไซเซอร์ MIDI แบบ “smallest and worst”
- ทำให้ CH32V003 48MHz ที่ไม่มีฮาร์ดแวร์ USB ทำงานเป็นอุปกรณ์ USB-MIDI โดยใช้ซอฟต์แวร์ USB stack rv003usb ของ CNLohr
- ความท้าทายหลักคือการอัดคอนเน็กเตอร์ USB-C แบบติดตั้งแนวตั้ง, QFN MCU, เรกูเลเตอร์ SC-70, อุปกรณ์พาสซีฟ 0603 และ piezo buzzer ให้พอดีภายในเส้นผ่านศูนย์กลางของ piezo buzzer
- แก้ข้อจำกัดด้าน กลไกและ PCB เช่น บอร์ด 2 ชั้น 6/6mil, การวางชิ้นส่วนสองด้าน, จิ๊กแบบพาเนล, การชนกันของขา piezo และการ fan-out ของ USB-C ด้วยการวนออกแบบซ้ำหลายรอบ
- ตัวที่ประกอบเสร็จแล้วทำงานได้กับ USB-C hub และโทรศัพท์ แต่เมื่อเสียบตรงกับโน้ตบุ๊กกลับไม่ enumerate จึงยังต้องตรวจสอบการเดินสาย USB-C หรือค่าตัวต้านทาน pull-up
ซินธ์ของเล่น USB-MIDI ที่สร้างด้วย CH32V003
- โปรเจ็กต์นี้เป็นงานชิ้นใหม่ในซีรีส์ MIDI synthesizer แบบ “เล็กที่สุดและแย่ที่สุด” โดย flash synth ไม่ได้นับรวมอยู่ในลิสต์นี้
- ไมโครคอนโทรลเลอร์ที่ใช้คือ CH32V003
- ไมโครคอนโทรลเลอร์ 32-bit RISC-V
- ชิ้นส่วนราคาถูกมาก
- ไม่มีฮาร์ดแวร์ USB แต่ตัวประมวลผลทำงานที่ 48MHz
- เดิมทีตั้งใจจะเขียนไลบรารี bit-bang USB เองเพื่อให้ได้ทั้งการเรียนรู้และการใช้งานจริงพร้อมกัน แต่ CNLohr ได้ทำ rv003usb ไว้แล้ว
- ตอนนั้นเดโม USB-MIDI ยังไม่เสร็จ จึงประกอบอุปกรณ์ทดสอบขึ้นมาก่อนโดยบัดกรี dev board เข้าด้วยกัน
การทดลอง USB-MIDI ระยะแรก
- บอร์ดแรกเป็นการนำ breakout TSOP20 กับ breakout Micro-USB มาต่อเข้าด้วยกัน แล้วเพิ่มเรกูเลเตอร์ คาปาซิเตอร์ และตัวต้านทาน
- เฮดเดอร์สำหรับโปรแกรมมี 2 พิน แต่เมื่อเสียบ USB อยู่ ไม่จำเป็นต้องต่อ GND จึงสามารถโปรแกรมได้ด้วย พิน D1 เพียงพินเดียว
- ตั้งค่าให้อุปกรณ์ USB-MIDI เล่นโน้ตจากอินพุตปุ่มกด
- เมื่อข้อมูล MIDI มาถึงชิป piezo buzzer จะส่งออก คลื่นสี่เหลี่ยม
- ใช้ฮาร์ดแวร์ไทเมอร์ของชิป 1 ตัว
- ส่งออกแบบ differential mode เพื่อเพิ่มความดัง
- ข้อความ USB MIDI มีขนาด 4 ไบต์ และ endpoint ของ low-speed USB รองรับได้ถึง 8 ไบต์ จึงมักส่ง MIDI ได้ 2 ข้อความต่อแพ็กเก็ต
- เดโมแบบง่ายนี้จะบล็อกหลังแต่ละข้อความจนกว่าจะถึง USB interrupt ถัดไป
- ใช้ MIDI loopback ฝั่งโฮสต์ให้มันทำงานเหมือน “คีย์บอร์ดของเล่นที่ห่วยมากจริง ๆ”
USB dev board สำหรับ CH32V003
- ดูเหมือนว่า dev board CH32V003 ที่มีอยู่เดิมจะไม่ได้ต่อพิน USB เอาไว้ อาจเพราะไม่มีฮาร์ดแวร์ USB จึงออกแบบ USB dev board ขนาดเล็กขึ้นใหม่เพื่อหลีกเลี่ยงการเดินสายซ้ำไปมา
- คุณสมบัติของบอร์ด:
- breakout พินที่จำเป็นทั้งหมด
- ติดฉลากทุกพินทั้งสองด้าน
- ตัวต้านทาน 1.5K สามารถบัดกรีไปที่ D5 หรือ VDD ได้
- ไม่ต้องใช้การ reconnect USB ทางซอฟต์แวร์ และถ้าต้องการใช้ D5 ทำอย่างอื่นก็สามารถต่อไปทาง VDD ได้
- ลายสัญญาณ USB data ด้านล่างสามารถตัดและเพิ่มตัวต้านทานอนุกรมได้เมื่อจำเป็น
- พิน 3 ตัวด้านขวาบนคือ 3V3, GND และ D1 ซึ่งใช้เป็นเฮดเดอร์สำหรับโปรแกรม
- หากต้องการถอด USB แล้วค่อยโปรแกรม ก็สามารถต่อครบทั้ง 3 พินได้
- จะต่อแค่ D1 กับ GND หรือถ้า USB เสียบอยู่กับเครื่องเดียวกันอยู่แล้ว ก็ต่อแค่ D1 อย่างเดียวก็ได้
- พินขอบบอร์ดมีระยะ 0.1 นิ้ว และขนาดรวมของบอร์ดคือ 15.2mm × 20.3mm
- ไฟล์ออกแบบ KiCad เผยแพร่ไว้ที่ GitHub และ git.mitxela.com
ขั้นตอนการย่อให้เป็นเวอร์ชัน USB-C
- CH32V003 มีราคาถูกและต้องใช้อุปกรณ์ประกอบไม่มาก จึงนำไปสู่แนวคิดในการทำซ้ำโปรเจ็กต์ USB ATtiny เดิม
- stylocard ต้องการ GPIO อย่างน้อย 22 ขา หากจะปรับปรุงให้เป็นแบบอ่านตรง แต่ CH32V003 ตัวเดียวมีพินไม่พอสำหรับอ่านคีย์บอร์ดและจัดการ USB พร้อมกัน
- จึงมองว่าการใช้ CH32V003 ราคาถูก 2 ตัวก็เป็นไปได้
- ตัวหนึ่งอ่านคีย์บอร์ดครึ่งหนึ่ง อีกตัวจัดการคีย์บอร์ดที่เหลือและ USB
- ไอเดียถัดมาคือทำ smallest USB MIDI synth เดิมขึ้นใหม่ให้เข้ากับ ยุค USB-C
- ในทางไฟฟ้า การเปลี่ยนไปใช้ USB-C แค่เพิ่มตัวต้านทานไม่กี่ตัวกับคอนเน็กเตอร์ที่เหมาะสม แต่การยัดวงจรอิเล็กทรอนิกส์ไว้ในปลั๊ก USB-C โดยตรงนั้นทำได้ยาก
- สุดท้ายจึงเลือกคอนเน็กเตอร์ USB-C แบบติดตั้งแนวตั้งสำหรับงานทำด็อก
- หมายเลขชิ้นส่วนคือ USB4151
- มีชิ้นส่วนคล้ายกันจากหลายซัพพลายเออร์
คอนเน็กเตอร์ USB-C และการลากลายบนบอร์ด 2 ชั้น
- คอนเน็กเตอร์ USB-C fan-out ได้ยาก และดูเหมือนผู้ออกแบบจะตั้งสมมติฐานว่าเป็นบอร์ดความหนาแน่นสูงพร้อม microvia
- แค่ footprint ของคอนเน็กเตอร์ที่เลือกก็เกินสเปกกระบวนการมาตรฐาน 6/6mil ในทางเทคนิคอยู่แล้ว ทำให้มีข้อจำกัดตั้งแต่ก่อนจะเพิ่มลายวงจร
- เดือยพลาสติกต้องใช้รูทะลุไม่ชุบใกล้กับรูชุบโลหะ
- ในโปรเจ็กต์ของเล่นนี้จึงเลือกเพิกเฉยต่อ DRC violation แทนที่จะจ่ายค่าความคลาดเคลื่อนที่สูงขึ้น
- ถ้าผลิตไม่ได้ก็วางแผนจะตัดเดือยพลาสติกทิ้งด้วยมีด
- เป้าหมายคือทำบอร์ดที่อยู่ใต้ปลั๊ก USB-C ให้เล็กที่สุด และให้ใส่เข้าไปในเส้นผ่านศูนย์กลางของ piezo buzzer ทั่วไปได้
- ระยะห่างขา buzzer คือ 7.62 มม. หรือ 0.3 นิ้ว
- เส้นผ่านศูนย์กลางภายนอกคือ 13.8 มม.
- หากจะให้เข้าไปอยู่ในส่วนเว้าของ potting compound ได้ เส้นผ่านศูนย์กลางสูงสุดต้องประมาณ 12 มม.
- ไม่มีทิศทางใดที่ขา piezo จะไม่ชนกับขารับแรงของ USB จึงต้องเพิ่มระยะห่างของ footprint
- หลังวนออกแบบหลายรอบ ลดระยะห่างขา piezo ลงมาเหลือ 8 มม. ได้
- หากจำเป็นสามารถดัดขาออกด้านนอกเล็กน้อยหรือเจียรแต่งได้
- ไม่ได้ต่อขา USB 3
- ไม่ใช้ SuperSpeed pair ทั้ง 4 คู่และขา SBU 2 ขา
- แต่ต้องต่อ CC1 และ CC2 จึงรวมแล้วต้องต่อ 14 พิน
- ลดขนาดวงแหวนทองแดงรอบรูชุบให้น้อยที่สุดเพื่อดึงลายสัญญาณที่จำเป็นทั้งหมดออกมาได้แบบเฉียดฉิว
- ขาชิลด์ทุกขาถูกเชื่อมถึงกันอยู่แล้ว จึงมีทางอ้อมที่จะไม่ต้องต่อ GND ทั้งหมดบนบอร์ด แต่สุดท้ายก็ยังลาก GND ไปด้วย
- ด้านล่างย้ายชิ้นส่วน QFN ออกจากจุดกึ่งกลางเพื่อให้มีพื้นที่ลายวงจรเพียงพอ
- GPIO ที่ไม่ได้ใช้จะต่อกับ GND หรือสัญญาณอื่นก็ไม่เป็นปัญหา จึงสามารถลาก GND ผ่านกลางชิปได้
- เรกูเลเตอร์ใช้ แพ็กเกจ SC-70
- จะใช้เรกูเลเตอร์ที่เล็กกว่านี้ก็ได้ แต่พื้นที่ไม่ได้เป็นปัญหาใหญ่
- ตัวต้านทานและคาปาซิเตอร์รอบ ๆ ใช้ขนาด 0603
- ด้านหน้ามี test pad 3 จุดสำหรับไฟเลี้ยง, GND และ D1 (SWIO) เพื่อการโปรแกรม
- ในการโปรแกรมจริง แค่เสียบ USB-C ผ่านสายต่อและแตะลวดเข้ากับ pad D1 เพียงจุดเดียวก็พอ
ใช้พาเนลเป็นจิ๊กสำหรับประกอบ
- บอร์ดที่เล็กมากจับยึดยากเวลาปาด solder paste ด้วยสเตนซิล จึงออกแบบพาเนลขึ้นมาเอง
- บอร์ดนี้มีชิ้นส่วนทั้งสองด้าน จึงยิ่งยากเป็นพิเศษที่จะบัดกรีด้านหนึ่งแล้วนำอีกด้านไปปาดสเตนซิลต่อ
- ในพาเนลวางดีไซน์ไว้ 2 ชิ้น โดยชิ้นที่สองกลับด้านเพื่อให้ทั้งชุด สมมาตร
- ทำให้สามารถปาดสเตนซิลด้านหนึ่ง แล้วพลิกบอร์ดไปปาดอีกด้านได้
- กรอบพาเนลยังใช้เป็น จิ๊ก สำหรับจับปลั๊ก USB-C ด้วย
- รูวงรีตรงกลางถูกออกแบบให้พอดีกับปลั๊ก USB-C อย่างแน่นหนา
- FR4 ทนเตารีโฟลว์ได้ จึงเหมาะจะใช้เป็นวัสดุรองรับ
- ตัวดู 3D ของ KiCad ช่วยป้องกันความผิดพลาดได้ดี
- เป็นแนวป้องกันเสริมเพื่อลดความผิดพลาดอย่างการลืม solder mask ใน footprint หรือส่งออกเลเยอร์ผิด
- ยังมองเห็นการชนกันระหว่างขา piezo กับ footprint ได้ทันทีในภาพเรนเดอร์ 3D
การประกอบและบัดกรี
- บอร์ดที่เล็กมากบางครั้งผู้ผลิตจะอุดหนุนราคาให้เมื่อเป็นงานความคลาดเคลื่อนต่ำและขนาดเล็ก
- โปรเจ็กต์นี้ในทางชื่อคือการวางคอนเน็กเตอร์ USB 3.2 Gen 2 ลงบนบอร์ด 2 ชั้นที่มีค่าความคลาดเคลื่อน 6/6mil แต่ผู้ผลิตไม่ได้ติดปัญหากับ footprint และผลิตออกมาได้โดยไม่มีปัญหา
- ลำดับการประกอบที่ถูกต้องคือต้องบัดกรีชิ้นส่วนเล็กก่อน แล้วค่อยติดคอนเน็กเตอร์ USB เป็นลำดับสุดท้าย
- คอนเน็กเตอร์ USB เป็นแบบ through-hole mount ถ้าติดก่อนจะไม่สามารถปาดสเตนซิลอีกด้านได้
- คอนเน็กเตอร์ USB มีฝาพลาสติกที่หัวดูดสูญญากาศสามารถคีบจับได้
- ตอนแรกตั้งใจจะรีโฟลว์หลายชิ้นพร้อมกัน แต่เพราะมันเล็กเกินไป สุดท้ายจึงบัดกรีทั้งหมดด้วยปืนลมร้อน
- แม้ด้านล่างจะมีชิ้นส่วนบัดกรีอยู่แล้ว แรงตึงผิวก็ยังช่วยยึดชิ้นส่วนไว้ได้
- หากจำเป็นก็สามารถใช้โลหะบัดกรี 2 ชนิดที่มีจุดหลอมเหลวต่างกันได้
- หลังบัดกรีแล้วจึงค่อยแกะออกจากพาเนลอย่างระมัดระวัง และขัดขอบหยาบออกเล็กน้อย
- หลังประกอบพบว่าคาปาซิเตอร์เป็นชิ้นส่วนเดี่ยวที่สูงที่สุด และแม้จะใช้ตัวที่เล็กกว่านี้ได้ แต่ก็สายเกินไปแล้ว
- ตามคาด ขา piezo buzzer ค่อนข้างแน่น แต่ก็ยังยัดเข้าไปได้มากพอให้บอร์ดนั่งราบ จากนั้นจึงตัดขาและบัดกรีอย่างระมัดระวัง
- piezo buzzer ที่สั่งเพิ่มมามีดีไซน์ต่างจากของในสต็อกเดิมเล็กน้อยมาก
ใช้งานได้กับฮับ แต่ล้มเหลวเมื่อเสียบตรงกับโน้ตบุ๊ก
- คอนเน็กเตอร์ USB-C แบบติดตั้งแนวตั้งถูกออกแบบมาให้ติดตั้งภายในด็อกของโทรศัพท์หรือแท็บเล็ต จึงมีความยาวที่ยื่นออกมานอกเคสพลาสติกขึ้นรูป
- มีการคิดจะทำฝาครอบพิมพ์ 3D ขนาดเล็กเพื่อปิดวงจรและด้านล่างของคอนเน็กเตอร์ แต่คาดว่าหน้าตาคงไม่สวยนัก
- สายต่อ USB-C แม้จะไม่เป็นไปตามสเปก แต่ก็ถูกใช้เพื่อจ่ายไฟและใช้โพรบแตะพิน SWIO สำหรับโปรแกรม
- ซินธ์ทั้งสี่ตัวถูกแฟลชด้วยชื่ออุปกรณ์คนละชื่อ เพื่อให้ DAW แยกแยะได้
- DAW ที่ใช้คือ Cakewalk เวอร์ชันปี 1998 ที่รันบน Wine
- มีการซื้อ USB-C hub แบบ 4 พอร์ตแยกมาต่างหากเพื่อทดสอบ
- ฮับที่ให้เฉพาะ USB-C 4 ช่องหาได้ยาก
- ส่วนใหญ่มักเปลี่ยน USB-C ไปเป็นคอนเน็กเตอร์อื่น เช่น USB-A, HDMI, SD card
- ตัวที่ประกอบเสร็จแล้วใช้งานได้เมื่อเชื่อมต่อกับ USB-C hub และโทรศัพท์
- แต่เมื่อเชื่อมต่อกับโน้ตบุ๊กโดยตรงกลับไม่ enumerate
- กลับ enumerate ได้เมื่ออยู่ปลายสายต่อ USB-C ที่ผิดสเปก
- อาจเป็นไปได้ว่าเดินสายพอร์ต USB-C ผิดเล็กน้อย หรือค่าตัวต้านทาน pull-up ที่ใช้กำหนดประเภทการเชื่อมต่อ USB ไม่แม่นยำ
- ซอร์สโค้ดของโปรเจ็กต์เผยแพร่ไว้ที่ GitHub และ git.mitxela.com
1 ความคิดเห็น
ความคิดเห็นบน Hacker News
คนคนนี้หาเลี้ยงชีพด้วยงานแบบนี้หรือเปล่า? ผลงานออกมา ระดับสูงและมีเอกลักษณ์ อยู่เสมอ
มันทำให้รู้สึกเหมือนบริษัทกำลังกดคออยู่ จนต้องกังวลว่าได้บันทึกงานลง Jira มากพอไหม และแต่ละสัปดาห์ได้แสดงผลลัพธ์ครบตาม sprint points พอหรือเปล่า
นึกภาพชีวิตที่ได้ทำสิ่งที่อยากทำอย่างอิสระ เมื่อไรก็ได้ ตามจังหวะของตัวเอง แล้วทุ่มเวลา ความพยายาม และทรัพยากรขนาดนี้ให้กับ โปรเจกต์งานอดิเรก ได้ยากจริง ๆ
ในแง่เงินอาจไม่ใช่การลงทุนก้อนใหญ่ วัสดุทำต้นแบบน่าจะประมาณ 100–200 ดอลลาร์ แต่เวลาล่ะต้องใช้เท่าไร? หลังเลิกงาน วันละหรือคืนละไม่กี่ชั่วโมง เป็นเวลาหลายปี?
อย่างมากก็ทำเพิ่มอีกไม่กี่ชั่วโมงเพราะเหตุการณ์ที่เกิดขึ้นไม่กี่ครั้งต่อปี และนายจ้างที่ดีกว่านั้นมีอยู่แน่นอน
ไปที่ https://mitxela.com/rants แล้วเลื่อนลงไปถึงหัวข้อ Spare Time and Hard Work ได้เลย
ผมรู้จักคนคนหนึ่งที่ได้รับการสนับสนุนในฐานะศิลปินดิจิทัลตั้งแต่ช่วงแรก ๆ ของ Patreon ก่อนหน้านั้นเขาสตรีมผ่าน Twitch และใส่ปุ่มสนับสนุน PayPal ไว้ในโปรไฟล์
ไม่ว่าจะดูเมื่อไรก็เป็นศิลปินที่เก่งมาก แต่ผมแปลกใจที่เห็นว่าแค่มีคนเริ่มสมัครสมาชิกไม่กี่คน บิลต่าง ๆ ก็ถูกจัดการได้เร็วแค่ไหน
ถ้าคิดเป็นเงินก้อน การใช้ชีวิตจากเงินออมอย่างเดียวดูยาก แต่ถ้ามองเป็น เงินที่เข้ามาทุกเดือน จนเลี้ยงชีพได้ สมการจะเปลี่ยนเป็นเรื่องที่เป็นจริงได้มากขึ้นมาก เพียงแต่ต้องรักษาผู้ชมไว้ให้ได้ต่อเนื่อง
เขากำลังแฮ็กของที่ทำเพราะสนุก คนจำนวนมากยากที่จะหาเวลา วางแผน และลงมือทำจนสำเร็จ
ผมชอบคอมเมนต์เหน็บ ๆ ด้วย และก็ชอบตรงที่เหมือนกำลังรันเครื่องมือซอฟต์แวร์จากปี 1998 บน Wine ของ Linux
รวมถึงตัดต่อวิดีโอ เวลารอส่งของ และงานค้นคว้าจิปาถะที่ทำบนมือถือเป็นช่วง ๆ แล้ว
อาจทำให้เร็วกว่านี้ได้ แต่ถ้าอย่างนั้นมันจะเริ่มรู้สึกเหมือนงาน
สำหรับคนที่มีเครื่องมืออยู่แล้ว ค่าใช้จ่ายอาจใกล้ 50 ดอลลาร์ ก็ได้
ถ้ายอมใช้ solder paste ที่มีตะกั่ว อาจถูกและง่ายกว่านี้ด้วย แต่ผมไม่อยากทำแบบนั้นเด็ดขาด
เทียนแบบโวลูเมตริก ของเขานี่สุดยอดจริง ๆ https://mitxela.com/projects/candle
ภาพที่เจ้าพวกนี้เสียบอยู่กับฮับที่แต่ละพอร์ตติดป้ายว่า 10 Gig นี่ค่อนข้างตลกดี
ภาพมาโครขยายแผ่นปลายนิ้วคมชัดมากจนวิดีโอนี้อาจต้องถือว่าเป็น การรั่วไหลด้านความปลอดภัยของลายนิ้วมือ เลยก็ได้
อาจแย่กว่าการที่คนเผลอแชร์รูปที่เห็นกุญแจบ้านเสียอีก
ฉากที่เห็น ลายนิ้วมือ ในภาพความละเอียดสูงทำให้ชะงักไปนิดหนึ่ง
บันทึกการทำนั้นละเอียดสุด ๆ แต่ เดโมเสียง สั้นเกินไป
โดยพื้นฐานแล้วดูเหมือนจะปล่อยได้แค่คลื่นสี่เหลี่ยม จึงยากจะมองว่าเป็นซินธิไซเซอร์ถ้าไม่มีการสังเคราะห์ การมอดูเลต หรือฟิลเตอร์จริง ๆ
เรียกว่า “ชิปเสียงการ์ดอวยพรที่มี USB-MIDI” น่าจะตรงกว่า และถึงความซับซ้อนจะต่ำ ก็ไม่น่าจัดเป็น PSG ได้ด้วยซ้ำ
มันไม่ได้มีแค่คลื่นสี่เหลี่ยมอย่างเดียว และยังมีตัวเลือกให้เริ่มและหยุดเสียงได้ จึงนับว่ามีเอนเวโลป
ถึงจะพื้นฐานจนแทบไร้ประโยชน์[1] แต่ก็น่าจะเป็นเป้าหมายนั่นแหละ
[1]: อุปกรณ์ที่มีฟังก์ชันคล้ายกันชื่อ Stylophone ยังถูกใช้ใน Space Oddity ด้วย รายละเอียดเพิ่มเติม: https://en.m.wikipedia.org/wiki/Stylophone
ตลกดีนะ แต่จริง ๆ แล้วดูเหมือนไม่ใช่ ซินธิไซเซอร์ สามารถทำอย่างอื่นนอกจากเล่นคลื่นสี่เหลี่ยมได้ไหม?
“มีอยู่ตัวหนึ่งที่ทำงานได้เฉพาะบางทิศทาง ซึ่งตรงข้ามกับสิ่งที่ USB-C ตั้งใจไว้แต่แรกพอดี เลยทรมานใจมาก”
Nokia 2780 Flip มีพอร์ตชาร์จ USB-C แต่ถึงบนกล่องจะเขียนว่า Micro-USB มันก็ทำงานได้แค่ทิศทางเดียว
ถ้าต้องยึด คอนเน็กเตอร์ SMT แบบนั้นให้อยู่กับที่ระหว่างรีโฟลว์สองด้าน ขอแนะนำกาวติดชิปสีแดงชนิดแข็งตัวด้วยความร้อน
เป็นเดโมที่สวยงามจริง ๆ และชวนให้นึกถึงเสียงในยุค ไมโครคอมพิวเตอร์ 8 บิต อย่างแรง