C++ class for controlling DC motor with encoder feedback. Dependencies include LS7366LIB, MotCon, and PID.
Dependencies: LS7366LIB MotCon2 PID
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