- Forum
- Roboteq Motor Controllers
- General Issues
- Controlling the HDC2450s controller with PCAN (CAN BUS)
Controlling the HDC2450s controller with PCAN (CAN BUS)
9 years 5 months ago #29529111
by chelsea
Controlling the HDC2450s controller with PCAN (CAN BUS) was created by chelsea
I am trying to write the code for controlling the brush motor using the HDC2450 controller using C#.
I have wrote the code to talk to CAN BUS but I don't know what data package to send in to make the motor moves.
So, using the Roboteq Motor Control Utility I went into and set up the controller to use CAN as follow
CAN Mode: RawCAN
Node ID: 100
Bit Rate: 125
Heartbeat (ms) 100
And, in my software, I have something like this to write a command to the controller via CAN BUS
The above code will send some DATA[] to the controller.
But, What I don't know is the DADA[]. What Data should I send to make the motor move?
Any help is appreciated.
I have wrote the code to talk to CAN BUS but I don't know what data package to send in to make the motor moves.
So, using the Roboteq Motor Control Utility I went into and set up the controller to use CAN as follow
CAN Mode: RawCAN
Node ID: 100
Bit Rate: 125
Heartbeat (ms) 100
And, in my software, I have something like this to write a command to the controller via CAN BUS
TPCANMsg CANMsg;
TPCANStatus stsResult;
CANMsg = new TPCANMsg();
CANMsg.DATA = new byte[8];
CANMsg.ID = id;
CANMsg.LEN = length;
CANMsg.MSGTYPE = TPCANMessageType.PCAN_MESSAGE_STANDARD;
CANMsg.DATA[0] = 10;
CANMsg.DATA[1] = 10;
CANMsg.DATA[2] = 10;
CANMsg.DATA[3] = 10;
CANMsg.DATA[4] = 0;
CANMsg.DATA[5] = 0;
CANMsg.DATA[6] = 0;
CANMsg.DATA[7] = 0;
stsResult = PCANBasic.Write(PcanHandle, ref CANMsg);
The above code will send some DATA[] to the controller.
But, What I don't know is the DADA[]. What Data should I send to make the motor move?
Any help is appreciated.
Please Log in or Create an account to join the conversation.
- Griffin Baker
9 years 5 months ago #29529112
by Griffin Baker
Replied by Griffin Baker on topic Controlling the HDC2450s controller with PCAN (CAN BUS)
If the motor is running in open loop, you send it the go command.
setcommand(_G, cc, nn) where cc = motor channel, and nn = command value.
So to set motor 1 command to go to 500, then it would be setcommand(_G, 1, 500).
setcommand(_G, cc, nn) where cc = motor channel, and nn = command value.
So to set motor 1 command to go to 500, then it would be setcommand(_G, 1, 500).
Please Log in or Create an account to join the conversation.
9 years 5 months ago #29529113
by chelsea
Replied by chelsea on topic Controlling the HDC2450s controller with PCAN (CAN BUS)
I believe the setcommand() is a microbasic function. How can I send this in a RAW CAN package?
Please Log in or Create an account to join the conversation.
- Griffin Baker
9 years 5 months ago #29529114
by Griffin Baker
Replied by Griffin Baker on topic Controlling the HDC2450s controller with PCAN (CAN BUS)
I am not sure in terms of can, but you can write the script so that when it receives a certain piece of data that it is compared against, you use the setcommand to tell the motor to move.
So if the can message data = 10, then tell the motor 1 to move.
So if the can message data = 10, then tell the motor 1 to move.
Please Log in or Create an account to join the conversation.
9 years 5 months ago #29529115
by chelsea
Replied by chelsea on topic Controlling the HDC2450s controller with PCAN (CAN BUS)
Do I need to write the Microbasic script to be able to control via CAN is the question. Is that the only way of doing this?
Please Log in or Create an account to join the conversation.
- roboteq
9 years 5 months ago #29529118
by roboteq
Replied by roboteq on topic Controlling the HDC2450s controller with PCAN (CAN BUS)
RawCAN will allow you to capture the raw content of your frames. It is then up to you to give this data a meaning using a script.
Assuming then that the frame you send contains the value 500 (0x1F4) stored in the first two bytes as 0x01 abd 0xF4, the code would look like this (untested)
Assuming then that the frame you send contains the value 500 (0x1F4) stored in the first two bytes as 0x01 abd 0xF4, the code would look like this (untested)
top:
' check if a new frame has arrived
if (getvalue(_CF, 1) > 0)
speed = (getvalue(_CAN, 3) << 8) + getvalue(_CAN, 4)' read first 2 bytes of frame to build 16-bit word
setcommand(_G, 1, speed)
end if
wait(10) ' 10ms pause
goto top
Please Log in or Create an account to join the conversation.
Moderators: tonysantoni
- Forum
- Roboteq Motor Controllers
- General Issues
- Controlling the HDC2450s controller with PCAN (CAN BUS)
Time to create page: 0.067 seconds