docs: Update CAN bus documents

Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
This commit is contained in:
Kevin O'Connor 2021-03-04 12:51:13 -05:00
parent 5e0503f643
commit c7dc3e78bf
9 changed files with 83 additions and 145 deletions

74
docs/CANBUS.md Normal file
View File

@ -0,0 +1,74 @@
This document describes Klipper's CAN bus support.
# Device Hardware
Klipper currently only supports CAN on stm32 chips. In addition, the
micro-controller chip must support CAN and it must be on a board that
has a CAN transceiver.
To compile for CAN, run "make menuconfig", unselect "Use USB for
communication (instead of serial)" and then select "Use CAN for
communication (instead of serial)". Finally, compile the
micro-controller code and flash it to the target board.
# Host Hardware
In order to use a CAN bus, it is necessary to have a host adapter.
There are currently two common options:
1. Use a [Waveshare Raspberry Pi CAN
hat](https://www.waveshare.com/rs485-can-hat.htm) or one of its
many clones.
2. Use a USB CAN adapter (for example
[https://hacker-gadgets.com/product/cantact-usb-can-adapter/](https://hacker-gadgets.com/product/cantact-usb-can-adapter/)). There
are many different USB to CAN adapters available - when choosing
one, we recommend verifying it can run the [candlelight
firmware](https://github.com/candle-usb/candleLight_fw). (Unfortunately,
we've found some USB adapters run defective firmware and are locked
down, so verify before purchasing.)
It is also necessary to configure the host operating system to use the
adapter. This is typically done by creating a new file named
`/etc/network/interfaces.d/can0` with the following contents:
```
auto can0
iface can0 can static
bitrate 500000
up ifconfig $IFACE txqueuelen 128
```
Note that the "Raspberry Pi CAN hat" also requires [changes to
config.txt](https://www.waveshare.com/wiki/RS485_CAN_HAT).
# Finding the canbus_uuid for new micro-controllers
Each micro-controller on the CAN bus is assigned a unique id based on
the factory chip identifier encoded into each micro-controller. To
find each micro-controller device id, make sure the hardware is
powered and wired correctly, and then run:
```
~/klippy-env/bin/python ~/klipper/scripts/canbus_query.py can0
```
If uninitialized CAN devices are detected the above command will
report lines like the following:
```
Found canbus_uuid=11aa22bb33cc
```
Each device will have a unique identifier. In the above example,
`11aa22bb33cc` is the micro-controller's "canbus_uuid".
Note that the `canbus_query.py` tool will only report uninitialized
devices - if Klipper (or a similar tool) configures the device then it
will no longer appear in the list.
# Configuring Klipper
Update the Klipper [mcu configuration](Config_Reference.md#mcu) to use
the CAN bus to communicate with the device - for example:
```
[mcu my_can_mcu]
canbus_uuid: 11aa22bb33cc
```

View File

@ -1,5 +1,7 @@
This document describes the protocol Klipper uses to communicate over This document describes the protocol Klipper uses to communicate over
[CAN bus](https://en.wikipedia.org/wiki/CAN_bus). [CAN bus](https://en.wikipedia.org/wiki/CAN_bus). See
[CANBUS.md](CANBUS.md) for information on configuring Klipper with CAN
bus.
# Micro-controller id assignment # Micro-controller id assignment

View File

@ -6,6 +6,11 @@ All dates in this document are approximate.
# Changes # Changes
20210313: Klipper's support for micro-controllers that communicate
with CAN bus has changed. If using CAN bus then all micro-controllers
must be reflashed and the [Klipper configuration must be
updated](CANBUS.md).
20210310: The TMC2660 default for driver_SFILT has been changed from 1 20210310: The TMC2660 default for driver_SFILT has been changed from 1
to 0. to 0.

View File

@ -80,7 +80,6 @@ communication with the Klipper developers.
Beaglebone PRU. Beaglebone PRU.
- [Bootloaders](Bootloaders.md): Developer information on - [Bootloaders](Bootloaders.md): Developer information on
micro-controller flashing. micro-controller flashing.
- [stm32f0](stm32f0_CAN.md): Information on the STM32F0 micro-controller - [CAN bus](CANBUS.md): Information on using CAN bus with Klipper.
port.
- [TSL1401CL filament width sensor](TSL1401CL_Filament_Width_Sensor.md) - [TSL1401CL filament width sensor](TSL1401CL_Filament_Width_Sensor.md)
- [Hall filament width sensor](HallFilamentWidthSensor.md) - [Hall filament width sensor](HallFilamentWidthSensor.md)

Binary file not shown.

Before

Width:  |  Height:  |  Size: 118 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 136 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.0 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 32 KiB

View File

@ -1,142 +0,0 @@
This document describes how the STM32F0 port operates and how to work with
tiny CAN-enabled boards.
Required components
===================
#### MCP2515 module
![MCP2515](img/mcp2515.jpg)
or this
![CAN/RS485 hat](img/canhat.jpg)
#### St-link dongle
![st-link v2](img/stlinkv2-700x700.jpg)
Adding CAN bus to Raspberry Pi
==============================
(Based on Quick Guide https://www.raspberrypi.org/forums/viewtopic.php?f=44&t=141052)
First of all, (only if you have small CAN module) its necessary to modify the CAN-module from ebay, because it has
only one VCC pin, but the MCP2515 needs to be powered from 3V3 and the TJA1050
CAN-transceiver needs to be powered from 5V. Powering both chips from 5V would
work, but then a level-shifter for the SPI would be needed. The Pi's GPIO pins
are NOT 5V tolerant. Cut a trace on the PCB and soldered a pin onto the trace
to deliver 5V only to the TJA1050. Be sure to cut the trace before the capacitor:
![VCC cut](img/mcp2515_vcc_cut.png)
Next connect the module:
| MCP2515 | Raspberry Pi |
| --- | --- |
| VCC | 1 (3V3) |
| TJA 1050 VCC | 2 (5V) |
| GND | 6 (GND) |
| CS | 24 (CE0) |
| MISO | 21 (MISO) |
| MOSI | 19 (MOSI) |
| SCK | 23 (SCK) |
| INT | 22 (GPIO25) |
Install can-utils:
> sudo apt-get install can-utils
To activate the driver for the MCP2515 you have to add a kernel overlay, to do
so edit the /boot/config.txt
> sudo nano /boot/config.txt
And add the following lines (set oscillator value according to crystal on your board):
```
dtparam=spi=on
dtoverlay=mcp2515-can0,oscillator=8000000,interrupt=25
dtoverlay=spi1-1cs
```
Now reboot, after the reboot try to setup the the can interface:
> sudo ip link set can0 up type can bitrate 500000
If no errors occurred, the can interface should be ready now.
To make the CAN-interface permanent, add the following lines to /etc/network/interfaces
```
auto can0
iface can0 can static
bitrate 500000
```
Communicating over CAN
======================
Use "Serial over CAN" emulator software to establish connection:
https://github.com/Delsian/CanSerial
Install st-link on Raspberry Pi
===============================
> sudo apt-get update
> sudo apt-get install cmake
> sudo apt-get install libusb-1.0-0-dev
> git clone https://github.com/texane/stlink stlink-repo
> cd stlink-repo
> make
> cd build/Release/
> sudo make install
Copy to /etc/udev/rules.d/49-stlinkv2.rules:
```
# stm32 discovery boards, with onboard st/linkv2
# ie, STM32L, STM32F4.
# STM32VL has st/linkv1, which is quite different
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="3748", \
MODE:="0666", \
SYMLINK+="stlinkv2_%n"
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="374b", \
KERNEL!="sd*", KERNEL!="sg*", KERNEL!="tty*", SUBSYSTEM!="bsg", \
MODE:="0666", \
SYMLINK+="stlinkv2_%n"
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="374b", \
KERNEL=="sd*", MODE:="0666", \
SYMLINK+="stlinkv2_disk"
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="374b", \
KERNEL=="sg*", MODE:="0666", \
SYMLINK+="stlinkv2_raw_scsi"
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="374b", \
SUBSYSTEM=="bsg", MODE:="0666", \
SYMLINK+="stlinkv2_block_scsi"
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="374b", \
KERNEL=="tty*", MODE:="0666", \
SYMLINK+="stlinkv2_console"
# If you share your linux system with other users, or just don't like the
# idea of write permission for everybody, you can replace MODE:="0666" with
# OWNER:="yourusername" to create the device owned by you, or with
# GROUP:="somegroupname" and control access using standard unix groups.
```
Now "make flash" command can upload HEX into connected board
Pins allocation
===============
Configurations with CAN and Serial port uses different pins, and during enumeration
process firmware reports all possible pin names. But actually you can use only
existing pins, not involved in communication. Wrong pins will generate shutdown.