A rigor, este projeto não está finalizado, mas etapas importantes já foram concluídas. Está funcionando na protoboard e declarei finalizado o hardware; o software ainda vai receber ajustes.
![]() |
| Vai ter placa de circuito impresso! |
A origem deste projeto é um kit de solda que eu comprei na Aliexpress. É um piano feito com um timer 555; tem sido uma opção popular nas oficinas de solda. Um defeito dele é a desafinação.
Por outro lado, comprei recentemente alguns microcontroladores CH32V002 no encapsulamento SOP16 (SMD de 16 pinos). A soldagem deles à mão não é muito difícil, daí a ideia de criar um kit de solda com ele (dá para ter algumas peças com ele já soldado para quem está iniciando e não quiser se arriscar com um componente pequeno).
Este kit é a junção destas duas coisas. A rigor, o CH32V002 é exagerado para esta aplicação (e teria tido menos problemas com o software se tivesse usado o CH32V003, como veremos adiante).
Hardware
O essencial é o CH32V002 conectado a um buzzer ou alto-falante e a sete teclas (para as notas de Dó a Si). O clock do CH32V002 é gerado pelo oscilador interno, dispensando o uso de um cristal externo.
Fiz algumas experiências quanto à geração do tom. Teoricamente, seria possível gerar algo próximo de uma senoide, usando PWM e um filtro para simular um DAC. Abandonei esta ideia pela complexidade, acabei gerando uma onda quadrada na frequência da nota, com um filtro simples. Testei usar um amplificador LM386, mas o transistor é mais simples e gostei mais do som. O transistor é o S8050, comum nos kits chineses, Da mesma forma, decidi usar um alto-falante ao invés de um buzzer para ter um som melhor.
Dada a limitação do número de pinos, optei por ligar todos botões em um único pino, usando o ADC para descobrir a tecla apertada.
Durante os testes, surgiu a necessidade de um LED para indicar onde o programa está. Por enquanto, não é usado no software final e não precisará ser montado. Um acréscimo posterior foi o trimpot de calibração. A posição dele é usada pelo software para ajustar a programação do PWM.
Optei por um conector micro USB para a alimentação. Vamos ver como será a soldagem disso (ainda não tenho o conector em mão).
O último detalhe é o conector de programação (que também pode ser usado para alimentação). Os CH32V00x usam um único pino para comandar a gravação do software e depuração.
Software
Esta parte deu mais trabalho que eu esperava, e em alguns momentos cheguei a pensar que não conseguiria fazer. O problema de programar em baixo nível em um microcontrolador é a dificuldade de ver o que está acontecendo e detectar erros na configuração dos IOs.
Quando falo em programar em baixo nível, estou falando em código C acessando diretamente os registradores do microcontrolador. Eu usei o ch32vfun, mas ele não tem muitos exemplos para o CH32V002.
Aliás, aí está a causa dos meus primeiros problemas. Eu estava olhando o código no github, sem me tocar que a minha máquina estava com uma versão antiga, que suportava apenas o CH32V003. O CH32V003 tem diferenças em relação aos demais chips da série (inclusive tem dois manuais de referência, um para o CH32V003 e outro para os demais CH32V00x).
Resolvendo vários erros bobos, a parte do ADC funcionou e eu conseguia piscar o LED de debug conforme a tecla pressionada. O PWM foi bem mais complicado, inclusive pela falta de um exemplo específico. É preciso configurar vários registradores. A última dificuldade (que fazia nada funcionar) foi no remapeamento do pino de saída do timer - é preciso habilitar um clock específico para o circuito de remapeamento.
A implementação da afinação é feita em duas partes. No uso normal, a posição do trimpot é lida no início da execução e usada para ajustar os valores default. Ligando com um tecla apertada, é ativado um modo de afinação. Nele uma nota é tocada continuamente, com sua frequência atualizada periodicamente com a posição do trimpot. Não está perfeita ainda.
Próximos Passos
Comecei a montagem do circuito em uma placa padrão. Os componentes já estão soldados, faltam as interligações. Aí é dar uma revisada no software.
Fiz (com a ajuda de uma pessoa mais experiente) o layout da placa e encomendei um pequeno lote. Quando chegar (espero que ainda em outubro) vou montar uma e fazer os ajustes finais no software.
Falta organizar a documentação e colocar no github.

Nenhum comentário:
Postar um comentário