DP

Dependencies:   FastAnalogIn mbed-rtos mbed

Fork of dipl_prace_v10 by Roman Krejci

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers can.h Source File

can.h

00001 /*
00002 * File:         can.h
00003 * Description:  jojo
00004 * Version:      1.1
00005 * Created:      1. 2. 2015
00006 * Author:       Roman Krejci
00007 */
00008 #ifndef CANPROTOCOL_H
00009 #define CANPROTOCOL_H
00010 
00011 #define ID_SERVO            0x01
00012 #define SDO_REQUEST_ID      0x600+ID_SERVO
00013 #define SDO_RESPONSE_ID     0x580+ID_SERVO
00014 #define PDO_TRANSMIT_ID     0x180+ID_SERVO
00015 #define PDO_RECEIVE_ID      0x200+ID_SERVO
00016 #define SYNC_ID             0x80
00017   
00018 #define SERVO_MODE          0x1EF
00019 #define MASTER_CMD          0x1ED
00020 
00021 
00022 #define CMD_SDO_READ_REQ        0x40
00023 #define CMD_SDO_READ_RES_2      0x4B
00024 #define CMD_SDO_READ_RES_4      0x43
00025 
00026 #define CMD_SDO_WRITE_REQ_24    0x22
00027 #define CMD_SDO_WRITE_REQ_2     0x2B         
00028 #define CMD_SDO_WRITE_REQ_4     0x23
00029 #define CMD_SDO_WRITE_RES       0x60
00030 #define CMD_SDO_WRITE_ERR       0x80
00031 
00032 
00033 #define REQ_DISABLE_SERVO       0x01
00034 #define REQ_ENABLE_SERVO        0x02
00035 #define REQ_NULL_RES            0x07
00036 
00037 
00038 #define SPEED_MODE              0x200002
00039 #define MOMENT_MODE             0x200001
00040 
00041 #define CAN_FREQ                500000
00042 
00043 #include "mbed.h"
00044 #include "rtos.h"
00045 
00046 class cCan 
00047 {
00048     public: 
00049         cCan(PinName CANpin1,PinName CANpin2);
00050         void CAN_frame_received(void);
00051         void sync(void);
00052         
00053         /* For enable servo */
00054         void enableServo(void);
00055         
00056         /* For disable servo */
00057         void disableServo(void);
00058         
00059         /* For null resolver */
00060         void nullResolver(void);
00061         
00062         /* For set mode of servo */
00063         void setMode(int req_mode);
00064         
00065         /* This method send SDO request of mode of servo */
00066         void get_mode(void);
00067         
00068         /* Get angular position of wheel */
00069         float getPhi(void);
00070         
00071         /* Get angular velocity of wheel */
00072         float getOmega(void);
00073         
00074         
00075         /* For setting required current */
00076         void setCurrent(float cur);
00077         
00078         /* This method sends SDO request of actuall speed */
00079         void actual_speed(void); 
00080         
00081         int mode;
00082         
00083         /* Pointer to collect thread */
00084         Thread* thread;
00085     
00086     private:
00087         /* CAN interface */
00088         CAN Can;
00089         
00090         /* */
00091         char data[4], address[2], data_size, cmd; 
00092         
00093         /* angular position of wheel */
00094         float phi;
00095         
00096         /* angular velocity of wheel */
00097         float omega;
00098         
00099         /* current of motor*/
00100         float current;
00101 
00102         /* This method convert bytes to data */
00103         int get_data(char data[], char size);
00104         
00105         /* This method seds SDO request to servoamplifier */
00106         int send_SDO_request(char cmd, int adr, char size,int data);
00107         
00108         /* This method sends PDO with required current */
00109         int send_PDO_current(float curr);
00110     
00111 
00112 };
00113 
00114 
00115 #endif