Documentation for DcMotor (#632)

* Docs, support failure detection

* typo
This commit is contained in:
Matthew Kennedy 2018-12-23 18:10:30 -08:00 committed by rusefi
parent ab4d6b824c
commit 5d6d36732a
2 changed files with 47 additions and 22 deletions

View File

@ -1,18 +1,21 @@
/** /**
* @file DcMotor.cpp * @file DcMotor.cpp
* @author Matthew Kennedy, (c) 2018 * @brief DC motor controller
*
* @date Dec 22, 2018
* @author Matthew Kennedy
*/ */
#include "DcMotor.h" #include "DcMotor.h"
TwoPinDcMotor::TwoPinDcMotor(SimplePwm* pwm, OutputPin* dir1, OutputPin* dir2) TwoPinDcMotor::TwoPinDcMotor(SimplePwm* pwm, OutputPin* dir1, OutputPin* dir2)
: m_dir1(dir1) : m_pwm(pwm)
, m_dir1(dir1)
, m_dir2(dir2) , m_dir2(dir2)
, m_pwm(pwm)
{ {
} }
void TwoPinDcMotor::Set(float duty) bool TwoPinDcMotor::Set(float duty)
{ {
bool dir; bool dir;
@ -26,10 +29,10 @@ void TwoPinDcMotor::Set(float duty)
dir = true; dir = true;
} }
// Clamp // Clamp to 100%
if(duty > 0.95f) if(duty > 1.0f)
{ {
duty = 0.95f; duty = 1.0f;
} }
// Disable for very small duty // Disable for very small duty
else if (duty < 0.01f) else if (duty < 0.01f)
@ -49,4 +52,7 @@ void TwoPinDcMotor::Set(float duty)
} }
m_pwm->setSimplePwmDutyCycle(duty); m_pwm->setSimplePwmDutyCycle(duty);
// This motor has no fault detection, so always return false (indicate success).
return false;
} }

View File

@ -1,34 +1,53 @@
/** /**
* @file DcMotor.h * @file DcMotor.h
*
* @date Dec 22, 2018
* @author Matthew Kennedy, (c) 2018 * @author Matthew Kennedy, (c) 2018
*/ */
#pragma once #pragma once
#include "pwm_generator_logic.h" #include "pwm_generator_logic.h"
/**
* @brief Brushed or brushless DC motor interface
*
* Represents a DC motor (brushed or brushless) that provides simple
* torque/power/current/duty cycle control, but not accurate absolute position control.
*/
class DcMotor class DcMotor
{ {
public: public:
/* unit tests rusefi_test.exe crashes with this, why? /**
virtual void Set(float duty) = 0; * @brief Sets the motor duty cycle.
* @param duty +1.0f represents full power forward, and -1.0f represents full power backward.
* @return True if any fault was detected driving the motor, and false if successful.
*/ */
virtual bool Set(float duty) = 0;
}; };
/**
* @brief Represents a DC motor controller (H bridge) with one pin for enable (PWM),
* and two pins for direction control.
*
* The enable pin is used for PWM and disable, and the two direction pins are used
* to set the polarity of each half of the H bridge. setting {dir1,dir2} = 10 should,
* turn the motor one direction (positive duty), and = 01 should turn the other way (negative
* duty).
*/
class TwoPinDcMotor : public DcMotor class TwoPinDcMotor : public DcMotor
{ {
private: private:
SimplePwm* const m_pwm;
OutputPin* const m_dir1; OutputPin* const m_dir1;
OutputPin* const m_dir2; OutputPin* const m_dir2;
SimplePwm* const m_pwm;
public: public:
/**
* @param pwm SimplePwm driver for enable pin, for PWM speed control.
* @param dir1 Enable 1 or direction 1 pin. Gets set high to rotate forward.
* @param dir2 Enable 2 or direction 2 pin. Gets set high to rotate backward.
*/
TwoPinDcMotor(SimplePwm* pwm, OutputPin* dir1, OutputPin* dir2); TwoPinDcMotor(SimplePwm* pwm, OutputPin* dir1, OutputPin* dir2);
/* unit tests rusefi_test.exe crashes with this, why? virtual bool Set(float duty) override;
virtual
*/
void Set(float duty)
/* unit tests rusefi_test.exe crashes with this, why?
override
*/
;
}; };