Publishing for Biomimetics.

Dependencies:   CRC MODDMA MODSERIAL MPU6050IMU PID QEI mbed-rtos mbed-src

Committer:
abuchan
Date:
Tue May 31 17:04:59 2016 +0000
Revision:
0:8cfa73bb68e4
Publishing for Biomimetics.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
abuchan 0:8cfa73bb68e4 1 #ifndef CONTROL_H
abuchan 0:8cfa73bb68e4 2 #define CONTROL_H
abuchan 0:8cfa73bb68e4 3
abuchan 0:8cfa73bb68e4 4 #include "mbed.h"
abuchan 0:8cfa73bb68e4 5
abuchan 0:8cfa73bb68e4 6 #include "rtos.h"
abuchan 0:8cfa73bb68e4 7 #include "PID.h"
abuchan 0:8cfa73bb68e4 8
abuchan 0:8cfa73bb68e4 9 #include "protocol.h"
abuchan 0:8cfa73bb68e4 10 #include "packet_parser.h"
abuchan 0:8cfa73bb68e4 11 #include "sensors.h"
abuchan 0:8cfa73bb68e4 12
abuchan 0:8cfa73bb68e4 13 #define MOTOR_RIGHT 1
abuchan 0:8cfa73bb68e4 14 #define MOTOR_LEFT 0
abuchan 0:8cfa73bb68e4 15
abuchan 0:8cfa73bb68e4 16 class Control {
abuchan 0:8cfa73bb68e4 17
abuchan 0:8cfa73bb68e4 18 public:
abuchan 0:8cfa73bb68e4 19
abuchan 0:8cfa73bb68e4 20 Control(
abuchan 0:8cfa73bb68e4 21 PinName left_mot_0_pin, PinName left_mot_1_pin,
abuchan 0:8cfa73bb68e4 22 PinName right_mot_0_pin, PinName right_mot_1_pin,
abuchan 0:8cfa73bb68e4 23 Sensors *sensors, uint32_t tick_per_rev,
abuchan 0:8cfa73bb68e4 24 float kP, float kI, float kD, float period, float velocity_max, float pid_dead_band
abuchan 0:8cfa73bb68e4 25 );
abuchan 0:8cfa73bb68e4 26
abuchan 0:8cfa73bb68e4 27 void set_setpoints(float left, float right);
abuchan 0:8cfa73bb68e4 28
abuchan 0:8cfa73bb68e4 29 void fill_pid_packet(packet_t* pkt);
abuchan 0:8cfa73bb68e4 30
abuchan 0:8cfa73bb68e4 31 void fill_sensor_packet(packet_t* pkt);
abuchan 0:8cfa73bb68e4 32
abuchan 0:8cfa73bb68e4 33 private:
abuchan 0:8cfa73bb68e4 34
abuchan 0:8cfa73bb68e4 35 Sensors* sensors_;
abuchan 0:8cfa73bb68e4 36
abuchan 0:8cfa73bb68e4 37 RtosTimer control_timer_;
abuchan 0:8cfa73bb68e4 38
abuchan 0:8cfa73bb68e4 39 PID* pids_[2];
abuchan 0:8cfa73bb68e4 40
abuchan 0:8cfa73bb68e4 41 void pid_init(int motor, float kP, float kI, float kD, float period, float velocity_max);
abuchan 0:8cfa73bb68e4 42
abuchan 0:8cfa73bb68e4 43 void set_motor_pwm(int motor, float value);
abuchan 0:8cfa73bb68e4 44
abuchan 0:8cfa73bb68e4 45 static void control_helper(const void* p);
abuchan 0:8cfa73bb68e4 46 void control_update(void);
abuchan 0:8cfa73bb68e4 47
abuchan 0:8cfa73bb68e4 48 PwmOut* motors_[2][2];
abuchan 0:8cfa73bb68e4 49
abuchan 0:8cfa73bb68e4 50 float tick_to_angular_velocity_;
abuchan 0:8cfa73bb68e4 51 float pid_dead_band_;
abuchan 0:8cfa73bb68e4 52
abuchan 0:8cfa73bb68e4 53 float last_positions_[2];
abuchan 0:8cfa73bb68e4 54 float velocities_[2];
abuchan 0:8cfa73bb68e4 55 float pwms_[2];
abuchan 0:8cfa73bb68e4 56 };
abuchan 0:8cfa73bb68e4 57
abuchan 0:8cfa73bb68e4 58 #endif