586,100 active members*
2,560 visitors online*
Register for free
Login
IndustryArena Forum > Laser Engraving and Cutting Machines > Laser Engraving / Cutting Machine General Topics > Faulhaber Servo Motor and driver , needs CANbus interface to setup , help!
Page 3 of 4 1234
Results 41 to 60 of 62
  1. #41
    Join Date
    Jan 2018
    Posts
    106

    Re: Faulhaber Servo Motor and driver , needs CANbus interface to setup , help!

    okay do you mean you used the command menu in Manager to Start and Enable command and it works or you actually sent manually a message from a seperated CAN interface terminal?

    What i saw here is it needs the 0X000 ID to send a Start message , 0X01 and 0X00 to reach all the CAN Network nodes . And they need Start then ENOP
    My brains are working hard , i dont know if i mentioned it here but i am still recovering from a severe TBI accident 2 years ago. Getting better than i was but getting lost often going thru the english manuals (im french hah)

    ID=702h,Type=D,Length=8,Data=00000000000000FF,IDFo rmat=hex,Comment="Node 2 NMT:5" What means the TypeD ? i didnt knew yet it could have letters in the ID





    So , with what you said about SOBJ ( i see GOBJ in my Manager Terminal , not SOBJ do you know why? , i just read is should be the only way to talk to the MCBL so i need to understand how to enter them in a Arduino VB script thing without using the OBJECTS menu in Manager


    And some more thing about NMT to learn




  2. #42
    Join Date
    Jan 2018
    Posts
    106

    Re: Faulhaber Servo Motor and driver , needs CANbus interface to setup , help!

    Here it is what is in the terminal when i push the Enable button in the Manager , node #3 is the 4th ID number and for all nodes it should be 0x000 ID right?

    19:22:14.080 3EN Id: 0x303 Transmit-Data: 0F 00 00 00 00
    19:22:14.089 3 GOBJ 6041.00 Id: 0x603 Transmit-Data: 40 41 60 00 00 00 00 00 Statusword
    19:22:14.091 3 GOBJ 6041.00 = 39 (0x0027) Id: 0x583 Receive-Data: 4B 41 60 00 27 00 00 00
    19:22:14.098 3EN = 0 Id: 0x283 Receive-Data: 0F 00 00 00 00 01
    19:22:14.099 Id 0x183: 0x0027 Id: 0x183 Receive-Data: 27 00
    19:22:15.331 TRANSMIT 703 Request Id: 0x703 Transmit-Data: Request
    19:22:15.351 Node 3 - NMT: 5 Id: 0x703 Receive-Data: 85
    19:22:15.362 3 GOBJ 6041.00 Id: 0x603 Transmit-Data: 40 41 60 00 00 00 00 00 Statusword
    19:22:15.378 3 GOBJ 6041.00 = 39 (0x0027) Id: 0x583 Receive-Data: 4B 41 60 00 27 00 00 00
    19:22:15.399 3 GOBJ 6060.00 Id: 0x603 Transmit-Data: 40 60 60 00 00 00 00 00 Modes Of Operation
    19:22:15.409 3 GOBJ 6060.00 = 255 (0xFF) Id: 0x583 Receive-Data: 4F 60 60 00 FF 00 00 00
    19:22:15.425 3 GOBJ 6061.00 Id: 0x603 Transmit-Data: 40 61 60 00 00 00 00 00 Modes Of Operation Display
    19:22:15.440 3 GOBJ 6061.00 = 255 (0xFF) Id: 0x583 Receive-Data: 4F 61 60 00 FF 00 00 00



    And i am hitting another wall , i can't include a "F" in the EN message i have to send and i dont know how to play with the arduino libraries yet...





  3. #43
    Join Date
    Jan 2018
    Posts
    106

    Re: Faulhaber Servo Motor and driver , needs CANbus interface to setup , help!

    Oh ! i been able to use another Arduino Sketch to send messages the other Arduino script wasnt sending , creating a compiling error !

    It reacted when i used the 703 ID , node is #3 but i dont understand yet where is the 70 related


    SO now showing NMT : 5 and Heartbeat : 5 ..... what does it means .... haaaaaaaaaa


  4. #44
    Join Date
    Jan 2009
    Posts
    334

    Re: Faulhaber Servo Motor and driver , needs CANbus interface to setup , help!

    I am still working on the interface.
    See section:2.4 Operation using own host application, page 13 of the CAN Open Manual.

    The "h" is for hexadecimal. Note that the CAN-ID + Node-ID gives the proper command.

    Object CAN-ID Description
    TxPDO1 0x180 + Node-ID Receive drive data (e. g. status values)
    RxPDO1 0x200 + Node-ID Send data to the drives (e. g. control commands)
    TxPDO2 0x280 + Node-ID Receive drive data (e. g. status values)
    RxPDO2 0x300 + Node-ID Send data to the drives (e. g. control commands)
    TxPDO3 0x380 + Node-ID Receive drive data (e. g. status values)
    RxPDO3 0x400 + Node-ID Send data to the drives (e. g. control commands)
    TxPDO4 0x480 + Node-ID Receive drive data (e. g. status values)
    RxPDO4 0x500 + Node-ID Send data to the drives (e. g. control commands)
    TxSDO1 0x580 + Node-ID Read entry of the object dictionary
    RxSDO1 0x600 + Node-ID Write entry of the object dictionary

    Note the control commands hex address.
    I have a Arduino, but I find the compiler sometimes unreliable.

    Iron-Man

  5. #45
    Join Date
    Jan 2018
    Posts
    106

    Re: Faulhaber Servo Motor and driver , needs CANbus interface to setup , help!

    oh my goddddd , it is now WORKING!!

    waking up the NMT , then Start and then the motor gets into operational mode i cant turn it by hand it holds his position !!

    i think it took me 3 months to make it work god damn $&%@*@?

    for info i am using Keye shield https://wiki.keyestudio.com/KS0411_k...CAN-BUS_Shield

    using this Library arduino-mcp2515-master and i just had to set the output pin to #10 instead of their default #9pin and added a third message to the sketch
    https://www.electronicshub.org/ardui...-bus-tutorial/

    in Arduino i click File - Examples - Arduino-mcp2515-master and use the CAN-WRITE







  6. #46
    Join Date
    Jan 2009
    Posts
    334

    Re: Faulhaber Servo Motor and driver , needs CANbus interface to setup , help!

    Great !!

    Iron-Man

  7. #47
    Join Date
    Jan 2018
    Posts
    106

    Re: Faulhaber Servo Motor and driver , needs CANbus interface to setup , help!

    i wired up everything on my machine and the arduino is working while sending the messages on the Bus and Enabling the Node 3 (the node i been able to Enable with the Arduino lately) who is at the end of the bus of 4 nodes , now would have to add some messages to Enable the other nodes. Tried to add just more messages and it didnt worked really for the moment.

    Now opening Motion Manager to see if it would be seeing all the nodes together and play with the Arduino CAN messages and look if it opens up the other nodes in the terminal , i never watched more than one node at a time on the interface while i was trying alot of things in my office before doing the whole wirings work



    Wired this way and when the CAN-Bus interface scans it finds only one node and it cannot be opened in the Manager , cant connect to it and control it

    When i disconnect the nodes 2-3-4 from the harness and move the resistor to the Node1 i can open it in Manager like normally

    When i try to just put the resistor at the Node 2 it doesnt work

    Am i making a stupid error on the Bus wiring? all the wires are twisted all along the harness




    I am very close to the success !

    https://youtu.be/R-uppnxmf8c

  8. #48
    Join Date
    Jan 2018
    Posts
    106

    Re: Faulhaber Servo Motor and driver , needs CANbus interface to setup , help!

    Oh well , after some fiddling i can see the Node#2 is bugging the whole Bus , i can see all the other nodes if the #2 is out of the bus , it may be bad , the MCBLs are approximately from 2007 will change it i have some spares

  9. #49
    Join Date
    Jan 2018
    Posts
    106

    Re: Faulhaber Servo Motor and driver , needs CANbus interface to setup , help!

    oh well , discovered something is weird.

    now with the buggin Node removed i can access to the network and the Node3 , to who i sent the messages with the Arduino Canbus shield script now sends NMT and Heartbeat all the time . The CANbus shield is disconected from the bus right now so this is the MCBL who sends the 0x703 messages non stop. is it something that is not good ?



  10. #50
    Join Date
    Jan 2018
    Posts
    106

    Re: Faulhaber Servo Motor and driver , needs CANbus interface to setup , help!

    Well .... i went thru Motion Manager 5 (not the 6) and i opened the 5 nodes and renamed them to not have two node3 in the list and it been waayyy easier to send and EEPSAV the parameters . When adding "Position" checkbox instead of the Velocity it would almost always switchback to Velocity when hitting Send button , having to try many times to make it stick to the params... Manager 5 works alot better !

    Now i can read this in the Faulhaber CANOpen manual and it seems pretty what i need to know but is it possible to use ControlWords by CAN message ? and how to set it up to be sent ? when i send these 0x00 06 what ID should i use for the message ? it does nothing at ID 000
    0x00 07
    0x00 0F

    ******
    Example: Enable OperationSequence of steps of the transition to bring a drive into the Operation Enabled state.
    ? The drive is in the Switch On Disabled state.
    1. Enter the Shut Down command (Controlword = 0x00 06).? The drive switches into the state Ready to Switch On.
    2. Enter the Switch On command (Controlword = 0x00 07).? The drive switches into the Switched On state.
    3. Enter the Enable Operation command (Controlword = 0x00 0F).? The drive is now in the Operation Enabled state. In this state the set operating modecan be used, using the respective objects.
    ******

    Now i still need to understand where i am wrong in the messages trying to send for the 5 nodes , only the Node3 is put to Enabled and holding his position now , using this and i might mix up the things about ID and messages... My brains are meltiiinnnng It looks soooo simple to do this in the manuals but i dont get it !




    canMsg1.can_id = 0x703; //opens node #3 NOT NEEDED
    canMsg1.can_dlc = 8;
    canMsg1.data[0] = 0x00;
    canMsg1.data[1] = 0x00;
    canMsg1.data[2] = 0x00;
    canMsg1.data[3] = 0x00;
    canMsg1.data[4] = 0x00;
    canMsg1.data[5] = 0x00;
    canMsg1.data[6] = 0x00;
    canMsg1.data[7] = 0x00;


    canMsg2.can_id = 0x000;
    canMsg2.can_dlc = 8;
    canMsg2.data[0] = 0x01; // le mets OPERATIONAL !!! WORKS
    canMsg2.data[1] = 0x03; // le mets operational !!!
    canMsg2.data[2] = 0x00;
    canMsg2.data[3] = 0x00;
    canMsg2.data[4] = 0x00;
    canMsg2.data[5] = 0x00;
    canMsg2.data[6] = 0x00;
    canMsg2.data[7] = 0x00;


    canMsg3.can_id = 0x303; // DOES "EN" FINALLYYYYY WORKS
    canMsg3.can_dlc = 5;
    canMsg3.data[0] = 0x0f;
    canMsg3.data[1] = 0x00;
    canMsg3.data[2] = 0x00;
    canMsg3.data[3] = 0x00;
    canMsg3.data[4] = 0x00;
    canMsg3.data[5] = 0x00;
    canMsg3.data[6] = 0x00;
    canMsg3.data[7] = 0x00;


    canMsg4.can_id = 0x701; //opens node #1 NMT FAILS
    canMsg4.can_dlc = 8;
    canMsg4.data[0] = 0x00;
    canMsg4.data[1] = 0x00;
    canMsg4.data[2] = 0x00;
    canMsg4.data[3] = 0x00;
    canMsg4.data[4] = 0x00;
    canMsg4.data[5] = 0x00;
    canMsg4.data[6] = 0x00;
    canMsg4.data[7] = 0x00;


    canMsg5.can_id = 0x000;
    canMsg5.can_dlc = 8;
    canMsg5.data[0] = 0x01; // le mets OPERATIONAL !!! FAILS
    canMsg5.data[1] = 0x03; // le mets operational !!!
    canMsg5.data[2] = 0x00;
    canMsg5.data[3] = 0x00;
    canMsg5.data[4] = 0x00;
    canMsg5.data[5] = 0x00;
    canMsg5.data[6] = 0x00;
    canMsg5.data[7] = 0x00;


    canMsg6.can_id = 0x301; // DOES "EN" FINALLYYYYY FAILS
    canMsg6.can_dlc = 5;
    canMsg6.data[0] = 0x0f;
    canMsg6.data[1] = 0x00;
    canMsg6.data[2] = 0x00;
    canMsg6.data[3] = 0x00;
    canMsg6.data[4] = 0x00;
    canMsg6.data[5] = 0x00;
    canMsg6.data[6] = 0x00;
    canMsg6.data[7] = 0x00;


    canMsg7.can_id = 0x702; //opens node #2 NMT FAILS
    canMsg7.can_dlc = 8;
    canMsg7.data[0] = 0x00;
    canMsg7.data[1] = 0x00;
    canMsg7.data[2] = 0x00;
    canMsg7.data[3] = 0x00;
    canMsg7.data[4] = 0x00;
    canMsg7.data[5] = 0x00;
    canMsg7.data[6] = 0x00;
    canMsg7.data[7] = 0x00;


    canMsg8.can_id = 0x000;
    canMsg8.can_dlc = 8;
    canMsg8.data[0] = 0x01; // le mets OPERATIONAL !!! FAILS
    canMsg8.data[1] = 0x03; // le mets operational !!!
    canMsg8.data[2] = 0x00;
    canMsg8.data[3] = 0x00;
    canMsg8.data[4] = 0x00;
    canMsg8.data[5] = 0x00;
    canMsg8.data[6] = 0x00;
    canMsg8.data[7] = 0x00;


    canMsg9.can_id = 0x302; // DOES "EN" FINALLYYYYY FAILS
    canMsg9.can_dlc = 5;
    canMsg9.data[0] = 0x0f;
    canMsg9.data[1] = 0x00;
    canMsg9.data[2] = 0x00;
    canMsg9.data[3] = 0x00;
    canMsg9.data[4] = 0x00;
    canMsg9.data[5] = 0x00;
    canMsg9.data[6] = 0x00;
    canMsg9.data[7] = 0x00;




    canMsg10.can_id = 0x704; //opens node #4 NMT FAILS
    canMsg10.can_dlc = 8;
    canMsg10.data[0] = 0x00;
    canMsg10.data[1] = 0x00;
    canMsg10.data[2] = 0x00;
    canMsg10.data[3] = 0x00;
    canMsg10.data[4] = 0x00;
    canMsg10.data[5] = 0x00;
    canMsg10.data[6] = 0x00;
    canMsg10.data[7] = 0x00;


    canMsg11.can_id = 0x000;
    canMsg11.can_dlc = 8;
    canMsg11.data[0] = 0x01; // le mets OPERATIONAL !!! FAILS
    canMsg11.data[1] = 0x03; // le mets operational !!!
    canMsg11.data[2] = 0x00;
    canMsg11.data[3] = 0x00;
    canMsg11.data[4] = 0x00;
    canMsg11.data[5] = 0x00;
    canMsg11.data[6] = 0x00;
    canMsg11.data[7] = 0x00;


    canMsg12.can_id = 0x304; // DOES "EN" FINALLYYYYY FAILS
    canMsg12.can_dlc = 5;
    canMsg12.data[0] = 0x0f;
    canMsg12.data[1] = 0x00;
    canMsg12.data[2] = 0x00;
    canMsg12.data[3] = 0x00;
    canMsg12.data[4] = 0x00;
    canMsg12.data[5] = 0x00;
    canMsg12.data[6] = 0x00;
    canMsg12.data[7] = 0x00;


    canMsg13.can_id = 0x705; //opens node #5 NMT FAILS
    canMsg13.can_dlc = 8;
    canMsg13.data[0] = 0x00;
    canMsg13.data[1] = 0x00;
    canMsg13.data[2] = 0x00;
    canMsg13.data[3] = 0x00;
    canMsg13.data[4] = 0x00;
    canMsg13.data[5] = 0x00;
    canMsg13.data[6] = 0x00;
    canMsg13.data[7] = 0x00;


    canMsg14.can_id = 0x000;
    canMsg14.can_dlc = 8;
    canMsg14.data[0] = 0x01; // le mets OPERATIONAL !!! FAILS
    canMsg14.data[1] = 0x05; // le mets operational !!!
    canMsg14.data[2] = 0x00;
    canMsg14.data[3] = 0x00;
    canMsg14.data[4] = 0x00;
    canMsg14.data[5] = 0x00;
    canMsg14.data[6] = 0x00;
    canMsg14.data[7] = 0x00;


    canMsg15.can_id = 0x305; // DOES "EN" FINALLYYYYY FAILS
    canMsg15.can_dlc = 5;
    canMsg15.data[0] = 0x0f;
    canMsg15.data[1] = 0x00;
    canMsg15.data[2] = 0x00;
    canMsg15.data[3] = 0x00;
    canMsg15.data[4] = 0x00;
    canMsg15.data[5] = 0x00;
    canMsg15.data[6] = 0x00;
    canMsg15.data[7] = 0x00;

  11. #51
    Join Date
    Jan 2018
    Posts
    106

    Re: Faulhaber Servo Motor and driver , needs CANbus interface to setup , help!

    allright so there is alot of problems created by the Manager having a hard time to EEPSAV the parameters you choose in the memory and be able to respond to the CANOpen messages you send to him . God damn

    this is the exact things that were fighting back the messages sent to the Bus , these settings just bump themselves out of the params , killing the thing because not sticking but i been able to trick them to stick there and it ENABLE all my Nodes when sending em the CAN messages finally...








    And my Arduino script working now finally !





    #include #include


    struct can_frame canMsg1;
    struct can_frame canMsg2;
    struct can_frame canMsg3;
    struct can_frame canMsg4;
    struct can_frame canMsg5;
    struct can_frame canMsg6;
    struct can_frame canMsg7;
    struct can_frame canMsg8;
    struct can_frame canMsg9;
    struct can_frame canMsg10;
    struct can_frame canMsg11;
    struct can_frame canMsg12;
    struct can_frame canMsg13;
    struct can_frame canMsg14;
    struct can_frame canMsg15;


    MCP2515 mcp2515(10);




    void setup() {


    //// notes : faire le message STARTALL ID000 0x01 0x00 ca mets les 5 nodes en started mode
    // PREOP ID 000 0x80 02(node)
    //////


    canMsg1.can_id = 0x703; //opens node #3 NMT MAARCHHHHEEEEE
    canMsg1.can_dlc = 8;
    canMsg1.data[0] = 0x00;
    canMsg1.data[1] = 0x00;
    canMsg1.data[2] = 0x00;
    canMsg1.data[3] = 0x00;
    canMsg1.data[4] = 0x00;
    canMsg1.data[5] = 0x00;
    canMsg1.data[6] = 0x00;
    canMsg1.data[7] = 0x00;


    canMsg2.can_id = 0x000;
    canMsg2.can_dlc = 2;
    canMsg2.data[0] = 0x01; // le mets OPERATIONAL !!!
    canMsg2.data[1] = 0x00; // le mets operational !!! 1-2-3-4-5 nodes
    canMsg2.data[2] = 0x00;
    canMsg2.data[3] = 0x00;
    canMsg2.data[4] = 0x00;
    canMsg2.data[5] = 0x00;
    canMsg2.data[6] = 0x00;
    canMsg2.data[7] = 0x00;


    canMsg3.can_id = 0x303; // DOES "EN" FINALLYYYYY
    canMsg3.can_dlc = 5;
    canMsg3.data[0] = 0x0f;
    canMsg3.data[1] = 0x00;
    canMsg3.data[2] = 0x00;
    canMsg3.data[3] = 0x00;
    canMsg3.data[4] = 0x00;
    canMsg3.data[5] = 0x00;
    canMsg3.data[6] = 0x00;
    canMsg3.data[7] = 0x00;


    canMsg4.can_id = 0x701; //opens node #1 NMT MAARRCCHHEEE
    canMsg4.can_dlc = 8;
    canMsg4.data[0] = 0x00;
    canMsg4.data[1] = 0x00;
    canMsg4.data[2] = 0x00;
    canMsg4.data[3] = 0x00;
    canMsg4.data[4] = 0x00;
    canMsg4.data[5] = 0x00;
    canMsg4.data[6] = 0x00;
    canMsg4.data[7] = 0x00;


    canMsg5.can_id = 0x000;
    canMsg5.can_dlc = 8;
    canMsg5.data[0] = 0x01; // le mets OPERATIONAL !!!
    canMsg5.data[1] = 0x01; // le mets operational !!!
    canMsg5.data[2] = 0x00;
    canMsg5.data[3] = 0x00;
    canMsg5.data[4] = 0x00;
    canMsg5.data[5] = 0x00;
    canMsg5.data[6] = 0x00;
    canMsg5.data[7] = 0x00;


    canMsg6.can_id = 0x301; // DOES "EN" FINALLYYYYY
    canMsg6.can_dlc = 5;
    canMsg6.data[0] = 0x0f;
    canMsg6.data[1] = 0x00;
    canMsg6.data[2] = 0x00;
    canMsg6.data[3] = 0x00;
    canMsg6.data[4] = 0x00;
    canMsg6.data[5] = 0x00;
    canMsg6.data[6] = 0x00;
    canMsg6.data[7] = 0x00;


    canMsg7.can_id = 0x702; //opens node #2 NMT MAAARRCCHHEEEE
    canMsg7.can_dlc = 8;
    canMsg7.data[0] = 0x00;
    canMsg7.data[1] = 0x00;
    canMsg7.data[2] = 0x00;
    canMsg7.data[3] = 0x00;
    canMsg7.data[4] = 0x00;
    canMsg7.data[5] = 0x00;
    canMsg7.data[6] = 0x00;
    canMsg7.data[7] = 0x00;


    canMsg8.can_id = 0x000;
    canMsg8.can_dlc = 8;
    canMsg8.data[0] = 0x01; // le mets OPERATIONAL !!!
    canMsg8.data[1] = 0x02; // le mets operational !!!
    canMsg8.data[2] = 0x00;
    canMsg8.data[3] = 0x00;
    canMsg8.data[4] = 0x00;
    canMsg8.data[5] = 0x00;
    canMsg8.data[6] = 0x00;
    canMsg8.data[7] = 0x00;


    canMsg9.can_id = 0x302; // DOES "EN" FINALLYYYYY
    canMsg9.can_dlc = 5;
    canMsg9.data[0] = 0x0f;
    canMsg9.data[1] = 0x00;
    canMsg9.data[2] = 0x00;
    canMsg9.data[3] = 0x00;
    canMsg9.data[4] = 0x00;
    canMsg9.data[5] = 0x00;
    canMsg9.data[6] = 0x00;
    canMsg9.data[7] = 0x00;




    canMsg10.can_id = 0x704; //opens node #4 NMT MMAAARRCCHHHEEE
    canMsg10.can_dlc = 8;
    canMsg10.data[0] = 0x00;
    canMsg10.data[1] = 0x00;
    canMsg10.data[2] = 0x00;
    canMsg10.data[3] = 0x00;
    canMsg10.data[4] = 0x00;
    canMsg10.data[5] = 0x00;
    canMsg10.data[6] = 0x00;
    canMsg10.data[7] = 0x00;


    canMsg11.can_id = 0x000;
    canMsg11.can_dlc = 8;
    canMsg11.data[0] = 0x01; // le mets OPERATIONAL !!!
    canMsg11.data[1] = 0x04; // le mets operational !!!
    canMsg11.data[2] = 0x00;
    canMsg11.data[3] = 0x00;
    canMsg11.data[4] = 0x00;
    canMsg11.data[5] = 0x00;
    canMsg11.data[6] = 0x00;
    canMsg11.data[7] = 0x00;


    canMsg12.can_id = 0x304; // DOES "EN" FINALLYYYYY
    canMsg12.can_dlc = 5;
    canMsg12.data[0] = 0x0f;
    canMsg12.data[1] = 0x00;
    canMsg12.data[2] = 0x00;
    canMsg12.data[3] = 0x00;
    canMsg12.data[4] = 0x00;
    canMsg12.data[5] = 0x00;
    canMsg12.data[6] = 0x00;
    canMsg12.data[7] = 0x00;


    canMsg13.can_id = 0x705; //opens node #5 NMT MARCHEEEE!!!!!
    canMsg13.can_dlc = 8;
    canMsg13.data[0] = 0x00;
    canMsg13.data[1] = 0x00;
    canMsg13.data[2] = 0x00;
    canMsg13.data[3] = 0x00;
    canMsg13.data[4] = 0x00;
    canMsg13.data[5] = 0x00;
    canMsg13.data[6] = 0x00;
    canMsg13.data[7] = 0x00;


    canMsg14.can_id = 0x000;
    canMsg14.can_dlc = 8;
    canMsg14.data[0] = 0x01; // le mets OPERATIONAL !!! WORKSSS
    canMsg14.data[1] = 0x05; // le mets operational !!!
    canMsg14.data[2] = 0x00;
    canMsg14.data[3] = 0x00;
    canMsg14.data[4] = 0x00;
    canMsg14.data[5] = 0x00;
    canMsg14.data[6] = 0x00;
    canMsg14.data[7] = 0x00;


    canMsg15.can_id = 0x305; // DOES "EN" FINALLYYYYY WORKS
    canMsg15.can_dlc = 5;
    canMsg15.data[0] = 0x0f;
    canMsg15.data[1] = 0x00;
    canMsg15.data[2] = 0x00;
    canMsg15.data[3] = 0x00;
    canMsg15.data[4] = 0x00;
    canMsg15.data[5] = 0x00;
    canMsg15.data[6] = 0x00;
    canMsg15.data[7] = 0x00;

    while (!Serial);
    Serial.begin(9600);
    SPI.begin();

    mcp2515.reset();
    mcp2515.setBitrate(CAN_500KBPS);
    mcp2515.setNormalMode();

    Serial.println("Example: Write to CAN");
    }


    void loop() {

    mcp2515.sendMessage(&canMsg1);
    mcp2515.sendMessage(&canMsg2);
    mcp2515.sendMessage(&canMsg3);
    mcp2515.sendMessage(&canMsg4);
    mcp2515.sendMessage(&canMsg5);
    mcp2515.sendMessage(&canMsg6);
    mcp2515.sendMessage(&canMsg7);
    mcp2515.sendMessage(&canMsg8);
    mcp2515.sendMessage(&canMsg9);
    mcp2515.sendMessage(&canMsg10);
    mcp2515.sendMessage(&canMsg11);
    mcp2515.sendMessage(&canMsg12);
    mcp2515.sendMessage(&canMsg13);
    mcp2515.sendMessage(&canMsg14);
    mcp2515.sendMessage(&canMsg15);

    Serial.println("Messages sent");

    delay(1000);


    }


    AAAarrgghhhhh , was such a pain in the ass , seriously !!

  12. #52
    Join Date
    Jan 2009
    Posts
    334

    Re: Faulhaber Servo Motor and driver , needs CANbus interface to setup , help!

    Hello Letomoto

    Have you tried just getting one node completely operational?
    I do not have a compatible motor so I am at a disadvantage. I have seen some motors on ebay but they are expensive.
    I used PCAN View to create messages outside of MM 5 & 6 to test out commands. PCAN View is very limited.
    Can you post the exact part numbers for your motors?
    You can also use the Object Browser to check your settings after commands are given.
    SOBJ = Write Object Dictionary, GOBJ = Read Object Dictionary.


    Iron-Man

  13. #53
    Join Date
    Jan 2018
    Posts
    106

    Re: Faulhaber Servo Motor and driver , needs CANbus interface to setup , help!

    i got these 2444S 024B but they are planetary geared and i also have https://www.faulhaber.com/en/products/series/2444b/


    i also have a beefier one but no gears so it can move my X-axis faster than the geared ones , they both work fine with the MCBL3006C
    3504B https://www.faulhaber.com/en/products/series/3564b/

    for sure you would like to have those motors to see what you do how it behaves ! sent a email to my parts dude to see if he has more in stock if you want some . i seen em pretty costly on ebay , asking them how much he would want for

    i worked a bit further on the sequences of messages from the Arduino to recover the DIR signal lost checkedbox in the parameters and it works fine now , added another line of message , a few times the gantry moved crooked because on of the two Y-drives was not responding to the DIRection of the move ... and the geared ones are pretty torquey...

    going forward on the build

  14. #54
    Join Date
    Jan 2018
    Posts
    106

    Re: Faulhaber Servo Motor and driver , needs CANbus interface to setup , help!

    and here is the current Arduino script who regain the DIRIN parameter needed to control it in STEPMOD

    #include
    #include


    struct can_frame canMsg1;
    struct can_frame canMsg2;
    struct can_frame canMsg3;
    struct can_frame canMsg4;
    struct can_frame canMsg5;
    struct can_frame canMsg6;
    struct can_frame canMsg7;
    struct can_frame canMsg8;
    struct can_frame canMsg9;
    struct can_frame canMsg10;
    struct can_frame canMsg11;
    struct can_frame canMsg12;
    struct can_frame canMsg13;
    struct can_frame canMsg14;
    struct can_frame canMsg15;
    struct can_frame canMsg16;
    struct can_frame canMsg17;
    struct can_frame canMsg18;
    struct can_frame canMsg19;
    struct can_frame canMsg20;


    MCP2515 mcp2515(10);




    void setup() {


    //// NOTES : faire le message STARTALL ID000 0x01 0x00 ca mets les 5 nodes en started mode
    // PREOP ID 000 0x80 02(node)
    //Example:Node 3
    //? Start node 3 using the CANopen Network Management (NMT):
    //ID 000: 01 03 (Start Remote Node 3)
    //? Switch to FAULHABER mode using RxPDO2:
    //ID 303: FD FF FF FF FF (OPMOD-1)
    //? Switch On using FAULHABER command on RxPDO2:
    //ID 303: 0F 00 00 00 00 (EN)
    //Start drive with 500 rpm using FAULHABER command on RxPDO2:
    //ID 303: 93 F4 01 00 00 (V500)
    //0x300+node 0x60 0x60 for OPMOD command


    //IDs
    //TxPDO1 0x180 + Node ID Receive the drive's statusword
    //RxPDO1 0x200 + Node ID Transfer controlword to the drives
    //TxPDO2 0x280 + Node ID Receive FAULHABER data from the drive
    //RxPDO2 0x300 + Node ID Transfer FAULHABER command to the drive
    //TxSDO1 0x580 + Node ID Read entry of the object dictionary
    //RxSDO1 0x600 + Node ID Write entry of the object dictionary
    //////


    canMsg1.can_id = 0x703; //opens node #3 NMT MAARCHHHHEEEEE
    canMsg1.can_dlc = 8;
    canMsg1.data[0] = 0x00;
    canMsg1.data[1] = 0x00;
    canMsg1.data[2] = 0x00;
    canMsg1.data[3] = 0x00;
    canMsg1.data[4] = 0x00;
    canMsg1.data[5] = 0x00;
    canMsg1.data[6] = 0x00;
    canMsg1.data[7] = 0x00;


    canMsg2.can_id = 0x000;
    canMsg2.can_dlc = 2;
    canMsg2.data[0] = 0x01; // le mets OPERATIONAL !!!
    canMsg2.data[1] = 0x00; // le mets operational !!! 1-2-3-4-5 nodes
    canMsg2.data[2] = 0x00;
    canMsg2.data[3] = 0x00;
    canMsg2.data[4] = 0x00;
    canMsg2.data[5] = 0x00;
    canMsg2.data[6] = 0x00;
    canMsg2.data[7] = 0x00;


    canMsg3.can_id = 0x303; // DOES "EN" FINALLYYYYY
    canMsg3.can_dlc = 5;
    canMsg3.data[0] = 0x0f;
    canMsg3.data[1] = 0x00;
    canMsg3.data[2] = 0x00;
    canMsg3.data[3] = 0x00;
    canMsg3.data[4] = 0x00;
    canMsg3.data[5] = 0x00;
    canMsg3.data[6] = 0x00;
    canMsg3.data[7] = 0x00;


    canMsg4.can_id = 0x701; //opens node #1 NMT MAARRCCHHEEE
    canMsg4.can_dlc = 8;
    canMsg4.data[0] = 0x00;
    canMsg4.data[1] = 0x00;
    canMsg4.data[2] = 0x00;
    canMsg4.data[3] = 0x00;
    canMsg4.data[4] = 0x00;
    canMsg4.data[5] = 0x00;
    canMsg4.data[6] = 0x00;
    canMsg4.data[7] = 0x00;





    canMsg5.can_id = 0x000;
    canMsg5.can_dlc = 8;
    canMsg5.data[0] = 0x01; // le mets OPERATIONAL !!!
    canMsg5.data[1] = 0x01; // le mets operational !!!
    canMsg5.data[2] = 0x00;
    canMsg5.data[3] = 0x00;
    canMsg5.data[4] = 0x00;
    canMsg5.data[5] = 0x00;
    canMsg5.data[6] = 0x00;
    canMsg5.data[7] = 0x00;


    canMsg6.can_id = 0x301; // DOES "EN" FINALLYYYYY
    canMsg6.can_dlc = 5;
    canMsg6.data[0] = 0x0f;
    canMsg6.data[1] = 0x00;
    canMsg6.data[2] = 0x00;
    canMsg6.data[3] = 0x00;
    canMsg6.data[4] = 0x00;
    canMsg6.data[5] = 0x00;
    canMsg6.data[6] = 0x00;
    canMsg6.data[7] = 0x00;


    canMsg7.can_id = 0x702; //opens node #2 NMT MAAARRCCHHEEEE
    canMsg7.can_dlc = 8;
    canMsg7.data[0] = 0x00;
    canMsg7.data[1] = 0x00;
    canMsg7.data[2] = 0x00;
    canMsg7.data[3] = 0x00;
    canMsg7.data[4] = 0x00;
    canMsg7.data[5] = 0x00;
    canMsg7.data[6] = 0x00;
    canMsg7.data[7] = 0x00;


    canMsg8.can_id = 0x000;
    canMsg8.can_dlc = 8;
    canMsg8.data[0] = 0x01; // le mets OPERATIONAL !!!
    canMsg8.data[1] = 0x02; // le mets operational !!!
    canMsg8.data[2] = 0x00;
    canMsg8.data[3] = 0x00;
    canMsg8.data[4] = 0x00;
    canMsg8.data[5] = 0x00;
    canMsg8.data[6] = 0x00;
    canMsg8.data[7] = 0x00;


    canMsg9.can_id = 0x302; // DOES "EN" FINALLYYYYY
    canMsg9.can_dlc = 5;
    canMsg9.data[0] = 0x0f;
    canMsg9.data[1] = 0x00;
    canMsg9.data[2] = 0x00;
    canMsg9.data[3] = 0x00;
    canMsg9.data[4] = 0x00;
    canMsg9.data[5] = 0x00;
    canMsg9.data[6] = 0x00;
    canMsg9.data[7] = 0x00;




    canMsg10.can_id = 0x704; //opens node #4 NMT MMAAARRCCHHHEEE
    canMsg10.can_dlc = 8;
    canMsg10.data[0] = 0x00;
    canMsg10.data[1] = 0x00;
    canMsg10.data[2] = 0x00;
    canMsg10.data[3] = 0x00;
    canMsg10.data[4] = 0x00;
    canMsg10.data[5] = 0x00;
    canMsg10.data[6] = 0x00;
    canMsg10.data[7] = 0x00;


    canMsg11.can_id = 0x000;
    canMsg11.can_dlc = 8;
    canMsg11.data[0] = 0x01; // le mets OPERATIONAL !!!
    canMsg11.data[1] = 0x04; // le mets operational !!!
    canMsg11.data[2] = 0x00;
    canMsg11.data[3] = 0x00;
    canMsg11.data[4] = 0x00;
    canMsg11.data[5] = 0x00;
    canMsg11.data[6] = 0x00;
    canMsg11.data[7] = 0x00;


    canMsg12.can_id = 0x304; // DOES "EN" FINALLYYYYY
    canMsg12.can_dlc = 5;
    canMsg12.data[0] = 0x0f;
    canMsg12.data[1] = 0x00;
    canMsg12.data[2] = 0x00;
    canMsg12.data[3] = 0x00;
    canMsg12.data[4] = 0x00;
    canMsg12.data[5] = 0x00;
    canMsg12.data[6] = 0x00;
    canMsg12.data[7] = 0x00;


    canMsg13.can_id = 0x705; //opens node #5 NMT MARCHEEEE!!!!!
    canMsg13.can_dlc = 8;
    canMsg13.data[0] = 0x00;
    canMsg13.data[1] = 0x00;
    canMsg13.data[2] = 0x00;
    canMsg13.data[3] = 0x00;
    canMsg13.data[4] = 0x00;
    canMsg13.data[5] = 0x00;
    canMsg13.data[6] = 0x00;
    canMsg13.data[7] = 0x00;


    canMsg14.can_id = 0x000;
    canMsg14.can_dlc = 8;
    canMsg14.data[0] = 0x01; // le mets OPERATIONAL !!! WORKSSS
    canMsg14.data[1] = 0x05; // le mets operational !!!
    canMsg14.data[2] = 0x00;
    canMsg14.data[3] = 0x00;
    canMsg14.data[4] = 0x00;
    canMsg14.data[5] = 0x00;
    canMsg14.data[6] = 0x00;
    canMsg14.data[7] = 0x00;


    canMsg15.can_id = 0x305; // DOES "EN" FINALLYYYYY WORKS
    canMsg15.can_dlc = 5;
    canMsg15.data[0] = 0x0f;
    canMsg15.data[1] = 0x00;
    canMsg15.data[2] = 0x00;
    canMsg15.data[3] = 0x00;
    canMsg15.data[4] = 0x00;
    canMsg15.data[5] = 0x00;
    canMsg15.data[6] = 0x00;
    canMsg15.data[7] = 0x00;






    // PARAMETERS ID 0x300+node 0x0C 0x00 for DIRIN command
    // 0x300+node 0x46 0x00 STEPMOD


    canMsg16.can_id = 0x301; // node #1 DIRIN
    canMsg16.can_dlc = 8;
    canMsg16.data[0] = 0x0C;
    canMsg16.data[1] = 0x00;
    canMsg16.data[2] = 0x00;
    canMsg16.data[3] = 0x00;
    canMsg16.data[4] = 0x00;
    canMsg16.data[5] = 0x00;
    canMsg16.data[6] = 0x00;
    canMsg16.data[7] = 0x00;


    canMsg17.can_id = 0x302; // node #2 DIRIN
    canMsg17.can_dlc = 8;
    canMsg17.data[0] = 0x0C;
    canMsg17.data[1] = 0x00;
    canMsg17.data[2] = 0x00;
    canMsg17.data[3] = 0x00;
    canMsg17.data[4] = 0x00;
    canMsg17.data[5] = 0x00;
    canMsg17.data[6] = 0x00;
    canMsg17.data[7] = 0x00;


    canMsg18.can_id = 0x303; // node #3 DIRIN
    canMsg18.can_dlc = 8;
    canMsg18.data[0] = 0x0C;
    canMsg18.data[1] = 0x00;
    canMsg18.data[2] = 0x00;
    canMsg18.data[3] = 0x00;
    canMsg18.data[4] = 0x00;
    canMsg18.data[5] = 0x00;
    canMsg18.data[6] = 0x00;
    canMsg18.data[7] = 0x00;


    canMsg19.can_id = 0x304; // node #4 DIRIN
    canMsg19.can_dlc = 8;
    canMsg19.data[0] = 0x0C;
    canMsg19.data[1] = 0x00;
    canMsg19.data[2] = 0x00;
    canMsg19.data[3] = 0x00;
    canMsg19.data[4] = 0x00;
    canMsg19.data[5] = 0x00;
    canMsg19.data[6] = 0x00;
    canMsg19.data[7] = 0x00;


    canMsg20.can_id = 0x305; // node #5 DIRIN
    canMsg20.can_dlc = 8;
    canMsg20.data[0] = 0x0C;
    canMsg20.data[1] = 0x00;
    canMsg20.data[2] = 0x00;
    canMsg20.data[3] = 0x00;
    canMsg20.data[4] = 0x00;
    canMsg20.data[5] = 0x00;
    canMsg20.data[6] = 0x00;
    canMsg20.data[7] = 0x00;

    while (!Serial);
    Serial.begin(9600);
    SPI.begin();

    mcp2515.reset();
    mcp2515.setBitrate(CAN_500KBPS);
    mcp2515.setNormalMode();

    Serial.println("Example: Write to CAN");
    }


    void loop() {

    mcp2515.sendMessage(&canMsg1);
    mcp2515.sendMessage(&canMsg2);
    mcp2515.sendMessage(&canMsg3);
    mcp2515.sendMessage(&canMsg4);
    mcp2515.sendMessage(&canMsg5);
    mcp2515.sendMessage(&canMsg6);
    mcp2515.sendMessage(&canMsg7);
    mcp2515.sendMessage(&canMsg8);
    mcp2515.sendMessage(&canMsg9);
    mcp2515.sendMessage(&canMsg10);
    mcp2515.sendMessage(&canMsg11);
    mcp2515.sendMessage(&canMsg12);
    mcp2515.sendMessage(&canMsg13);
    mcp2515.sendMessage(&canMsg14);
    mcp2515.sendMessage(&canMsg15);
    mcp2515.sendMessage(&canMsg16);
    //mcp2515.sendMessage(&canMsg17);
    //mcp2515.sendMessage(&canMsg18);
    //mcp2515.sendMessage(&canMsg19);
    //mcp2515.sendMessage(&canMsg20);

    Serial.println("Messages sent");

    delay(1000);


    }

  15. #55
    Join Date
    Apr 2006
    Posts
    13
    Hi,
    What CAN Interface (Brand/model)did you buy to connect to Faulhaber Manager software?

    Thank you

  16. #56
    Join Date
    Jan 2009
    Posts
    334

    Re: Faulhaber Servo Motor and driver , needs CANbus interface to setup , help!

    Quote Originally Posted by DSS View Post
    Hi,
    What CAN Interface (Brand/model)did you buy to connect to Faulhaber Manager software?

    Thank you
    I cannot reply, you must enable private msg reply.

    My msg:

    Hello Daryn

    I purchased a drive on ebay just to test and evaluate the Faulhaber CAN interface. The software (Motion Manager) makes it easy to configure the drive. The can-bus interface is necessary for easy configuration. Just check ebay and you may be able to pick up one of the recommended units ( PEAK, IXXAT, ESD) at little cost.

    Hope this helps,

    Iron-Man

  17. #57
    Join Date
    Apr 2006
    Posts
    13

    Re: Faulhaber Servo Motor and driver , needs CANbus interface to setup , help!

    Hi Iron-Man,
    Thank you for your response.
    Please confirm, if you know, once the drive is configured via Motion Manager to operate in Stepper Mode, will it be configured and ready to run in Stepper Mode after power down?
    So once configured, then no more CAN Bus/Motion Manager connection is required? This will be ideal.
    However i'm not sure why Letomoto went with the Arduino route?

    Thank you for your help, much appreciated!
    Daryn

    PS: It seems my "enable private msg reply" is on...

  18. #58
    Join Date
    Jan 2018
    Posts
    106

    Re: Faulhaber Servo Motor and driver , needs CANbus interface to setup , help!

    i also tried to answer your private message the other day but i couldnt.

    The reason i had to build the Arduino is to call them to Enable themselves . Once theyre configured to Stepper mode they still need to receive an order on the CAN Bus to turn ON

    Here is some little videos i didnt put on here and things move . I stalled this project because i had a dozen of other projects and it is taking my whole work bench ! i should probably come back onto it before the winter finish ...

    The Y-Axis goes slow and noisy because the motors on it are geared , they come from another machine , i didnt chose geared , its what i had. Will try to remove the gearbox , hopefully

    https://youtu.be/BwwDg7fYwvg

    https://youtu.be/x_ZEUbKTzzc

    And here the servo system really remember where it should be !! pretty strong on that ! It does shake like hell trying to return to his position but i moved it faaaaar with my hand . It wont happen when moving a laser

    https://youtu.be/qru7EOoqj6U

  19. #59
    Join Date
    Apr 2006
    Posts
    13

    Re: Faulhaber Servo Motor and driver , needs CANbus interface to setup , help!

    Thank you for the info! Appreciated!
    So i will have to do the arduino thing too and initialize the CAN on power up. Arrrr... pity...
    I did some movement tests yesterday to test if the motors will have enough torque.
    I got the X-axis of my laser moving, it was a very very jerky and rough movement. Step width and step number to still need to be configured
    I'm hoping the movement will be better once tuned. Is this an easy enough process?
    I have ordered a Chinese version of the PEAK PCAN adapter. Probably have a two week wait, just hope it works. The Faulhaber specified brand of interface adapters are very pricey.

    Moved the motor to the Y-axis and was unable to even move the gantry without a helping hand. (Hoping tuning will still sort this out)
    How are you planning to integrate your E-Stop? Just drop power to the the drives? Other option would be to disable the drive via CAN command.....?
    Not sure if that's safe, and it's probably more work.

  20. #60
    Join Date
    Jan 2018
    Posts
    106

    Re: Faulhaber Servo Motor and driver , needs CANbus interface to setup , help!

    How are you planning to integrate your E-Stop? Yes for sure

    The arduino thingy assembly is about 30$ for the arduino board and Keyestudio CAN-BUS Shield and the working code is just here in the thread .

    Last year when i searched Ebay for a ESD i got a used one for like 60$ and i found a lot of 6X ESD interface for 150$ but didnt felt like throwing money and not know what to do with 5 extra ones hah . i hate selling back things

    Some things i have to play with in the configuration would be accelerating , jerk , speed and i do not know yet why in the g-code when i ask to move i need to ask over F10 000 to have okay speed . the F command value is supposed to be units/minute no ? seems like it goes slower . If i ask around F3000 it shakes , jittery . at the beginning i thought i was asking too fast but when i asked F5-6-7-8-10k it was going smoother but i am wondering now how to set it to be able to take slower speed for cutting with the laser . Now i have a 8W diode (peak power) but planning of going to a 80W CO2 when it is gonna be working fine. already have the lens and mirrors kit so i would like to be able going slow for deep cuts and not shaking like this

    https://youtu.be/8-GlDpghDVc

Page 3 of 4 1234

Similar Threads

  1. Replies: 1
    Last Post: 09-03-2015, 09:38 AM
  2. TB6560 stepping motor driver and 5 AXIS CNC interface board
    By dedikul in forum Stepper Motors / Drives
    Replies: 1
    Last Post: 02-06-2015, 02:50 AM
  3. Mach 3 interface to stepper motor driver
    By dhookings in forum Machines running Mach Software
    Replies: 8
    Last Post: 05-28-2014, 05:48 PM
  4. Replies: 4
    Last Post: 09-08-2011, 11:41 PM
  5. Omron 500W AC Servo driver for robot setup
    By robo_plasma in forum Servo Motors / Drives
    Replies: 0
    Last Post: 01-06-2007, 10:28 PM

Tags for this Thread

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •