Estou pensando em implantar um sistema de automação residencial em torno do meu Raspberry Pi, mas achei o preço e espaço necessários para inserir um Pi em todos os lugares onde algum controle é necessário demais, mas os cabos Cat5e necessários para esse projeto já estão instalados durante a reforma. Eu tenho alguns PCF8574, PCF8591 e SSRs por aí, então é possível controlá-los usando cabos Cat5e?
Todos os meus cabos Cat5e já estão conectados com pinagem TIA / EIA 568B. Eles fazem parte do meu cabeamento estrutural e não são blindados, portanto é necessária uma tensão de linha mais alta. Estou pensando em enviar linhas de energia e I2C pelo cabo, com esta pinagem:
Pin 1 (Pair 1): SCL+
Pin 2 (Pair 1): SCL-
Pin 3 (Pair 2): SDA+
Pin 4 (Pair 3): +12V
Pin 5 (Pair 3): +12V
Pin 6 (Pair 2): SDA-
Pin 7 (Pair 4): GND
Pin 8 (Pair 4): GND
A disposição dos pinos de energia é igual à fiação 100BASE-TX PoE, portanto a classificação de energia também será a mesma e o uso da sinalização diferencial bidirecional é encontrado no 1000BASE-T, que requer Cat5e.
As linhas I2C SCL e SDA originais são derivadas em dois pares diferenciais bidirecionais nos níveis TTL (o dreno aberto não é mantido no fio, mas restaurado no dispositivo de terminação de linha / mudança de nível que estou projetando)
Alguma sugestão sobre isso? Além disso, qual chip devo usar para converter as linhas I2C na sinalização diferencial? Por favor, sugira chips com a opção DIP through-hole para mim. Eu não sei como lidar com coisas SMT.
EDITAR
Encontrei este chip, SN65LBC180, é uma boa escolha? Como conectá-lo a uma unidade bidirecional? Como mudar o nível (é uma peça BiCMOS que requer nível TTL, mas o Pi é acionado nos níveis de 3,3v CMOS) e torná-lo compatível com dreno aberto?
EDIT 2
Os comentaristas sugeriram o RS-485 que me pareceu aceitável, mas ainda é necessário que os dois pares diferenciais sejam bidirecionais e apenas dois pares diferenciais bidirecionais. Estou redirecionando os cabos Ethernet existentes.
EDIT 3
Desde que alguém trouxe isso à tona, não posso usar o CAN. Não há como encaixar o CAN no RPi sem sacrificar nada (o SPI é ocupado por uma tela sensível ao toque, portanto, nenhum conversor de SPI para CAN)
Estou ciente da limitação do I2C PHY, então estou essencialmente tentando ajustar o 1000BASE-T PHY a ele - sinalização diferencial bidirecional para sinais SCL e SDA, mas, além disso, é executado o protocolo I2C.
EDIT 4
Um novo chip veio a mim: o NXP P82B96, que divide o I2C em 4 linhas unidirecionais, que, por sua vez, podem ser usadas para alimentar o SN65LBC180 por meio de opto-isolamento (somente no lado Pi) para formar uma sinalização pronta para longa distância de 8 pinos. Agora só preciso descobrir como obter energia através do fio ou como determinar se o barramento está enviando e tornar os pares bidirecionais.
EDIT 5
A partir das sugestões de respostas, acho que preciso mudar um pouco a pinagem de energia:
Pin 1 (Pair 1): SCL+
Pin 2 (Pair 1): SCL-
Pin 3 (Pair 2): SDA+
Pin 4 (Pair 3): +5V
Pin 5 (Pair 3): GND
Pin 6 (Pair 2): SDA-
Pin 7 (Pair 4): GND
Pin 8 (Pair 4): +12V
A tensão de sinalização diferencial I2C é TTL. O + 5V sobre o par 3 vem do Pi, sem buffer, mas fundido. O par + 12V no par 4 pode não estar presente, é usado apenas para acionar alguns dispositivos de alta potência. Se necessário, o dispositivo pode usar sua própria fonte de alimentação e deixar os dois trilhos desconectados ou fornecer sua própria tensão mais alta, mas use o trilho de 5V.
RISCA ISSO
A pinagem ainda é meu design original, compatível com 802.1af.
fonte
Respostas:
Tentar se relacionar com a CII é uma má idéia. A CII é realmente destinada à comunicação entre chips em uma única placa. Como a corrente máxima necessária para puxar uma linha para baixo é limitada, as linhas têm impedância relativamente alta (alguns kΩ). Isso significa que eles podem captar ruídos facilmente, o que é um problema sério quando o cabo não é blindado nas paredes, possivelmente ao lado dos fios de energia CA
Eu usaria CAN para isso. O CAN usa um único par trançado unido com apenas 60 Ω em qualquer ponto, e o sinal é diferencial. Isso significa que a maioria do inevitável ruído em modo comum que será captado devido ao acoplamento capacitivo pode ser cancelado pelos receptores. O CAN executando a 500 kbits / s pode cobrir algo do tamanho de uma casa comum.
Muitos microcontroladores estão disponíveis hoje com o CAN incorporado. Você geralmente precisa de um chip tranceiver físico separado (como o MCP2551 comum), mas as camadas mais baixas do protocolo são implementadas em silício no periférico do CAN. O firmware interage com o barramento CAN no nível de envio e recebimento de pacotes completos. A detecção e nova tentativa de colisão, geração de soma de verificação, detalhes da sinalização do pacote de barramento, validação de soma de verificação recebida e ajuste de desvio do relógio são todos tratados para você.
Não caia no RS-485. Essa é uma relíquia de uma época passada. Ele também usa um único sinal diferencial como o CAN, além de ter boa imunidade a ruídos. No entanto, as pessoas geralmente caem no RS-485 porque parece "mais simples". Isso é apenas porque eles não olham para todo o sistema. Primeiro, não é realmente menos complexo eletricamente. Você ainda precisará de algum tipo de transistor para dirigir e receber o sinal diferencial. Se você tem um transceptor RS-485 conectado ao UART do microcontrolador ou um MCP2551 conectado ao periférico CAN, é irrelevante em termos de custo e complexidade de hardware. A grande diferença é que o RS-485 o deixa no nível de bytes brutos (via UART). Isso significa que para implementar qualquer sistema significativo e robusto, você precisa inventar seu próprio protocolo para lidar com a detecção de colisões, decida como lidar com novas tentativas, pacotes, geração e verificação de soma de verificação, controle de fluxo etc. Você pode usar uma única arquitetura mestre, mas acertar os detalhes é muito mais complicado do que as pessoas pensam que não analisaram todas cuidadosamente. Com o CAN, você apenas envia e recebe pacotes, e o hardware cuida dos detalhes.
fonte
I2C não é o caminho a percorrer. Os rastreadores CAN custam um dólar cada, e você pode usá-los como uart trancieves e escrever seu próprio protocolo para não precisar de um micro compatível com latas que não queira usar a pilha completa.
Eu sempre me sinto um pouco desconfortável quando vejo os condutores cat5 funcionando paralelamente por mais corrente. Isso me incomoda porque, se um condutor quebra, o outro carrega a corrente completa do sistema. As classificações atuais do cat5 são muito conservadoras, portanto as chances de um incêndio são bastante baixas, mas eu simplesmente não gosto da possibilidade.
A maneira segura de fazer isso é ter um polifusor nos dois trilhos de energia e unir os aterramentos à fonte, e conectar cada dispositivo a um e apenas um conjunto de energia / terra. Dessa forma, se um fio falhar, os dispositivos que usam essa linha perderão energia, em vez de uma linha ser forçada a transportar a energia de duas.
Muitas pessoas gostam de colocar força e terra nos dois pares trançados por razões EMI, em vez de terem um par de energia e um par de terra. Se você tiver dois pares de energia / terra, a linha de energia estará mais próxima da terra e os campos serão cancelados, reduzindo as ondas de rádio transmitidas ou recebidas pelas linhas de energia. Desnecessário, mas agradável, se houver muito ruído elétrico zumbindo.
Na minha opinião, 12V é muito baixo para distribuição de energia quando 24v ainda é razoavelmente seguro e muito mais eficiente.
fonte
Se a automação simplesmente ligar e desligar as coisas em casa, eu simplificaria isso:
fonte
simular este circuito - esquemático criado usando o CircuitLab
EUREKA! Descobri isso! (não testado, testará este fim de semana)
Os chips de interface são buffer / divisor NXP P82B96 I2C e 2 chips de interface de barramento CAN SN65HVD251P da TI. Basicamente, estou executando o I2C no CAN PHY.
O P82B96 entende o protocolo I2C e lida com a arbitragem de barramento para mim, além de fornecer pinos Tx e Rx separados que podem ser conectados. Eu os alimento no transceptor CAN SN65HVD251P e ele fornece o par diferencial bidirecional para enviar os fios.
Os pinos de alimentação vêm diretamente, sem buffer do trilho de 5V do meu Pi. (Não usarei tensão e sinalização de 12V por um tempo)
fonte
Independentemente dos méritos da CII no nível do chip, a implementação proposta será muito difícil. O problema é a arbitragem de barramento. Embora várias unidades possam ser paralelas usando, por exemplo, o RS485, a grande questão será:
Como alguma unidade sabe se pode assumir o controle do barramento para enviar dados?
Na CII, com linhas de sinal de dreno abertas, a transferência bidirecional é fácil - mas com ônibus tristados, você precisa de uma maneira de garantir que apenas uma unidade tente dirigir o ônibus por vez. Isso será complicado. Você pode fazê-lo, principalmente se você estabelecer um único mestre e exigir que todos os escravos tenham restrições rígidas de tempo no envio de dados e que eles somente enviem dados se solicitados pelo mestre, mas isso exigirá um esforço considerável de sua parte ao projetar o placas de interface para o mestre e os escravos.
Quanto aos drivers / receptores físicos, o RS485 é bom e existem muitos chips de interface disponíveis. Apenas o Google.
fonte
Não sei se você está interessado em uma solução pré-fabricada, em vez de construir seu próprio circuito, mas pensei em salientar que a Pololu vende essas placas I²C de longa distância diferencial extensor fabricadas pela SJTbits, que parecem fazer exatamente exatamente O que você está procurando. (Divulgação completa: trabalho para a Pololu.)
Mesmo se você não quiser usá-lo diretamente, talvez olhar para o circuito usado possa lhe dar algumas idéias. Você pode ver o esquema na folha de dados; usa um buffer NXP PCA9600D, driver de linha diferencial TI AM26LS31CDR e receptor de linha diferencial TI AM26LS32ACDR.
fonte
Eu sei que isso é um pouco antigo e uma solução parece ter sido resolvida em algum lugar entre as respostas, mas eu tinha essa sugestão a oferecer. Existem dispositivos como o PCA9614 / 5/6 da NXP que estou vendo agora como uma solução para um barramento I2C de longa distância mais robusto (buffer PC29614 multiponto multiponto de modo rápido e diferencial I2C do barramento diferencial) . Essencialmente, é verdade que está se tornando algo diferente do I2C verdadeiro, mas nas extremidades do barramento é invisível para os dispositivos. Essa família em particular converte os sinais em 2 pares diferenciais bidirecionais e também existem dispositivos semelhantes aos já mencionados nos comentários, que se traduzem em 4 pares diferenciais unidirecionais. A conversão para apenas 2 pares permite que você use o cabo CAT e ainda tenha 2 pares para alimentação / terra.
fonte
Afirmativo! Atualmente, estou tentando resolver praticamente o mesmo problema. Também estou tentando usar o I2C sobre cat5 para automação residencial com minha pinagem personalizada. O motivo é o custo, quero que seja muito econômico e os componentes I2C ainda pelo menos 5 vezes mais baratos do que os attiny13 uC (o AFAIU uC é necessário para CAN e RS485).
1) Atualmente, estou apenas em processo de teste para a primeira parte de um sistema e agora sou bem-sucedido com cabo de 15m de comprimento com 5V e conexão direta SCL e SDA! Eu uso PCF8574 e 2 relés para acionar as luzes da minha sala. Pinagem é
2) Entendo que não haverá mais dois relés ou mais 10 metros ... Uma queda de tensão é significativa (de 5,5 a 4,7). Portanto, para o problema de queda de tensão, vou colocar 12V em uma linha e adicionar reguladores de tensão de 5V nas placas para manter a tensão fina em todos os lugares, independentemente da queda de toda a linha. De qualquer maneira, colocarei fontes de alimentação adicionais nas próximas linhas.
3) O sinal em si pode ser aprimorado usando P82B96 ou P82B715 barato sem dividir em linhas diferenciais. Um NXP em si usa o Cat5 em algumas apresentações, mas não consigo encontrar sua pinagem. Uma parte importante aqui é que eles usam claramente linhas de sinal em pares diferentes ... por exemplo, um par é GND + SDA e o outro é VCC + SCL.
4) Outro ponto interessante - esses buffers podem simplesmente aumentar uma amplitude até 12V para aumentar a resistência ao ruído. Então, provavelmente vou tentar colocar 12V nas linhas de sinal também e isso deve permitir a entrada direta de fios de 12V ... Mas isso me forçará a colocar algo como P82B96 em cada dispositivo.
Como você deve ter notado, eu também uso uma linha de interrupção separada ... Atualmente, o Master está na placa arduino conectada ao PC. De qualquer maneira, o software mestre principal estará em um PC 24x7, portanto, o arduino apenas traduz o sinal e lida com a interrupção. Posso enviar uma configuração específica para o manuseio de interrupções a bordo, por exemplo, para manejar conveniente alternar interruptores por interrupção ... Isso me permite esquecer qualquer atraso ao alternar manualmente a luz. O manuseio de interrupção é uma vantagem adicional do i2c.
Portanto, minha ideia é que o I2C seja simples o suficiente para ser aplicável em cabos de apartamentos urbanos de <= 100m. Em vez de ir para o sinal diferencial, espero poder reduzir a frequência extra.
Eu gosto da sua ideia de colocar 5V e 12V, pois isso reduz a necessidade de reguladores e reduz o custo ... toda a idéia de barramento com vários fios para reduzir o custo de terminais, também considerarei isso para nova pinagem :)
fonte