#ifndef __WORK_H__ #define __WORK_H__ #include "main.h" #include "key.h" #include "pid.h" #include "filter.h" typedef enum { // PWM占空比映射到电机 WORK_PWM_MAP = 0, // 电机位置控制 WORK_MOTOR_POS = 1, // 电机速度控制 WORK_MOTOR_SPEED = 2, } work_e; typedef struct { work_e type; uint8_t timer_cycle; // 定时器周期 uint32_t enter_cnt; // 进入次数 int32_t encoder_cnt; // 编码器位置 int32_t encoder_show; // 滤波后的编码器位置 float32 pwm_percent; // PWM占空比 uint32_t pwm_feq; // PWM频率 uint16_t pwm_arr; // PWM自动重装载值 pid_t pid; pid_common_position_t *position; pid_common_increment_t *increment; struct { float32 kp; float32 ki; float32 kd; float32 dead_zone; } pid_params; int32_t target_pos; // 目标位置 int32_t target_speed; // 目标速度 int32_t target_speed_filter; lpf_t encoder_lpf; lpf_t target_speed_lpf; } work_t; extern work_t work; void work_init(void); void work_process(void); void work_key_handle_cb(button_id_e id); void work_encoder_exti(void); #endif // __WORK_H__