Simple motor controller library, using DIR, PWM, nSLP pin like pololu.

Committer:
sgrsn
Date:
Tue Feb 02 14:05:05 2021 +0000
Revision:
4:a60052db674c
Parent:
3:7acc824ca344
Child:
5:b46d1e179eb7
Case classification by MD type

Who changed what in which revision?

UserRevisionLine numberNew contents of line
sgrsn 0:e3207dd7809a 1 #include "MotorControler.h"
sgrsn 0:e3207dd7809a 2
sgrsn 4:a60052db674c 3 MotorControler::MotorControler(PinName DIR, PinName PWM, PinName nSLP, DriverType md_type) : DIR_(DIR), PWM_(PWM), nSLP_(nSLP)
sgrsn 0:e3207dd7809a 4 {
sgrsn 4:a60052db674c 5 disableDriver();
sgrsn 3:7acc824ca344 6 reverse_direction_ = 0;
sgrsn 4:a60052db674c 7 md_type_ = md_type;
sgrsn 0:e3207dd7809a 8 }
sgrsn 0:e3207dd7809a 9
sgrsn 0:e3207dd7809a 10 void MotorControler::enableDriver()
sgrsn 0:e3207dd7809a 11 {
sgrsn 4:a60052db674c 12 if(md_type_ == POLOLU)
sgrsn 4:a60052db674c 13 {
sgrsn 4:a60052db674c 14 nSLP_ = 1;
sgrsn 4:a60052db674c 15 }
sgrsn 4:a60052db674c 16 else if(md_type_ == TEXNITIS)
sgrsn 4:a60052db674c 17 {
sgrsn 4:a60052db674c 18 // do nothing;
sgrsn 4:a60052db674c 19 }
sgrsn 0:e3207dd7809a 20 }
sgrsn 0:e3207dd7809a 21
sgrsn 0:e3207dd7809a 22 void MotorControler::disableDriver()
sgrsn 0:e3207dd7809a 23 {
sgrsn 4:a60052db674c 24 if(md_type_ == POLOLU)
sgrsn 4:a60052db674c 25 nSLP_ = 0;
sgrsn 4:a60052db674c 26 else if(md_type_ == TEXNITIS)
sgrsn 4:a60052db674c 27 PWM_ = 0;
sgrsn 0:e3207dd7809a 28 }
sgrsn 0:e3207dd7809a 29
sgrsn 0:e3207dd7809a 30 void MotorControler::setSpeed(float speed)
sgrsn 0:e3207dd7809a 31 {
sgrsn 0:e3207dd7809a 32 uint8_t reverse = 0;
sgrsn 0:e3207dd7809a 33 if (speed < 0)
sgrsn 0:e3207dd7809a 34 {
sgrsn 0:e3207dd7809a 35 speed = -speed; // Make speed a positive quantity
sgrsn 0:e3207dd7809a 36 reverse = 1; // Preserve the direction
sgrsn 0:e3207dd7809a 37 }
sgrsn 0:e3207dd7809a 38 // 最大デューティ比で制限
sgrsn 0:e3207dd7809a 39 if (speed > 1)
sgrsn 0:e3207dd7809a 40 speed = 1;
sgrsn 0:e3207dd7809a 41
sgrsn 3:7acc824ca344 42 PWM_ = speed;
sgrsn 3:7acc824ca344 43 if (reverse ^ FLIP_MOTOR_DIR ^ reverse_direction_)
sgrsn 0:e3207dd7809a 44 {
sgrsn 3:7acc824ca344 45 DIR_ = 1;
sgrsn 0:e3207dd7809a 46 }
sgrsn 0:e3207dd7809a 47 else
sgrsn 0:e3207dd7809a 48 {
sgrsn 3:7acc824ca344 49 DIR_ = 0;
sgrsn 0:e3207dd7809a 50 }
sgrsn 1:ed3dfe4ecc8a 51 }
sgrsn 1:ed3dfe4ecc8a 52
sgrsn 1:ed3dfe4ecc8a 53 void MotorControler::setMotorDirection(MotorDirection dir)
sgrsn 1:ed3dfe4ecc8a 54 {
sgrsn 3:7acc824ca344 55 reverse_direction_ = dir;
sgrsn 2:543ff0150de1 56 }
sgrsn 2:543ff0150de1 57
sgrsn 2:543ff0150de1 58 void MotorControler::setPwmFrequency(float frequency)
sgrsn 2:543ff0150de1 59 {
sgrsn 2:543ff0150de1 60 float period = 1.0/frequency;
sgrsn 3:7acc824ca344 61 PWM_.period(period);
sgrsn 0:e3207dd7809a 62 }