Publishing for Biomimetics.

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

control.h

Committer:
abuchan
Date:
2016-05-31
Revision:
0:8cfa73bb68e4

File content as of revision 0:8cfa73bb68e4:

#ifndef CONTROL_H
#define CONTROL_H

#include "mbed.h"

#include "rtos.h"
#include "PID.h"

#include "protocol.h"
#include "packet_parser.h"
#include "sensors.h"

#define MOTOR_RIGHT 1
#define MOTOR_LEFT 0

class Control {

  public:
  
    Control(
      PinName left_mot_0_pin, PinName left_mot_1_pin, 
      PinName right_mot_0_pin, PinName right_mot_1_pin, 
      Sensors *sensors, uint32_t tick_per_rev,
      float kP, float kI, float kD, float period, float velocity_max, float pid_dead_band
    );

    void set_setpoints(float left, float right);
  
    void fill_pid_packet(packet_t* pkt);
    
    void fill_sensor_packet(packet_t* pkt);

  private:
    
    Sensors* sensors_;
    
    RtosTimer control_timer_;

    PID* pids_[2];

    void pid_init(int motor, float kP, float kI, float kD, float period, float velocity_max);

    void set_motor_pwm(int motor, float value);
   
    static void control_helper(const void* p);
    void control_update(void);
    
    PwmOut* motors_[2][2];

    float tick_to_angular_velocity_;
    float pid_dead_band_;

    float last_positions_[2];
    float velocities_[2];
    float pwms_[2];
};

#endif