CAN-FD Generic IO
The advantage of EtherCAT is that most SoC boards with an ethernet port already have libraries supporting EtherCAT.There is a decent project here; https://github.com/OpenEtherCATsociety
and support for EtherCAT is available for ESP32, STM32 and even Python Libraries.
A disadvantage is that a license fee is payable on any EtherCAT device, although not on on an EtherCAT host (such as a Duet main board that supports communication with EtherCAT devices).
@dc42 Thanks, I did not know that. That is a real barrier to entry to consider. I wonder how that fits in with all the EtherCAT libraries I have been looking at. So far I haven't seen any mention of a lic fee but I rarely read too deep into the Lic files since my work is mainly for myself.
Notes - I did some digging into the license model.
EtherCAT Master License is free and only requires conformity with the EtherCAT standards. This may conflict with any open source lic you are using.
EtherCAT slave licenses are tied to the receiving chip on hardware. This is the part I didn't get before. The master can easily be implemented in code but the slave requires a special ASIC receiver chip. The license fee is automatically paid when the chip is bought. The problem is that just like CAN-FD, special hardware is required and it isn't on hobby boards at this time (and may never be).
We come right back around to the same problems as before.
That is disappointing.
A Former User last edited by A Former User
The barrier to make a DIY board ala the toolboard isn't huge; even jlcpcb has the atsam in their smt parts for assembly (though not in stock atm); would set you back about $40 for two board assembled + shipping i guesstimate.
But it might be cheaper and easier to use the external stepper driver board, if the pins can be defined as general purpose IO instead of motor drivers, was thinking to have a look see when the details of these boards are out.
(or even easier! )
You can buy a SAMC21 development board, see https://uk.farnell.com/microchip/atsamc21-xpro/evaluation-board-xplained-pro/dp/2492013. Also available from Digikey https://www.digikey.com/product-detail/en/microchip-technology/ATSAMC21-XPRO/ATSAMC21-XPRO-ND/5256707 and probably Mouser etc.
The small board looks like what I was envisioning. Small form factor and a reasonable price that can handle 3-4 local sensors or outputs. I am going to order a few and see what I can make them do.
@drobertson123, by "the small board", do you mean the one from chip45?
If so, you should be able to fork and adapt the tool board code in https://github.com/Duet3D/Duet3Expansion. I think you need to do at least the following:
- Decide whether to upload the code over USB using the optional chip45 bootloader, or upload the code over CAN as we do for tool boards.
- If you use the chip45 bootloader, you may need to change the linker input file for your configuration of the expansion board project so that the code starts 4K from the start of flash instead of 16K, because that's probably where the bootloader expects the code to be.
- If instead you use our CAN bootloader, you will need an Atmel ICE or similar to program the bootloader into that board. (You may find the ICE useful for debugging too). You will also need to do a variant of our bootloader (https://github.com/Duet3D/Duet3Bootloader) that returns a different board short name to the Duet 3. The board short name determines the file that the Duet 3 main board fetches the firmware from.
- The chip45 board uses a 16MHz crystal, whereas our tool board uses a 12MHz crystal. Therefore you will need to change the clock multiplier (also in our bootloader, if you are using it).
- There is a simple debug facility in the expansion/tool board firmware for writing messages to a serial port. You could adjust it to use the SERCOM device that is connected to the USB port.
- Finally (I think!), you will need to adjust the pin table to name all the available I/O pins on the board.
Thanks a lot for the detailed advice. I did order the Sammy-C21 V1.0 from chip45 but since I couldn't find a supplier in the US the shipping nearly doubled the price (ouch).
I also picked up a pair of NUCLEO-G474RE dev boards that have integrated CAN-FD and a small stack of MCP2558FD chips as transceivers. That actually cost me less than the one Sammy-C21 with shipping. Those dev boards are pretty solid performance-wise and have a lot of IO capability for their $15 price tag on Mouser but I have no doubt there will need to be a lot of tweaking to get things to talk.
If I can get the CAN FD communications sorted out it will dramatically reduce a wiring nightmare I can see coming up and give me flexibility. That will leave me more time to focus on some really hard kinematics problems I need to sort through.
The main project this is going into is effectively a sliding Delta actuator over a rotary axis. It is for printing a soluble support structure on a central tube that is then used for filament winding complex features.
Most of the concepts can be drawn directly from other designs but it effectively has redundant ways to move in the X-Axis and my brain is getting tripped up on how to plan that movement. But I will deal with communications and control first.
Teensy 4 may be an option too. It has a fast 600 MHz MCU and one CAN-FD. The new 4.1 version has some improvements like more IO ports.
I've added a SAMMYC21 build configuration to project Duet3Expansion. It's designed to work with the bootloader from chip45.com. I won't have a chance to test/debug it until the boards I have ordered arrive.
I've set up the pin table to use the available ports on the Sammy-C21 board as follows:
PA02 "temp0" (thermistor or other analog input)
PA03 "temp1" (thermistor or other analog input)
PA04 "pa04" input, output with PWM
PA05 "pa05" input, output
PA06 "pa06" input, output with PWM
PA07 "pa07" input, output
PA08 "pa08" output
PA09 External driver EN, active low
PA10 External driver DIR, active low
PA11 External driver STEP, active low
PA12 "pa12" input, output with PWM
PA13 "pa13" input, output
PA16 "pa16" input, output
PA17 "pa17" input, output
PA18 "pa18" input, output
PA19 "pa19" input, output with PWM
PA20 "pa20" output
PA21 "pa21" output
PA22 "pa22" output
PA23 "pa23" output with PWM
PB08 "pb08" input, output
PB09 "pb09" input, output
A Former User last edited by
@dc42 That is great.
I got in some components to play with, not the SAMMYC21 yet, but some CAN-FD compliant transceivers and some NUCLEO STM32 boards that have built-in CAN-FD.
When my SAMMYC21 gets here I should have a decent ecosystem of boards.
When is the CAN-FD Stepper driver you had mentioned earlier estimated to be available? Will it have some IO for endstops? If so it would be a good fit for driving my Delta arms.
I already have the tool board on order(looking forward to filastruder shipping it) and I think I am picking up a second Duet 3 Mainboard for a CoreXY project. I like where you are taking your products. Keep it up.
mwwhited last edited by
A disadvantage is that a license fee is payable on any EtherCAT device, although not on on an EtherCAT host
As stated in their own FAQ
3.3 How about licences? There is a licence for implementing an EtherCAT master which is free of charge - the agreement demands compatibility, ensures that the licence remains free of charge and provides legal certainty. For slave devices EtherCAT has adopted the CAN license model (CAN is an excellent example for a standardized open technology that is protected by patents): The small license fee is "embedded" in the EtherCAT Slave Controller (ESC) chip, so that device manufacturers, end users, system integrators, tool manufacturers etc. do not have to pay a license.
This license is only payable for dedicated embedded controllers. If you used a multi-master configuration there would be no dedicated chip and no payable license. If you did use an embedded chip the license free is included with the chip cost.
I ordered the sammy also, it is available through eb.. and is a nice small device.
If someone is interested in FPGAs, I detected an open source CAN-FD VHDL implementation of CAN-FD on https://gitlab.fel.cvut.cz/canbus/ctucanfd_ip_core
(but according to their readme one needs a license from Bosch for commercial usage)
JoergS5 last edited by JoergS5
@drobertson123 sorry to abbreviate... eb=ebay, germany in my case. chip45 offers his products in ebay for the same price as in his supplier shop.
@JoergS5 Just to mention that: chip45 is a German company.
If there is enough interest in it in the US, perhaps Filastruder may be interested in stocking them?
Having filastruder stock them would be good.
I am ok with paying a bit of a premium but it doubles the price for the board to order it from the US. At that price point, I am looking at more local solutions despite the SAMMYC21 board looking good. I still have one coming to test but I am also playing with the STM Nucleo boards that I can get local for $15, add on the transceiver for $2 and I have a good base to work with.
I have the Sammy-C21 board working with Duet 3 now and the firmware is committed to Github (there are now SAMMYC21 build configurations in the Duet3Bootloader and Duet3Expansion projects). I will write a wiki page soon on how to use it with Duet 3.
The wiki page is now available here https://duet3d.dozuki.com/Wiki/Using_the_Sammy-C21_development_board_with_Duet_3.
A Former User last edited by A Former User
The Sammy-C21 can be purchased directly from chip45.com. We are making arrangements with them to have the Duet3D CAN bootloader pre-installed as an option.
.. not sure why I keep being amazed by you guys, but I do ..
(edit: it should be possible to use OpenOCD and RaspberryPi GPIO to flash the Atmel chip over SWD, might pick up one of those boards next month and give it a try, providing an alternative to pricey Atmel ICE)
JoergS5 last edited by JoergS5
For Arduino based solutions there is CANdiy-shield, an Arduino library is available for it. The shield can switch 3.3 and 5v. There are two versions of the shield, v2 and fd, the fd version has CAN-FD.
hauschka last edited by hauschka
CANdiy shield seems very interesting.
Would anyone have an idea what sort of message I'd have to send?
I'm imagining a scenario where I place a Gcode-command in my code and my Arduino is then "noticed" via CAN-FD to run a function
Vice-versa, the Duet would "wait" until it receives a notification via CAN-FD .
Would this even be remotely possible or am I completely off in terms of capabilites of CAN-FD?
For example, to come back to the Sammy-C21 documentation, how would I go about setting a pin high/low or querying the status of a pin through Gcode?