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

Committer:
sgrsn
Date:
Wed Mar 04 06:13:26 2020 +0000
Revision:
2:543ff0150de1
Parent:
1:ed3dfe4ecc8a
Child:
3:7acc824ca344
Add setPwmFrequency()

Who changed what in which revision?

UserRevisionLine numberNew contents of line
sgrsn 0:e3207dd7809a 1 #include "MotorControler.h"
sgrsn 0:e3207dd7809a 2
sgrsn 0:e3207dd7809a 3 MotorControler::MotorControler(PinName DIR, PinName PWM, PinName SLP) : _DIR(DIR), _PWM(PWM), _nSLP(SLP)
sgrsn 0:e3207dd7809a 4 {
sgrsn 0:e3207dd7809a 5 _nSLP = 0;
sgrsn 1:ed3dfe4ecc8a 6 reverse_direction = 0;
sgrsn 0:e3207dd7809a 7 }
sgrsn 0:e3207dd7809a 8
sgrsn 0:e3207dd7809a 9 void MotorControler::enableDriver()
sgrsn 0:e3207dd7809a 10 {
sgrsn 0:e3207dd7809a 11 _nSLP = 1;
sgrsn 0:e3207dd7809a 12 }
sgrsn 0:e3207dd7809a 13
sgrsn 0:e3207dd7809a 14 void MotorControler::disableDriver()
sgrsn 0:e3207dd7809a 15 {
sgrsn 0:e3207dd7809a 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 0:e3207dd7809a 31 _PWM = speed;
sgrsn 1:ed3dfe4ecc8a 32 if (reverse ^ FLIP_MOTOR_DIR ^ reverse_direction)
sgrsn 0:e3207dd7809a 33 {
sgrsn 0:e3207dd7809a 34 _DIR = 1;
sgrsn 0:e3207dd7809a 35 }
sgrsn 0:e3207dd7809a 36 else
sgrsn 0:e3207dd7809a 37 {
sgrsn 0:e3207dd7809a 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 1:ed3dfe4ecc8a 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 2:543ff0150de1 50 _PWM.period(period);
sgrsn 0:e3207dd7809a 51 }