Comunicação SPI em cabo longo

484 views
Skip to first unread message

Renan Birck Pinheiro

unread,
May 19, 2014, 5:28:50 PM5/19/14
to sis_emb...@googlegroups.com
Olá,

Eu estou com um problema: preciso comunicar um MSP430 com um sensor (um acelerômetro LIS3DH) via SPI (não tenho como mudar para I2C tão facilmente) e os dois estarão a uma distância de aproximadamente 50 cm em placas separadas conectadas por um cabo.

Como proceder nesse caso? SPI tem algum problema trabalhando a longas distâncias?

Obrigado,
Renan
--
Talk is cheap, show me the code. - Linus Torvalds

Francesco

unread,
May 19, 2014, 5:36:30 PM5/19/14
to sis_emb...@googlegroups.com
Olá Renan,

Existem uma possibilidade sim, você pode utilizar um conversor diferencial para o sinal.
Como os sinais da SPI são unidirecionais, você pode utilizar um MAX485 ou um SN75176 para garantir a confiabilidade do sinal a longas distâncias. A única desvantagem é que você precisará de dois fios para cada sinal, em vez de um.



Outra possibilidade menos confiável, mas para apenas um fio, é a utilização de um MAX232.

O que acha? Isso resolveria?
Um abraço.

Francesco
--
Você recebeu essa mensagem porque está inscrito no grupo quot;sis_embarcados" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para sis_embarcado...@googlegroups.com.
Para postar nesse grupo, envie um e-mail para sis_emb...@googlegroups.com.
Acesse esse grupo em http://groups.google.com/group/sis_embarcados.
Para mais opções, acesse https://groups.google.com/d/optout.

Message has been deleted

Rogerio Machado

unread,
May 19, 2014, 7:18:08 PM5/19/14
to sis_emb...@googlegroups.com
Nao vejo problema interfacear diretamente sem qualquer condicionamento(50cm distancia) do sinal pois o eh de baixa velocidade. Acho que pode haver problemas em ambientes ruidosos, entao a solucao do Francesco de sinal diferencial pode ser melhor. Talvez um cabo blindado possa resolver o problema!

Rogerio Machado

unread,
May 19, 2014, 7:36:14 PM5/19/14
to sis_emb...@googlegroups.com
Com com resistores em serie  acho que eh possivel limitar problemas de integridade de sinal. Limitando o slew-rate

Alain

unread,
May 19, 2014, 7:37:13 PM5/19/14
to sis_emb...@googlegroups.com

O chato é que vai precisar de 3chips rs485 ou 2 rs232

Uça alternativa que já usei e um 74HC14, buferiza a saida e põe um rc nas entradas como filtro
Melhora muito a imumidade a ruídos
(minha impressora 3D está ligada assim com cabo manga de 5m)

Enviado através do AquaMail para Android
http://www.aqua-mail.com

A 19 de maio de 2014 20:17:08 Rogerio Machado <rog...@gmail.com> escreveu:

Nao vejo problema interfacear diretamente sem qualquer condicionamento(50cm distancia) do sinal pois o sinal eh de baixa velocidade. Acho que pode haver problemas em ambientes ruidosos, entao a solucao do Francesco de sinal diferencial pode ser melhor. Talvez um cabo blindado possa resolver o problema!


Em segunda-feira, 19 de maio de 2014 18h28min50s UTC-3, Renan Birck Pinheiro escreveu:

--

Rogerio Machado

unread,
May 19, 2014, 7:43:44 PM5/19/14
to sis_emb...@googlegroups.com
Ja vi varias impressoras Centronics antigas que usam esse mecanismo com uma porta logica com  schimitt trigger. Mas soh para o sinal de ACK. Boa solucao

Rogerio Machado

unread,
May 19, 2014, 7:50:43 PM5/19/14
to sis_emb...@googlegroups.com
+ Resistores de pullup na entrada de cada sinal SPI

Rogerio Machado

unread,
May 19, 2014, 8:11:10 PM5/19/14
to sis_emb...@googlegroups.com
Alguns micontroladores tem controle do slew-rate nos sinais de I/O. Pode ajudar a melhorar a integridade do sinal. https://community.freescale.com/thread/50706

Francesco

unread,
May 20, 2014, 7:04:30 AM5/20/14
to sis_emb...@googlegroups.com
O 74HC14 é uma boa opção para  recondicionar o sinal.
Mas para o RS232, não haveria a necessidade de 2 componentes... basta utilizar o MAX223, MAX225 ou MAX241 que já existem conversores internos suficientes.
No caso do RS485, realmente não há muita opção.

Walter Gallegos

unread,
May 20, 2014, 5:13:07 PM5/20/14
to sis_emb...@googlegroups.com
Olá Renan 

A pergunta aqui seria o LIS3DH suporta até 10MHZ no SCLK, mas qual velocidade de SCLK seu projeto necessitaria ?

Se usar uma frequência do baixa não vejo problema para usar um cabo de 50cm.

Renan Birck Pinheiro

unread,
May 20, 2014, 5:14:55 PM5/20/14
to sis_emb...@googlegroups.com

Em 19 de maio de 2014 18:36, Francesco <francesco...@gmail.com> escreveu:
Outra possibilidade menos confiável, mas para apenas um fio, é a utilização de um MAX232.

O que acha? Isso resolveria?
Um abraço.

​Ao meu ver, acredito que essa solução seria válida. Vou realizar alguns testes.

Rogerio Machado

unread,
May 20, 2014, 8:25:13 PM5/20/14
to sis_emb...@googlegroups.com
Frequencia baixa porem deve limitar o slew rate para minimizar o overshoot e crosstalk. Por isso que sugeri adicionar um resistor em serie e/ou configurar o microcontrolador(se tiver) no sinal da SPI

Rogerio Machado

unread,
May 20, 2014, 8:30:45 PM5/20/14
to sis_emb...@googlegroups.com
Na placa de PCB eh possivel rotear com algum controle de impedancia. Minimizando problemas de integriadade de sinal. Com um cabo comum de 50cm acredito haver problemas que acho que podem ser minimizados com esse recurso assumindo que a frequencia eh baixa e o slewrate tb. Porem respeitando os limites no datasheet do chip e da especificacao do SPI 

Rogerio Machado

unread,
May 20, 2014, 8:31:54 PM5/20/14
to sis_emb...@googlegroups.com
Acho que deve ser considerado tb o "set-up time" entre sinal de clock e dados

Rogerio Machado

unread,
May 20, 2014, 8:42:12 PM5/20/14
to sis_emb...@googlegroups.com
A especificacao do ATA(http://en.wikipedia.org/wiki/Parallel_ATA) preve um resistor em serie para este fim

Rogerio Machado

unread,
May 20, 2014, 8:46:18 PM5/20/14
to sis_emb...@googlegroups.com
Resumindo: Um sinal de 10Hz com slew-rate de 1ns pode ser tao problematico qto um de 100Mhz e 1ns slewrate. 

Alain

unread,
May 20, 2014, 9:13:25 PM5/20/14
to sis_emb...@googlegroups.com

Este tópico é o melhor exemplo que já vi de "over-complicated"

Enviado através do AquaMail para Android
http://www.aqua-mail.com

--

Alain

unread,
May 20, 2014, 9:14:45 PM5/20/14
to sis_emb...@googlegroups.com

Não se você fizer como eu falei, lembra daquele RC? E da histerese (HC14)?

Enviado através do AquaMail para Android
http://www.aqua-mail.com

--

Marcelo Jo

unread,
May 20, 2014, 10:26:22 PM5/20/14
to sis_emb...@googlegroups.com
  Rogério, nao sendo chato mas já sendo.. tem como vc enviar uma mensagem um pouco maior que inclua mais informações... hehhe Aqui eu acabo recebendo 5 emails teus um atrás do outro a cada minuto, tipo um email com cada frase! =D

  Valeu!

  Marcelo


--

Rogerio Machado

unread,
May 21, 2014, 8:51:12 AM5/21/14
to sis_emb...@googlegroups.com
:) Isso eh um defeito que nao consigo perder. Mas vou tentar melhorar da proxima vez!

Thiago Lima

unread,
May 21, 2014, 9:26:25 AM5/21/14
to sis_emb...@googlegroups.com
Boa!!!

Vejo que a imunidade a ruidos é um problema a ser considerado mesmo, conforme Alain colocou, certo?
Um campo magnetico externo gerando uma corrente indesejada no cabo pode até "queimar o CI".

A opção que Francesco colocou é bem coerente!

Parece que para velocidades baixas, nao existe mesmo problema (minimiza o overshoot e crosstalk, conforme colocou o Rogério) ;)
Não entendi a necessidade do resistor como pull up... Me explica, Rogério?

[]s


Rogerio Machado

unread,
May 21, 2014, 9:43:09 AM5/21/14
to sis_emb...@googlegroups.com
http://s100computers.com/My%20System%20Pages/Terminator%20Board/Bus%20Terminator%20Board.htm

The bus terminator should improve bus electrical characteristics by reducing reflections and "bounce".  It acts a bit like a shock absorber or sound dampener.

Rogerio Machado

unread,
May 21, 2014, 9:46:45 AM5/21/14
to sis_emb...@googlegroups.com

Alain

unread,
May 21, 2014, 10:02:53 AM5/21/14
to sis_emb...@googlegroups.com

Pull up só é necessário quando existe a possibilidade de ficar deconectado ou tri-state, como conector aberto com circuito e.energizado provocar problemas, ou um pino de uC desconfigurado momentaneamente

Um resistor de 33R em série pode diminuir oscilações na linha, mas nem sempre é necessario

Enviado através do AquaMail para Android
http://www.aqua-mail.com

Rogerio Machado

unread,
May 21, 2014, 10:17:56 AM5/21/14
to sis_emb...@googlegroups.com
Importante citar que o resistor em serie deve ficar logo na saida do sinal de clock. Em se tratando do sinal de dados bidirecional talves considerasse colocar 2 resistores em cada ponta do cabo. Realmente esta ficando complicado algo que aparentemente eh simles. Mas todas essas sugestoes estao embasadas em experiencias praticas de circuitos de alta velocidade principalmente em prototipos onde quase sempre usamos fios de grande extensao para interligar os modulos. Com impedancia alta na linha de transmissao. No meu ultimo prototipo interliguei um ARM Cortex M4 e uma FPGA da Altera DE0 nano. O contrlador de memoria do ARM funciona a 60Mhz com slew rates de > 3ns eh conectado na FPGA usando fios wireup de alguns centimetros. Depurando com o analisador logico comecei a perceber crosstalk entre as linhas do sinal de clock. E problemas de overshoot. Na verdade uma suposicao pois nao tenho um osciloscipo. Com tentativa e erro consegui ajustar resistores em serie na linha do clock com o fim de diminuir o overshoot/crosstalk. Agora com a versao final do projeto em PCB o resistor em serie nao eh necessario

Rogerio Machado

unread,
May 21, 2014, 10:20:34 AM5/21/14
to sis_emb...@googlegroups.com
Tambem eh importante citar que um sinal de baixa frequencia nao necessariamente eh de baixa velocidade. 

Rogerio Machado

unread,
May 21, 2014, 10:36:07 AM5/21/14
to sis_emb...@googlegroups.com
No referido prototipo tb consegui melhorar a integridade do sinal no barramento de dados de 16 bits usando resistores de pullup. Visto que 16 resistores em serie nao eh muito pratico


Em quarta-feira, 21 de maio de 2014 11h17min56s UTC-3, Rogerio Machado escreveu:

Rogerio Machado

unread,
May 21, 2014, 10:47:26 AM5/21/14
to sis_emb...@googlegroups.com
Acho que a confusao eh porque um sinal de baixa frequencia nao necessariamente eh de baixa velocidade. Entao eh falso assumir que apenas baixar a frequencia se resolve o problema de integridade de sinal. Baixar a frequencia pode ser configurado no microcontrolador. Alguns microcrocontrolador tb permitem baixar o slewrate. Entao a saida eh o uso do resistor em serie.

Prof. Alessandro Cunha

unread,
May 21, 2014, 4:37:20 PM5/21/14
to sis_emb...@googlegroups.com

Caraca!!!!

 

Minha caixa de entrada está parecendo um chat!

 

Abraços.

 

Alessandro Ferreira da Cunha
TECHtraininG - ENGENHARIA E TREINAMENTOS
aless...@techtraining.eng.br
SKYPE --> alessandroferreiradacunha
twitter --> @prof_afcunha
(11) 995–363-828
www.techtraining.eng.br

Enviado por uma Beagle Bone Black

Rogerio Machado

unread,
May 22, 2014, 2:46:14 PM5/22/14
to sis_emb...@googlegroups.com
Thiago vc acredita que isso faz sentido aplicado a um barramento SPI visando melhorar a integridade do sinal??


Em quarta-feira, 21 de maio de 2014 10h43min09s UTC-3, Rogerio Machado escreveu:

Alain Mouette

unread,
May 22, 2014, 3:43:45 PM5/22/14
to sis_emb...@googlegroups.com
Melhora, mas não muito. O resistor em série para cabos longos é mais eficaz, olhe um pente de memória e vai ver uma fileira enorme deles...

O barramento S100 era muito problemático e precisava dessas coisas. Muitas regras de projeto não haviam sido seguidas!!!

Alain
=== Minha MesaXYZ: <http://mesa-reprap.blogspot.com.br/> ===

Renan Birck Pinheiro

unread,
May 22, 2014, 7:50:20 PM5/22/14
to sis_emb...@googlegroups.com

Em 20 de maio de 2014 18:13, Walter Gallegos <wsf...@adinet.com.uy> escreveu:

A pergunta aqui seria o LIS3DH suporta até 10MHZ no SCLK, mas qual velocidade de SCLK seu projeto necessitaria ?

Se usar uma frequência do baixa não vejo problema para usar um cabo de 50cm.


​Oi,

Desculpa por não responder antes, eu estava ocupado com duas provas e com outras partes do meu TCC​.

Eu pensei nessa questão da velocidade também. ​Não vou usar uma velocidade muito alta (ainda não decidi, mas imagino que 2 a 4 MHz sejam suficientes). ​

Vou realizar alguns testes, aplicando as sugestões apresentadas aqui (buffers, resistores etc...), quando eu tiver mais tempo e então eu retorno minhas conclusões para o grupo.

​Obrigado pela discussão (nunca imaginei que uma pergunta aparentemente simples pudesse resultar em 30 mensagens :).

Renan​

PJ-MecNet

unread,
May 26, 2014, 11:06:50 AM5/26/14
to sis_emb...@googlegroups.com
lembre-se do que foi dito aqui pelo Rogério: "Acho que a confusão eh porque um sinal de baixa frequência não necessariamente eh de baixa velocidade. Entao eh falso assumir que apenas baixar a frequencia se resolve o problema de integridade de sinal. Baixar a frequência pode ser configurado no microcontrolador. Alguns microcrocontrolador tb permitem baixar o slewrate. Entao a saida eh o uso do resistor em serie." 

Jean Prigol

unread,
Jul 31, 2016, 1:17:22 PM7/31/16
to sis_embarcados
Olá Renan, conseguiu resolver  o problema? Estou prototipando uma placa para converter dados paralelos (12 bits) e transmiti-los a uma taxa de 5Mbits via SPI com cabo de aproximadamente 2 m

Renan Birck Pinheiro

unread,
Jul 31, 2016, 1:30:55 PM7/31/16
to sis_emb...@googlegroups.com

Em 31 de julho de 2016 14:17, Jean Prigol <jeanp...@gmail.com> escreveu:
Olá Renan, conseguiu resolver  o problema? Estou prototipando uma placa para converter dados paralelos (12 bits) e transmiti-los a uma taxa de 5Mbits via SPI com cabo de aproximadamente 2 m

​Oi,

No fim o projeto foi cancelado e então não mexi mais com isso. Talvez ​alguém da lista tenha outras sugestões para fornecer.

​Renan​


--
Renan Birck Pinheiro - Blog - LinkedIn - GitHub
+55 47 97112201 - skype: birck.renan
 

Reply all
Reply to author
Forward
0 new messages