Integrate Motors into Power Management

This commit is contained in:
Phillip Kühne 2025-02-12 21:50:29 +01:00
parent dfa778024b
commit a26acf4a92
Signed by: phillip
GPG Key ID: E4C1C4D2F90902AA
2 changed files with 14 additions and 1 deletions

View File

@ -17,7 +17,7 @@
#include <freertos/task.h> #include <freertos/task.h>
#include "driver/ledc.h" #include "driver/ledc.h"
#include "motionDetection/MotionDetection.h" #include "motionDetection/MotionDetection.h"
#include "power/Power.h" #include "../power/Power.h"
#define LEDC_MODE LEDC_LOW_SPEED_MODE #define LEDC_MODE LEDC_LOW_SPEED_MODE
#define TIMER LEDC_TIMER_2 #define TIMER LEDC_TIMER_2
#define CHANNEL_LEFT LEDC_CHANNEL_3 #define CHANNEL_LEFT LEDC_CHANNEL_3
@ -25,6 +25,9 @@
#define DUTY_RES LEDC_TIMER_13_BIT // Set duty resolution to 13 bits #define DUTY_RES LEDC_TIMER_13_BIT // Set duty resolution to 13 bits
#define FREQUENCY (5000) // Frequency in Hertz. Set frequency at 5 kHz #define FREQUENCY (5000) // Frequency in Hertz. Set frequency at 5 kHz
#define DEFAULT_BASE_VALUE 3900 #define DEFAULT_BASE_VALUE 3900
#define MOTOR_MAX_EXECUTION_DELAY_MS 100
class Motor{ class Motor{
public: public:
Motor(uint8_t pin, ledc_timer_t timer, ledc_channel_t channel); Motor(uint8_t pin, ledc_timer_t timer, ledc_channel_t channel);

View File

@ -1,6 +1,9 @@
#include "Motion.h" #include "Motion.h"
#include "power/Power.h" #include "power/Power.h"
#define MOTOR_LEFT_PIN 12
#define MOTOR_RIGHT_PIN 11
Motor::Motor(uint8_t pin, ledc_timer_t timer, ledc_channel_t channel){ Motor::Motor(uint8_t pin, ledc_timer_t timer, ledc_channel_t channel){
this->pin = pin; this->pin = pin;
this->channel = channel; this->channel = channel;
@ -24,6 +27,13 @@ void Motor::begin(void){
}; };
void Motor::setSpeed(uint16_t duty){ void Motor::setSpeed(uint16_t duty){
const float dutyFactor = duty / static_cast<float>(1 << DUTY_RES);
const float current = PowerParameters::CurrentConsumptions::CURRENT_MOTOR_T_ON * dutyFactor;
if (this->pin == MOTOR_LEFT_PIN){
Power::waitForCurrentAllowance(PowerParameters::PowerConsumers::MOTOR_LEFT, current, MOTOR_MAX_EXECUTION_DELAY_MS, NULL);
} else {
Power::waitForCurrentAllowance(PowerParameters::PowerConsumers::MOTOR_RIGHT, current, MOTOR_MAX_EXECUTION_DELAY_MS, NULL);
}
int difference = duty-this->getSpeed(); int difference = duty-this->getSpeed();
if (difference > 0){ if (difference > 0){
for(int i = 0;i<difference;i+=difference/20){ for(int i = 0;i<difference;i+=difference/20){