59 lines
1.9 KiB
C
59 lines
1.9 KiB
C
|
|
#ifndef MOTOR_CONFIG_H
|
|
#define MOTOR_CONFIG_H
|
|
|
|
// ENA and ENB on the L298N
|
|
#define PWM_PIN_RIGHT 1U // chanel B
|
|
#define PWM_PIN_LEFT 0U // chanel A
|
|
|
|
// IN1, IN2, IN3, IN4 on the L298N
|
|
#define DIRECTION_PIN_RIGHT_IN1 11U
|
|
#define DIRECTION_PIN_RIGHT_IN2 12U
|
|
|
|
#define DIRECTION_PIN_LEFT_IN3 19U
|
|
#define DIRECTION_PIN_LEFT_IN4 20U
|
|
|
|
#define DIRECTION_RIGHT_FORWARD (1U << DIRECTION_PIN_RIGHT_IN2)
|
|
#define DIRECTION_RIGHT_BACKWARD (1U << DIRECTION_PIN_RIGHT_IN1)
|
|
#define DIRECTION_LEFT_FORWARD (1U << DIRECTION_PIN_LEFT_IN4)
|
|
#define DIRECTION_LEFT_BACKWARD (1U << DIRECTION_PIN_LEFT_IN3)
|
|
|
|
#define SPEED_PIN_RIGHT 15U
|
|
#define SPEED_PIN_LEFT 16U
|
|
|
|
#define PWM_CLK_DIV 250.f
|
|
#define PWM_WRAP 5000U
|
|
|
|
/*
|
|
* ultimate gain Ku about 14, ultimate period Tu about 8 * 50 = 400ms
|
|
* Ku = 14, Tu = 400ms,
|
|
* Kp = 0.6 * Ku = 8.4
|
|
* Ki = Kp / Tu = 0.021
|
|
* Kd = Kp * Tu / 8 = 42
|
|
*/
|
|
#define PID_KP 8.4f
|
|
#define PID_KI 0.021f // 0.005f
|
|
#define PID_KD 42.f // 0.05f
|
|
|
|
#define MAX_SPEED 4900U
|
|
#define MIN_SPEED 0U // To be changed
|
|
|
|
/*!
|
|
* @brief Structure for the motor speed
|
|
* @param target_speed The target speed of the wheel, in cm/s
|
|
* @param pwm_level The pwm level of the wheel, from 0 to 5000
|
|
* @param sem The semaphore for the wheel
|
|
* @param p_slice_num The pointer to the slice number of the wheel
|
|
* @param channel The pwm channel of the wheel, left A or right B
|
|
*/
|
|
typedef struct {
|
|
float target_speed_cms;
|
|
float current_speed_cms;
|
|
uint16_t pwm_level;
|
|
SemaphoreHandle_t sem;
|
|
uint slice_num;
|
|
uint pwm_channel;
|
|
float distance;
|
|
} motor_speed_t;
|
|
|
|
#endif /* MOTOR_CONFIG_H */ |