Projetei um pequeno PCB com sensor para minha tese de mestrado com um microcontrolador ATtiny44 . Preciso de cerca de 200 dessas placas para minha aplicação e 16 estão sempre conectadas localmente à placa controladora. Toda a rede fica assim:
Para me comunicar entre o controlador e as placas do sensor, escrevi meu próprio barramento de 1 pino (com base no tempo). O único problema é que a placa do sensor deve ter um endereço para saber sua localização na rede, quando envio seus dados para a placa controladora.
Como eu tinha apenas 1 pino no ATtiny, criei um circuito DAC baseado em jumper que deveria gerar uma tensão analógica com base na configuração de quatro jumpers. Como o circuito do sensor usa os valores (47, 470, 1k, 3k, 4k7, 10k, 100k e 220k) e eu queria otimizar a produção, usei os valores abaixo para o DAC (basicamente 100k, 50k, 20k e 10k ) O que deve fornecer um bom valor entre 0 V e 760 mV, com base na configuração do jumper. Exatamente o que eu precisava ler como tensão analógica com a referência interna de 1,1 V do ATtiny. Na partida, o ATtiny lê essa tensão e deve saber sua posição.
simular este circuito - esquemático criado usando o CircuitLab
Em teoria, isso funciona bem. Até fiz uma análise de Monte Carlo no LTspice para confirmar que não tenho áreas sobrepostas, considerando a tolerância dos resistores (todos são 1% BTW). Abaixo você encontra as fotos dessa análise.
Agora eu produzi várias (felizmente, não 200) dessas placas e, ainda assim, algumas não conseguiram obter leituras corretas em seus endereços (especialmente nas regiões de endereços mais altas, onde todas as tolerâncias acontecem ao mesmo tempo). Eu medi todas as soluções possíveis e finalmente descobri o meu problema. Minha análise original não incluiu a tolerância da tensão de alimentação de 5 V, que é gerada localmente a partir de 12 V com um MC7805 em cada placa controladora. Por folha de dados, o MC7805 tem uma tensão de saída entre 4,8 e 5,2 V.
Depois que eu descobri isso, modifiquei a análise de Monte Carlo. Agora, é assim:
Como você pode ver, existem boas áreas sobrepostas, onde não posso dizer com certeza que essa voltagem pode significar apenas esse endereço. Basicamente, todos os endereços que começam com não. 8 pode obter uma leitura falsa (com maiores possibilidades de leituras falsas para endereços mais altos).
Eu não gostaria de adicionar valores de resistores diferentes dos já usados no quadro (como na tese que eu quero otimizar para a produção).
Eu não gostaria de adicionar uma referência de tensão (por exemplo, diodo Zener) para alimentar a rede de resistores DAC.
Não posso mais modificar a placa controladora (e usar um regulador de tensão mais preciso).
Ainda posso modificar o design / esquema da placa de circuito impresso!
Como garantir sempre leituras corretas no endereço (por programa ou alterando o circuito)?