pull from the DC_Stepper_Motor program and set up as library
DC_Motor_Controller.h@0:80182fb5ee8f, 2021-05-19 (annotated)
- Committer:
- howanglam3
- Date:
- Wed May 19 09:49:44 2021 +0000
- Revision:
- 0:80182fb5ee8f
change the location of private and public;
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
howanglam3 | 0:80182fb5ee8f | 1 | #include "mbed.h" |
howanglam3 | 0:80182fb5ee8f | 2 | #include "QEI.h" |
howanglam3 | 0:80182fb5ee8f | 3 | |
howanglam3 | 0:80182fb5ee8f | 4 | #ifndef DC_MOTOR_CONTROLLER_H |
howanglam3 | 0:80182fb5ee8f | 5 | #define DC_MOTOR_CONTROLLER_H |
howanglam3 | 0:80182fb5ee8f | 6 | |
howanglam3 | 0:80182fb5ee8f | 7 | class DC_Motor_Controller { |
howanglam3 | 0:80182fb5ee8f | 8 | |
howanglam3 | 0:80182fb5ee8f | 9 | public: |
howanglam3 | 0:80182fb5ee8f | 10 | DigitalOut out1, out2; // Motor direction control pin 2 |
howanglam3 | 0:80182fb5ee8f | 11 | DC_Motor_Controller(PinName out1_p, PinName out2_p, PinName in1_p, PinName in2_p, int PPR) : out1(out1_p), out2(out2_p), dc_motor(in1_p, in2_p, NC, PPR) |
howanglam3 | 0:80182fb5ee8f | 12 | { |
howanglam3 | 0:80182fb5ee8f | 13 | } |
howanglam3 | 0:80182fb5ee8f | 14 | |
howanglam3 | 0:80182fb5ee8f | 15 | void reset(){ // Setting home point for increment encoder |
howanglam3 | 0:80182fb5ee8f | 16 | /*while (home_button == 0){ // Continue to turn clockwise until home button pressed |
howanglam3 | 0:80182fb5ee8f | 17 | out1 = 1; |
howanglam3 | 0:80182fb5ee8f | 18 | out2 = 0; |
howanglam3 | 0:80182fb5ee8f | 19 | }*/ |
howanglam3 | 0:80182fb5ee8f | 20 | out1 = out2 = 0; |
howanglam3 | 0:80182fb5ee8f | 21 | dc_motor.reset(); // Reset pulse_ |
howanglam3 | 0:80182fb5ee8f | 22 | //wait(1); |
howanglam3 | 0:80182fb5ee8f | 23 | }; |
howanglam3 | 0:80182fb5ee8f | 24 | |
howanglam3 | 0:80182fb5ee8f | 25 | void move_angle(int angle){ // move for relative distance |
howanglam3 | 0:80182fb5ee8f | 26 | reset(); |
howanglam3 | 0:80182fb5ee8f | 27 | goto_angle(angle); |
howanglam3 | 0:80182fb5ee8f | 28 | reset(); |
howanglam3 | 0:80182fb5ee8f | 29 | }; |
howanglam3 | 0:80182fb5ee8f | 30 | |
howanglam3 | 0:80182fb5ee8f | 31 | private: |
howanglam3 | 0:80182fb5ee8f | 32 | QEI dc_motor; //(D8,D7,NC,792); // Create QEI object for increment encoder |
howanglam3 | 0:80182fb5ee8f | 33 | void goto_angle(int angle){ // Move motor to specific angle from home point |
howanglam3 | 0:80182fb5ee8f | 34 | int tar_pulse = ((double) angle / 360.0)* (2.0 * 792.0); // Calculating target pulse number |
howanglam3 | 0:80182fb5ee8f | 35 | int cur_pulse = dc_motor.getPulses(); |
howanglam3 | 0:80182fb5ee8f | 36 | |
howanglam3 | 0:80182fb5ee8f | 37 | while ( tar_pulse != cur_pulse ){ |
howanglam3 | 0:80182fb5ee8f | 38 | |
howanglam3 | 0:80182fb5ee8f | 39 | if (tar_pulse > cur_pulse){ // Rotate motor clockwise |
howanglam3 | 0:80182fb5ee8f | 40 | out1 = 1; |
howanglam3 | 0:80182fb5ee8f | 41 | out2 = 0; |
howanglam3 | 0:80182fb5ee8f | 42 | } |
howanglam3 | 0:80182fb5ee8f | 43 | else { // Rotate motor counter clockwrise |
howanglam3 | 0:80182fb5ee8f | 44 | out1 = 0; |
howanglam3 | 0:80182fb5ee8f | 45 | out2 = 1; |
howanglam3 | 0:80182fb5ee8f | 46 | } |
howanglam3 | 0:80182fb5ee8f | 47 | cur_pulse = dc_motor.getPulses(); // Get increment encoder current pulse number |
howanglam3 | 0:80182fb5ee8f | 48 | } |
howanglam3 | 0:80182fb5ee8f | 49 | out1 = 0; // Stop motor |
howanglam3 | 0:80182fb5ee8f | 50 | out2 = 0; |
howanglam3 | 0:80182fb5ee8f | 51 | }; |
howanglam3 | 0:80182fb5ee8f | 52 | |
howanglam3 | 0:80182fb5ee8f | 53 | }; |
howanglam3 | 0:80182fb5ee8f | 54 | #endif |