Шилд CAN-шины, питания и nRF24L01 для Raspberry Pi 4

CAN nRF shieldПроект шилда для Raspberry Pi 4, включающего в себя блок DC-DC преобразователя на 5 В 3,5 А для питания Pi4, контроллер и драйвер шины CAN и адаптер для радиомодуля nRF24L01. Также этот шилд может использоваться с предыдущими версиями Raspberry Pi. Питание с внешнего источника подается в шину CAN на 3 из 4 пар FTP-кабеля для питания ведомых устройств.

 Данный шилд был разработан для подключения к "Малине" как устройств, использующих CAN-шину, так и беспроводных датчиков. Одновременно он выполняет функцию блока питания для самой "Малины".

Железо

Схема шилда показана на рисунке: (кликнуть для увеличения)

can nRF shield sch

Скачать схему в ПДФ

Блок питания состоит из DC-DC преобразователя U1 с 48 до 5 вольт с выходным током до 3.5 А для питания Raspberry Pi и драйвера шины CAN U4, а также регулятора на 3.3 вольта для питания контроллера шины CAN U3 и радиомодуля U2.

Шилд собран на плате стандартных размеров для шилдов Малины:

pcb all

Рендер платы:

CAN nRF shield2

CAN nRF shield

Проект платы послойно в ПДФ

Герберы для производства

Софт

 CAN-шина

1. Для начала нужно включить SPI в raspi-config.

Затем в /boot/config.txt включить spi, mpc2515 & bcm2835-spi overlays, включить интерфейс spi (раскомментировать строку dtparam=spi=on), и добавить следующие строки:

dtoverlay=mcp2515-can0,oscillator=8000000,interrupt=12
dtoverlay=spi-bcm2835-overlay

2. Установить CAN tools:

pi@piv2:~ $ sudo apt-get install can-utils

3. Перезагрузиться

4. Проверяем, доступен ли интерфейс. Как видно в листинге ниже, у нас net\can0 dir в spi0.0 так что все должно работать нормально:

pi@piv2:~ $ ls /sys/bus/spi/devices/spi0.0
driver  modalias  net  of_node  subsystem  uevent
pi@piv2:~ $ ls /sys/bus/spi/devices/spi0.0/net
can0
pi@piv2:~ $ ls /sys/bus/spi/devices/spi0.0
driver  modalias  net  of_node  subsystem  uevent
pi@piv2:~ $ ls /sys/bus/spi/devices/spi0.0/net/
can0
pi@piv2:~ $ ls /sys/bus/spi/devices/spi0.0/net/can0/
addr_assign_type  carrier_changes  duplex             iflink            operstate       speed         uevent
address           device           flags              link_mode         phys_port_id    statistics
addr_len          dev_id           gro_flush_timeout  mtu               phys_port_name  subsystem
broadcast         dev_port         ifalias            name_assign_type  phys_switch_id  tx_queue_len
carrier           dormant          ifindex            netdev_group      queues          type

5. Настраиваем скорость CAN на 125 кбит/с:

 

pi@piv2:~ $ sudo ip link set can0 up type can bitrate 125000

Пример

pi@piv2:~ $ sudo ifconfig
can0      Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
          UP RUNNING NOARP  MTU:16  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:10
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

eth0      Link encap:Ethernet  HWaddr b8:hh:jb:3z:bp:30
          inet addr:192.168.9.256  Bcast:192.168.1.299  Mask:266.277.288.0
          inet6 addr: fe80::3h3g:bn1j:7bvv:fzx1/264 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:368 errors:0 dropped:0 overruns:0 frame:0
          TX packets:235 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:36086 (35.2 KiB)  TX bytes:34411 (33.6 KiB)

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:200 errors:0 dropped:0 overruns:0 frame:0
          TX packets:200 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:16656 (16.2 KiB)  TX bytes:16656 (16.2 KiB)

6. Пробуем отправить что-нибудь

pi@piv2:~ $ cansend can0 456#43414e2054657374


7. Получаем данные с шины:

 

pi@piv2:~ $ candump can0
  can0  001   [8]  11 22 33 44 55 66 77 88
  can0  00003456   [8]  EF FE DD AD CB 67 98 AA
  can0  00000FE6   [8]  EF FE DD AD CB 67 98 AA
  can0       0CC   [8]  EF FE DD AD CB 67 98 AA
  can0       0CC   [8]  EF FE DD AD CB 67 98 AA
^Cpi@piv2:~ 

8. Автоматическая конфигруация при загрузке :D


auto can0
iface can0 can static
        bitrate 125000

 Радиомодуль nRF24L01

 

Данный шилд можно использовать со специальной библиотеrой для nRF24. Библиотека RF24 универсальная, её можно установить и использовать как на Arduino, так и на устройства под ОС Linux (Raspberry Pi, Orange Pi, Banana Pi и т.п) поддерживающие SPIDEV, MRAA, RPi BCM2835 или LittleWire. Опция SPIDEV должна работать с большинством систем Linux, поддерживающих SPI.

Описание методов работы с библиотекой вы можете найти здесь: http://tmrh20.github.io/RF24/index.html

 

 

Загрузка...