v1

Committer:
kangmingyo
Date:
Thu May 23 23:02:14 2019 +0000
Revision:
4:a629f46d6594
Parent:
1:911f5a86c105
Child:
5:15d0276d7e21
2018/05/24

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 0:20e026e254d6 18 int getTarget();
kangmingyo 0:20e026e254d6 19 int getError();
kangmingyo 0:20e026e254d6 20 float getKP();
kangmingyo 0:20e026e254d6 21 float getKI();
kangmingyo 0:20e026e254d6 22 float getKD();
kangmingyo 0:20e026e254d6 23 int *getHistory();
kangmingyo 0:20e026e254d6 24 int getCurrentPosition();
kangmingyo 0:20e026e254d6 25
kangmingyo 0:20e026e254d6 26 void SetPeriod(long pwmPeriod); // set pwm period
kangmingyo 0:20e026e254d6 27 void setTarget(int spd);
kangmingyo 0:20e026e254d6 28 void setPID(float p, float i, float d);
kangmingyo 0:20e026e254d6 29 void setDirection(); // set the direction
kangmingyo 4:a629f46d6594 30
kangmingyo 0:20e026e254d6 31 //Control Methods
kangmingyo 0:20e026e254d6 32 void UpdateCurrentPosition();
kangmingyo 0:20e026e254d6 33 void PIDControl();
kangmingyo 0:20e026e254d6 34 void Reset(void);
kangmingyo 0:20e026e254d6 35
kangmingyo 4:a629f46d6594 36
kangmingyo 0:20e026e254d6 37
kangmingyo 0:20e026e254d6 38 private:
kangmingyo 0:20e026e254d6 39 PwmOut _pwm;
kangmingyo 0:20e026e254d6 40 DigitalOut _Dir;
kangmingyo 0:20e026e254d6 41 DigitalInOut _tachoA;
kangmingyo 0:20e026e254d6 42 DigitalInOut _tachoB;
kangmingyo 0:20e026e254d6 43 Ticker _tick;
kangmingyo 0:20e026e254d6 44
kangmingyo 0:20e026e254d6 45 long CurrentPosition, PreviousPosition; // Position Value
kangmingyo 4:a629f46d6594 46 int CurrentSpeed, Error,PreviousError; // Speed Data
kangmingyo 0:20e026e254d6 47 unsigned int duty; // Duty level ( 0-1024)
kangmingyo 0:20e026e254d6 48 unsigned int pwmPeriod; // default 50ms
kangmingyo 0:20e026e254d6 49 unsigned char pwmpin; // PB2 ( 10 )
kangmingyo 0:20e026e254d6 50 unsigned char ppin, npin,dr; // dr =10 means ccwise, dr=0 means clockwise
kangmingyo 0:20e026e254d6 51 unsigned int CntPerRev;
kangmingyo 0:20e026e254d6 52 unsigned int DeltaT;
kangmingyo 0:20e026e254d6 53 unsigned char PreviousEncode;
kangmingyo 0:20e026e254d6 54 float kp, ki, kd;
kangmingyo 0:20e026e254d6 55 int integ, derv,control,cw0[MaxBuf];
kangmingyo 0:20e026e254d6 56 unsigned char cpidx;
kangmingyo 0:20e026e254d6 57 float CalculateRPM(int DeltaCnt); // Calculate RPM value
kangmingyo 1:911f5a86c105 58 float vel;
kangmingyo 4:a629f46d6594 59 int TargetSpeed;
kangmingyo 0:20e026e254d6 60
kangmingyo 0:20e026e254d6 61 };
kangmingyo 0:20e026e254d6 62 #endif
kangmingyo 0:20e026e254d6 63
kangmingyo 0:20e026e254d6 64
kangmingyo 0:20e026e254d6 65