A Roboteq controller c++ interface to allow a Brushless motor control on a CAN bus. Used for a FBL2360 reference.
Dependencies: CAN_FIFO_Triporteur
Diff: RoboteqController.h
- Revision:
- 0:faf0960419c1
- Child:
- 1:57b8f6ed930b
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/RoboteqController.h Sat May 05 15:41:25 2018 +0000 @@ -0,0 +1,94 @@ +#ifndef ROBOTEQ_CONTROLLER_H +#define ROBOTEQ_CONTROLLER_H + +#include "mbed.h" +#include "PeripheralCAN.h" +#include "object_dict.h" + +// Client Command Specifier +#define CSS_CMD 2 +#define CSS_QUERY 4 +#define CSS_SUCCES 6 +#define CSS_ERR 8 + +// CAN id +#define SDO_REQUEST 0x600 +#define SDO_ANSWER 0x580 + +class RoboteqController : public PeripheralCAN{ + public: + /** Constructors and destructor + */ + RoboteqController(); + RoboteqController(uint8_t node_id, uint8_t mot_num); + ~RoboteqController(); + + /** Update callback by the CANController + * + * @param Id Id of the concerned data structure + * @param msg CANMessage instance containing the new data + */ + void update(const unsigned short& Id, const CANMessage& msg); + + + + private: + typedef struct { + uint8_t css; + uint8_t n; + uint16_t index; + uint8_t subindex; + uint8_t data[4]; + } SDOMessage; + /* 1> SDO CMD OR QUERY FRAME: + ----------------------------------------------------------------------------- + Header | DLC | Payload + ----------------------------------------------------------------------------- + | | Byte0 | Byte1-2 | Byte 3 | Bytes4-7 + --------------------------------------------------------- + 0x600+nd | 8 | bits 4-7 bits2-3 bits0-1 | | | + --------------------------- + | | css n xx | index | subindex | data + Note: + • nd is the destination node id. + • ccs is the Client Command Specifier, if 2 it is command if 4 it is query. + • n is the Number of bytes in the data part which do not contain data + • xx not necessary for basic operation. For more details advise CANOpen standard. + • index is the object dictionary index of the data to be accessed + • subindex is the subindex of the object dictionary variable + • data contains the data to be uploaded. + + 2> SDO ANSWER FRAME: + ----------------------------------------------------------------------------- + Header | DLC | Payload + ----------------------------------------------------------------------------- + | | Byte0 | Byte1-2 | Byte 3 | Bytes4-7 + --------------------------------------------------------- + 0x580+nd | 8 | bits 4-7 bits2-3 bits0-1 | | | + --------------------------- + | | css n xx | index | subindex | data + Note: + • nd is the source node id. + • ccs is the Client Command Specifier, if 4 it is query response, 6 it is a successful + response to command, 8 is an error in message received. + • n is the Number of bytes in the data part which do not contain data + • xx not necessary for the simplistic way. For more details advise CANOpen standard. + • index is the object dictionary index of the data to be accessed. + • subindex is the subindex of the object dictionary variable + • data contains the data to be uploaded. Applicable only if css=4. + */ + void SDO_query(uint8_t n, uint16_t idx, uint8_t sub_idx); + void SDO_command(uint8_t n, uint16_t idx, uint8_t sub_idx, uint8_t *data); + void CANMsg2SDO(const CANMessage& CANmsg, SDOMessage& SDOmsg); + + uint8_t node_id; // Node id of the controller + uint8_t mot_num; // Motor number within the controller + + int16_t rotor_speed; // Rotor speed + + unsigned short Id_CSS_REQ; // CAN ID : CSS request (query or command) + unsigned short Id_CSS_ANS; // CAN ID : CSS answer (from query or command) + +}; + +#endif \ No newline at end of file