C++ class for controlling DC motor with encoder feedback. Dependencies include LS7366LIB, MotCon, and PID.

Dependencies:   LS7366LIB MotCon2 PID

Dependents:   LPC1768_6axis_Arm

Axis.h

Committer:
jebradshaw
Date:
2016-08-29
Revision:
9:7bc59203ce98
Parent:
8:7e399d7c990d
Child:
10:32faca5a2577

File content as of revision 9:7bc59203ce98:



#ifndef MBED_ROBOTARM_H
#define MBED_ROBOTARM_H
 
#include "mbed.h"
#include "PID.h"        //library for software routine PID controller
#include "LS7366.h"     //library for quadrature encoder interface IC's
#include "MotCon.h"     //simple motor control routines

class Axis{
public:
    Axis(SPI& _spi, PinName _cs, PinName _pwm, PinName _dir, PinName _analog, int* limit, int *busy);    
    void paramUpdate(void);
    void center(void);
    void init(void);
    void moveTrapezoid(float position, float time);
    void moveUpdate(void);
    float readCurrent(void);
    void axisOff(void);
    void axisOn(void);
    void zero(void);
    void writeEncoderValue(long value);
    
    long enc;       //used to return the data from the LS7366 encoder chip
    float co;       // = 0.0;
    float Tdelay;   // = .01;
    float Pk;       // 120.0 for scorbot
    float Ik;       // 55.0 for scorbot
    float Dk;
    float set_point;// = 0.0;
    float set_point_last;
    float pos, vel, acc;    //calculated position, velocity, and acceleration
    int stat;               //overall axis status
    float pos_last, vel_last, acc_last; //history variables used to calculate motion
    float pos_cmd, vel_cmd, vel_avg_cmd, acc_cmd;    
    float vel_max, acc_max;
    float vel_accum;
    float moveTime;    
    float p_higher, p_lower;
    int moveStatus;
    int moveState;
    int debug;
    int *ptr_limit;
    int *ptr_busy;
    float motCurrent;   //motor current read from readCurrent() function
    float mot_I_lim;    //max current limit
    int axisState;
    int motInvert;
    char dataFormat;    //'r'=radians (default), 'd'=degrees, 'e'=encoder counts
    float pos_rad, vel_rad;      //current position measurement in radians
    float pos_deg, vel_deg;  //current position measurement in degrees
    float ctsPerDeg;
    int busyflag;

    Ticker update;
    Ticker moveProfile;
    Timer t;
    PID *pid;
    LS7366 *ls7366;
    MotCon *motcon;
    //AnalogIn *motCurrent;
    
private:
    SPI _spi;
    DigitalOut _cs;
    PwmOut _pwm;
    DigitalOut _dir;
    AnalogIn _analog;
};

#endif