DP
Dependencies: FastAnalogIn mbed-rtos mbed
can.h@0:f3b355df6f26, 2015-04-26 (annotated)
- Committer:
- romankrej
- Date:
- Sun Apr 26 13:14:02 2015 +0000
- Revision:
- 0:f3b355df6f26
Diplomova prace 2015
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
romankrej | 0:f3b355df6f26 | 1 | /* |
romankrej | 0:f3b355df6f26 | 2 | * File: can.h |
romankrej | 0:f3b355df6f26 | 3 | * Description: jojo |
romankrej | 0:f3b355df6f26 | 4 | * Version: 1.1 |
romankrej | 0:f3b355df6f26 | 5 | * Created: 1. 2. 2015 |
romankrej | 0:f3b355df6f26 | 6 | * Author: Roman Krejci |
romankrej | 0:f3b355df6f26 | 7 | */ |
romankrej | 0:f3b355df6f26 | 8 | #ifndef CANPROTOCOL_H |
romankrej | 0:f3b355df6f26 | 9 | #define CANPROTOCOL_H |
romankrej | 0:f3b355df6f26 | 10 | |
romankrej | 0:f3b355df6f26 | 11 | #define ID_SERVO 0x01 |
romankrej | 0:f3b355df6f26 | 12 | #define SDO_REQUEST_ID 0x600+ID_SERVO |
romankrej | 0:f3b355df6f26 | 13 | #define SDO_RESPONSE_ID 0x580+ID_SERVO |
romankrej | 0:f3b355df6f26 | 14 | #define PDO_TRANSMIT_ID 0x180+ID_SERVO |
romankrej | 0:f3b355df6f26 | 15 | #define PDO_RECEIVE_ID 0x200+ID_SERVO |
romankrej | 0:f3b355df6f26 | 16 | #define SYNC_ID 0x80 |
romankrej | 0:f3b355df6f26 | 17 | |
romankrej | 0:f3b355df6f26 | 18 | #define SERVO_MODE 0x1EF |
romankrej | 0:f3b355df6f26 | 19 | #define MASTER_CMD 0x1ED |
romankrej | 0:f3b355df6f26 | 20 | |
romankrej | 0:f3b355df6f26 | 21 | |
romankrej | 0:f3b355df6f26 | 22 | #define CMD_SDO_READ_REQ 0x40 |
romankrej | 0:f3b355df6f26 | 23 | #define CMD_SDO_READ_RES_2 0x4B |
romankrej | 0:f3b355df6f26 | 24 | #define CMD_SDO_READ_RES_4 0x43 |
romankrej | 0:f3b355df6f26 | 25 | |
romankrej | 0:f3b355df6f26 | 26 | #define CMD_SDO_WRITE_REQ_24 0x22 |
romankrej | 0:f3b355df6f26 | 27 | #define CMD_SDO_WRITE_REQ_2 0x2B |
romankrej | 0:f3b355df6f26 | 28 | #define CMD_SDO_WRITE_REQ_4 0x23 |
romankrej | 0:f3b355df6f26 | 29 | #define CMD_SDO_WRITE_RES 0x60 |
romankrej | 0:f3b355df6f26 | 30 | #define CMD_SDO_WRITE_ERR 0x80 |
romankrej | 0:f3b355df6f26 | 31 | |
romankrej | 0:f3b355df6f26 | 32 | |
romankrej | 0:f3b355df6f26 | 33 | #define REQ_DISABLE_SERVO 0x01 |
romankrej | 0:f3b355df6f26 | 34 | #define REQ_ENABLE_SERVO 0x02 |
romankrej | 0:f3b355df6f26 | 35 | #define REQ_NULL_RES 0x07 |
romankrej | 0:f3b355df6f26 | 36 | |
romankrej | 0:f3b355df6f26 | 37 | |
romankrej | 0:f3b355df6f26 | 38 | #define SPEED_MODE 0x200002 |
romankrej | 0:f3b355df6f26 | 39 | #define MOMENT_MODE 0x200001 |
romankrej | 0:f3b355df6f26 | 40 | |
romankrej | 0:f3b355df6f26 | 41 | #define CAN_FREQ 500000 |
romankrej | 0:f3b355df6f26 | 42 | |
romankrej | 0:f3b355df6f26 | 43 | #include "mbed.h" |
romankrej | 0:f3b355df6f26 | 44 | #include "rtos.h" |
romankrej | 0:f3b355df6f26 | 45 | |
romankrej | 0:f3b355df6f26 | 46 | class cCan |
romankrej | 0:f3b355df6f26 | 47 | { |
romankrej | 0:f3b355df6f26 | 48 | public: |
romankrej | 0:f3b355df6f26 | 49 | cCan(PinName CANpin1,PinName CANpin2); |
romankrej | 0:f3b355df6f26 | 50 | void CAN_frame_received(void); |
romankrej | 0:f3b355df6f26 | 51 | void sync(void); |
romankrej | 0:f3b355df6f26 | 52 | |
romankrej | 0:f3b355df6f26 | 53 | /* For enable servo */ |
romankrej | 0:f3b355df6f26 | 54 | void enableServo(void); |
romankrej | 0:f3b355df6f26 | 55 | |
romankrej | 0:f3b355df6f26 | 56 | /* For disable servo */ |
romankrej | 0:f3b355df6f26 | 57 | void disableServo(void); |
romankrej | 0:f3b355df6f26 | 58 | |
romankrej | 0:f3b355df6f26 | 59 | /* For null resolver */ |
romankrej | 0:f3b355df6f26 | 60 | void nullResolver(void); |
romankrej | 0:f3b355df6f26 | 61 | |
romankrej | 0:f3b355df6f26 | 62 | /* For set mode of servo */ |
romankrej | 0:f3b355df6f26 | 63 | void setMode(int req_mode); |
romankrej | 0:f3b355df6f26 | 64 | |
romankrej | 0:f3b355df6f26 | 65 | /* This method send SDO request of mode of servo */ |
romankrej | 0:f3b355df6f26 | 66 | void get_mode(void); |
romankrej | 0:f3b355df6f26 | 67 | |
romankrej | 0:f3b355df6f26 | 68 | /* Get angular position of wheel */ |
romankrej | 0:f3b355df6f26 | 69 | float getPhi(void); |
romankrej | 0:f3b355df6f26 | 70 | |
romankrej | 0:f3b355df6f26 | 71 | /* Get angular velocity of wheel */ |
romankrej | 0:f3b355df6f26 | 72 | float getOmega(void); |
romankrej | 0:f3b355df6f26 | 73 | |
romankrej | 0:f3b355df6f26 | 74 | |
romankrej | 0:f3b355df6f26 | 75 | /* For setting required current */ |
romankrej | 0:f3b355df6f26 | 76 | void setCurrent(float cur); |
romankrej | 0:f3b355df6f26 | 77 | |
romankrej | 0:f3b355df6f26 | 78 | /* This method sends SDO request of actuall speed */ |
romankrej | 0:f3b355df6f26 | 79 | void actual_speed(void); |
romankrej | 0:f3b355df6f26 | 80 | |
romankrej | 0:f3b355df6f26 | 81 | int mode; |
romankrej | 0:f3b355df6f26 | 82 | |
romankrej | 0:f3b355df6f26 | 83 | /* Pointer to collect thread */ |
romankrej | 0:f3b355df6f26 | 84 | Thread* thread; |
romankrej | 0:f3b355df6f26 | 85 | |
romankrej | 0:f3b355df6f26 | 86 | private: |
romankrej | 0:f3b355df6f26 | 87 | /* CAN interface */ |
romankrej | 0:f3b355df6f26 | 88 | CAN Can; |
romankrej | 0:f3b355df6f26 | 89 | |
romankrej | 0:f3b355df6f26 | 90 | /* */ |
romankrej | 0:f3b355df6f26 | 91 | char data[4], address[2], data_size, cmd; |
romankrej | 0:f3b355df6f26 | 92 | |
romankrej | 0:f3b355df6f26 | 93 | /* angular position of wheel */ |
romankrej | 0:f3b355df6f26 | 94 | float phi; |
romankrej | 0:f3b355df6f26 | 95 | |
romankrej | 0:f3b355df6f26 | 96 | /* angular velocity of wheel */ |
romankrej | 0:f3b355df6f26 | 97 | float omega; |
romankrej | 0:f3b355df6f26 | 98 | |
romankrej | 0:f3b355df6f26 | 99 | /* current of motor*/ |
romankrej | 0:f3b355df6f26 | 100 | float current; |
romankrej | 0:f3b355df6f26 | 101 | |
romankrej | 0:f3b355df6f26 | 102 | /* This method convert bytes to data */ |
romankrej | 0:f3b355df6f26 | 103 | int get_data(char data[], char size); |
romankrej | 0:f3b355df6f26 | 104 | |
romankrej | 0:f3b355df6f26 | 105 | /* This method seds SDO request to servoamplifier */ |
romankrej | 0:f3b355df6f26 | 106 | int send_SDO_request(char cmd, int adr, char size,int data); |
romankrej | 0:f3b355df6f26 | 107 | |
romankrej | 0:f3b355df6f26 | 108 | /* This method sends PDO with required current */ |
romankrej | 0:f3b355df6f26 | 109 | int send_PDO_current(float curr); |
romankrej | 0:f3b355df6f26 | 110 | |
romankrej | 0:f3b355df6f26 | 111 | |
romankrej | 0:f3b355df6f26 | 112 | }; |
romankrej | 0:f3b355df6f26 | 113 | |
romankrej | 0:f3b355df6f26 | 114 | |
romankrej | 0:f3b355df6f26 | 115 | #endif |