Estou pensando em encadear 40 x 74HC595 registros de turno. Toda a cadeia de 74HC595s irá ser controlado por um microcontrolador 5 V, o que vai gerar as SDI
, CLOCK
e LATCH
sinais.
Cada registrador de turnos e o microcontrolador terão seu próprio PCB, conforme ilustrado no diagrama abaixo:
Devido a restrições mecânicas, a distância entre cada registro de mudança será de cerca de 30 cm (12 pol.), De modo que os sinais de controle percorrerão uma distância de aprox. 12 m (40 pés). Além disso, todo o sistema será montado em um ambiente muito barulhento (perto de lâmpadas fluorescentes, cabos de alimentação etc.)
Minha preocupação é que os sinais de controle sejam muito barulhentos e os registros de deslocamento possam emitir as coisas erradas. Eu estava pensando em:
- Usando um buffer IC em cada placa, para armazenar em buffer os sinais de controle. Qual desses você recomendaria?
- Usando cabos blindados entre as placas para os sinais
- Baixar a
CLOCK
frequência o máximo possível. Eu só preciso atualizar o conteúdo dos registros algumas vezes por dia.
As soluções acima são uma boa coisa a fazer? O que mais posso fazer para reduzir ao mínimo o ruído (potencial) dos fios de sinal?
fonte
Respostas:
Use buffers Schmitt-trigger nas entradas de cada placa. Eles limparão os sinais para que qualquer ruído não dê pulsos falsos no relógio, por exemplo. O 74LVC3G17 é um buffer triplo não inversor.
Além disso, passe os sinais em buffer para a próxima placa. Caso contrário, todas as entradas seriam paralelas e você poderá exceder o fan-out do microcontrolador de acionamento (estou pensando especialmente na carga capacitiva total). A série de sinais de relógio e trava fornecerá um atraso de ondulação em toda a cadeia, mas os dados também o farão, e você planeja reduzir a velocidade de qualquer maneira.
fonte
O problema que pode ocorrer é que alguns relógios SR antes do próximo relógio SR, para que o próximo SR registre os dados incorretos. Uma solução (padrão?) Para isso é ligar o relógio começando no último SR.
Eu consideraria adicionar um buffer (schmit-trigger?) Em cada placa para todas as 3 linhas de sinal.
(editar) Reduzir a frequência do relógio não ajudará (a menos que tenha sido muito alto para começar). Os problemas que você pode ter ocorrem nas bordas do relógio, que você terá de qualquer maneira, não importa quão baixa você escolha sua frequência de relógio.
fonte
O maior problema ao encadear registros de turno é garantir que a relação de tempo entre o relógio usado por cada placa use para receber dados e a alteração nos dados da placa anterior seja previsível. O fato de a saída do 74HC595 mudar na mesma extremidade do relógio é um pouco irritante a esse respeito. Sugiro que o sinal do relógio seja armazenado em buffer à medida que passa por cada placa e que o sinal de dados que sai do 74HC595 de uma placa seja colocado em um buffer que o atrasará por um tempo um pouco mais longo que o buffer do relógio.
Como alternativa, você pode usar um registro de turno como o 74HC4094 que tem sua saída de dados alterada na borda do relógio em queda, ou você pode adicionar um flip-flop entre a saída dos últimos 74HC595 na placa e na próxima placa e ter esse flip-flop trave sua saída na extremidade descendente do relógio que aciona os 74HC595 (talvez passe o relógio por dois inversores para amortecê-lo e alimentar o sinal do relógio invertido no flip-flop).
Se o número de saídas 74HC595 que você estiver usando for um (ou mais) menor que o número fornecido por seus chips (por exemplo, em uma placa com dois 74HC595, você só precisa de 15 saídas), você poderá alimentar os últimos 74HC595 em uma placa com um relógio invertido dos outros, mas isso custaria o uso de uma saída 74HC595 para cada vez que o sinal passar entre um relógio não invertido 74HC595 e um relógio invertido 74HC595.
fonte