Simple motor controller library, using DIR, PWM, nSLP pin like pololu.
MotorControler.cpp
- Committer:
- sgrsn
- Date:
- 2021-02-02
- Revision:
- 4:a60052db674c
- Parent:
- 3:7acc824ca344
- Child:
- 5:b46d1e179eb7
File content as of revision 4:a60052db674c:
#include "MotorControler.h" MotorControler::MotorControler(PinName DIR, PinName PWM, PinName nSLP, DriverType md_type) : DIR_(DIR), PWM_(PWM), nSLP_(nSLP) { disableDriver(); reverse_direction_ = 0; md_type_ = md_type; } void MotorControler::enableDriver() { if(md_type_ == POLOLU) { nSLP_ = 1; } else if(md_type_ == TEXNITIS) { // do nothing; } } void MotorControler::disableDriver() { if(md_type_ == POLOLU) nSLP_ = 0; else if(md_type_ == TEXNITIS) PWM_ = 0; } void MotorControler::setSpeed(float speed) { uint8_t reverse = 0; if (speed < 0) { speed = -speed; // Make speed a positive quantity reverse = 1; // Preserve the direction } // 最大デューティ比で制限 if (speed > 1) speed = 1; PWM_ = speed; if (reverse ^ FLIP_MOTOR_DIR ^ reverse_direction_) { DIR_ = 1; } else { DIR_ = 0; } } void MotorControler::setMotorDirection(MotorDirection dir) { reverse_direction_ = dir; } void MotorControler::setPwmFrequency(float frequency) { float period = 1.0/frequency; PWM_.period(period); }