Lib herkulex utilisée pour la carte du phare
Diff: fonctions_herkulex.h
- Revision:
- 0:32fd5a08c430
- Child:
- 1:94a29f20ca18
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/fonctions_herkulex.h Tue Apr 23 15:41:44 2019 +0000 @@ -0,0 +1,386 @@ +#include "mbed.h" + +//#define ID 0xFD //=253 + +// Herkulex ROM Register +#define ROM_MODEL_NO1 0 +#define ROM_MODEL_NO2 1 +#define ROM_VERSION1 2 +#define ROM_VERSION2 3 +#define ROM_BAUD_RATE 4 +#define ROM_RESERVED5 5 +#define ROM_ID 6 +#define ROM_ACK_POLICY 7 +#define ROM_ALARM_LED_POLICY 8 +#define ROM_TORQUE_POLICY 9 +#define ROM_RESERVED10 10 +#define ROM_MAX_TEMPERATURE 11 +#define ROM_MIN_VOLTAGE 12 +#define ROM_MAX_VOLTAGE 13 +#define ROM_ACCELERATION_RATIO 14 +#define ROM_MAX_ACCELERATION_TIME 15 +#define ROM_DEAD_ZONE 16 +#define ROM_SATURATOR_OFFSET 17 +#define ROM_SATURATOR_SLOPE 18 // 2Byte +#define ROM_PWM_OFFSET 20 +#define ROM_MIN_PWM 21 +#define ROM_MAX_PWM 22 // 2Byte +#define ROM_OVERLOAD_PWM_THRESHOLD 24 // 2Byte +#define ROM_MIN_POSITION 26 // 2Byte +#define ROM_MAX_POSITION 28 // 2Byte +#define ROM_POSITION_KP 30 // 2Byte +#define ROM_POSITION_KD 32 // 2Byte +#define ROM_POSITION_KI 34 // 2Byte +#define ROM_POSITION_FEEDFORWARD_1ST_GAIN 36 // 2Byte +#define ROM_POSITION FEEDFORWARD_2ND_GAIN 38 // 2Byte +#define ROM_RESERVED40 40 // 2Byte +#define ROM_RESERVED42 42 // 2Byte +#define ROM_LED_BLINK_PERIOD 44 +#define ROM_ADC_FAULT_CHECK_PERIOD 45 +#define ROM_PACKET_GARBAGE_CHECK_PERIOD 46 +#define ROM_STOP_DETECTION_PERIOD 47 +#define ROM_OVERLOAD_DETECTION_PERIOD 48 +#define ROM_STOP_THRESHOLD 49 +#define ROM_INPOSITION_MARGIN 50 +#define ROM_RESERVED51 51 +#define ROM_RESERVED52 52 +#define ROM_CALIBRATION_DIFFERENCE 53 + +//------------------------------------------------------------------------------ +// Herkulex RAM Register +#define RAM_ID 0 +#define RAM_ACK_POLICY 1 +#define RAM_ALARM_LED_POLICY 2 +#define RAM_TORQUE_POLICY 3 +#define RAM_RESERVED4 4 +#define RAM_MAX_TEMPERATURE 5 +#define RAM_MIN_VOLTAGE 6 +#define RAM_MAX_VOLTAGE 7 +#define RAM_ACCELERATION_RATIO 8 +#define RAM_MAX_ACCELERATION 9 +#define RAM_DEAD_ZONE 10 +#define RAM_SATURATOR_OFFSET 11 +#define RAM_SATURATOR_SLOPE 12 // 2Byte +#define RAM_PWM_OFFSET 14 +#define RAM_MIN_PWM 15 +#define RAM_MAX_PWM 16 // 2Byte +#define RAM_OVERLOAD_PWM_THRESHOLD 18 // 2Byte +#define RAM_MIN_POSITION 20 // 2Byte +#define RAM_MAX_POSITION 22 // 2Byte +#define RAM_POSITION_KP 24 // 2Byte +#define RAM_POSITION_KD 26 // 2Byte +#define RAM_POSITION_KI 28 // 2Byte +#define RAM_POSITION_FEEDFORWARD_1ST_GAIN 30 // 2Byte +#define RAM_POSITION_FEEDFORWARD 2ND GAIN 32 // 2Byte +#define RAM_RESERVED34 34 // 2Byte +#define RAM_RESERVED36 36 // 2Byte +#define RAM_LED_BLINK_PERIOD 38 +#define RAM_ADC_FAULT_DETECTION_PERIOD 39 +#define RAM_PACKET_GARBAGE_DETECTION_PERIOD 40 +#define RAM_STOP_DETECTION_PERIOD 41 +#define RAM_OVERLOAD_DETECTION_PERIOD 42 +#define RAM_STOP_THRESHOLD 43 +#define RAM_INPOSITION_MARGIN 44 +#define RAM_RESERVED45 45 +#define RAM_RESERVED46 46 +#define RAM_CALIBRATION_DIFFERENCE 47 +#define RAM_STATUS_ERROR 48 +#define RAM_STATUS_DETAIL 49 +#define RAM_RESERVED50 50 +#define RAM_RESERVED51 51 +#define RAM_TORQUE_CONTROL 52 +#define RAM_LED_CONTROL 53 +#define RAM_VOLTAGE 54 +#define RAM_TEMPERATURE 55 +#define RAM_CURRENT_CONTROL_MODE 56 +#define RAM_TICK 57 +#define RAM_CALIBRATED_POSITION 58 // 2Byte +#define RAM_ABSOLUTE_POSITION 60 // 2Byte +#define RAM_DIFFERENTIAL_POSITION 62 // 2Byte +#define RAM_PWM 64 // 2Byte +#define RAM_RESERVED66 66 // 2Byte +#define RAM_ABSOLUTE_GOAL_POSITION 68 // 2Byte +#define RAM_ABSOLUTE_DESIRED_TRAJECTORY_POSITION 70 // 2Byte +#define RAM_DESIRED_VELOCITY 72 // 2Byte + +//------------------------------------------------------------------------------ +// Request Packet [To Servo Module] +#define CMD_ROM_WRITE 0x01 // Write Length number of values to EEP Register Address +#define CMD_ROM_READ 0x02 // Request Length number of values from EEP Register Address +#define CMD_RAM_WRITE 0x03 // Write Length number of values to RAM Register Address +#define CMD_RAM_READ 0x04 // Request Lenght number of values from RAM Register Address +#define CMD_I_JOG 0x05 // Able to send JOG command to maximum 43 servos (operate timing of individual Servo) +#define CMD_S_JOG 0x06 // Able to send JOG command to maximum 53 servos (operate simultaneously at same time) +#define CMD_STAT 0x07 // Status Error, Status Detail request +#define CMD_ROLLBACK 0x08 // Change all EEP Regsters to Factory Default value +#define CMD_REBOOT 0x09 // Request Reboot + +//------------------------------------------------------------------------------ +// ACK Packet [To Controller(ACK)] +#define CMD_ACK_MASK 0x40 // ACK Packet CMD is Request Packet CMD + 0x40 +#define CMD_EEP_WRITE_ACK (CMD_EEP_WRITE|CMD_ACK_MASK) +#define CMD_EEP_READ_ACK (CMD_EEP_READ|CMD_ACK_MASK) +#define CMD_RAM_WRITE_ACK (CMD_RAM_WRITE|CMD_ACK_MASK) +#define CMD_RAM_READ_ACK (CMD_RAM_READ|CMD_ACK_MASK) +#define CMD_I_JOG_ACK (CMD_I_JOG|CMD_ACK_MASK) +#define CMD_S_JOG_ACK (CMD_S_JOG|CMD_ACK_MASK) +#define CMD_STAT_ACK (CMD_STAT|CMD_ACK_MASK) +#define CMD_ROLLBACK_ACK (CMD_ROLLBACK|CMD_ACK_MASK) +#define CMD_REBOOT_ACK (CMD_REBOOT|CMD_ACK_MASK) + +//------------------------------------------------------------------------------ +// Status Error +#define STATUS_OK = 0x00; +#define ERROR_EXCEED_INPUT_VOLTAGE = 0x01; +#define ERROR_EXCEED_POT_LIMIT = 0x02; +#define ERROR_EXCEED_TEMPERATURE_LIMIT = 0x04; +#define ERROR_INVALID_PACKET = 0x08; +#define ERROR_OVERLOAD = 0x10; +#define ERROR_DRIVER_FAULT = 0x20; +#define ERROR_EEP_REG_DISTORT = 0x40; + +//------------------------------------------------------------------------------ +// Status Detail +#define MOVING_FLAG = 0x01; +#define INPOSITION_FLAG = 0x02; +#define CHECKSUM_ERROR = 0x04; // Invalid packet`s detailed information +#define UNKNOWN_COMMAND = 0x08; // Invalid packet`s detailed information +#define EXCEED_REG_RANGE = 0x10; // Invalid packet`s detailed information +#define GARBAGE_DETECTED = 0x20; // Invalid packet`s detailed information +#define MOTOR_ON_FLAG = 0x40; + +//------------------------------------------------------------------------------ +// Header +#define HEADER 0xFF + +// Size +#define MIN_PACKET_SIZE 7 +#define MIN_ACK_PACKET_SIZE 9 +#define WRITE_PACKET_SIZE 13 +#define MAX_PACKET_SIZE 223 +#define MAX_DATA_SIZE (MAX_PACKET_SIZE-MIN_PACKET_SIZE) + +// ID +#define MAX_PID 0xFD +#define DEFAULT_ID 0xFD +#define MAX_ID 0xFD +#define BROADCAST_ID 0xFE + +// Checksum +#define CHKSUM_MASK 0xFE + +// Torque CMD +#define TORQUE_FREE 0x00 +#define BREAK_ON 0x40 +#define TORQUE_ON 0x60 + +// Register Size +#define BYTE1 1 +#define BYTE2 2 + +// Jog Set CMD +#define STOP 0x01 +#define POS_MODE 0x00 +#define TURN_MODE 0x02 +#define GLED_ON 0x04 +#define BLED_ON 0x08 +#define RLED_ON 0x10 + +//------------------------------------------------------------------------------ +//------------------------------------------a choisir--------------------------- +#define nombre_servomoteur 3 // +//-----------------------servo petit robot-------------------------------------- +#define ID_41 41 //petit robot servo dernier //a reconfigurer +#define ID_42 0x2A //=42 +#define ID_45 45 +#define ID_46 0x2E +#define ID_43 43 +#define ID_44 44 +#define ID_47 47 +#define ID_48 48 +#define ID_40 40 +//-----------------------servo grand robot-------------------------------------- +#define ID_25 25 +#define ID_26 26 + +#define ID_17 42 +#define ID_27 41 + +#define ID_15 15 +#define ID_16 16 + +#define ID_1 0xFD //=253 premiere // bras droite +#define ID_3 0x0D //=13 troixieme // +#define ID_2 0x0C //=12 deuxieme // +#define ID_4 0x09 //Avec engrenage // +#define Pompe_pin1 PA_15 //Pin de Pompe // + +#define ID_2_1 21 //=253 premiere // +#define ID_2_2 22 //=12 deuxieme // +#define ID_2_3 23 //=13 troixieme // bras gauche, a changer +#define ID_2_4 24 //Avec engrenage // +#define Pompe_pin2 PB_2 //Pin de Pompe // a changer +#define ID_01 1 +//------------------------------------------------------------------------------ + +//------------------------------------------------------------------------------ + +/** Create an Herkulex servo object connected to the serial pins and baudrate + * + * @param tx Transmit pin. + * @param rx Receive pin. + * @param baudRate The serial tx/rx speed. + */ +// void Herkulex(PinName tx, PinName rx, uint32_t baudRate); + +/** Destroy an Herkulex servo object + */ +//void N_Herkulex(); + +/** Transmit packet datas + * + * @param packetSize The packet size. + * @param data The transmit packet data array. + */ +void txPacket(uint8_t packetSize, uint8_t* data, uint8_t numero_serial); + +/** Receive packet datas + * + * @param packetSize The packet size. + * @param data The receive packet data array. + */ +void rxPacket(uint8_t packetSize, uint8_t* data, uint8_t numero_serial); + +/** Clear error status + * + * @param id The herkulex servo ID. + */ +void clear(uint8_t id, uint8_t numero_serial); + +/** Set torque setting + * + * @param id The herkulex servo ID. + * @param cmdTorque The Command for setting of torque (TORQUE_FREE 0x00, BREAK_ON 0x40, TORQUE_ON 0x60) + */ +void setTorque(uint8_t id, uint8_t cmdTorque, uint8_t numero_serial); +//------------------------------Déplacements------------------------------------- +/** Position Control + * + * @param id The herkulex servo ID. + * @param position The goal position of herkulex servo. + * @param playtime Time to target position. + * @param setLED Select LED and on/off controll (GLED_ON 0x00,BLED_ON 0x08, RLED_ON 0x10) + */ +void positionControl(uint8_t id, uint16_t position, uint8_t playtime, uint8_t setLED, uint8_t numero_serial); + +/** Velocity Control + * + * @param id The herkulex servo ID. + * @param speed The goal position of herkulex servo. + * @param setLED Select LED and on/off controll (GLED_ON 0x00,BLED_ON 0x08, RLED_ON 0x10) + */ +void velocityControl(uint8_t id, int16_t speed,uint8_t setLED, uint8_t numero_serial); +/** + * + *même paramètres que positionControl(); + *permet de donner des instructions à deux servomoteurs simultanéments + */ +void positionControl_Mul_ensemble(uint8_t id, uint16_t position, uint8_t playtime, uint8_t setLED,uint8_t id2, uint16_t position2, uint8_t setLED2, uint8_t numero_serial); +/** + * + *même paramètres que positionControl_Mul_ensemble(); + *permet de donner des instructions à deux servomoteurs simultanéments avec un playtime différent + */ +void positionControl_Mul_playtime_different(uint8_t id, uint16_t position, uint8_t playtime, uint8_t setLED,uint8_t id2, uint16_t position2, uint8_t playtime2, uint8_t setLED2, uint8_t numero_serial); +/** + * + * + *permet de donner des instructions à deux servomoteurs simultanéments avec un playtime différent + */ +void positionControl_Mul_ensemble_complex(uint8_t nb_servo, uint8_t playtime, uint8_t* data, uint16_t* pos, uint8_t numero_serial); // uint16_t position, uint8_t setLED, uint8_t id +/** + * + *même paramètres que positionControl_Mul_ensemble(); + *permet de donner des instructions à deux servomoteurs simultanéments avec un playtime différent + */ +void positionControl_Mul_ensemble_different_complex(uint8_t nb_servo, uint8_t* data, uint16_t* pos, uint8_t numero_serial); // uint16_t position, uint8_t setLED, uint8_t id, uint8_t playtime + + +//-------------------------------------Demandes d'informations +/** Get Status + * + * @param id The herkulex servo ID. + * @return -1 is getStatus failed. other is servo`s status error value. + */ +int8_t getStatus(uint8_t id, uint8_t numero_serial); + +/** Get Position + * + * @param id The herkulex servo ID. + * @return -1 is getPos failed. other is servo's current position. + */ +int16_t getPos(uint8_t id, uint8_t numero_serial); + +//void recevoir_irq(void); + +void receive_Sv(void); + +int8_t Get_Torque(int8_t id, uint8_t numero_serial); + +int8_t Get_Temperature_MAX(int8_t id, uint8_t numero_serial); + +int8_t Get_Tension_MIN(int8_t id, uint8_t numero_serial); + +void Set_Tension_MIN(int8_t id,uint8_t Tension_Min, uint8_t numero_serial); + + +int8_t Get_Tension_actuelle(int8_t id, uint8_t numero_serial); + +//--------------------------------------------Fonctions d'interruptions et de vérifications------------------------------------------------------------------ + +void servo_interrupt_en(void); + +void Interrupt1_en(void); + +void Interrupt2_en(void); + +void Interrupt3_en(void); + +void Interrupt4_en(void); + +void Interrupt5_en(void); + +void automate_serial1(void); + +void automate_serial2(void); + +void automate_serial3(void); + +void automate_serial4(void); + +void automate_serial5(void); + +void Pompe_init(PinName Pompe_pin); + +void Pompe_essai(PinName Pompe_pin); + +//----------------Définition des ports série en variables externes--------------------------- +/* + * permet d'utiliser les ports série dans le main.ci + */ +extern RawSerial pc; +extern RawSerial serial5; +extern RawSerial serial4; +extern RawSerial serial3; +extern RawSerial serial2; +extern RawSerial serial1; +//extern RawSerial serial1; +//#define Serial1 serial4 + +//---------------Fonctions gros robot------------------------------------------- +//-------------------------------------Utiliser la roue de sortie--------------- +/** Get Status + * + * @ tour ==> nombre de fois où la roue descend + */ +//void roueSortie(tour); \ No newline at end of file