Files
FDR-Core/Core/Inc/motor.h
2026-03-08 18:17:14 +08:00

44 lines
1.8 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#ifndef __MOTOR_H
#define __MOTOR_H
#include "main.h"
/* ================== 硬件与物理参数配置 ================== */
// PWM 满载占空比 (对应 CubeMX 中的 ARR = 1049)
#define MAX_PWM_DUTY 1049
// 为安全起见设置占空比上限,防溢出或满载锁死 (约 95%)
#define PWM_LIMIT 1000
// 编码器与减速箱参数 (JGB37-520 11线 90减速比)
#define ENCODER_RESOLUTION 11.0f // 电机尾部编码器线数
#define REDUCTION_RATIO 90.0f // 减速箱减速比 (90:1)
// 车轮转一圈的总脉冲数 = 11 * 4(倍频) * 90 = 3960
#define PULSES_PER_REV (ENCODER_RESOLUTION * 4.0f * REDUCTION_RATIO)
/* ================== 枚举与类型定义 ================== */
// 定义电机 ID (与物理位置一一对应)
typedef enum {
MOTOR_FL = 0, // 左上 Front-Left (PWM: TIM2, Encoder: TIM5)
MOTOR_RL, // 左下 Rear-Left (PWM: TIM9, Encoder: TIM3)
MOTOR_FR, // 右上 Front-Right (PWM: TIM8, Encoder: TIM4)
MOTOR_RR // 右下 Rear-Right (PWM: TIM8, Encoder: TIM1)
} Motor_ID_t;
/* ================== 函 数 声 明 ================== */
// --- 基础控制层 ---
void Motor_Init(void);
// 设置电机输出 (正数代表期望车轮推动车体【向前】,负数【向后】)
void Set_Motor_Output(Motor_ID_t id, int16_t control_out);
// 紧急制动所有电机
void Motor_Brake_All(void);
// --- 状态观测层 ---
// 读取脉冲并更新转速 (需周期性调用dt_s 为调用间隔的秒数,如 10ms 则传入 0.01f)
void Motor_Update_RPM(float dt_s);
// 获取计算好的实时转速 (正数代表车轮正使车体【向前】行驶)
float Get_Motor_RPM(Motor_ID_t id);
// 获取自上次调用以来的累加脉冲增量,并自动清零
void Motor_Get_And_Clear_Delta_Ticks(int16_t* d_fl, int16_t* d_rl, int16_t* d_fr, int16_t* d_rr);
#endif /* __MOTOR_H */