跳轉至

# RPi 微控制器

這個文件描述了在RPi上執行Klipper的過程，並使用相同的RPi作為輔助MCU。

## 為什麼使用RPi作為輔助MCU？

通常情況下，專門用於控制3D印表機的MCU有有限的、預先配置好的引腳來管理主要的列印功能（熱敏電阻、擠出機、步進器...）。使用安裝了Klipper的RPi作為輔助MCU，可以直接使用klipper內的GPIO和RPi的匯流排（i2c，spi），而不需要使用Octoprint外掛（如果使用的話）或外部程式，從而能夠控制列印GCODE內的一切。

警告。如果你的平臺是Beaglebone，並且你已經正確地按照安裝步驟進行了安裝，那麼linux mcu已經為你的系統安裝和配置了。

## 安裝 rc 指令碼

如果你想把主機作為一個輔助MCU，klipper_mcu程序必須在klippy程序之前執行。

安裝 Klipper 后，執行以下命令來安裝指令碼：

    cd ~/klipper/
    sudo cp "./scripts/klipper-mcu-start.sh" /etc/init.d/klipper_mcu
    sudo update-rc.d klipper_mcu defaults

## 構建微控制器程式碼

要編譯的 Klipper 微控制器程式碼，需要先將編譯配置設定為「Linux Process」：

    cd ~/klipper/
    make menuconfig

在菜單中，設定「Microcontroller Archetecture」（微控制器架構）為「Linux Process」（Linux 程序），然後儲存(save)並退出(exit)。

要構建和安裝新的微控制器程式碼，請執行：

    sudo service klipper stop
    make flash
    sudo service klipper start

如果klippy.log在試圖連線到`/tmp/klipper_host_mcu`時輸出 "Permission denied" 錯誤，那麼你需要將你的使用者新增到tty使用者組。下面的命令將把 "pi "使用者新增到tty使用者組中：

    sudo usermod -a -G tty pi

## 剩餘的配置

按照RaspberryPi 參考配置和多微控制器參考配置中的說明配置Klipper 二級微控制器來完成安裝。

## 可選：啟用 SPI

通過執行`sudo raspi-config` 后的 "Interfacing options"菜單中啟用 SPI 以確保Linux SPI 驅動已啟用。

## Optional: Enabling I2C

Make sure the Linux I2C driver is enabled by running `sudo raspi-config` and enabling I2C under the "Interfacing options" menu. If planning to use I2C for the MPU accelerometer, it is also required to set the baud rate to 400000 by: adding/uncommenting `dtparam=i2c_arm=on,i2c_arm_baudrate=400000` in `/boot/config.txt` (or `/boot/firmware/config.txt` in some distros).

## 可選步驟：識別正確的 gpiochip

On Raspberry Pi and on many clones the pins exposed on the GPIO belong to the first gpiochip. They can therefore be used on klipper simply by referring them with the name `gpio0..n`. However, there are cases in which the exposed pins belong to gpiochips other than the first. For example in the case of some OrangePi models or if a Port Expander is used. In these cases it is useful to use the commands to access the Linux GPIO character device to verify the configuration.

要在基於 Debian 的發行版（如 OctoPi）上安裝 Linux GPIO character device - binary，請執行：

    sudo apt-get install gpiod

要檢查可用的gpiochip，請執行：

    gpiodetect

要檢查針腳編號和針腳可用性，請執行：

    gpioinfo

因此，所選引腳可以在配置中可以通過 `gpiochip<n>/gpio<o>`引用，其中 n 是由 `gpiodetect` 命令看到的晶片編號o 是 `gpioinfo` 命令看到的行號。

警告：只有標記為`unused`的 gpio 才可以被使用。一條線路不可能被多個程序同時使用。

例如，在樹莓派 3B+上 將GPIO20作為 Klipper 的一個開關：

    $ gpiodetect
    gpiochip0 [pinctrl-bcm2835] (54 lines)
    gpiochip1 [raspberrypi-exp-gpio] (8 lines)

    $ gpioinfo
    gpiochip0 - 54 lines:
            line   0:      unnamed       unused   input  active-high
            line   1:      unnamed       unused   input  active-high
            line   2:      unnamed       unused   input  active-high
            line   3:      unnamed       unused   input  active-high
            line   4:      unnamed       unused   input  active-high
            line   5:      unnamed       unused   input  active-high
            line   6:      unnamed       unused   input  active-high
            line   7:      unnamed       unused   input  active-high
            line   8:      unnamed       unused   input  active-high
            line   9:      unnamed       unused   input  active-high
            line  10:      unnamed       unused   input  active-high
            line  11:      unnamed       unused   input  active-high
            line  12:      unnamed       unused   input  active-high
            line  13:      unnamed       unused   input  active-high
            line  14:      unnamed       unused   input  active-high
            line  15:      unnamed       unused   input  active-high
            line  16:      unnamed       unused   input  active-high
            line  17:      unnamed       unused   input  active-high
            line  18:      unnamed       unused   input  active-high
            line  19:      unnamed       unused   input  active-high
            line  20:      unnamed    "klipper"  output  active-high [used]
            line  21:      unnamed       unused   input  active-high
            line  22:      unnamed       unused   input  active-high
            line  23:      unnamed       unused   input  active-high
            line  24:      unnamed       unused   input  active-high
            line  25:      unnamed       unused   input  active-high
            line  26:      unnamed       unused   input  active-high
            line  27:      unnamed       unused   input  active-high
            line  28:      unnamed       unused   input  active-high
            line  29:      unnamed       "led0"  output  active-high [used]
            line  30:      unnamed       unused   input  active-high
            line  31:      unnamed       unused   input  active-high
            line  32:      unnamed       unused   input  active-high
            line  33:      unnamed       unused   input  active-high
            line  34:      unnamed       unused   input  active-high
            line  35:      unnamed       unused   input  active-high
            line  36:      unnamed       unused   input  active-high
            line  37:      unnamed       unused   input  active-high
            line  38:      unnamed       unused   input  active-high
            line  39:      unnamed       unused   input  active-high
            line  40:      unnamed       unused   input  active-high
            line  41:      unnamed       unused   input  active-high
            line  42:      unnamed       unused   input  active-high
            line  43:      unnamed       unused   input  active-high
            line  44:      unnamed       unused   input  active-high
            line  45:      unnamed       unused   input  active-high
            line  46:      unnamed       unused   input  active-high
            line  47:      unnamed       unused   input  active-high
            line  48:      unnamed       unused   input  active-high
            line  49:      unnamed       unused   input  active-high
            line  50:      unnamed       unused   input  active-high
            line  51:      unnamed       unused   input  active-high
            line  52:      unnamed       unused   input  active-high
            line  53:      unnamed       unused   input  active-high
    gpiochip1 - 8 lines:
            line   0:      unnamed       unused   input  active-high
            line   1:      unnamed       unused   input  active-high
            line   2:      unnamed       "led1"  output   active-low [used]
            line   3:      unnamed       unused   input  active-high
            line   4:      unnamed       unused   input  active-high
            line   5:      unnamed       unused   input  active-high
            line   6:      unnamed       unused   input  active-high
            line   7:      unnamed       unused   input  active-high

## 可選功能：硬體 PWM

樹莓派有兩個PWM通道（PWM0和PWM1），它們通常暴露在header中上，如果沒有，可以路由到現有的 gpio 引腳。Linux mcu 守護程式使用 pwmchip sysfs 介面來控制 Linux 主機上的硬體 PWM 裝置。pwm sysfs 介面在樹莓上預設是隱藏的，可以通過在`/boot/config.txt`中加入一行設定來啟用：

    # 啟用 pwmchip sysfs 介面
    dtoverlay=pwm,pin=12,func=4

此示例僅啟用 PWM0 並將其路由到 gpio12。如果需要同時啟用兩個 PWM 通道，則可以使用 `pwm-2chan`。

overlay 在啟動時不會在 sysfs 上暴露出 PWM 線路，需要通過echo將 PWM 通道的編號導出到 `/sys/class/pwm/pwmchip0/export`：

    echo 0 > /sys/class/pwm/pwmchip0/export

這將在檔案系統中建立裝置`/sys/class/pwm/kwmchip0/pwm0`。最簡單的方法是在`/etc/rc.local`的`exit 0`行之前新增這行。

有了 sysfs，現在可以通過將以下配置新增到 `printer.cfg` 來使用 PWM 通道：

    [output_pin caselight]
    pin: host:pwmchip0/pwm0
    pwm: True
    hardware_pwm: True
    cycle_time: 0.000001

這將為樹莓派上的 gpio12 引腳新增硬體 PWM 控制（因為overlay被配置為將 pwm0 路由到 pin=12）。

PWM0 可以被路由到 gpio12 和 gpio18，PWM1 可以被路由到 gpio13 和 gpio19：

PWM | GPIO 引腳 | 功能
--- | --- | ---
0 | 12 | 4
0 | 18 | 2
1 | 13 | 4
1 | 19 | 2

Back to top