3 pontos por GN⁺ 2023-12-17 | 1 comentários | Compartilhar no WhatsApp
  • Um projeto que espreme um sintetizador MIDI USB-C baseado no CH32V003 em uma placa de cerca de 12 mm, um novo experimento da série de sintetizadores MIDI “smallest and worst”
  • Faz um CH32V003 de 48 MHz, sem USB por hardware, funcionar como dispositivo USB-MIDI usando a pilha USB por software rv003usb, de CNLohr
  • O principal desafio foi encaixar um conector USB-C de montagem vertical, um MCU QFN, um regulador SC-70, componentes passivos 0603 e um buzzer piezoelétrico dentro do diâmetro do próprio buzzer
  • Restrições mecânicas e de PCB, como placa de 2 camadas 6/6 mil, montagem em ambos os lados, gabarito em painel, interferência dos pinos do piezo e fan-out do USB-C, foram resolvidas com iterações de projeto
  • O produto final funcionou com um hub USB-C e com um celular, mas não enumerou quando conectado diretamente a um notebook, então ainda resta verificar a fiação USB-C ou os valores dos resistores de pull

Um sintetizador de brinquedo USB-MIDI feito com CH32V003

  • O projeto é uma nova criação da série de sintetizadores MIDI “menores e piores”, com o flash synth excluído dessa lista
  • O microcontrolador usado é o CH32V003
    • Microcontrolador RISC-V de 32 bits
    • Componente muito barato
    • Não tem USB por hardware, mas o processador opera a 48 MHz
  • A ideia original era escrever uma biblioteca USB por bit-banging para cumprir objetivos de aprendizado e de uso prático ao mesmo tempo, mas CNLohr já havia implementado o rv003usb
  • Como a demo de USB-MIDI ainda não estava pronta na época, primeiro foi montado, com solda, um dispositivo de teste usando uma placa de desenvolvimento

Experimentos iniciais com USB-MIDI

  • A primeira placa consistia em um breakout TSOP20 e um breakout Micro-USB, com regulador, capacitores e resistores adicionados
  • O header de programação foi feito com 2 pinos, mas, com o USB conectado, não era necessário ligar o GND, então era possível programar usando apenas um pino, D1
  • Foi configurado para que um dispositivo USB-MIDI tocasse notas a partir da entrada de botões
  • Quando os dados MIDI chegavam ao chip, o buzzer piezoelétrico emitia uma onda quadrada
    • Usava um dos timers de hardware do chip
    • A saída era em differential mode para aumentar o volume
  • Mensagens USB MIDI têm 4 bytes, e endpoints USB low-speed aceitam até 8 bytes, então normalmente é possível enviar 2 mensagens MIDI por pacote
    • Nesta demo simples, cada mensagem bloqueava até a próxima interrupção USB
  • Usando loopback MIDI no host, ele se comportava como um “teclado de brinquedo realmente péssimo”

Placa de desenvolvimento USB para CH32V003

  • Como as placas de desenvolvimento CH32V003 existentes pareciam não conectar os pinos USB, talvez por não haver USB por hardware, uma pequena placa de desenvolvimento USB foi projetada para evitar fiação repetitiva
  • Características da placa:
    • Todos os pinos necessários são expostos em breakouts
    • Todos os pinos são rotulados em ambos os lados
    • O resistor de 1,5 K pode ser soldado ao D5 ou ao VDD
    • Se não for necessária reconexão USB por software e o D5 precisar ser usado para outra finalidade, ele pode ser ligado ao VDD
    • As linhas de dados USB na parte inferior podem ser cortadas e resistores em série podem ser adicionados, se necessário
  • Os 3 pinos no canto superior direito são 3V3, GND e D1, usados como header de programação
    • Para programar com o USB desconectado, os 3 pinos podem ser ligados
    • Também é possível ligar apenas D1 e GND, ou só D1 se o USB estiver conectado à mesma máquina
  • Os pinos da borda têm passo de 0,1 polegada, e o tamanho total da placa é 15,2 mm × 20,3 mm
  • Os arquivos de projeto do KiCad estão disponíveis no GitHub e em git.mitxela.com

Processo de redução para a versão USB-C

  • Como o CH32V003 é barato e exige poucos componentes de apoio, isso levou à ideia de recriar um projeto anterior com USB ATtiny
  • O stylocard, para ser melhorado com leitura direta, precisaria de pelo menos 22 GPIOs, mas um único CH32V003 não tem pinos suficientes para lidar simultaneamente com a leitura do teclado e o USB
    • Considerou-se possível usar dois CH32V003 baratos
    • A configuração seria um deles lendo metade do teclado, e o outro lidando com o restante do teclado e com o USB
  • A ideia seguinte foi recriar o antigo smallest USB MIDI synth para a era do USB-C
  • Do ponto de vista elétrico, migrar para USB-C exige apenas adicionar alguns resistores e um conector adequado, mas não é fácil colocar circuitos eletrônicos dentro de um plugue USB-C
  • No fim, foi escolhido um conector USB-C de montagem vertical para docks
    • O número da peça é USB4151
    • Há componentes semelhantes de vários fornecedores

Conector USB-C e roteamento em placa de 2 camadas

  • O fan-out do conector USB-C é difícil, e ele parece presumir que o projetista usará uma placa de alta densidade com microvias
  • Só o footprint do conector escolhido já ultrapassa tecnicamente as especificações de um processo padrão de 6/6 mil, impondo restrições mesmo antes de adicionar trilhas
  • Os pinos plásticos de alinhamento exigem furos passantes não metalizados próximos aos furos metalizados
    • Neste projeto de brinquedo, as violações de DRC foram ignoradas sem pagar por tolerâncias mais altas
    • Se a fabricação não desse certo, o plano era cortar os pinos plásticos com uma faca
  • O objetivo era tornar a placa que fica sob o plugue USB-C o menor possível e encaixá-la dentro do diâmetro de um buzzer piezoelétrico comum
    • O passo dos pinos do buzzer é 7,62 mm, ou 0,3 polegada
    • O diâmetro externo é 13,8 mm
    • Para caber na parte côncava do composto de encapsulamento, o diâmetro máximo é de cerca de 12 mm
  • Como não havia orientação em que os pinos do piezo não interferissem com os pinos de suporte do USB, o espaçamento dos footprints foi aumentado
    • Após iterações de projeto, o espaçamento dos pinos do piezo foi reduzido para 8 mm
    • Se necessário, os pinos poderiam ser levemente dobrados para fora ou lixados
  • Os pinos USB 3 não são conectados
    • Os 4 pares SuperSpeed e os 2 pinos SBU não são usados
    • CC1 e CC2 precisam ser conectados, portanto 14 pinos ao todo precisam de conexão
  • Reduzindo ao mínimo os anéis de cobre ao redor dos furos metalizados, foi possível, por pouco, levar todas as trilhas necessárias para fora
  • Como todos os pinos de shield são interligados, seria possível contornar a questão não conectando todos os GNDs na placa, mas no fim o GND também foi roteado
  • Na parte inferior, o componente QFN foi deslocado do centro para garantir espaço suficiente para as trilhas
    • Como GPIOs não usados podem ser conectados ao GND ou a outros sinais sem problema, foi possível passar o GND pelo meio do chip
  • O regulador usa o encapsulamento SC-70
    • Reguladores menores também seriam possíveis, mas o espaço não era um grande problema
    • Os resistores e capacitores ao redor usam o tamanho 0603
  • Na frente, há três pads de teste para programação: alimentação, GND e D1(SWIO)
    • Na prática, para programar basta conectar o USB-C por um cabo extensor e encostar um fio em um único pad D1

Usando o painel como gabarito de montagem

  • Placas muito pequenas são difíceis de segurar ao aplicar pasta de solda com stencil, então foi projetado um painel próprio
  • Como esta placa tem componentes nos dois lados, aplicar stencil em um lado depois de soldar o outro é especialmente complicado
  • O painel coloca duas instâncias do projeto, com a segunda invertida, para que o conjunto fique simétrico
    • É possível aplicar stencil em um lado, virar a placa e aplicar stencil no outro
  • A moldura do painel também funciona como gabarito para segurar o plugue USB-C
    • O furo oval no centro foi projetado para encaixar firmemente no plugue USB-C
    • O FR4 suporta um forno de refluxo, então é adequado como material de suporte
  • O visualizador 3D do KiCad ajuda a evitar erros
    • Funciona como uma camada extra de proteção contra erros como ausência de solder mask no footprint ou saída de camadas incorretas
    • Interferências entre os pinos do piezo e o footprint também podem ser verificadas diretamente na renderização 3D

Montagem e soldagem

  • Para placas muito pequenas, às vezes o fabricante subsidia o preço quando há baixa tolerância e tamanho reduzido
  • Embora este projeto fosse, nominalmente, um conector USB 3.2 Gen 2 em uma placa de 2 camadas com tolerância 6/6 mil, o fabricante não questionou o footprint, e a fabricação ocorreu sem problemas
  • A ordem correta de montagem é soldar os componentes pequenos primeiro e colocar o conector USB por último
    • Como o conector USB é de montagem through-hole, se ele for colocado primeiro, não é possível aplicar stencil no lado oposto
  • O conector USB inclui uma tampa plástica que pode ser pega por um bico de vácuo
  • Inicialmente, a ideia era soldar várias unidades por refluxo, mas, como eram pequenas demais, todas acabaram sendo soldadas com soprador de ar quente
    • Mesmo com componentes já soldados na parte inferior, a tensão superficial consegue mantê-los no lugar
    • Se necessário, também seria possível usar dois tipos de liga de solda com pontos de fusão diferentes
  • Depois da soldagem, as placas foram cuidadosamente destacadas do painel e as bordas ásperas foram levemente lixadas
  • Após a montagem, constatou-se que o capacitor era o componente individual mais alto; teria sido possível usar um capacitor menor, mas já era tarde
  • Como esperado, os pinos do buzzer piezoelétrico ficaram apertados, mas a placa foi empurrada o suficiente para ficar plana, e então os pinos foram cortados e soldados com cuidado
  • Os buzzers piezoelétricos encomendados a mais tinham um design sutilmente diferente do estoque existente

Funciona no hub, mas falha conectado diretamente ao notebook

  • O conector USB-C de montagem vertical foi originalmente projetado para ficar dentro de docks de celulares ou tablets, então seu comprimento faz com que ele se projete para fora de uma carcaça plástica moldada
  • Também foi considerada uma pequena tampa impressa em 3D para cobrir o circuito e a parte inferior do conector, mas a aparência provavelmente não ficaria boa
  • Cabos extensores USB-C não são permitidos pela especificação, mas um foi usado para fornecer energia e sondar o pino SWIO durante a programação
  • Os quatro sintetizadores foram gravados com nomes de dispositivo diferentes para poder distingui-los na DAW
    • A DAW usada foi o Cakewalk de 1998 rodando no Wine
  • Um hub USB-C de 4 portas foi comprado separadamente para testes
    • Foi difícil encontrar um hub que oferecesse apenas 4 portas USB-C
    • A maioria converte USB-C para outros conectores, como USB-A, HDMI ou cartão SD
  • O produto final funciona quando conectado a um hub USB-C e a um celular
  • Quando conectado diretamente a um notebook, ele não enumera
    • Ele enumera na ponta de um cabo extensor USB-C fora da especificação
    • É possível que a fiação da porta USB-C esteja ligeiramente errada, ou que os valores dos resistores de pull que determinam o tipo de conexão USB não estejam corretos
  • O código-fonte do projeto está disponível no GitHub e em git.mitxela.com

1 comentários

 
GN⁺ 2023-12-17
Opiniões no Hacker News
  • Será que essa pessoa ganha a vida fazendo esse tipo de coisa? O resultado é sempre tão sofisticado e único.
    Fico com a sensação de que uma empresa está apertando o pescoço dela, e me pego preocupado se ela registrou trabalho suficiente no Jira e se está mostrando resultados equivalentes a pontos de sprint suficientes toda semana.
    É difícil imaginar uma vida em que alguém simplesmente faça livremente o que quer, quando quer, no próprio ritmo, e ainda coloque esse nível de tempo, esforço e recursos em um projeto de hobby.
    Em dinheiro, talvez não seja um investimento grande. Os materiais do protótipo provavelmente ficam na faixa de 100 a 200 dólares, mas e o tempo? Algumas horas por dia ou por noite depois do trabalho, durante anos?

    • Trabalho há décadas, mas nunca tive um emprego em que precisasse passar regularmente de 40 horas por semana.
      No máximo, trabalhei algumas horas a mais por causa de situações raras algumas vezes por ano; empregadores melhores definitivamente existem.
    • O autor escreveu em 2018 um texto que ele mesmo chamou de “rant” sobre esse tema.
      Em https://mitxela.com/rants, basta descer até o título Spare Time and Hard Work.
    • https://mitxela.com/support
      Conheci alguém que recebia apoio como artista digital no início do Patreon; antes disso, fazia transmissões no Twitch e mantinha um botão de doação via PayPal no perfil.
      Sempre que eu via, era um artista bastante talentoso, mas fiquei surpreso ao ver como as contas passavam a fechar rápido quando apenas algumas pessoas começavam a assinar.
      Pensando em termos de uma bolada, viver só de economias parece difícil, mas quando a vida passa a caber em uma quantia que entra todo mês, a conta fica muito mais realista. Só que é preciso manter o público.
    • Não sou pessoa de hardware, mas ele parece viver uma vida dos sonhos.
      Está hackeando coisas porque acha divertido. Para muita gente, é difícil arrumar tempo, planejar e ainda executar.
      Gosto também dos comentários sarcásticos e do jeito de usar ferramentas de software de 1998 rodando no Wine do Linux.
    • Para um engenheiro experiente, esse projeto parece levar uns 3 a 5 dias, fazendo algumas horas por dia depois do trabalho.
      Isso incluindo edição de vídeo, tempo de entrega e pesquisas aleatórias feitas no celular aqui e ali.
      Daria para fazer mais rápido, mas aí começaria a parecer trabalho.
      Para quem já tem as ferramentas, o custo talvez fique mais perto de 50 dólares.
      Se você estiver disposto a usar pasta de solda com chumbo, talvez fique ainda mais barato e fácil, mas eu jamais gostaria de fazer isso.
  • A vela volumétrica dele é realmente incrível: https://mitxela.com/projects/candle

  • É bem engraçado ver esses dispositivos conectados a um hub com cada porta rotulada como 10 Gig.

  • O close macro da ponta dos dedos está tão nítido que talvez este vídeo devesse ser considerado um vazamento de segurança de impressões digitais.
    Pode ser pior do que pessoas compartilhando sem querer fotos em que aparecem as chaves de casa.

    • Ele não parece muito o tipo de pessoa que usaria a própria impressão digital para autenticação.
  • As cenas em que dá para ver as impressões digitais nas fotos de alta resolução dão uma leve travada.

  • O relato da construção é incrivelmente detalhado, mas a demonstração de som é curta demais.
    Basicamente parece emitir só onda quadrada, então é difícil ver isso como um sintetizador de verdade, sem síntese, modulação ou filtros reais.
    Seria mais correto chamar de “chip de som de cartão musical com USB-MIDI”, e mesmo com baixa complexidade talvez seja difícil classificá-lo como PSG.

    • Um sintetizador de oscilador único ainda é um sintetizador.
      Nem é só onda quadrada; como há opções de iniciar e parar o som, dá para dizer que ele tem um envelope.
      É básico a ponto de ser quase inútil[1], mas provavelmente esse era o objetivo.
      [1]: Um dispositivo com função parecida, chamado Stylophone, apareceu até em Space Oddity. Mais detalhes: https://en.m.wikipedia.org/wiki/Stylophone
  • É engraçado, mas na prática não parece ser um sintetizador. Ele consegue fazer algo além de reproduzir uma onda quadrada?

    • Ainda assim, ele sintetiza uma forma de onda bem decente, parecida com uma onda quadrada, com durações diferentes. Para mim, isso basta.
  • “Há um que só funciona em uma orientação específica, o que é o oposto exato do que o USB-C originalmente pretendia, e isso me incomoda demais.”
    O Nokia 2780 Flip tem uma porta de carregamento USB-C, embora a caixa diga Micro-USB, e ela só funciona em uma orientação.

  • Para manter esse tipo de conector SMT no lugar durante refluxo dos dois lados, recomendo a cola vermelha termofixa para chips.

  • Uma demo realmente bonita, que lembra muito o som da era dos microcomputadores de 8 bits.