Multiplexadores grandes / seletores de dados


10

Estou procurando um IC multiplexador com 128: 1 ou mais entradas (256 seria bastante bom). Eu teria pensado que esse dispositivo seria bastante comum, mas estou tendo dificuldades para localizá-lo. Pode ser que eu esteja olhando para os lugares errados, mas de alguma forma acho que estou perdendo alguma coisa - talvez multiplexadores de entrada grandes não sejam usados ​​com tanta frequência? Se sim, qual é a alternativa?

O max. Eu era capaz de encontrar o confiável 74150 com 16 entradas.

Entendo que posso construir um multiplexador grande combinando múltiplos 16 entradas de mux - mas espero uma solução mais integrada.


Estou projetando um circuito capaz de testar circuitos abertos e curtos em uma fiação automotiva. Um chicote de fios típico pode conter cerca de 200 fios. Atualmente, o circuito usa 16 multiplexadores para lidar com 128 fios.

Os multiplexadores são conectados a um único multiplexador de 16 entradas e, por sua vez, a um uC. Da mesma forma, no outro extremo, existem 16 desmultiplexadores. Os desmultiplexadores trocam os fios por uma tensão. Ao mesmo tempo, esse fio é comutado para uma das entradas de uC via mux.

Se o fio estiver bom, o uC deve ver uma alta na entrada. O uC então verifica todos os outros fios. Se algum deles for alto, significa que há um curto entre esses dois fios.

Nota: este circuito não foi projetado por mim. Isso foi feito em 2003. Estou apenas procurando melhorar esse circuito. Observe também que nenhum dos chicotes de cabos contém um barramento de dados CAN ou qualquer outro tipo de barramento. São apenas fios simples para energia e sinais.

Aqui está um diagrama de blocos muito bruto que eu fiz rapidamente apenas para este post. Espero que isso esclareça o problema, pois o inglês não é meu primeiro idioma e tenho problemas para explicar as coisas por texto. Mesmo que o diagrama não seja muito bom, espero que melhore as coisas. As linhas que seguem para o desmux e o mux do MCU são as linhas de endereço.

Observe que um dos fios é dividido em 3. Fiz isso intencionalmente para mostrar que algumas conexões são uma para muitos e não apenas uma para um. O mais complexo que eu já vi é um fio dividido em 60 junções. É por isso que o demux e o mux têm linhas de endereço separadas. O demux pode estar na entrada no. 20 enquanto o mux pode alternar entre 20,21,22 etc. Verifique todas as linhas que são entrecruzadas da linha 20.

insira a descrição da imagem aqui

Se você acha que há uma maneira melhor de projetar isso, entre em contato.


Você está procurando 128: 1 ou 128 vezes 2: 1?
Majenko

128: 1. Desculpe, eu esqueci de mencionar. Peço desculpas.
Saad

@saad Minha experiência mostrou que quase toda vez que alguém pede esse tipo de coisa, é porque está fazendo algo fundamentalmente errado. Sugiro declarar o que você está tentando realizar, e não o que você pensa que é a solução. Dessa forma, podemos oferecer uma solução melhor do que colocar em cascata um monte de 16: 1 muxes.

@ David Kessner, veja a edição. Na verdade, eu perguntei sobre o design deste site há algumas semanas, mas tive pouca resposta. Gostaria de receber qualquer formulário na entrada.
Saad

11
Dependendo da rapidez, da frequência e da quantidade de aviso que alguém trocará de entrada, o uso de multiplexadores em cascata pode facilitar muito o roteamento. Em vez de ter que rotear 256 sinais para um único ponto na placa, é possível rotear 16 sinais para cada um dos 16 pontos, rotear um sinal de cada um desses pontos para um chip de 16 entradas e rotear quatro sinais compartilhados para todos os pontos. multiplexadores. Usar um chip, em teoria, permitiria obter qualquer um dos 256 sinais da entrada para a saída com um único "atraso de porta" correspondente a dois transistores em série (tipo N para borda descendente; P para subida), mas ...
supercat

Respostas:


12

Embora um enorme mux / demux certamente funcione, conectar um monte de 16: 1 muxes é muito trabalhoso e tem algumas limitações que podem ou não ser um problema. A abordagem mais convencional seria usar registros de turno. Use um registro de entrada / saída serial em paralelo para a extremidade "condução" e um registro de entrada / saída paralela para a extremidade receptora. O bom dos registros de turno é que eles podem ser facilmente encadeados para fazer um registro de turno mais longo. Um registro de deslocamento de 256 ou mesmo 1024 bits não é um problema. Com alguns buffers, o fluxo serial pode até ser passado através de um cabo para outro PCB (se isso facilitar o processo).

Existem muitos chips de registro de turno de 8 bits como o 74xx597, mas um CPLD é MUITO melhor para isso. Mas você não precisa de um CPLD gigante de 256 pinos. Em vez disso, você pode usar vários CPLDs menores e encadeá-los. Embora eu não tenha feito as contas, tenho certeza de que o uso de CPLDs de pequeno a médio porte seria mais barato que um CPLD grande - e você não precisa se preocupar com os BGAs.

Esse CPLD seria bastante intensivo em flip-flop. O que isso significa é que uma arquitetura normal de CPLD (como o que o Xilinx usa) não é tão boa quanto algo mais isento de FPGA. Altera e Lattice têm CPLDs com muito mais chinelos por dólar do que o Xilinx.

Embora você possa não ter muita experiência com CPLDs, esse design é muito simples e os benefícios do uso de um CPLD são enormes. Vale muito a pena aprender como programar CPLDs para isso.

Além disso, as vantagens de usar um registro de turno em vez de um mux não são fáceis de ver inicialmente. Principalmente, você tem muita flexibilidade na maneira de dirigir e sentir os fios. Você pode até testar vários chicotes ao mesmo tempo (se você tiver registros de turno suficientes). Tudo o que você pode testar com muxes pode ser feito com registros de deslocamento, mas os registros de deslocamento podem fazer mais. A única desvantagem dos registros de turno é que é mais lento, embora ainda seja mais rápido do que o necessário (ou seja, o cara que conecta e desconecta o chicote será muito mais lento que o tempo para testar com os registros de turno).

Devo dizer também que, mesmo se você estiver usando CPLDs, os registros de turnos ainda serão mais fáceis que os muxes. O principal é que eles são menores - embora, para ver a vantagem / desvantagem real, você realmente precise fazer o design em ambos e ver qual o tamanho do CPLD necessário. Isso dependerá bastante do tipo de arquitetura de CPLD usada, portanto, qualquer generalização feita com o Xilinx não se aplicará à Altera.

Edit: Abaixo está um pouco mais detalhadamente sobre como realmente executar o teste usando registros de turno ...

Para fazer o teste, você pode ignorar o fato de estar usando registros de turno e considerar apenas que os dados são direcionados no "final final" e esperamos ler no "final final". Como você obteve e retornou os dados (via serial) é em grande parte irrelevante. O importante é que você pode gerenciar dados que são totalmente arbitrários.

Os dados com os quais você dirige são chamados de "vetores de teste". Os dados que você espera ler também fazem parte dos vetores de teste. Se o cabo estiver conectado com um relacionamento 1: 1, você esperaria que os dados de direção e os dados de recebimento fossem os mesmos que você dirige. Se o cabo não for 1: 1, seria obviamente diferente.

Se você usou uma abordagem baseada em MUX, ainda está usando vetores de teste, mas não tem controle sobre o tipo de vetor de teste. Com os Muxes, o padrão é chamado de "Walking Ones", ou "Walking Zeros". Digamos que você tenha um cabo de 4 pinos. Com os que andam, você dirige o seguinte padrão: 0001, 0010, 0100, 1000. Os zeros a pé são iguais, mas invertidos.

Para um teste de continuidade simples, andar uns / zeros funciona razoavelmente bem. Dependendo de como o cabo está conectado, há outros padrões que podem ser feitos para acelerar o teste ou para testar coisas específicas. Por exemplo, se alguns pinos nunca puderem ser curto em relação a outros pinos, você poderá otimizar o padrão de teste para não olhar para esses casos e, portanto, executar mais rapidamente. Lidar com algo diferente de zeros / caminhadas pode ser complicado no lado do software.

O método final de gerar vetores de teste é feito para o teste JTAG. O JTAG, também chamado de varredura de limites, é um esquema semelhante para testar as conexões entre chips em um PCB (e entre PCBs). A maioria dos chips BGA usa JTAG. O JTAG possui registros de deslocamento em cada chip que podem ser usados ​​para conduzir / ler cada pino. Um software complicado e caro analisa a netlist do PCB e gera os vetores de teste. Um sofisticado testador de cabos poderia fazer a mesma coisa - mas isso daria muito trabalho.

Felizmente, para você, existe uma maneira MUITO MAIS FÁCIL de gerar os vetores de teste. Aqui está o que você faz ... Conecte um bom cabo conhecido aos registros de turno. Execute um padrão de zeros / zeros no final da direção. Ao fazer isso, registre o que é visto no lado de recebimento. No nível simples, você pode usar isso como seu vetor de teste. Quando você conecta um cabo defeituoso e faz os mesmos passos / zeros, os dados que você recebe não correspondem aos dados gravados anteriormente - e, portanto, você sabe que o cabo está com defeito. Isso tem vários nomes, mas todos os nomes são uma variação do termo "aprendizado", como auto-aprendizado ou auto-aprendizado.

Até agora, isso lida facilmente com o caso em que um pino na extremidade motriz vai para mais de um pino na extremidade receptora, mas não com o outro caso em que vários pinos na extremidade motriz são conectados juntos. Para isso, você precisa de algumas coisas especiais para evitar danos causados ​​pela contenção do barramento, e todos os pinos do seu registro de deslocamento devem ser bidirecionais (IE, funcionam como driver e receptor). Aqui está o que você faz:

  1. Coloque um resistor pull-down em cada pino. Algo em torno de 20K a 50k ohms deve estar bem.

  2. Coloque um resistor em série entre o CPLD e o cabo. Algo em torno de 100 ohms. Isso é para ajudar a evitar danos causados ​​por ESD e outras coisas. Uma tampa de 2700 pF ao terra (no lado do pino de CPLD do resistor de 100 ohm) também ajudará no ESD.

  3. Programe o CPLD para que ele apenas conduza o sinal alto, nunca dirigindo baixo. Se seus dados de saída forem '0', o CPLD triestabelecerá esse pino e permitirá que o resistor pull-down abaixe a linha. Dessa forma, se vários pinos de CPLD estiverem conduzindo o mesmo fio no cabo alto, nenhum dano ocorrerá (porque o CPLD também não estará conduzindo o mesmo fio com baixa tensão).

  4. Cada pino é um driver e um receptor. Portanto, se você tiver um cabo de 256 pinos, seus registros de turnos serão 512 bits para o driver e 512 bits para o receptor. Dirigir e receber pode ser feito no mesmo CPLD, portanto a complexidade das PCBs não muda por causa disso. Você terá 3 ou 4 flip-flops por pino de cabo neste CPLD, portanto planeje adequadamente.

Em seguida, você faz o mesmo padrão de caminhada / zeros ao comparar os dados recebidos com o que foi gravado anteriormente. Mas agora ele lida com todos os tipos de conexões arbitrárias dentro do chicote elétrico.


Muito obrigado. Vou começar a ler mais sobre isso imediatamente.
Saad

Eu estive pensando sobre isso. Você disse para usar o SIPO para o final do percurso e o PISO para o rx. Agora, se eu entendi direito, devo fazer o SIPO para um pino de saída no MCU e o PISO em um pino de entrada. Supondo que os fios sejam todos um para um, devo enviar alguns dados através do chicote e, se eu receber esses dados de volta, os fios serão aprovados no teste. Este é um método válido? Além disso, como devo modificar isso para lidar com linhas que se dividem em mais de 1 no lado receptor? É isso que você estava sugerindo ou estou completamente fora da pista?
Saad

Pensando mais nessas linhas - suponha que tenhamos 4 fios de entrada e um deles (o quarto) se divida em 2 fios. Portanto, temos 5 fios no final do rx. Suponha que alteremos os bits 0101, se recebermos 01011 de volta, todos os fios estão ok. Mas suponha que o terceiro bit seja alto (01111), então sabemos que o terceiro fio está em curto-circuito. Mas isso não nos dirá com qual fio está seu curto-circuito. Talvez uma maneira melhor seria apenas deixar o "1" ondular pelos registros. Então, no início, temos 1000 e rec. 10000. Em seguida, percorre 1 e obtemos 0100 e 01000. Até chegarmos ao último bit, 0001.
Saad

Nesse caso, sabemos que devemos receber 00011, pois o último é dividido em dois. Se houver um curto no quarto fio e enviarmos 0010, então rx 00111 - que sabemos que não está correto e podemos exibir um erro especificando onde está o curto-circuito. Esse método soa bem para você?
Saad

@ saad Atualizei minha resposta com muito mais detalhes para cobrir seu comentário.

7

Eu não acho que existam soluções de chip único. Eles seriam caros por causa do grande número de E / Ss e provavelmente também por causa da baixa demanda. A maioria dos projetos cascata 8 ou 16 multiplexadores de entrada.

Se você realmente deseja uma solução mais integrada, precisará procurar um CPLD . Existem CPLDs com mais de 256 E / Ss, como o Xilinx CoolRunner XC2C512 , disponível em uma versão BGA com 270 E / Ss de usuário. Lembre-se de que, para um multiplexador de 256 entradas, você precisa de 8 entradas adicionais para os sinais selecionados, uma saída, é claro, e talvez também uma habilitação, para que as 270 E / Ss não sejam muitas.

Você também deve ter em mente que sua embalagem provavelmente será BGA ; não tenho certeza se você vai gostar disso. Ainda não vi QFPs com cerca de 300 pinos ...


2
Obrigado. Tive a sensação de que seria esse o caso. Acho que vou continuar fazendo um mux maior de 16 entradas.
Saad

@ saad - essa parece ser sua melhor aposta, a menos que você pegue um PLD grande (contagem de pinos, não portões / blocos lógicos) conforme sugerido (as vantagens são mais eficientes / tamanho, na verdade, é necessária muito pouca experiência com eles ou HDL, mas o pacote seria de fato uma dor -? bordo dev)
Oli Glaser

Na verdade, tenho alguma experiência com HDL e FPGAs (Handel-C - que não era agradável de se trabalhar) na escola. Eu nunca trabalhei em um CPLD. Mas eu nunca mexi muito com um pacote BGA e isso realmente parece uma dor. EDIT: O XC2C512 também está disponível no PQFP - embora agora eu queira saber se alguém com tão pouca experiência quanto a minha em HDL e FPGAs pode funcionar com esses dispositivos. Também é bastante caro - vale mais de 60 libras na Farnell UK.
Saad

@saad - o PQFP possui apenas 173 E / Ss de usuário. Um colega meu programou seu CPLD (aplicativo simples: decodificador de endereços) em Abel , que, a partir dele, parece muito mais simples que o VHDL ou o Verilog. Provavelmente não tão poderoso como VHDL / Verilog, mas isso não deve ser um problema para a sua aplicação
stevenvh

@stevenvh: Abel é um pouco feio em alguns aspectos, mas especificar comportamentos de pinos em termos de relógios e equações às vezes pode ser muito mais natural do que escrever as coisas mais detalhadamente em VHDL ou Verilog. Eu me pergunto por que as ferramentas não suportam uma linguagem melhor baseada em equações?
Supercat

3

Embora o CPLD / FPGA pareça a idéia certa para uma alta contagem de pinos, um chicote automotivo normalmente estará espalhado fisicamente e os conectores serão moderadamente grandes. Portanto, em vez de se espalhar de um dispositivo de alta contagem de pinos para um grande número de conectores, um Um sistema modular com, digamos, 16 IO em registros de turno, interconectado pelo baixo número de linhas de relógio / turno, pode ser mais apropriado e também muito escalável.
Outra coisa a considerar é o teste de cabos, você pode usar uma corrente de resistor para aplicar, digamos, 16 voltagens a 16 linhas e um mux analógico para verificar a voltagem de cada uma na outra extremidade. Isso detectaria aberturas e shorts, e seria barato.


Você quer dizer que eu deveria implementar os registradores de deslocamento em blocos de 16 bits nos CLPDs? Provavelmente, não usarei um único CPLD grande para fazer todo o trabalho. Eu quero evitar pacotes BGA e, portanto, provavelmente continuarei com os CLPDs menores. No momento, para cada nova cablagem necessária, uma nova "placa de conexão" é desenvolvida e ela possui todos os conectores montados. Esses conectores são então conectados ao circuito que descrevi na pergunta acima. No novo sistema, manteremos esse mecanismo - que tipo de problemas enfrentarei se conectar um grande número de E / S em um chip?
Saad

1

Usar um registrador de turno para ler muitas entradas é um bom padrão. Como David Kessner sugeriu o uso de um CPLD, no entanto, eu sugeriria outro padrão. Suponha que você queira que cada CPLD lide com 32 entradas. Dê a cada CPLD uma entrada de relógio compartilhada, uma entrada de habilitação individual, uma saída de habilitação (que se vincula à entrada de habilitação do próximo chip) e uma saída de dados compartilhada. Cada chip possui um contador de cinco bits e um indicador de estouro. Quando a entrada de ativação for desativada, limpe o contador e o indicador de estouro. Quando a entrada de ativação é declarada, mas o indicador de sobrecarga não está definido, emita o estado do bit de entrada indicado pelo contador. Quando um pulso de clock é recebido e o chip está ativado e o contador não excedeu o limite, bata no contador. O bit de estouro alimentaria a saída "enable". O efeito final de toda essa lógica é que é possível obter apenas 8 macrocélulas para lidar com 32 entradas. Dessa forma, pode-se adequar ao CPLD outras funções que exigem mais computação ou registram muito, mas não precisam de muita E / S.

Se alguém tiver um CPLD com circuitos de retenção de pinos, poderá usar uma abordagem semelhante para a saída, especialmente se houver uma maneira de gerar a saída de uma macrocélula para vários pinos (sem precisar gastar uma macrocélula para cada pino). O chip teria entradas de relógio e dados compartilhadas, uma entrada de habilitação e uma saída de habilitação. Internamente, seria necessário um contador de cinco bits, uma cópia extra do bit inferior do contador travada na extremidade oposta do relógio dos cinco primeiros, um bit de estouro e um sinal de dados compartilhado que alimentaria todos os pinos. Sete macrocélulas, além de muitas foram necessárias para copiar o sinal de dados de entrada para todos os pinos (os controles de ativação da saída para os pinos serviriam como ativação por trava).

Um recurso bonito dessa abordagem (que, btw, é freqüentemente usado em drivers de LCD) é que é possível ter várias linhas de dados movendo dados em paralelo e ainda assim exigir apenas um único fio de ligação em série entre os chips. Ele também permite eliminar um circuito de travamento de cada entrada ou saída.


1

Como isso soa para uma idéia, supondo que o maior grupo de pinos que deveriam estar conectados seja, por exemplo, 20 pinos: use um monte de chips de driver de LED de registro de turno de coletor aberto (uma saída por pino) cada um dos quais pode afundar pelo menos 2mA; conecte um resistor de 1K de cada pino a um ponto comum e use um circuito que forneça um volt a 20,1mA (é bom se a voltagem for maior quando a corrente for mais baixa, desde que seja um volt a 20,1mA) e indique se uma tentativa está sendo feito para atrair mais do que esse valor. Para algumas configurações de cabo, pode ser necessário ter um pequeno número de pinos "sobressalentes" que possuem resistores de 1K, mas não estão conectados ao cabo. Pode ser desejável ter um pino sobressalente com um resistor de 1K, um com resistor de 500 ohm (ou dois 2K em paralelo), um com resistor de 250 ohm (quatro resistências de 1K '

Para testar o cabo, formule cenários que resultem em exatamente vinte pinos sendo puxados para baixo e cenários que resultem em exatamente vinte pinos sendo puxados para baixo (os pinos extras podem ser úteis para isso) e confirme se os cenários de vinte pinos são não relatado como usando mais de 20,5 mA, mas os cenários de 21 pinos são.

Suponha, por exemplo, que haja um chicote de cabos que conecte 1-2, 3-4, 5-6 etc. até 39-40. Verifique se há shorts escolhendo várias combinações de dez pares de pinos e conduza os dois pares de cada pino para baixo. Você estará dirigindo 20 pinos baixo, e nenhum pino deve ficar baixo, exceto os que você está dirigindo, portanto, a corrente deve sempre estar abaixo de 20mA. Se acabar, algo está em curto. Se alguém pode encontrar qualquer combinação de dez pares que não lê sobrecorrente, um de cada vez desliga um par ativo e liga outro par, até que algo fique sobrecorrente; o último par ligado está curto para algo que não deveria ser.

Verifique se há aberturas pressionando um pino sobressalente baixo e, em seguida, escolhendo várias combinações de dez pares, acionando um pino de cada par (às vezes o ímpar e às vezes o par). Se houver alguma abertura, essa ação resultará em menos de 21 pinos sendo reduzidos e, assim, ler sub-corrente. Se isso ocorrer, um de cada vez, pegue cada par em que um fio é acionado e, em vez disso, conduza ambos. Se isso exceder a leitura atual acima de 20,1 mA, esse par estará aberto.

Pode-se usar um CPLD para esse aplicativo, mas um sistema como eu descrevi pode ser melhor. Isso poderia ser aprimorado ainda mais com a adição de circuitos para medir a corrente (em vez de simplesmente produzir um indicador de excesso / falta). Essa medição permitiria definir valores de tolerância para resistência.


1

É isso que você está procurando?

Maxwell 81840 - multiplexador de 128 canais


Provavelmente não. Este é um multiplexador analógico, embora você provavelmente também possa multiplexar sinais digitais com ele, se ficar de olho na velocidade do dispositivo. Além disso, este é um dispositivo rad-hard, será caro.
Stevenvh

Bem-vinda! Steven está certo, pode não ser a solução apropriada, mas boa captura! Talvez adicione uma descrição do componente abaixo do link
clabacchio

Obrigado clabacchio. Não tenho certeza de quanto mais detalhado posso descrever o componente. Eu nunca o usei antes nem tenho experiência suficiente ainda.
Daniel

chip sweeeeet :) Eu quero usar um em um projeto de piano digital, mas se você não consegue encontrar o preço pesquisando no Google, não pode pagar!
Andrew Wagner
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.