We have a robot project where the motor controllers use CANopen for communication. I need to communicate with these motor controllers using a Master microcontroller. The problem is that I need to develop a CANopen layer in this microcontroller but I only know how to send and receive at the low level (CAN). I don't know much about the CANopen (PDO, SDO, Heartbeat, object dictionary, etc..). I tried to read the CiA specifications but it was very complicated. I would appreciate it if someone could point me in the right direction or give me a good tutorial to program a simple CANopen layer.
Unfortunately, there is no simple CANopen layer. To support CANopen, you have to implement the whole thing.
I suggest you buy a CANopen library from a third-party vendor. Usually theiy're not cheap, but considering the time you would need to implement this yourself it's cheaper than your salary for that time.
We've been using this library, which is moderately priced and has very few bugs, compared to other libraries we tried.
If this is something commercial I would not consider implementing CanOpen. This is going to take you (even for a subset) somewhere between four and six months (if you actually want it to work). I don't know what your salary per hours is and what your time to market requirements are, you need to do the maths yourself.
We're using the MicroCANopen stack with the Manager add-on, from here: http://www.canopenstore.com/pip/microcanopen.html
It's relatively cheap compared to other stacks, although we're using it on all nodes in our network so I can't offer a testimonial as to how it operates with other CANOpen-compliant devices.