CanOpen Implementation with Arduino

Hello everyone,

I am putting together a project in which I am trying to control several drives and motors, all of which are CanOpen compatible with my Arduino Galileo. From some research it seems that I will need some sort of CanShield for my arduino, perhaps like this one: CAN-BUS Shield - DEV-13262 - SparkFun Electronics

I noticed however that with all of the CAN shields I was able to find, that RS232 was the connector type. My application will have to be very low latency and RS232 will not be able to meet my data transmission speed requirements. Is it possible to transmit to CAN using ethernet, for the much higher transmission speeds? What is the best way (least latency, highest transmission speed) to connect Arduino to CanOpen compatible elements (shield or otherwise).

Your comments and help are much appreciated,
Thanks.

Is this part of the same project you asked about in November?
http://forum.arduino.cc/index.php?topic=362554.msg2499234#msg2499234

What maximum latency and minimum throughput do you require?

Do your motors have an ethernet interface?

The MCP2515 CAN controller can send data at up to 1Mb/s.
That's allot of commands for a large number of motors.

Is the Galileo fast enough to saturate a 1Mb/s link with data?

If you need more than 1Mb/s you can run multiple CAN buses in point to point fashion instead of a bus configuration.

Hi mikb55, thanks for the response. This is part of the same project.
The drives that I have are:

Both of these drives have Ethernet ports and support CanOpen. I am trying to achieve a transmission speed of 10-100 Mbps (I believe the Galileo 2nd gen is fast enough to support this, but what is a good way to verify?)

I am going to look into the MCP2515, thanks for that suggestion. With this controller, should I be able to utilize ethernet?

Thanks.

The MCP2515 is the chip in the Sparkfun CAN shield you linked to. It doesn't support ethernet.

How did you calculate the bandwidth required?

The Xenus does not have an Ethernet interface. The documentation says that you can use an ethernet style (cat5) cable with an adaptor for CANbus. This is normal.

The Nanotec makes no mention of ethernet. It supports CANbus and USB.

An RJ45 connector is not an indication of an ethernet capable device. Likewise, a DB9 connector does not signify an RS232 interface. Many connectors are used for multiple interface types.

2.5Mb/s per drive is a huge amount of data and faster than CANbus can run. I can only assume that you are intending to obtain positional data from the motor using an optical encoder.
You'll need to use some other kind of interface.

Thanks very much for the help. I am planning on using a optical incremental encoder on each of the motors.

I am thinking of getting this CAN shield: CANdiy-Shield V2 - CAN-Bus Shield - Watterott electronic as it has RJ45 connectors and I believe I can plug one CAT5 into the Xenus (as you mentioned). As for the nanotec, perhaps I can go from RJ45 using a CAT5 cable into something like this converter to usb:

(USB-ETHERNET-AX88772B Olimex LTD | Development Boards, Kits, Programmers | DigiKey)

-which I would then plug into the Nanotec drive.

Does this seem reasonable? Thanks for the advice.

I was concerned about the size of the CAN commands and the frequency I would be sending them which is why I was looking for the least latency/fastest transmission solution as possible, I will need to look into this more.

Forget USB, use a CAN shield and run a cable to one motor controller and daisy chain to the next.
You need to read about CANbus/RS485 and bus networks.
Learn to solder so you can make your own RJ45 to DB9 adaptors.

If you are serious about real-time monitoring of the optical encoders then you'll need to make direct connections to the Galileo digital inputs. Use a line driver if you have long cables.

Hi Dyaus292,

I am currently facing the same 'problem' as you.

I have a Nanotec C5-E motor driver and a BLDC motor. I am able to make it run as a standalone app with Nanotec's sample codes (Windows only). However, I am having a hard time wrapping my head around the CANopen communication.

I have consulted with Nanotecs' technical assistants but they are not able to provide me with concrete answers or point me in the right direction. They suggested purchasing the IXXAT USB-to-CAN interface (the compact RJ45 variation). I am still waiting for this to arrive, but I assume it will work with Nanotec's software.

However, I am looking into developing my own software, since I would like to use the motor driver for an interactive installation that will control and monitor potentially 50 of these motor drivers. As mikb55 pointed out, my goal is eventually to daisy change my motor drivers. It will look something like the uploaded image.

So, I am wondering if Dyaus292 came up with a reliable solution using the arduino shield you suggested?

Thank you!