Added max duty for controllable dead time between phases

master
Tom Wilson 4 years ago
parent 2ee6f8c4c0
commit a669b248e2

@ -20,7 +20,7 @@ void loop() {
Serial.print(get_motor_duty(1));
Serial.print(", ");
Serial.println(get_roller_speed(0));
set_motor(0, true, 0.3);
set_motor(0, true, ((millis()%5000)/5000.0)*0.65);
set_motor(1, true, 0.3);
set_motor(2, true, 0.3);
}

@ -16,7 +16,7 @@
typedef struct {
bool enabled = false;
float desired_speed = 0.0;
float kp = 1.0;
float kp = 0.5;
float ki = 0.0;
float kd = 0.0;
float min_duty = 0.1;
@ -80,7 +80,7 @@ static void motor_control_task(void *pvParameters) {
}
// Map duty to fit between min and tri-phase for actual motor PWM
mapped_duty = 0.33 * (m_stat[m_id].duty * (1.0 - m_set.min_duty) + m_set.min_duty);
mapped_duty = 0.33 * (m_stat[m_id].duty * (MAX_DUTY - m_set.min_duty) + m_set.min_duty);
// This function takes duty as a float percent...
mcpwm_set_duty(MCPWM_UNIT_0, motor_timer[m_id], MCPWM_GEN_A, mapped_duty * 100.0);

@ -5,7 +5,9 @@
#define MOTOR_CONTROL_PERIOD_MS 100 // Period of the motor control loop
#define MAX_DUTY_RAMP 5.0 // max change in duty per second - where 1.0 is full duty
#define MAX_DUTY_RAMP 20.0 // max change in duty per second - where 1.0 is full duty
#define MAX_DUTY 0.99 // max duty in each phase - have slightly below 1.0 to give more dead time between phases
void set_motor(int motor_id, bool enabled, float desired_speed);

Loading…
Cancel
Save