É comum que os resistores pull-up internos falhem? ou o que faria com que se tornassem intermitentes?

8

Eu tenho um quadro baseado em um ASIC ARM Cortex-M3 que, após meses de trabalho, de repente começou a relatar pressionamentos de botão espúrios. O ASIC não é nosso design, mas uma empresa respeitável.

Os botões esquemáticos são apresentados abaixo. O pino é configurado como entrada com o resistor pull-up ativado. O valor do resistor é de cerca de 30KOhm.

Ao medir o lado do pino com um DMM, vejo o valor flutuar. Às vezes é de 3,2V (= VCC, faixa de chips: 2,1V a 3,6V) e outras vezes salta flutuando entre 0,6V a 1,0V.

Não há problemas de umidade / condensação (9% de umidade relativa), poeira ou outros objetos nos traços. E esta é a ÚNICA placa que sofre isso. Outros clones fabricados desta placa funcionam sem problemas (até o momento).

A única coisa que consigo pensar é que algo está fazendo o pull-up interno piscar. É comum as flexões internas cederem? O que mais poderia estar causando isso?

Esquema de botão

R9, R12 são 2,2Kohm e C10, C11 são 33nF.

MandoMando
fonte

Respostas:

4

Parece que você fez um esforço para isolar seus pinos de entrada dos comutadores, mas ainda assim, um evento ESD esmagador pode ter danificado parte do circuito driver / receptor de pinos no chip (e não necessariamente o dispositivo de pullup em particular) .

Se você quiser tornar isso mais robusto, considere adicionar diodos de fixação externos, um cordão de ferrite ou mesmo um buffer de transistor entre o comutador e o pino.

Dave Tweed
fonte
Pensei em ESD, mas assumindo que C10 e C11 estão próximos do chip, é improvável que seja ESD. A sabedoria normal é que 3nF é suficiente para absorver a maioria dos eventos de ESD; portanto, esses limites de 33nF devem ter fornecido proteção significativa.
Hmm, o lado ps é representado aqui. O solo do retificador pode afetar de maneira transitória um pequeno negativo (<-0,3V) e quebrar algum diodo de aperto ao longo do tempo? Ou ESD / transitório passando pelo pino, mas através do VCC. Este pino está fisicamente próximo ao pino VDD do chip.
MandoMando
@MandoMando: Por enquanto, você é capaz de fazer com que sua diretoria funcione criticando as flexões externas?
Kaz
8

Estatísticas é seu amigo. Entendi, você tem um dispositivo com falha, você se pergunta se isso é culpa minha? é seguro enviar em volume? o que acontece se isso realmente for um problema e enviarmos 10.000 unidades para o campo? Todos os sinais de que você se importa e que provavelmente é um designer / engenheiro consciente.

Mas o fato é que você tem uma falha e os pontos fracos humanos do viés de confirmação se aplicam a situações negativas tão prontamente quanto a situações positivas. Você teve uma falha, sem causa definida. A menos que você saiba de um evento que precipitou esse efeito, isso é apenas ansiedade.

Isso é ESD. Posso provar que é ESD? - Talvez / talvez não - se você me enviar a peça e eu gastar muito $$ para excluí-la e executá-la em diferentes testes como SEM e SEM com aprimoramento de contraste de superfície, talvez. Eu já tive muitos casos em que deliberadamente zapeei um dispositivo como parte da qualificação de ESD, o dispositivo falhou e, no entanto, foram necessárias 30 horas para encontrar o ponto de falha. Era importante entender os mecanismos de falha e a energia de ativação para que a caça fosse necessária (se bem que aparentemente inútil), mas metade do tempo não era possível ver o ponto de falha. E isso foi depois de uma análise e projeto da FMEA, com a eliminação guiada do local.

As pessoas têm a falsa ideia de que ESD sempre significa explosões e tripas vomitadas por todo o lado com Si fundido e fumaça acre. Você vê isso algumas vezes, mas muitas vezes é apenas um pequeno orifício de escala nanométrica no óxido do portão que rompeu. Pode ter acontecido há muito tempo e, com o tempo, falhou devido ao deslocamento paramétrico.

De fato, durante os testes de ESD, usamos a equação de Arrhenius para prever falhas. Fazemos o zap dos dispositivos em vários níveis e modelos diferentes (impedâncias da fonte) e, em seguida, cozinhamos os pequenos pássaros por horas e os rastreamos ao longo do tempo para podermos observar o modo de falha e, assim, prever o desempenho futuro. Você pode facilmente ter milhares de chips em placas rodando em câmaras ambientais por meses a fio. Tudo faz parte de "qual" - ou seja, qualificação.

O principal efeito que estamos sempre procurando em alguns modos de falha é o EOS (Electrical Overstress). Pode ser induzido por ESD ou outras situações. Nos processos modernos, a tolerância ao nível da porta EOS dentro do chip é talvez 15% no máximo. (É por isso que executar o chip no trilho MAX Vss pretendido é tão importante). A EOS pode se manifestar meses depois. O calor da operação seria como um mini teste de vida útil acelerada (você simplesmente não está aplicando a equação de Arrhenius e ela não é controlada).

Se você deseja uma melhor compreensão, consulte os padrões JEDEC ESD22 que descrevem o MM (Modelo de Máquina) e o HMB (Modelo de Corpo Humano) que descrevem as sondas de teste e o carregamento.

Aqui está um trecho do modelo de JEDEC JESD22-A114C.01 (março de 2005).

insira a descrição da imagem aqui

Você meio que percebe como isso se parece com o seu circuito? e os valores são até um pouco próximos, e isso é usado com os níveis de tensão corretos para explodir as estruturas de ESD.

Então, o que você precisa fazer é:

-scrap that board
- track it's provenance, lot number and who handled it
- keep this info in a database (or spreadsheet)
- note in dB that you suspect ESD
- track all failures
- check the data over time.
- institute manufacturing controls so you can track.
- relax - you're doing fine.
espaço reservado
fonte
Muito obrigado! Eu tenho um TVS de 45V na entrada PS (tolerante a 60V) e presumi que cuidaria da ESD, não? lendo sua resposta, acredito que seja EOS ou talvez ESD. Esta é a terceira prancha que este local assou, mas as outras foram mais com vômito. A energia de entrada é um pouco quente que o SMPS pode suportar, de alguma forma os fragmentos de ESD surgem para quebrá-lo. Estou muito curioso para saber como evitar danos por ESD, tenho até uma dúvida . Se você puder lançar alguma luz, ficarei feliz em aceitar as duas respostas, juntamente com gratidão.
MandoMando
Provavelmente existem outros aqui que têm uma melhor noção das peças disponíveis para ESD no nível da placa. Observarei que, embora seja possível que o layout do chip possa diferir entre os blocos, é notável que você tenha sofrido uma queda no intestino, eu suspeitaria de sua placa antes do chip, se estiver localizada dessa maneira. Existe algo no seu layout que torna esses traços mais sensíveis? As sugestões de Dave TWeed são inteiramente razoáveis.
placeholder
bem, o SMPS é classificado para 40V e a entrada está igual ou acima disso. Suspeito que o regulador permita alguns picos. A primeira placa vazou coragem, eu adicionei o TVS, depois acabou de trocar, troquei o retificador com uma voltagem para frente um pouco mais alta para diminuir um pouco a entrada e ela não morreu, mas isso aconteceu. Eu acho que a EOS faz sentido e a tensão de entrada ainda é muito alta. Talvez um TVS 3V3 no interior se o SMPS
MandoMando
(+1) Vim aqui para outra coisa, mas achei isso bastante relevante para um projeto em que estou trabalhando. Meu caso não é tão grave, mas gostei das etapas lógicas necessárias para serem tomadas nesse cenário. Eu provavelmente tinha entrado em pânico se algo assim tivesse acontecido comigo.
Whiskeyjack 25/05
4

Os cenários mais prováveis ​​são que o chip sofreu algum dano, cujos efeitos visíveis incluem comportamento de pull-up escamoso, ou então esse código é por qualquer motivo que faz com que os pullups sejam acidentalmente ativados ou desativados. A última situação pode surgir frequentemente se o código da linha principal fizer algo como:

WIDGET_PIN_PORT->PULLUPS |= WIDGET_PIN_PULLUP_MASK;

e uma interrupção faz algo como:

GADGET_PIN_PORT->PULLUPS |= GADGET_PIN_PULLUP_MASK;

onde WIDGET_PIN e GADGET_PIN são bits diferentes na mesma porta de E / S. O código da linha principal será traduzido como algo como

ldr r0,= [[address of port pullup register]]
ldr r1,[r0] ; ***1
orr r1,#WIDGET_PIN_PULLUP_MASK
str r1,[r0] ; ***2

Se uma interrupção ocorrer depois, ***1mas antes ***2, o pullup do GADGET_PIN será ativado pela interrupção, mas será desativado erroneamente pelo código da linha principal. Existem duas maneiras de evitar esse problema:

  1. Faça uso de hardware que possa permitir que um pouco do registro pull-up seja definido usando uma única instrução em vez de uma sequência de leitura, modificação, gravação e gravação. Acredito que todos os controladores baseados no Cortex-M3 fornecem um recurso de "troca de bits" que pode ser usado para essa finalidade, embora ainda não tenha encontrado uma maneira agradável de usá-lo a partir do código escrito em C, exceto pela definição manual de bit endereços em banda. Alguns outros processadores podem ter meios específicos de porta de E / S para realizar uma tarefa semelhante.
  2. Desative interrupções durante a sequência de leitura, modificação e gravação da porta. Por exemplo, substitua o código C acima por uma chamada para um método

    void set32 (uint32_t volátil * dest, valor uint32_t) {uint32_t old_int = __get_PRIMASK (); __disable_irq (); * dest = * dest | valor; __set_PRIMASK (old_int); }

Este código fará com que as interrupções sejam desativadas muito brevemente (provavelmente cerca de 5 instruções); isso é breve o suficiente para não causar problemas, mesmo com interrupções relativamente críticas. Observe que a compilação do método acima como inline pode reduzir o tempo necessário para chamá-lo, mas pode aumentar a quantidade de tempo durante o qual as interrupções são desativadas [por exemplo, se o otimizador reorganizar o código para que a instrução que carrega o endereço de destnão acontece até depois de __disable_irq ()].

Dado que você diz que o comportamento de pull-up é intermitente, acho que um problema de código provavelmente é mais provável que um problema de hardware. Além disso, condições prejudiciais que prejudicariam o circuito de pull-up provavelmente também causariam outros danos ao chip - alguns detectáveis ​​e outros não. Se qualquer tipo de dano demonstrável ao hardware ocorrer em um chip, é quase sempre melhor substituí-lo e substituí-lo por um novo, do que esperar que o dano observado seja o "único" problema.

supercat
fonte
0

Algumas das respostas anteriores ignoram o mais óbvio: verifique as juntas de solda quanto ao botão, resistores, capacitores e o uC. Ao microscópio, você poderá ver uma junta de solda rachada.

Se você não possui um microscópio, volte a soldar uma e uma junta e verifique se isso resolve o problema.

Reidar Gjerstad
fonte