190711

Committer:
kangmingyo
Date:
Tue Jun 25 11:01:39 2019 +0000
Revision:
5:15d0276d7e21
Parent:
4:a629f46d6594
Child:
6:366ec55e64fe
motor;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kangmingyo 0:20e026e254d6 1 #ifndef MBED_MOTOR_h
kangmingyo 0:20e026e254d6 2 #define MBED_MOTOR_h
kangmingyo 0:20e026e254d6 3
kangmingyo 0:20e026e254d6 4 #include "mbed.h"
kangmingyo 0:20e026e254d6 5
kangmingyo 0:20e026e254d6 6 #define PWMOFFSET 512 // pwm @ Duty 50%
kangmingyo 0:20e026e254d6 7 #define MaxBuf 255 // buffer size to store the speed data
kangmingyo 0:20e026e254d6 8
kangmingyo 0:20e026e254d6 9 class MotorCtl
kangmingyo 0:20e026e254d6 10 {
kangmingyo 0:20e026e254d6 11 public:
kangmingyo 0:20e026e254d6 12
kangmingyo 0:20e026e254d6 13 MotorCtl(PinName Pwm, PinName Dir, PinName tachoA, PinName tachoB);
kangmingyo 0:20e026e254d6 14
kangmingyo 0:20e026e254d6 15 ~MotorCtl();
kangmingyo 0:20e026e254d6 16
kangmingyo 0:20e026e254d6 17 int getRPM();
kangmingyo 5:15d0276d7e21 18 float CalculateCumDis();
kangmingyo 5:15d0276d7e21 19 float CalculateRelaDis();
kangmingyo 0:20e026e254d6 20 int getTarget();
kangmingyo 0:20e026e254d6 21 int getError();
kangmingyo 0:20e026e254d6 22 float getKP();
kangmingyo 0:20e026e254d6 23 float getKI();
kangmingyo 0:20e026e254d6 24 float getKD();
kangmingyo 0:20e026e254d6 25 int *getHistory();
kangmingyo 0:20e026e254d6 26 int getCurrentPosition();
kangmingyo 0:20e026e254d6 27
kangmingyo 0:20e026e254d6 28 void SetPeriod(long pwmPeriod); // set pwm period
kangmingyo 0:20e026e254d6 29 void setTarget(int spd);
kangmingyo 0:20e026e254d6 30 void setPID(float p, float i, float d);
kangmingyo 0:20e026e254d6 31 void setDirection(); // set the direction
kangmingyo 4:a629f46d6594 32
kangmingyo 5:15d0276d7e21 33
kangmingyo 0:20e026e254d6 34 //Control Methods
kangmingyo 0:20e026e254d6 35 void UpdateCurrentPosition();
kangmingyo 0:20e026e254d6 36 void PIDControl();
kangmingyo 0:20e026e254d6 37 void Reset(void);
kangmingyo 0:20e026e254d6 38
kangmingyo 4:a629f46d6594 39
kangmingyo 0:20e026e254d6 40
kangmingyo 0:20e026e254d6 41 private:
kangmingyo 0:20e026e254d6 42 PwmOut _pwm;
kangmingyo 0:20e026e254d6 43 DigitalOut _Dir;
kangmingyo 0:20e026e254d6 44 DigitalInOut _tachoA;
kangmingyo 0:20e026e254d6 45 DigitalInOut _tachoB;
kangmingyo 0:20e026e254d6 46 Ticker _tick;
kangmingyo 0:20e026e254d6 47
kangmingyo 5:15d0276d7e21 48 long CurrentPosition, PreviousPosition, DistancePosition; // Position Value
kangmingyo 4:a629f46d6594 49 int CurrentSpeed, Error,PreviousError; // Speed Data
kangmingyo 5:15d0276d7e21 50 float duty; // Duty level ( 0-1024)
kangmingyo 0:20e026e254d6 51 unsigned int pwmPeriod; // default 50ms
kangmingyo 0:20e026e254d6 52 unsigned char pwmpin; // PB2 ( 10 )
kangmingyo 0:20e026e254d6 53 unsigned char ppin, npin,dr; // dr =10 means ccwise, dr=0 means clockwise
kangmingyo 0:20e026e254d6 54 unsigned int CntPerRev;
kangmingyo 0:20e026e254d6 55 unsigned int DeltaT;
kangmingyo 0:20e026e254d6 56 unsigned char PreviousEncode;
kangmingyo 0:20e026e254d6 57 float kp, ki, kd;
kangmingyo 0:20e026e254d6 58 int integ, derv,control,cw0[MaxBuf];
kangmingyo 0:20e026e254d6 59 unsigned char cpidx;
kangmingyo 0:20e026e254d6 60 float CalculateRPM(int DeltaCnt); // Calculate RPM value
kangmingyo 5:15d0276d7e21 61
kangmingyo 1:911f5a86c105 62 float vel;
kangmingyo 4:a629f46d6594 63 int TargetSpeed;
kangmingyo 0:20e026e254d6 64
kangmingyo 0:20e026e254d6 65 };
kangmingyo 0:20e026e254d6 66 #endif
kangmingyo 0:20e026e254d6 67
kangmingyo 0:20e026e254d6 68
kangmingyo 0:20e026e254d6 69