moved global variables to struct
This commit is contained in:
parent
ef965e0f2f
commit
baa7914f30
|
@ -43,8 +43,8 @@ typedef struct {
|
||||||
float target_speed_cms;
|
float target_speed_cms;
|
||||||
float current_speed_cms;
|
float current_speed_cms;
|
||||||
uint16_t pwm_level;
|
uint16_t pwm_level;
|
||||||
SemaphoreHandle_t * p_sem;
|
SemaphoreHandle_t sem;
|
||||||
uint * p_slice_num;
|
uint slice_num;
|
||||||
uint pwm_channel;
|
uint pwm_channel;
|
||||||
} motor_speed_t;
|
} motor_speed_t;
|
||||||
|
|
||||||
|
|
|
@ -19,30 +19,18 @@
|
||||||
|
|
||||||
#include "motor_config.h"
|
#include "motor_config.h"
|
||||||
|
|
||||||
uint g_slice_num_left = 0U;
|
motor_speed_t g_motor_speed_left = { .pwm_level = 2500u,
|
||||||
uint g_slice_num_right = 0U;
|
|
||||||
|
|
||||||
SemaphoreHandle_t g_wheel_speed_sem_left = NULL;
|
|
||||||
SemaphoreHandle_t g_wheel_speed_sem_right = NULL;
|
|
||||||
|
|
||||||
motor_speed_t g_motor_speed_left = { .target_speed_cms = 0.0f,
|
|
||||||
.pwm_level = 2500u,
|
|
||||||
.p_sem = &g_wheel_speed_sem_left,
|
|
||||||
.p_slice_num = &g_slice_num_left,
|
|
||||||
.pwm_channel = PWM_CHAN_A };
|
.pwm_channel = PWM_CHAN_A };
|
||||||
|
|
||||||
motor_speed_t g_motor_speed_right = { .target_speed_cms = 0.0f,
|
motor_speed_t g_motor_speed_right = { .pwm_level = 2500u,
|
||||||
.pwm_level = 2500u,
|
|
||||||
.p_sem = &g_wheel_speed_sem_right,
|
|
||||||
.p_slice_num = &g_slice_num_right,
|
|
||||||
.pwm_channel = PWM_CHAN_B };
|
.pwm_channel = PWM_CHAN_B };
|
||||||
|
|
||||||
void
|
void
|
||||||
motor_init(void)
|
motor_init(void)
|
||||||
{
|
{
|
||||||
// Semaphore
|
// Semaphore
|
||||||
g_wheel_speed_sem_left = xSemaphoreCreateBinary();
|
g_motor_speed_left.sem = xSemaphoreCreateBinary();
|
||||||
g_wheel_speed_sem_right = xSemaphoreCreateBinary();
|
g_motor_speed_right.sem = xSemaphoreCreateBinary();
|
||||||
|
|
||||||
gpio_init(SPEED_PIN_RIGHT);
|
gpio_init(SPEED_PIN_RIGHT);
|
||||||
gpio_init(SPEED_PIN_LEFT);
|
gpio_init(SPEED_PIN_LEFT);
|
||||||
|
@ -64,21 +52,21 @@ motor_init(void)
|
||||||
gpio_set_function(PWM_PIN_LEFT, GPIO_FUNC_PWM);
|
gpio_set_function(PWM_PIN_LEFT, GPIO_FUNC_PWM);
|
||||||
gpio_set_function(PWM_PIN_RIGHT, GPIO_FUNC_PWM);
|
gpio_set_function(PWM_PIN_RIGHT, GPIO_FUNC_PWM);
|
||||||
|
|
||||||
g_slice_num_left = pwm_gpio_to_slice_num(PWM_PIN_LEFT);
|
g_motor_speed_left.slice_num = pwm_gpio_to_slice_num(PWM_PIN_LEFT);
|
||||||
g_slice_num_right = pwm_gpio_to_slice_num(PWM_PIN_RIGHT);
|
g_motor_speed_right.slice_num = pwm_gpio_to_slice_num(PWM_PIN_RIGHT);
|
||||||
|
|
||||||
// NOTE: PWM clock is 125MHz for raspberrypi pico w by default
|
// NOTE: PWM clock is 125MHz for raspberrypi pico w by default
|
||||||
|
|
||||||
// 125MHz / 250 = 500kHz
|
// 125MHz / 250 = 500kHz
|
||||||
pwm_set_clkdiv(g_slice_num_left, PWM_CLK_DIV);
|
pwm_set_clkdiv(g_motor_speed_left.slice_num, PWM_CLK_DIV);
|
||||||
pwm_set_clkdiv(g_slice_num_right, PWM_CLK_DIV);
|
pwm_set_clkdiv(g_motor_speed_right.slice_num, PWM_CLK_DIV);
|
||||||
|
|
||||||
// have them to be 500kHz / 5000 = 100Hz
|
// have them to be 500kHz / 5000 = 100Hz
|
||||||
pwm_set_wrap(g_slice_num_left, (PWM_WRAP - 1U));
|
pwm_set_wrap(g_motor_speed_left.slice_num, (PWM_WRAP - 1U));
|
||||||
pwm_set_wrap(g_slice_num_right, (PWM_WRAP - 1U));
|
pwm_set_wrap(g_motor_speed_right.slice_num, (PWM_WRAP - 1U));
|
||||||
|
|
||||||
pwm_set_enabled(g_slice_num_left, true);
|
pwm_set_enabled(g_motor_speed_left.slice_num, true);
|
||||||
pwm_set_enabled(g_slice_num_right, true);
|
pwm_set_enabled(g_motor_speed_right.slice_num, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif /* MOTOR_INIT_H */
|
#endif /* MOTOR_INIT_H */
|
|
@ -63,7 +63,7 @@ motor_pid_task(void *p_param)
|
||||||
printf("control signal: %f\n", control_signal);
|
printf("control signal: %f\n", control_signal);
|
||||||
printf("new pwm: %hu\n\n", p_motor_speed->pwm_level);
|
printf("new pwm: %hu\n\n", p_motor_speed->pwm_level);
|
||||||
|
|
||||||
pwm_set_chan_level(*p_motor_speed->p_slice_num,
|
pwm_set_chan_level(p_motor_speed->slice_num,
|
||||||
p_motor_speed->pwm_channel,
|
p_motor_speed->pwm_channel,
|
||||||
p_motor_speed->pwm_level);
|
p_motor_speed->pwm_level);
|
||||||
|
|
||||||
|
|
|
@ -17,7 +17,7 @@ h_wheel_sensor_isr_handler(void)
|
||||||
gpio_acknowledge_irq(SPEED_PIN_LEFT, GPIO_IRQ_EDGE_FALL);
|
gpio_acknowledge_irq(SPEED_PIN_LEFT, GPIO_IRQ_EDGE_FALL);
|
||||||
|
|
||||||
BaseType_t xHigherPriorityTaskWoken = pdFALSE;
|
BaseType_t xHigherPriorityTaskWoken = pdFALSE;
|
||||||
xSemaphoreGiveFromISR(g_wheel_speed_sem_left,
|
xSemaphoreGiveFromISR(g_motor_speed_left.sem,
|
||||||
&xHigherPriorityTaskWoken);
|
&xHigherPriorityTaskWoken);
|
||||||
portYIELD_FROM_ISR(xHigherPriorityTaskWoken);
|
portYIELD_FROM_ISR(xHigherPriorityTaskWoken);
|
||||||
}
|
}
|
||||||
|
@ -27,7 +27,7 @@ h_wheel_sensor_isr_handler(void)
|
||||||
gpio_acknowledge_irq(SPEED_PIN_RIGHT, GPIO_IRQ_EDGE_FALL);
|
gpio_acknowledge_irq(SPEED_PIN_RIGHT, GPIO_IRQ_EDGE_FALL);
|
||||||
|
|
||||||
BaseType_t xHigherPriorityTaskWoken = pdFALSE;
|
BaseType_t xHigherPriorityTaskWoken = pdFALSE;
|
||||||
xSemaphoreGiveFromISR(g_wheel_speed_sem_right,
|
xSemaphoreGiveFromISR(g_motor_speed_right.sem,
|
||||||
&xHigherPriorityTaskWoken);
|
&xHigherPriorityTaskWoken);
|
||||||
portYIELD_FROM_ISR(xHigherPriorityTaskWoken);
|
portYIELD_FROM_ISR(xHigherPriorityTaskWoken);
|
||||||
}
|
}
|
||||||
|
@ -51,7 +51,7 @@ monitor_wheel_speed_task(void *pvParameters)
|
||||||
|
|
||||||
for (;;)
|
for (;;)
|
||||||
{
|
{
|
||||||
if (xSemaphoreTake(*p_motor_speed->p_sem, pdMS_TO_TICKS(100))
|
if (xSemaphoreTake(p_motor_speed->sem, pdMS_TO_TICKS(100))
|
||||||
== pdTRUE)
|
== pdTRUE)
|
||||||
{
|
{
|
||||||
curr_time = time_us_64();
|
curr_time = time_us_64();
|
||||||
|
|
Loading…
Reference in New Issue