motor_f103/User/application/work.h

54 lines
1.2 KiB
C

#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,
// S曲线
WORK_S_CURVE = 3,
} 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__