O projeto fundacional do ELETROHEURO — o emulador de rede elétrica monofásica que hoje é o CH1 — começou sendo desenvolvido sobre Arduino Due. Fazia sentido na época: era uma das poucas placas Arduino "oficiais" com DAC embutido, ARM Cortex-M3, e clock suficiente para gerar as formas de onda de tensão e corrente por DDS com boa resolução temporal.
O problema só apareceu depois de horas de operação contínua — e quando apareceu, foi definitivo.
Em sessões de uso contínuo, o DAC0 do Due simplesmente parava de funcionar. Não era um travamento de firmware nem um bug de código — o canal analógico entrava em colapso e não voltava, mesmo com reset de software. A única forma de recuperar era desligar e religar a placa fisicamente, e em alguns casos nem isso resolvia de forma permanente.
Para um projeto que depende de gerar sinais de referência de forma estável e ininterrupta — justamente o caso de um emulador de rede elétrica, que precisa ficar horas ligado alimentando os instrumentos de medição a jusante — um DAC que degrada com o tempo de uso não é uma limitação contornável. É um problema de confiabilidade que compromete o propósito central do equipamento.
Com o padrão se repetindo de forma consistente entre placas, ficou claro que a solução não estava em trocar de unidade Due de novo, e sim em tirar a geração analógica de dentro do microcontrolador e delegar essa função a um DAC externo dedicado, feito especificamente para esse tipo de carga de trabalho.
| Critério | Arduino Due (DAC interno) | RP2040 + MCP4822 |
|---|---|---|
| Confiabilidade em uso contínuo | Colapso do DAC0 após operação prolongada | DAC externo dedicado, sem esse histórico de falha |
| Canais analógicos | 2 canais, mas com o problema relatado | 2 canais (dual-channel), 12 bits, via SPI |
| Arquitetura de processamento | Núcleo único | Dual-core, permitindo separar geração de sinal e outras tarefas |
| Ecossistema / toolchain | Arduino IDE padrão | Arduino IDE + core RP2040 (Earle Philhower), mesma familiaridade |
O RP2040 resolveu o problema pela raiz: como a geração de tensão e corrente passou a ser feita pelo MCP4822 — um DAC dual-channel de 12 bits, comunicando via SPI — o microcontrolador deixou de ter qualquer responsabilidade analógica direta. Ele só calcula os valores da LUT de seno de 256 pontos e envia via SPI; quem gera o sinal analógico de fato é um chip dedicado e especificado para justamente esse tipo de operação contínua.
Fica o aprendizado para quem estiver decidindo entre usar o DAC interno de um microcontrolador ou delegar a um chip externo: quando o projeto depende de operação contínua e prolongada — não só de gerar um sinal correto uma vez —, vale testar esse cenário de estresse cedo. Um DAC pode funcionar perfeitamente em testes curtos e ainda assim não ser confiável para uso real de longa duração. No caso do CH1, foram três placas para eu ter certeza de que não era acaso — e a migração para um DAC externo dedicado acabou sendo, também, a decisão que deu ao projeto uma arquitetura mais robusta no fim das contas.
Geração DDS com LUT de seno de 256 pontos, split Core 0/Core 1, ISR de hardware e o dimensionamento do MCP4822 no artigo técnico do Emulador de Rede Monofásica.
Ler artigo 2 →