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

Dependencies:   LS7366LIB MotCon2 PID

Dependents:   LPC1768_6axis_Arm

Committer:
jebradshaw
Date:
Mon Aug 29 19:42:07 2016 +0000
Revision:
9:7bc59203ce98
Parent:
8:7e399d7c990d
Child:
10:32faca5a2577
Update to avoid reading/writing during home interrupts

Who changed what in which revision?

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