Teste a placa adaptador CAN bus MCP2515 modificada para funcionar com os 3.3V do raspberry pi.
Este teste foi efectuado no âmbito das experiências necessárias para a construção da electrónica alternativa para o braço robótico Niryo One.
O niryo shield comunica com os niryo steppers por CAN bus recorrendo um IC MCP2515. Num projecto de electrónica alternativa com o mínimo possível de alterações ao software o mechaduino e o raspberry pi devem comunicar atravéz de CAN bus, e ambos funcionam com nível lógico de 3.3V.
No entanto o adaptador de baixo custo que usa o MCP2515 funciona com uma única alimentação, o que não constitui problema para um dispositivos de nível lógico de 5V como o Arduino UNO, mas para os que funcionam a 3.3V o adaptador não é adequado sem uma alteração a alimentação, de modo a que o TJA1050 CAN-transceiver seja alimentado a 5V, e o MCP2515 a 3.3V
Estas informações estão de acordo com as recolhidas nos endereços abaixo indicados, que indicam ser necessário uma alteração na alimentação da placa, em particular da forma de alimentar o TJA1050 com 5V enquanto o pino de alimentação normal fica com 3.3V.
-
- https://www.raspberrypi.org/forums/viewtopic.php?t=141052
Do ponto de vista do hardware a forma como a modificação da alimentação é efectuada é ligeiramente diferente. Eu escolhi implementar a alteração no segundo link (dos indicados acima), assim como seguir as suas instruções.
Alteração a placa adaptadora MCP2515
Do ponto de vista do hardware foi efectuada uma interrupção à pista que inicia na bola a esquerda no condensador C5, e deve ser interrompida antes de chegar ao condensador. Depois da ligação ter sido interrompida foi soldado um fio ao terminal de baixo desse condensador ( a imagem abaixo foi tirada antes da alteração)

Na foto abaixo a pista já foi interrompida e portanto o 2 pino do transciver já não está ligado com o pino VCC mas sim com o fio vermelho soldado. Após a intervenção deve-se medir a continuidade com um multimetro.

Ligações entre o Raspberry pi e o adaptador CAN bus
pino MCP2515 > pino Raspberry Pi
VCC > 1 (3V3)
GND > 6 (GND)
CS > 24 (CE0)
(MI)SO > 21 (MISO)
(MO)SI > 19 (MOSI)
SCK > 23 (SCK)
INT > 22 (GPIO25)
TJA1050 VCC (fio soldado) > 4 (5V)

Software requerido para operar o CAN bus no raspberry pi
Pelo que percebi para as informações que aqui reproduzo e que estão no segundo link dos citados acima funcionarem o kernel tem de aceitar overlays. As instruções originais são para o kernel 4.4.41, o pi que usei no teste tem o raspbian buster com o kernel 4.19.97.
First update software and install can-utils:
Antes de mais actualizar o software e instalar os utilitarios do CAN bus
sudo apt-get update sudo apt-get upgrade sudo apt-get install can-utils
Depois de actualizar e instalar os utilitários do can bus, é necessario alterar algumas configurações de arranque do raspberry pi, nomeadamente activar o overlay do kernel adicionando algumas linhas ao ficheiro /boot/config.txtsudo
nano /boot/config.txt
Adicionar as seguintes linhas ao ficheiro
dtparam=spi=on dtoverlay=mcp2515-can0,oscillator=16000000,interrupt=25 dtoverlay=spi1-1cs
Após estas alterações reiniciar o raspberry pi e fazer o setup a interface CAN com o seguinte comando:
sudo ip link set can0 up type can bitrate 500000
Se o comando nao devolver nenhum erro, então estará pronto para ser testado. Ver mais abaixo para uma solução permanente.
Para enviar mensagens usa-se o comando cansend conforme o seguinte exemplo:
cansend can0 127#DEADBEEF
Para obter mensagens recebidas usa-se o comando candump conforme o seguinte exemplo:
candump can0 can0 043 [8] 01 01 02 03 00 05 06 07 can0 043 [8] 01 01 02 03 00 05 06 07 can0 043 [8] 01 01 02 03 00 05 06 07
Estes dados recebidos são os enviados pelo arduino transmiter conforme o teste anterior de comunicação com CAN bus entre arduinos.
Para fazer com que a interface CAN fique definida de modo permanente, é necessário adicionar as seguintes linhas ao ficheiro /etc/network/interfaces
auto can0 iface can0 can static bitrate 500000
Portanto os testes efectuados segundo a descrição encontrada no segundo link funcionaram na perfeição. Já tenho um placa adaptadora capaz de funcionar como interface CAN bus no raspberry pi.
A próxima experiência neste âmbito será usar outro adaptador MCP2515 num placa de testes com o micro controlador SAMD21 cortex M0 usado no mechaduino e no niryo stepper controller.