BIGTREETECH EBB42 CAN v1.0 사용하기 with odroid m1

2 minute read

목표는 SBC ODROID-M1 보드의 native can과 CANbus 노드인 EBB42보드를 3d프린터에서 사용하는 것입니다.
EBB42보드는 3d프린터 extruder controller로 사용되고 있습니다.
usb serial도 지원하고 있지만 CAN을 지원하고 있습니다.

serial로 연결하는 것보다는 CAN을 사용하는것이 여러 디바이스를 연결할 때 훨씬 경제적입니다.
CAN은 버스에만 연결이 되면 CAN 인터페이스만 가지고 있어도 장치연결이 가능하기 때문입니다. 노이즈에 강하고 더 통신속도가 빠르다는 장점도 덤으로 가져옵니다.

그러나 시중에 나와있는 SBC들은 native can을 가지고 있는 경우가 많이 없습니다.
SBC 시장 최대 점유율을 가지고 있고, 3d프린터 SBC로 가장 많이 사용되는
raspberry Pi 4 역시 native can을 지원하지 않습니다.
EBB 보드의 CAN버스를 사용하려면 USB to CAN 유형의 브릿지 제품을 사용해야 하는 불편함이 있습니다.

저는 며칠 전에EBB42보드 구매 후 펌웨어 설치와 보드 동작 확인을 했었습니다.
SBC에서 native can을 사용할 수 있다는 점은 3d 프린터를 포함해서 많은 이점이 있을 것입니다.

3d 프린터

주제가 ‘3d 프린터 제작하기’ 가 아니기 때문에 새로 제작하거나 하지 않았습니다.
이미 만들어져 있던 3d 프린터에서 익스트루더 부품들만 EBB보드에 연결하고 동작을 테스트 했습니다.

프린터/EBB42 펌웨어는 klipper , Host(ODROID-M1)에 mainsailOS를 설치했습니다.

준비물/준비단계

- ODROID-M1 x1
  OS: Ubuntu 20.04 LTS , mainsail
  kernel: 4.19.y-odroid-arm64
  CAN interface

- EBB42 CAN V1.0 x1
- SN65HD230 x1
- 3d printer

klipper 설치는 이전 포스팅을 참고 하시면 됩니다.
mainsailOS 설치는 mannual installation 혹은 klipper discord 채널을 참고하세요.
ODROID-M1의 CAN setup은 Wiki를 참고하세요.

EBB42 핀맵은 다음과 같습니다.

ebb42pinmap


익스트루더의 fan, thermistor, step motor/driver, etc …를 기존 회로에서 제거하고 EBB42보드에 연결해줍니다.
EBB42 보드와 3D 프린터를 Host(ODROID-M1)에 연결해 줍니다.
3D프린터는 USB로 연결하면 되고,
EBB42 보드는 M1에 연결된 SN65HD230의 BUS-H와 BUS-L과 연결합니다.
이제 Host와 3d프린터, EBB42 보드 전원을 켭니다.

klipper 설정

물리적으로 ODROID-M1과 EBB42보드를 연결했으면, klipper에서 장치를 인식하게 해야 합니다.

~/printer_data/config/printer.cfg 파일에서 EBB42 보드를 추가합니다.
기존에 사용중이던 3d프린터가 있으면 프린터 관련 설정이 이미 존재 할 것입니다.

ODROID-M1
$ vi ~/printer_data/config/printer.cfg
[mcu]
serial: /dev/serial/by-id/...

[mcu EBBCan]
canbus_uuid: "your_device_uuid"

...

uuid를 입력하기 위해 Can bus에 query를 합니다.

$ sudo ifconfig can0 down
$ sudo ip link set can0 type can bitrate 500000
$ sudo ifconfig can0 up
$ python3 ~/klipper/scripts/canbus_query.py can0
Found canbus_uuid=1e8ea3b32c8a, Application: Klipper
Total 1 uuids found
$ ip -d -s link show can0
3: can0: <NOARP,UP,LOWER_UP,ECHO> mtu 16 qdisc fq_codel state UP mode DEFAULT group default qlen 10
    link/can  promiscuity 0 minmtu 0 maxmtu 0
    can state ERROR-ACTIVE (berr-counter tx 0 rx 0) restart-ms 0
          bitrate 500000 sample-point 0.818
          tq 181 prop-seg 4 phase-seg1 4 phase-seg2 2 sjw 1
          rockchip_can: tseg1 1..16 tseg2 1..8 sjw 1..4 brp 1..128 brp-inc 2
          clock 297000000
          re-started bus-errors arbit-lost error-warn error-pass bus-off
          0          0          0          0          0          0         numtxqueues 1 numrxqueues 1 gso_max_size 65536 gso_max_segs 65535
    RX: bytes  packets  errors  dropped overrun mcast
    8          1        0       0       0       0
    TX: bytes  packets  errors  dropped carrier collsns
    1          1        0       0       0       0

제 보드는 1e8ea3b32c8a 이네요.
자신의 보드 uuid를 찾아서 ~/printer_data/config/printer.cfg 에 작성하면 됩니다.

익스트루더의 핀 정보도 저장해야 합니다.
config 예제는~/klipper/config/sample-bigtreetech-ebb-canbus-v1.0.cfg 입니다.

print.cfg 일부입니다.

# This file contains common pin mappings for the BIGTREETECH SKR V1.3
# board. To use this config, the firmware should be compiled for the
# LPC1768.

[mcu]
serial: /dev/serial/by-id/usb-Klipper_lpc1768_0910011843142EAF93099F5BC42000F5-if00

[mcu EBBCan]
canbus_uuid: 1e8ea3b32c8a

...

[extruder]
step_pin: P2.13
dir_pin: P0.11
enable_pin: !P2.12
microsteps: 16
rotation_distance: 7.703694208
nozzle_diameter: 0.400
filament_diameter: 1.750
heater_pin: EBBCan:PB1
sensor_type: EPCOS 100K B57560G104F
sensor_pin: EBBCan:PA0
control: pid
pid_Kp: 21.527
pid_Ki: 1.063
pid_Kd: 108.982
min_temp: 0
max_temp: 240

...

[fan]
pin: EBBCan:PA1

...

printer 실행

G-code 파일 아무거나 준비합니다.
웹에서 자신의 ip 주소로 접속하면 됩니다.

initialize 에러가 나면 펌웨어 reset을 시도합니다.

$ sudo systemctl stop klipper
$ sudo systemctl start klipper

EBB42보드와 연결이 되었는지 fan이나 extrude를 실행해서 확인합니다.
확인이 되었으면, G-code 파일 프린트를 실행합니다.

mainsail


프린터 동작 영상


step y-axis를 제거한 후, 익스트루더 촬영 영상

Leave a comment