Seleção de endereço de barramento de 4 bits via pino de entrada analógica: a simulação de Monte Carlo mostra valores de endereço sobrepostos

16

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:

Digite a descrição da imagem aqui

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.

esquemático

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.

Digite a descrição da imagem aqui Digite a descrição da imagem aqui

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:

Digite a descrição da imagem aqui Digite a descrição da imagem aqui

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)?

KarlKarlsom
fonte
3
+1 boa pergunta. Você pode fornecer o último arquivo asc LTspice em uma pasta em algum lugar? Para que possamos testar outras combinações?
dim
2
Ótima pergunta, bom trabalho para descobrir o que realmente causou isso antes de pedir orientação aqui. Agora a pergunta e resposta são uma boa leitura para quem passando por em vez de apenas você :-)
Mast

Respostas:

19

De acordo com suas simulações, seu esquema de endereçamento funciona bem, desde que sejam consideradas apenas incertezas nos valores dos resistores. É a incerteza sobre a tensão que faz com que ela falhe.

Meu conselho é cancelar as flutuações no VCC usando-o como referência ao ADC. Você pode fazer isso programando os REFSbits no ADMUXregistro, conforme explicado na folha de dados :

insira a descrição da imagem aqui

Depois de mudar para o VCC como uma tensão de referência para o ADC, você não medirá mais a tensão, mas uma relação entre os valores do resistor e esses são precisos para 1%. Nenhuma mudança é necessária no esquema (embora você possa aumentar o valor de R7 para obter suas medições no meio da faixa de conversão da ADC), apenas o firmware do Attiny precisa ser atualizado.

Se você ainda estiver disposto a refazer a placa do sensor, poderá substituir seu esquema por uma escada R-2R, como Cano64 sugeriu:

esquemático

simular este circuito - esquemático criado usando o CircuitLab

Isso otimizará a resolução, tornando todos os passos da escada iguais. Os resistores de 1% são precisos o suficiente para construir escadas monotônicas de até 5 bits.

Dmitry Grigoryev
fonte
Doh! Não vi a floresta para as árvores. Eu estava tão fixado nesse 1.1V ... Muito obrigado! Vou tentar isso.
KarlKarlsom
11
Testei e funciona. Ótimo!
KarlKarlsom
Eu testei com VCC como AREF e um resistor de 220k para R7. Mais tarde, posso tentar simular uma escada 100k, 220k R-2R e ver se ela me dá resultados ainda melhores. Obrigado novamente!
KarlKarlsom
3

Eu tive que resolver um problema semelhante uma vez. Eu precisava conectar 4 botões a um pino analógico no arduino, no entanto, precisava reconhecer pressionamentos simultâneos (todas as combinações). Eu criei o mesmo circuito que você e, em seguida, escrevi um programa para pesquisar todas as combinações possíveis de valores do resistor, para que os valores finais ao pressionar os botões fiquem o mais separados possível. Adivinha? Estamos ferrados, isso não pode ser feito. É isso, tenha um bom dia.

Aprendi que os valores ideais do resistor para os interruptores estão próximos de R, 2R, 4R, 8R e a parte inferior do divisor tem um valor de R. Seu circuito já está próximo do ideal, basta substituir R7 por 10k resistor.

Mas há uma boa notícia para você. Como você só precisa definir um endereço (não operará o comutador enquanto o dispositivo estiver em execução), recomendo usar os comutadores SPDT e a escada R2R .

Cano64
fonte
Por que não pôde ser feito? O que aconteceu quando você conectou seus comutadores aos resistores (R, 2R, 4R, 8R)? Quais combinações não funcionaram?
Dmitry Grigoryev
A escada R-2R é uma excelente sugestão a propósito!
Dmitry Grigoryev
+ Dmitry, quis dizer que as tensões de saída são muito próximas para distingui-las de forma confiável.
Cano64