diff --git a/src/BLDCMotor.cpp b/src/BLDCMotor.cpp index 16534199..8fd54ba6 100644 --- a/src/BLDCMotor.cpp +++ b/src/BLDCMotor.cpp @@ -111,6 +111,8 @@ void BLDCMotor::init() { // disable motor driver void BLDCMotor::disable() { + // disable the current sense + if(current_sense) current_sense->disable(); // set zero to PWM driver->setPwm(0, 0, 0); // disable the driver @@ -125,6 +127,13 @@ void BLDCMotor::enable() driver->enable(); // set zero to PWM driver->setPwm(0, 0, 0); + // enable the current sense + if(current_sense) current_sense->enable(); + // reset the pids + PID_velocity.reset(); + P_angle.reset(); + PID_current_q.reset(); + PID_current_d.reset(); // motor status update enabled = 1; } diff --git a/src/common/base_classes/CurrentSense.cpp b/src/common/base_classes/CurrentSense.cpp index c57bdfe6..03ea19ea 100644 --- a/src/common/base_classes/CurrentSense.cpp +++ b/src/common/base_classes/CurrentSense.cpp @@ -100,3 +100,12 @@ DQCurrent_s CurrentSense::getDQCurrents(ABCurrent_s current, float angle_el){ void CurrentSense::linkDriver(BLDCDriver* _driver) { driver = _driver; } + + +void CurrentSense::enable(){ + // nothing is done here, but you can override this function +}; + +void CurrentSense::disable(){ + // nothing is done here, but you can override this function +}; \ No newline at end of file diff --git a/src/common/base_classes/CurrentSense.h b/src/common/base_classes/CurrentSense.h index d9cd8c56..1c839053 100644 --- a/src/common/base_classes/CurrentSense.h +++ b/src/common/base_classes/CurrentSense.h @@ -87,7 +87,17 @@ class CurrentSense{ */ DQCurrent_s getDQCurrents(ABCurrent_s current,float angle_el); + /** + * enable the current sense. default implementation does nothing, but you can + * override it to do something useful. + */ + virtual void enable(); + /** + * disable the current sense. default implementation does nothing, but you can + * override it to do something useful. + */ + virtual void disable(); }; #endif \ No newline at end of file diff --git a/src/drivers/hardware_specific/atmega/atmega2560_mcu.cpp b/src/drivers/hardware_specific/atmega/atmega2560_mcu.cpp index 8a7fbbec..532b3ce3 100644 --- a/src/drivers/hardware_specific/atmega/atmega2560_mcu.cpp +++ b/src/drivers/hardware_specific/atmega/atmega2560_mcu.cpp @@ -57,7 +57,8 @@ void* _configure1PWM(long pwm_frequency,const int pinA) { _pinHighFrequency(pinA, pwm_frequency); GenericDriverParams* params = new GenericDriverParams { .pins = { pinA }, - .pwm_frequency = pwm_frequency + .pwm_frequency = pwm_frequency, + .dead_zone = 0.0f }; return params; } @@ -75,7 +76,8 @@ void* _configure2PWM(long pwm_frequency,const int pinA, const int pinB) { _pinHighFrequency(pinB, pwm_frequency); GenericDriverParams* params = new GenericDriverParams { .pins = { pinA, pinB }, - .pwm_frequency = pwm_frequency + .pwm_frequency = pwm_frequency, + .dead_zone = 0.0f }; return params; } @@ -94,7 +96,8 @@ void* _configure3PWM(long pwm_frequency,const int pinA, const int pinB, const in _pinHighFrequency(pinC, pwm_frequency); GenericDriverParams* params = new GenericDriverParams { .pins = { pinA, pinB, pinC }, - .pwm_frequency = pwm_frequency + .pwm_frequency = pwm_frequency, + .dead_zone = 0.0f }; // _syncAllTimers(); return params; @@ -141,7 +144,8 @@ void* _configure4PWM(long pwm_frequency,const int pin1A, const int pin1B, const _pinHighFrequency(pin2B,pwm_frequency); GenericDriverParams* params = new GenericDriverParams { .pins = { pin1A, pin1B, pin2A, pin2B }, - .pwm_frequency = pwm_frequency + .pwm_frequency = pwm_frequency, + .dead_zone = 0.0f }; return params; } diff --git a/src/drivers/hardware_specific/atmega/atmega328_mcu.cpp b/src/drivers/hardware_specific/atmega/atmega328_mcu.cpp index 53fb1086..9df9b8a7 100644 --- a/src/drivers/hardware_specific/atmega/atmega328_mcu.cpp +++ b/src/drivers/hardware_specific/atmega/atmega328_mcu.cpp @@ -53,7 +53,8 @@ void* _configure1PWM(long pwm_frequency,const int pinA) { _pinHighFrequency(pinA, pwm_frequency); GenericDriverParams* params = new GenericDriverParams { .pins = { pinA }, - .pwm_frequency = pwm_frequency + .pwm_frequency = pwm_frequency, + .dead_zone = 0.0f }; return params; } @@ -70,7 +71,8 @@ void* _configure2PWM(long pwm_frequency,const int pinA, const int pinB) { _pinHighFrequency(pinB, pwm_frequency); GenericDriverParams* params = new GenericDriverParams { .pins = { pinA, pinB }, - .pwm_frequency = pwm_frequency + .pwm_frequency = pwm_frequency, + .dead_zone = 0.0f }; return params; } @@ -89,7 +91,8 @@ void* _configure3PWM(long pwm_frequency,const int pinA, const int pinB, const in _pinHighFrequency(pinC, pwm_frequency); GenericDriverParams* params = new GenericDriverParams { .pins = { pinA, pinB, pinC }, - .pwm_frequency = pwm_frequency + .pwm_frequency = pwm_frequency, + .dead_zone = 0.0f }; _syncAllTimers(); return params; @@ -141,7 +144,8 @@ void* _configure4PWM(long pwm_frequency,const int pin1A, const int pin1B, const _pinHighFrequency(pin2B,pwm_frequency); GenericDriverParams* params = new GenericDriverParams { .pins = { pin1A, pin1B, pin2A, pin2B }, - .pwm_frequency = pwm_frequency + .pwm_frequency = pwm_frequency, + .dead_zone = 0.0f }; return params; } diff --git a/src/drivers/hardware_specific/atmega/atmega32u4_mcu.cpp b/src/drivers/hardware_specific/atmega/atmega32u4_mcu.cpp index b4ad3101..4cf454ae 100644 --- a/src/drivers/hardware_specific/atmega/atmega32u4_mcu.cpp +++ b/src/drivers/hardware_specific/atmega/atmega32u4_mcu.cpp @@ -41,7 +41,8 @@ void* _configure1PWM(long pwm_frequency,const int pinA) { _pinHighFrequency(pinA); GenericDriverParams* params = new GenericDriverParams { .pins = { pinA }, - .pwm_frequency = pwm_frequency + .pwm_frequency = pwm_frequency, + .dead_zone = 0.0f }; return params; } @@ -56,7 +57,8 @@ void* _configure2PWM(long pwm_frequency,const int pinA, const int pinB) { _pinHighFrequency(pinB); GenericDriverParams* params = new GenericDriverParams { .pins = { pinA, pinB }, - .pwm_frequency = pwm_frequency + .pwm_frequency = pwm_frequency, + .dead_zone = 0.0f }; return params; } @@ -72,7 +74,8 @@ void* _configure3PWM(long pwm_frequency,const int pinA, const int pinB, const in _pinHighFrequency(pinC); GenericDriverParams* params = new GenericDriverParams { .pins = { pinA, pinB, pinC }, - .pwm_frequency = pwm_frequency + .pwm_frequency = pwm_frequency, + .dead_zone = 0.0f }; return params; } @@ -119,7 +122,8 @@ void* _configure4PWM(long pwm_frequency,const int pin1A, const int pin1B, const _pinHighFrequency(pin2B); GenericDriverParams* params = new GenericDriverParams { .pins = { pin1A, pin1B, pin2A, pin2B }, - .pwm_frequency = pwm_frequency + .pwm_frequency = pwm_frequency, + .dead_zone = 0.0f }; return params; }