DC motor improvements (#1025)

* extract interface, comments, conform names

* fwd declare
This commit is contained in:
Matthew Kennedy 2019-11-22 13:30:44 -08:00 committed by rusefi
parent 19ebea8b95
commit bb22296f61
3 changed files with 29 additions and 20 deletions

View File

@ -136,7 +136,7 @@ public:
pin_output_mode_e *pinEnableMode, pin_output_mode_e *pinEnableMode,
brain_pin_e pinDir1, brain_pin_e pinDir1,
brain_pin_e pinDir2) { brain_pin_e pinDir2) {
dcMotor.SetType(useTwoWires ? TwoPinDcMotor::ControlType::PwmDirectionPins : TwoPinDcMotor::ControlType::PwmEnablePin); dcMotor.setType(useTwoWires ? TwoPinDcMotor::ControlType::PwmDirectionPins : TwoPinDcMotor::ControlType::PwmEnablePin);
m_pinEnable.initPin("ETB Enable", pinEnable, pinEnableMode); m_pinEnable.initPin("ETB Enable", pinEnable, pinEnableMode);
m_pinDir1.initPin("ETB Dir 1", pinDir1); m_pinDir1.initPin("ETB Dir 1", pinDir1);
@ -211,7 +211,7 @@ static percent_t currentEtbDuty;
} }
if (startupPositionError) { if (startupPositionError) {
etb->dcMotor.Set(0); etb->dcMotor.set(0);
return; return;
} }
@ -221,12 +221,12 @@ static percent_t currentEtbDuty;
} }
if (!cisnan(directPwmValue)) { if (!cisnan(directPwmValue)) {
etb->dcMotor.Set(directPwmValue); etb->dcMotor.set(directPwmValue);
return; return;
} }
if (boardConfiguration->pauseEtbControl) { if (boardConfiguration->pauseEtbControl) {
etb->dcMotor.Set(0); etb->dcMotor.set(0);
return; return;
} }
@ -243,7 +243,7 @@ static percent_t currentEtbDuty;
autoTune.output, autoTune.output,
value); value);
scheduleMsg(&logger, "AT PID=%f", value); scheduleMsg(&logger, "AT PID=%f", value);
etb->dcMotor.Set(ETB_PERCENT_TO_DUTY(value)); etb->dcMotor.set(ETB_PERCENT_TO_DUTY(value));
if (result) { if (result) {
scheduleMsg(&logger, "GREAT NEWS! %f/%f/%f", autoTune.GetKp(), autoTune.GetKi(), autoTune.GetKd()); scheduleMsg(&logger, "GREAT NEWS! %f/%f/%f", autoTune.GetKp(), autoTune.GetKi(), autoTune.GetKd());
@ -275,7 +275,7 @@ static percent_t currentEtbDuty;
currentEtbDuty = engine->engineState.etbFeedForward + currentEtbDuty = engine->engineState.etbFeedForward +
etbPid.getOutput(targetPosition, actualThrottlePosition); etbPid.getOutput(targetPosition, actualThrottlePosition);
etb->dcMotor.Set(ETB_PERCENT_TO_DUTY(currentEtbDuty)); etb->dcMotor.set(ETB_PERCENT_TO_DUTY(currentEtbDuty));
if (engineConfiguration->isVerboseETB) { if (engineConfiguration->isVerboseETB) {
etbPid.showPidStatus(&logger, "ETB"); etbPid.showPidStatus(&logger, "ETB");
@ -348,7 +348,7 @@ void setThrottleDutyCycle(percent_t level) {
float dc = ETB_PERCENT_TO_DUTY(level); float dc = ETB_PERCENT_TO_DUTY(level);
directPwmValue = dc; directPwmValue = dc;
for (int i = 0 ; i < ETB_COUNT; i++) { for (int i = 0 ; i < ETB_COUNT; i++) {
etbControls[i].dcMotor.Set(dc); etbControls[i].dcMotor.set(dc);
} }
scheduleMsg(&logger, "duty ETB duty=%f", dc); scheduleMsg(&logger, "duty ETB duty=%f", dc);
} }
@ -379,7 +379,7 @@ static void showEthInfo(void) {
for (int i = 0 ; i < ETB_COUNT; i++) { for (int i = 0 ; i < ETB_COUNT; i++) {
EtbControl *etb = &etbControls[i]; EtbControl *etb = &etbControls[i];
scheduleMsg(&logger, "%d: dir=%d DC=%f", i, etb->dcMotor.isOpenDirection(), etb->dcMotor.Get()); scheduleMsg(&logger, "%d: dir=%d DC=%f", i, etb->dcMotor.isOpenDirection(), etb->dcMotor.get());
} }
etbPid.showPidStatus(&logger, "ETB"); etbPid.showPidStatus(&logger, "ETB");
@ -400,7 +400,7 @@ static void etbReset() {
scheduleMsg(&logger, "etbReset"); scheduleMsg(&logger, "etbReset");
for (int i = 0 ; i < ETB_COUNT; i++) { for (int i = 0 ; i < ETB_COUNT; i++) {
etbControls[i].dcMotor.Set(0); etbControls[i].dcMotor.set(0);
} }
etbPid.reset(); etbPid.reset();
@ -648,11 +648,11 @@ void initElectronicThrottle(DECLARE_ENGINE_PARAMETER_SIGNATURE) {
for (int i = 0 ; i < ETB_COUNT; i++) { for (int i = 0 ; i < ETB_COUNT; i++) {
EtbControl *etb = &etbControls[i]; EtbControl *etb = &etbControls[i];
etb->dcMotor.Set(70); etb->dcMotor.set(70);
chThdSleep(600); chThdSleep(600);
// todo: grab with proper index // todo: grab with proper index
grabTPSIsWideOpen(); grabTPSIsWideOpen();
etb->dcMotor.Set(-70); etb->dcMotor.set(-70);
chThdSleep(600); chThdSleep(600);
// todo: grab with proper index // todo: grab with proper index
grabTPSIsClosed(); grabTPSIsClosed();

View File

@ -7,6 +7,7 @@
*/ */
#include "dc_motor.h" #include "dc_motor.h"
#include "pwm_generator_logic.h"
TwoPinDcMotor::TwoPinDcMotor(SimplePwm* enable, SimplePwm* dir1, SimplePwm* dir2) TwoPinDcMotor::TwoPinDcMotor(SimplePwm* enable, SimplePwm* dir1, SimplePwm* dir2)
: m_enable(enable) : m_enable(enable)
@ -19,14 +20,14 @@ bool TwoPinDcMotor::isOpenDirection() const {
return m_value >= 0; return m_value >= 0;
} }
float TwoPinDcMotor::Get() const { float TwoPinDcMotor::get() const {
return m_value; return m_value;
} }
/** /**
* @param duty value between -1.0 and 1.0 * @param duty value between -1.0 and 1.0
*/ */
bool TwoPinDcMotor::Set(float duty) bool TwoPinDcMotor::set(float duty)
{ {
m_value = duty; m_value = duty;

View File

@ -7,8 +7,6 @@
#pragma once #pragma once
#include "pwm_generator_logic.h"
/** /**
* @brief Brushed or brushless DC motor interface * @brief Brushed or brushless DC motor interface
* *
@ -23,9 +21,19 @@ public:
* @param duty +1.0f represents full power forward, and -1.0f represents full power backward. * @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. * @return True if any fault was detected driving the motor, and false if successful.
*/ */
virtual bool Set(float duty) = 0; virtual bool set(float duty) = 0;
/**
* @brief Get the current motor duty cycle.
* @return The current duty cycle setting. +1.0f represents full power forward, and -1.0f represents full power backward.
*/
virtual float get() const = 0;
virtual bool isOpenDirection() const = 0;
}; };
class SimplePwm;
/** /**
* @brief Represents a DC motor controller (H bridge) with one pin for enable (PWM), * @brief Represents a DC motor controller (H bridge) with one pin for enable (PWM),
* and two pins for direction control. * and two pins for direction control.
@ -70,9 +78,9 @@ public:
*/ */
TwoPinDcMotor(SimplePwm* enable, SimplePwm* dir1, SimplePwm* dir2); TwoPinDcMotor(SimplePwm* enable, SimplePwm* dir1, SimplePwm* dir2);
virtual bool Set(float duty) override; virtual bool set(float duty) override;
float Get() const; float get() const override;
bool isOpenDirection() const; bool isOpenDirection() const override;
void SetType(ControlType type) { m_type = type; } void setType(ControlType type) { m_type = type; }
}; };