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

Dependencies:   LS7366LIB MotCon2 PID

Committer:
jebradshaw
Date:
Thu Nov 08 17:54:30 2018 +0000
Revision:
0:d7f0715676f4
20181108 - Committed changes

Who changed what in which revision?

UserRevisionLine numberNew contents of line
jebradshaw 0:d7f0715676f4 1
jebradshaw 0:d7f0715676f4 2
jebradshaw 0:d7f0715676f4 3 #ifndef MBED_AXIS_H
jebradshaw 0:d7f0715676f4 4 #define MBED_AXIS_H
jebradshaw 0:d7f0715676f4 5
jebradshaw 0:d7f0715676f4 6 #include "mbed.h"
jebradshaw 0:d7f0715676f4 7 #include "PID.h" //library for software routine PID controller
jebradshaw 0:d7f0715676f4 8 #include "LS7366.h" //library for quadrature encoder interface IC's
jebradshaw 0:d7f0715676f4 9 #include "MotCon.h" //simple motor control routines
jebradshaw 0:d7f0715676f4 10
jebradshaw 0:d7f0715676f4 11 class Axis{
jebradshaw 0:d7f0715676f4 12 public:
jebradshaw 0:d7f0715676f4 13 Axis(SPI& _spi, PinName _cs, PinName _pwm, PinName _dir, PinName _analog, int* limit);
jebradshaw 0:d7f0715676f4 14 void paramUpdate(void);
jebradshaw 0:d7f0715676f4 15 void center(void);
jebradshaw 0:d7f0715676f4 16 void init(void);
jebradshaw 0:d7f0715676f4 17 void moveTrapezoid(float position, float time);
jebradshaw 0:d7f0715676f4 18 void moveUpdate(void);
jebradshaw 0:d7f0715676f4 19 float readCurrent(void);
jebradshaw 0:d7f0715676f4 20 void axisOff(void);
jebradshaw 0:d7f0715676f4 21 void axisOn(void);
jebradshaw 0:d7f0715676f4 22 void zero(void);
jebradshaw 0:d7f0715676f4 23 void writeEncoderValue(long value);
jebradshaw 0:d7f0715676f4 24 void updatePIDgains(float P, float I, float D);
jebradshaw 0:d7f0715676f4 25
jebradshaw 0:d7f0715676f4 26 long enc; //used to return the data from the LS7366 encoder chip
jebradshaw 0:d7f0715676f4 27 float co; // = 0.0;
jebradshaw 0:d7f0715676f4 28 float Tdelay; // = .01;
jebradshaw 0:d7f0715676f4 29 float Pk; // 120.0 for scorbot
jebradshaw 0:d7f0715676f4 30 float Ik; // 55.0 for scorbot
jebradshaw 0:d7f0715676f4 31 float Dk;
jebradshaw 0:d7f0715676f4 32 float set_point;// = 0.0;
jebradshaw 0:d7f0715676f4 33 float set_point_last;
jebradshaw 0:d7f0715676f4 34 float pos, vel, acc; //calculated position, velocity, and acceleration
jebradshaw 0:d7f0715676f4 35 int stat; //overall axis status
jebradshaw 0:d7f0715676f4 36 float pos_last, vel_last, acc_last; //history variables used to calculate motion
jebradshaw 0:d7f0715676f4 37 float pos_cmd, vel_cmd, vel_avg_cmd, acc_cmd;
jebradshaw 0:d7f0715676f4 38 float vel_max, acc_max;
jebradshaw 0:d7f0715676f4 39 float vel_accum;
jebradshaw 0:d7f0715676f4 40 float moveTime;
jebradshaw 0:d7f0715676f4 41 float p_higher, p_lower;
jebradshaw 0:d7f0715676f4 42 int moveStatus;
jebradshaw 0:d7f0715676f4 43 int moveState;
jebradshaw 0:d7f0715676f4 44 int debug;
jebradshaw 0:d7f0715676f4 45 int *ptr_limit;
jebradshaw 0:d7f0715676f4 46 float motI; //motor current read from readCurrent() function
jebradshaw 0:d7f0715676f4 47 volatile float motI_last;
jebradshaw 0:d7f0715676f4 48 float mot_I_lim; //max current limit
jebradshaw 0:d7f0715676f4 49 float dIdT;
jebradshaw 0:d7f0715676f4 50 float mot_I_max, mot_I_max_last;
jebradshaw 0:d7f0715676f4 51 int axisState;
jebradshaw 0:d7f0715676f4 52 int motInvert;
jebradshaw 0:d7f0715676f4 53 char dataFormat; //'r'=radians (default), 'd'=degrees, 'e'=encoder counts
jebradshaw 0:d7f0715676f4 54 float pos_rad, vel_rad; //current position measurement in radians
jebradshaw 0:d7f0715676f4 55 float pos_deg, vel_deg; //current position measurement in degrees
jebradshaw 0:d7f0715676f4 56 float ctsPerDeg;
jebradshaw 0:d7f0715676f4 57 int busyflag;
jebradshaw 0:d7f0715676f4 58
jebradshaw 0:d7f0715676f4 59 Ticker update;
jebradshaw 0:d7f0715676f4 60 Ticker moveProfile;
jebradshaw 0:d7f0715676f4 61 Timer t;
jebradshaw 0:d7f0715676f4 62 PID *pid;
jebradshaw 0:d7f0715676f4 63 LS7366 *ls7366;
jebradshaw 0:d7f0715676f4 64 MotCon *motcon;
jebradshaw 0:d7f0715676f4 65 //AnalogIn *motCurrent;
jebradshaw 0:d7f0715676f4 66
jebradshaw 0:d7f0715676f4 67 private:
jebradshaw 0:d7f0715676f4 68 SPI _spi;
jebradshaw 0:d7f0715676f4 69 DigitalOut _cs;
jebradshaw 0:d7f0715676f4 70 PwmOut _pwm;
jebradshaw 0:d7f0715676f4 71 DigitalOut _dir;
jebradshaw 0:d7f0715676f4 72 AnalogIn _analog;
jebradshaw 0:d7f0715676f4 73 };
jebradshaw 0:d7f0715676f4 74
jebradshaw 0:d7f0715676f4 75 #endif
jebradshaw 0:d7f0715676f4 76
jebradshaw 0:d7f0715676f4 77