This project has been abandoned!
Wring up the Multiservo option is pretty easy on the SKR E3 V2.0 / V3.0 (or any other board that has a Z-Probe connector in this regard), but a bit more complex on the SKR E3-DIP, and not available on other boards such as the SKR E3 V1.2 or the SKR mini V1.1.
To keep things simple for you, I've decided to re-use the existing pins for the Lid and Cutter servo and make them available for software I2C/TWI. This means, you only have to replace the existing wiring of the servos with the new one.
As mentioned already, the Multiservo option of the SMuFF firmware re-uses the exiting servo pins. On the SKR E3 V2.0 and SKR E3 V3.0 controller boards, the Z-Probe header is being utilized as a software I2C/TWI interface. Hence, first disconnect the existing servos then make a new cable (5 wires) using a JST XH header and assign the pins just as shown in the picture to the left. Pins GND, 3.3V and 5V are ought to be self explaining, whereas the 5V wire has to be connected to the output of your (existing) Buck converter.
The former Lid servo pin is being used as the I2C clock signal (SCL) and the former Cutter servo pin as the I2C data signal (SDA).
Please notice: Even though the 3.3V pin on some boards might be routed to 5V internally, this doesn't matter much, since this supply voltage is being used to power the PCA9685 IC, which is capable of handling both, 3.3V and 5V, without any issues.
The 2nd GND signal (the one at the bottom) is not being used and thus doesn't have to be wired (it's only shown for reference).
On the SKR E3-DIP you'll need a completely new adapter board, which replaces the existing adapter board for the servos.
Start with cutting out a piece of Perfboard to the same size as the stepper driver socket is and solder two 8 pin headers from the top and a 5 pin JST XH connector from the bottom to it. Then wire up the signals as shown in the picture to the left. Keep in mind that the colors have to match (it is the exact same assignment as for the Z-Probe header shown above).
Gray tinted labels are just there for reference (those you see if you look at a Pololu style stepper driver board) but those aren't needed.
Be careful not to short GND and VIN or you will release the magic smoke as soon as you power up the board! VIN on this socket is the pin that receives +12V/+24V directly from the power supply.
The +5V for the servos must come directly from your Buck converter.
Please notice: Since the MS3 pin is needed for the SDA signal, this signal can't be used anymore as the Relay control pin and hence, it moved to the TH0 connector on this board.
Also, make sure the jumper for MS3 beneath the socket is being set, otherwise the signal won't be routed to the socket.
I highly recommend using the FeatherWing version of the Adafruit Multiservo board, since it comes with smaller dimensions and will fit into the Base-Right.stl part of the SMuFF if needed. Also, the firmware supports "only" 8 outputs and hence the FeatherWing is totally feasible. Only drawback of this board is, that each wire has to be soldered directly to the board according to the picture above.
Please notice: The SMuFF firmware expects to find the Multiservo board at I2C address 0x40, which is the default configuration as the board is delivered. This means: no solder jumper labeled A0-A5 on the backside of the board is bridged.
If you happen to have a "recycled" board, make sure you've removed all bridges from the solder jumpers in question!
If you don't intend using the SPARE 2, RELAY USER1 and USER2 outputs yourself for some reason, I'd recommend not even soldering the header pins, because this way the board will fit better into the base.
If you don't plan putting the board into the SMUFF's base, you can download and print the housing I've designed for it. You'll get the STL files from Printables or the STEP file from Thangs.
The standard Adafruit Multiservo board is easier to wire up, since the only thing you'll need on the opposite end of the cable is a 6 pin Dupont connector. Assign all the wires as shown in the picture above and keep in mind that pin 5 (ENABLE) is left unconnected.
Please notice: The SMuFF firmware expects to find the Multiservo board at I2C address 0x40, which is the default configuration as the board is delivered. This means: no solder jumper labeled A0-A5 on the board is bridged.
If you happen to have a "recycled" board, make sure you've removed all bridges from the solder jumpers in question!
For this board you will need to download and print the housing (or find an option to integrate it into the SMuFF yourself). You'll get the STL files also from Printables and the STEP file from Thangs.
All that's left for you to do now, is compiling the firmware with the Multiservo option enabled. Therefore download the latest version from Github, then open platformio.ini and enable the -D USE_MULTISERVO line in section [other] by removing the leading comment sign (#) and let VS-Code build the firmware for your board, as shown in the picture below. After it has been successfully built, flash the firmware to your board as usual.
The Multiservo option is already pre-configured through the SERVOMAP.json file, which has changed for firmware V3.12 and which you have to copy to your SMuFF's SD-Card. This file defines which output pin on the Adafruit board is used for which servo. The default configuration is depicted in the pictures of the boards above (i.e. WIPER = output 0).
If, for whatever reason, you need to change this arrangement, it's easiest using the SMuFF-WI tool. This now has a new config section named "Multiservo Output Mappings" (if the Multiservo option is enabled in the firmware) and looks like this:
For the standard signals (outputs) used by the SMuFF firmware, you can only assign a pin number. For the two user defined pins (USER 1, USER 2), you can also define the operating mode (i.e. PWM / Switch).
If the option button right to the pin number text box is in the left position (OFF), the pin is configured for PWM mode (i.e. for driving servos or fans via GCode M280). If the option button is at the right position (ON), the pin is configured as a normal output pin which can be switched On or Off (a.k.a High or Low) via GCode M42.
In order to use a pin as a switch (On/Off) on the Adafruit Multiservo board, you'll have to apply a 10K pull-up resistor to it, since they're internally set up as Open-Drain outputs.
Please notice: Double check that no output is assigned twice. The SMuFF firmware will accept any value between 0 and 7 and will not attempt any plausibility checks.