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

Committer:
sgrsn
Date:
Tue Feb 02 13:51:29 2021 +0000
Revision:
3:7acc824ca344
Parent:
2:543ff0150de1
Child:
4:a60052db674c
Add DriverType enum, Chnage name of member variable

Who changed what in which revision?

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