ichinoseki_Bteam_2019 / Motor

Dependents:   ArmNode

Committer:
Kirua
Date:
Sat Aug 17 04:52:35 2019 +0000
Revision:
1:809c0963d521
Parent:
0:9c44946754b6
Child:
2:55726bc51f31
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 0:9c44946754b6 6 pwm_mode = SMB;
Kirua 0:9c44946754b6 7 abs_max_output = 1.0;
Kirua 1:809c0963d521 8 pwm.period(1.0 / freq);
Kirua 0:9c44946754b6 9 }
Kirua 0:9c44946754b6 10
Kirua 0:9c44946754b6 11
Kirua 0:9c44946754b6 12 void Motor::drive(float output)
Kirua 0:9c44946754b6 13 {
Kirua 0:9c44946754b6 14 switch(pwm_mode)
Kirua 0:9c44946754b6 15 {
Kirua 0:9c44946754b6 16 case SMB:
Kirua 0:9c44946754b6 17 if (abs(output) > abs_max_output)
Kirua 0:9c44946754b6 18 {
Kirua 0:9c44946754b6 19 pwm = 0;
Kirua 0:9c44946754b6 20 dire = 0;
Kirua 0:9c44946754b6 21 }
Kirua 0:9c44946754b6 22 else if (output > abs_max_output * 0.05)
Kirua 0:9c44946754b6 23 {
Kirua 0:9c44946754b6 24 pwm = output * abs_max_output;
Kirua 0:9c44946754b6 25 dire = 0;
Kirua 0:9c44946754b6 26 }
Kirua 0:9c44946754b6 27 else if (output < -abs_max_output * 0.05)
Kirua 0:9c44946754b6 28 {
Kirua 0:9c44946754b6 29 pwm = -output * abs_max_output;
Kirua 0:9c44946754b6 30 dire = 1;
Kirua 0:9c44946754b6 31 }
Kirua 0:9c44946754b6 32 else
Kirua 0:9c44946754b6 33 {
Kirua 0:9c44946754b6 34 pwm = 0;
Kirua 0:9c44946754b6 35 dire = 0;
Kirua 0:9c44946754b6 36 }
Kirua 0:9c44946754b6 37 break;
Kirua 0:9c44946754b6 38 case LAP:
Kirua 0:9c44946754b6 39 if(abs(output) > abs_max_output)
Kirua 0:9c44946754b6 40 {
Kirua 0:9c44946754b6 41 pwm = 0;
Kirua 0:9c44946754b6 42 dire = 0;
Kirua 0:9c44946754b6 43 }
Kirua 0:9c44946754b6 44 else if(output > abs_max_output * 0.05)
Kirua 0:9c44946754b6 45 {
Kirua 0:9c44946754b6 46 pwm = 0.5 + (output * abs_max_output / 2);
Kirua 0:9c44946754b6 47 dire = 1;
Kirua 0:9c44946754b6 48 }
Kirua 0:9c44946754b6 49 else if(output < -abs_max_output * 0.05)
Kirua 0:9c44946754b6 50 {
Kirua 0:9c44946754b6 51 pwm = 0.5 - (output * abs_max_output / 2);
Kirua 0:9c44946754b6 52 dire = 1;
Kirua 0:9c44946754b6 53 }
Kirua 0:9c44946754b6 54 else
Kirua 0:9c44946754b6 55 {
Kirua 0:9c44946754b6 56 pwm = 0;
Kirua 0:9c44946754b6 57 dire = 0;
Kirua 0:9c44946754b6 58 }
Kirua 0:9c44946754b6 59 break;
Kirua 0:9c44946754b6 60 }
Kirua 0:9c44946754b6 61 }