ichinoseki_Bteam_2019 / Motor

Dependents:   ArmNode

Committer:
Kirua
Date:
Sun Sep 15 17:40:14 2019 +0000
Revision:
3:00a812f5ac69
Parent:
2:55726bc51f31
Child:
4:ec8d27a44a4f
fix

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Kirua 0:9c44946754b6 1 #include "mbed.h"
Kirua 0:9c44946754b6 2 #include "Motor.h"
Kirua 0:9c44946754b6 3
Kirua 0:9c44946754b6 4 Motor::Motor(PinName _pwm, PinName _dire, int freq) : pwm(_pwm), dire(_dire)
Kirua 0:9c44946754b6 5 {
Kirua 3:00a812f5ac69 6 abs_max_output = 0.95;
Kirua 1:809c0963d521 7 pwm.period(1.0 / freq);
Kirua 2:55726bc51f31 8 pwm.write(0);
Kirua 2:55726bc51f31 9 dire = 0;
Kirua 2:55726bc51f31 10 pwm_mode = SMB;
Kirua 0:9c44946754b6 11 }
Kirua 0:9c44946754b6 12
Kirua 0:9c44946754b6 13
Kirua 0:9c44946754b6 14 void Motor::drive(float output)
Kirua 0:9c44946754b6 15 {
Kirua 0:9c44946754b6 16 switch(pwm_mode)
Kirua 0:9c44946754b6 17 {
Kirua 0:9c44946754b6 18 case SMB:
Kirua 0:9c44946754b6 19 if (abs(output) > abs_max_output)
Kirua 0:9c44946754b6 20 {
Kirua 0:9c44946754b6 21 pwm = 0;
Kirua 0:9c44946754b6 22 dire = 0;
Kirua 0:9c44946754b6 23 }
Kirua 3:00a812f5ac69 24 else if (output > 0.01)
Kirua 0:9c44946754b6 25 {
Kirua 0:9c44946754b6 26 pwm = output * abs_max_output;
Kirua 0:9c44946754b6 27 dire = 0;
Kirua 0:9c44946754b6 28 }
Kirua 3:00a812f5ac69 29 else if (output < -0.01)
Kirua 0:9c44946754b6 30 {
Kirua 0:9c44946754b6 31 pwm = -output * abs_max_output;
Kirua 0:9c44946754b6 32 dire = 1;
Kirua 0:9c44946754b6 33 }
Kirua 0:9c44946754b6 34 else
Kirua 0:9c44946754b6 35 {
Kirua 0:9c44946754b6 36 pwm = 0;
Kirua 0:9c44946754b6 37 dire = 0;
Kirua 0:9c44946754b6 38 }
Kirua 0:9c44946754b6 39 break;
Kirua 0:9c44946754b6 40 case LAP:
Kirua 0:9c44946754b6 41 if(abs(output) > abs_max_output)
Kirua 0:9c44946754b6 42 {
Kirua 0:9c44946754b6 43 pwm = 0;
Kirua 0:9c44946754b6 44 dire = 0;
Kirua 0:9c44946754b6 45 }
Kirua 0:9c44946754b6 46 else if(output > abs_max_output * 0.05)
Kirua 0:9c44946754b6 47 {
Kirua 0:9c44946754b6 48 pwm = 0.5 + (output * abs_max_output / 2);
Kirua 0:9c44946754b6 49 dire = 1;
Kirua 0:9c44946754b6 50 }
Kirua 0:9c44946754b6 51 else if(output < -abs_max_output * 0.05)
Kirua 0:9c44946754b6 52 {
Kirua 0:9c44946754b6 53 pwm = 0.5 - (output * abs_max_output / 2);
Kirua 0:9c44946754b6 54 dire = 1;
Kirua 0:9c44946754b6 55 }
Kirua 0:9c44946754b6 56 else
Kirua 0:9c44946754b6 57 {
Kirua 0:9c44946754b6 58 pwm = 0;
Kirua 0:9c44946754b6 59 dire = 0;
Kirua 0:9c44946754b6 60 }
Kirua 0:9c44946754b6 61 break;
Kirua 0:9c44946754b6 62 }
Kirua 0:9c44946754b6 63 }