Simple motor controller library, using DIR, PWM, nSLP pin like pololu.
MotorControler.cpp@3:7acc824ca344, 2021-02-02 (annotated)
- 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?
User | Revision | Line number | New 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 | } |