Change indent style, add other 2 motors

master
Tom Wilson 4 years ago
parent 2e7ccce082
commit 82b21b357d

@ -1,7 +1,7 @@
#include <Arduino.h>
#include "roller_speed.h"
#include "motor_control.h"
#include "roller_speed.h"
void setup() {
Serial.setTimeout(1);
@ -17,6 +17,9 @@ void loop() {
// Serial.println(digitalRead(MOTOR_SPEED_SENSE));
Serial.print(get_motor_1_duty());
Serial.print(", ");
Serial.print(get_motor_2_duty());
Serial.print(", ");
Serial.println(getRoller1Speed());
set_motor_1(true, 0.3);
set_motor_2(true, 0.3);
}

@ -9,11 +9,6 @@
#include "freertos/queue.h"
#include "freertos/task.h"
#define MOTOR_PWM_FREQ 1000 // PWM frequency in Hz
#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 MC_ITERATION_TIME 1.0 / MOTOR_CONTROL_PERIOD_MS
#define MC_TASK_STACK_SIZE 2048
@ -55,7 +50,7 @@ static void motor_control_task(void *pvParameters) {
xLastWakeTime = xTaskGetTickCount();
for (;;) {
for (int m_id = 0; m_id < 1; m_id++) {
for (int m_id = 0; m_id < 3; m_id++) {
// Get the latest motor settings
xQueuePeek(motor_settings_queue[m_id], &m_set, 0);
@ -121,11 +116,42 @@ void set_motor_1(bool enabled, float desired_speed) {
xQueueOverwrite(motor_settings_queue[0], &new_settings);
}
void set_motor_2(bool enabled, float desired_speed) {
motor_settings_t new_settings;
xQueuePeek(motor_settings_queue[1], &new_settings, 0);
new_settings.enabled = enabled;
new_settings.desired_speed = desired_speed;
xQueueOverwrite(motor_settings_queue[1], &new_settings);
}
void set_motor_3(bool enabled, float desired_speed) {
motor_settings_t new_settings;
xQueuePeek(motor_settings_queue[2], &new_settings, 0);
new_settings.enabled = enabled;
new_settings.desired_speed = desired_speed;
xQueueOverwrite(motor_settings_queue[2], &new_settings);
}
float get_motor_1_duty() {
motor_status_t motor_status;
xQueuePeek(motor_status_queue[0], &motor_status, 0);
return motor_status.duty;
}
float get_motor_2_duty() {
motor_status_t motor_status;
xQueuePeek(motor_status_queue[1], &motor_status, 0);
return motor_status.duty;
}
float get_motor_3_duty() {
motor_status_t motor_status;
xQueuePeek(motor_status_queue[2], &motor_status, 0);
return motor_status.duty;
}
@ -160,9 +186,13 @@ void motor_control_setup(void) {
.counter_mode = MCPWM_UP_COUNTER,
};
mcpwm_init(MCPWM_UNIT_0, MCPWM_TIMER_0, &pwm_config);
mcpwm_init(MCPWM_UNIT_0, MCPWM_TIMER_1, &pwm_config);
mcpwm_init(MCPWM_UNIT_0, MCPWM_TIMER_2, &pwm_config);
// Bind to output
mcpwm_gpio_init(MCPWM_UNIT_0, MCPWM0A, GPIO_ROLLER1_PWM);
mcpwm_gpio_init(MCPWM_UNIT_0, MCPWM1A, GPIO_ROLLER2_PWM);
mcpwm_gpio_init(MCPWM_UNIT_0, MCPWM2A, GPIO_ROLLER3_PWM);
// Setup EN pins
gpio_set_level(GPIO_ROLLER1_EN, 0);

@ -1,11 +1,20 @@
#ifndef motor_control_h
#define motor_control_h
#define MOTOR_PWM_FREQ 500 // PWM frequency in Hz
void set_motor_1(bool enabled, float desired_speed);
#define MOTOR_CONTROL_PERIOD_MS 100 // Period of the motor control loop
void motor_control_setup(void);
#define MAX_DUTY_RAMP 5.0 // max change in duty per second - where 1.0 is full duty
void set_motor_1(bool enabled, float desired_speed);
void set_motor_2(bool enabled, float desired_speed);
void set_motor_3(bool enabled, float desired_speed);
float get_motor_1_duty(void);
float get_motor_2_duty(void);
float get_motor_3_duty(void);
void motor_control_setup(void);
#endif

@ -88,7 +88,6 @@ void roller_speed_setup(void) {
xQueueOverwrite(roller_measurement_queue[1], &blank_measurement);
xQueueOverwrite(roller_measurement_queue[2], &blank_measurement);
// Set MCPWM0 CAP0 on roller 1 speed, enable pullup input pin
mcpwm_gpio_init(MCPWM_UNIT_0, MCPWM_CAP_0, GPIO_ROLLER1_SPEED);

@ -5,8 +5,8 @@
#define REV_OVERFLOW 10000 // Number at which rev counts overflow back to 0
#define ROLLER_PULSES_PER_REV 40 // Number of sensor pulses per roller rev
#define ZERO_SPEED_TIMEOUT_US 1000000 // Note that with a clock at 80MHz, the pulse period counter overflows every 53 seconds
#define ZERO_SPEED_TIMEOUT_US \
1000000 // Note that with a clock at 80MHz, the pulse period counter overflows every 53 seconds
void roller_speed_setup(void);

Loading…
Cancel
Save