Comunicação de placa curta para placa

24

Meu MCU opera um barramento SPI com cerca de 4 dispositivos. Eu gostaria de estender esse barramento para ficar fora da placa também, ou seja, ter algumas PCBs conectadas à placa "principal" e estender a funcionalidade. A distância "almofada a almofada" seria:

comprimento do traço da placa principal + comprimento do cabo + comprimento do traço na placa de extensão

3 "+ 6" + 3 "= cerca de 12"

Na minha experiência, mesmo um sinal de 1 MHz, com cerca de 7 ns de tempo de subida, nessa distância através de um cabo de fita ultrapassava em mais de 1 V (mas não havia toque excessivo). As placas serão alimentadas pela mesma fonte de alimentação.

insira a descrição da imagem aqui

Nota: Você não pode ver os tempos de subida aqui, mas pode ver o excesso excessivo - este é um sinal de 3,3V. E sim, isso foi medido corretamente com um fio muito curto da sonda ao terra. Como muitas vezes é recomendado neste site. Não acho que seja um erro de medição.

Eu gostaria que o sistema funcionasse em 4 MHz, mas 2 MHz também é aceitável. O max. o número de placas que eu gostaria de conectar seria de cerca de 4 e isso estenderia o barramento SPI para cerca de 12 dispositivos. Eu não acho que isso seria muito difícil de gerenciar via código, pois eu já tenho algo funcionando assim. Ter as linhas de seleção de escravos adicionais também não é um problema.

No entanto, minha preocupação é como enviar os dados SPI de uma placa para outra. Devo apenas enviar SPI direto ou convertê-lo em LVDS em uma extremidade e depois convertê-lo novamente em SPI na outra extremidade?

Saad
fonte
11
Qual é o seu tempo de subida?
precisa saber é o seguinte
@ Kortuk Esqueci completamente de listar isso, desculpe. Atualizado a pergunta.
Saad
O tempo de subida do 7nS está gritando rápido.
Kortuk
Desculpe por duas perguntas irrelevantes. qual é o osciloscópio que você usou? 2. Por que os anéis são tão importantes?
Julio

Respostas:

15

A regra geral diz que você deve calcular os efeitos da linha de transmissão se o comprimento da sua conexão for maior que 1/10 do comprimento de onda do sinal.

insira a descrição da imagem aqui

As linhas de transmissão causam reflexões nas quais mostram uma mudança repentina na impedância. O sinal refletido é adicionado ao original, pode refletir novamente no lado do transmissor e, dessa forma, ir e voltar. O resultado é mostrado no gráfico: a ultrapassagem de que você está falando e alguns toques.

Um comprimento de fio de 12 "(30cm) é 1/10 de um comprimento de onda de 3m, ou 100MHz. 1MHz e até 4MHz não deve causar muitos problemas aqui. Terminar a linha, como Wouter diz, pode ser a primeira medida. a entrada é provavelmente alta impedância, e isso nunca é uma boa correspondência. Como você tem três peças diferentes em sua conexão (PCB, fio, PCB), é difícil encontrar a impedância característica. (Também será diferente para a PCB e o fio, portanto, em frequências muito altas, você também terá reflexos nas conexões do cabo.) Dado o comprimento curto e a baixa frequência, o valor do seu resistor de terminação não é crítico. 100 pode ser muito baixo para o microcontrolador, a maioria deles pode fornecer 33mA (ou até 50mA, a 5V) .Eu tentaria um 1kΩΩΩ resistor para começar e ver até onde isso nos leva.

editar (atualização da pergunta) O
tempo de subida parece ser 7ns. Isso é rápido, como diz Kortuk, significa que você tem um espectro de pelo menos 400 MHz e esses harmônicos de fato sofrerão efeitos de linha de transmissão, mesmo que seu relógio seja de apenas 1 MHz. Tente filtrá-los, uma largura de banda de 20 MHz (80 MHz para o relógio de 4 MHz) oferece tempo de subida mais que suficiente. Esta é uma onda quadrada de 1 MHz filtrada com uma parede de tijolos LPF a 20 MHz:

insira a descrição da imagem aqui

A colocação de um resistor em série formará um LPF de primeira ordem com a capacitância da linha. Se estimarmos que em 50pF, então

R=1 12π100MHz50.pF=32.Ω

fornece frequência de corte de 100MHz. Portanto, um resistor da série 33 deve diminuir o tempo de subida, mas deixe o suficiente para ter um bom sinal em 4MHz.Ω

stevenvh
fonte
2
A frequência de 1 MHz é irrelevante. É o tempo de subida que é importante.
precisa
@stevenvh, Tentei adicionar um resistor de 1K ao terra no destino. Isso ajudou nos picos, mas também diminuiu um pouco o nível do sinal. Isso é normal? Quando digo o nível em que o sinal se acalma. Também tentei 500 Ohms, 220 Ohms mesmo efeito, mas mais pronunciado.
Saad
@Saad - Quanto custa um pouco? 3.3V em 1k é apenas 3mA, o driver deve ser perfeitamente capaz de fornecer isso. Pode ter alguma resistência interna, mas são algumas dezenas de ohms, então o nível deve diminuir apenas 2 ou 3%.
stevenvh
@ stevenvh esqueci que eu resistor série na linha, então, obviamente, eu vou cair alguma tensão. Parvo eu! No entanto, mesmo um resistor de 180 Ohm não ajudou muito. Trouxe o overshoot para 4.5V. Acho que vou precisar de uma resistência muito menor, mas então tenho que me preocupar com o empate atual.
Saad
Além disso, devo considerar a rescisão ativa? O uso de baixa resistência aumentará os requisitos de energia em toda a placa e, como o barramento está sempre funcionando, aumenta o consumo de energia. Usar diodos Schottky como braçadeiras funcionaria bem?
Saad
6

Para um ônibus tão curto, eu tentaria colocar um pequeno resistor em série com qualquer coisa que estivesse dirigindo uma linha. Essa não é a maneira ideal teórica de levar em consideração a teoria das linhas de transmissão, mas uma abordagem pragmática que acho que funcionará bem o suficiente para o seu caso. Experimente 47 Ω para começar e veja o que isso faz. Se isso ajudar, mas não o suficiente, você pode ir mais alto, mas eu não excederia 120 Ω. Provavelmente, em algum lugar desse intervalo, você encontrará um valor que funcione bem o suficiente.

Olin Lathrop
fonte
Eu tentei essa abordagem, Olin. Eu usei um resistor de 100 Ohm e ele diminuiu o overshoot em cerca de 500 mV e o reduziu para 4,3 V a partir de 4,7 V. Isso ainda é um volt acima de 3,3 V! O tempo de subida foi, em seguida, 12 ns, em comparação com o inicial 7.
Saad
Parece que eu estava calculando meu resistor enquanto você postava sua resposta, Olin. Desculpe-me por isso #
0610 stevenvh
@OlinLathrop Aumentei a resistência da série para 330 Ohms e elevou a superação para 3.7V. Estou muito feliz com isso. O tempo de subida foi de 10 ns. Devo ficar com isso ou colocar resistores de terminação na próxima revisão da placa? Eu pergunto porque você recomendou não exceder 120 Ohms.
Saad
@ Saad: Eu estava preocupado com o efeito de outras cargas na linha e ela ficar suscetível ao ruído. Se os sinais estiverem limpos e não houver cargas DC (apenas entradas CMOS de alta impedância, por exemplo) nas linhas, siga em frente e use os 300 Ohms.
Olin Lathrop
4

AFAIK, a superação pode ser eliminada pela rescisão do suporte, se o seu motorista puder conduzir a carga. Caso contrário, algum par dedicado de driver / receptor como o LVDS ou talvez o RS485 certamente funcionará.

Wouter van Ooijen
fonte
+1: usamos frequentemente o LVDS para transmitir sinais SPI.
Jason S
1

No passado, tive sérios problemas ao executar o SPI por cabos de fita, apesar de muito mais longos do que o que você descreve. A imunidade a ruídos se tornou um problema real e comandos corrompidos acabaram chegando aos meus periféricos. Foi o suficiente para falhar nos testes de imunidade a ruídos da CE. Se você se deparar com problemas a esse respeito mais adiante, recomendo colocar um MCU separado em cada placa e conectá-los via CANbus.

Stephen Collings
fonte