A Roboteq controller c++ interface to allow a Brushless motor control on a CAN bus. Used for a FBL2360 reference.

Dependencies:   CAN_FIFO_Triporteur

RoboteqController.h

Committer:
garivetm
Date:
2018-05-05
Revision:
0:faf0960419c1
Child:
1:57b8f6ed930b

File content as of revision 0:faf0960419c1:

#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