0
\$\begingroup\$

I am studying about the CANopen implementation in a motion control work.

CANopen is a protocol over tha CANbus. It is seen that, in the CANopen specification, theoretically at most 127 nodes could be connected to the a CANopen implementation.

But under what conditions? (i.e at what CANbus data rate and control loop speed).

For example, if my position control loop work @ 5kHz, How can I calculate the "optimum" number of nodes (i.e at most how many motor drives) in terms of reliable CANbus-loading?

If I am not wrong, CANbus loading should not be larger than 30% in event-driven mode, and not be larger than 50% in cyclic synchronous mode. I think that the best way a simulation. I am searching some simulations that calculate the CAN bus loading. There are some MATLAB and Simulink "CAN" bus simulations. But they don't include CANopen protocol implementation.

I want to see a point that after how many nodes (i.e motor drive) connected to the CANbus (in the CANopen implementation), CANbus will start to be insufficient, unreliable and fail. Please consider the control loop speed. I can not find any explanation or even a rule of thumb about this case.

\$\endgroup\$
  • \$\begingroup\$ What baud rate are you operating your CAN bus? How many PDO transmissions, and how many SDO reads and writes do you need in each control timestep? You can't calculate % load without knowing capacity (related to bus data rate) and message rate (related to not only number of node but how much data each node has to transfer). \$\endgroup\$ – Ben Voigt Feb 26 at 19:01
  • \$\begingroup\$ Thank you Ben Voigt. I'm already trying to find out what the things are necessary for the calculation. Numerical values are clear. CANbus data rate is 500 Kbps. Please consider the all nodes are identical. Do we need to know PDO transmissions and SDO read & write numbers per node? I try to find out the number of PDO transmissions, SDO reads & writes for each control timestep. Can we express bus load in a generic formula by using such variables number_of_PDO_transmission, number_of_SDO_Write, number_of_SDO_read ..etc ? \$\endgroup\$ – doner_t Feb 26 at 19:13
  • \$\begingroup\$ It also depends on the size of each SDO, but if you are mostly dealing with 32-bit or smaller data, then that means expedited transfers, so then it's one CAN packet per PDO transfer, and 2 CAN packets (one in each direction) per SDO read or write. \$\endgroup\$ – Ben Voigt Feb 26 at 19:25
  • \$\begingroup\$ That gets you to number of master CAN transmissions per second, and number of slave CAN transmissions per second, which combined with some occupancy / collision model that accounts for extra time needed by retransmit attempts, will get you to load % and typical latency. \$\endgroup\$ – Ben Voigt Feb 26 at 19:26
  • \$\begingroup\$ I will find all these parameters from my SW. One more thing, how can we find the effect of control loop speed? Assume 5kHz, that has a 200 microsecond updating period. So, how can we use this speed in the bus-loading calculations? I try to find out a result such as "we can control at most x motor drive @y kHz control loop speed by using CANopen network". Are there any parameters other than the parameters you defined above for calculating the bus loading? \$\endgroup\$ – doner_t Feb 26 at 19:45

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Browse other questions tagged or ask your own question.