This repository has been archived on 2025-02-28. You can view files and clone it, but cannot push or open issues or pull requests.
controller-hd/User/application/inc/mode_pwmp_hd.h

140 lines
3.3 KiB
C

#ifndef __MODE_PWMP_HD_H__
#define __MODE_PWMP_HD_H__
#include "main.h"
#include "filter.h"
/*********************************** 宏定义 ***********************************/
#define FSM_WAIT(st) BIT_SET(st, BIT7)
#define FSM_IS_WAIT(st) (st & BIT7)
#define EXECUTE_PLAN EXECUTE_PLAN_1 // 执行方案
#define CON_MAX 4095 // 驱动最大值
#define CON_MIN 0 // 驱动最小值
/************************************ 枚举 ************************************/
// 模式任务
typedef enum
{
MINOR_PROCESS_CONTROL, // 控制
MINOR_PROCESS_ADJUST, // 整定
MINOR_PROCESS_TEST, // 测试
MINOR_PROCESS_STOP, // 停止
} mode_minor_process_state_e;
// 算法方案
typedef enum
{
EXECUTE_PLAN_1,
EXECUTE_PLAN_2,
EXECUTE_PLAN_3,
EXECUTE_PLAN_4,
} execute_plan_minor_e;
// 执行标志
typedef enum
{
EXECUTE_NONE = 0, // 不执行输出
EXECUTE_OUT = 1, // 执行输出
} execute_e;
// 整定状态
typedef enum
{
ADJUST_DISABLE, // 整定禁用
ADJUST_ONGING, // 整定进行中
ADJUST_OK, // 整定成功
} minor_adjust_state_e;
// 整定步骤
typedef enum
{
MINOR_ADJUST_IDEL,
MINOR_ADJUST_OVER,
} minor_adjust_step_e;
/*********************************** 结构体 ***********************************/
// 滤波器
typedef struct
{
lpf_window_t *handle;
uint16_t value;
} minor_filter_t;
// 执行器
typedef struct
{
execute_e code; // 执行标志
uint16_t dac; // 输出值
} execute_rsp_t;
// 存储数据
typedef struct
{
} mode_pwmp_hd_storage_data_t;
typedef union
{
uint8_t data[128];
mode_pwmp_hd_storage_data_t storage;
} mode_pwmp_hd_params_u;
// 测试任务
typedef struct
{
uint16_t output;
uint16_t travel_adc;
uint16_t minor_adc;
float32 drive_current;
} minor_test_t;
// 整定任务
typedef struct
{
BOOL enable; // 整定使能
minor_adjust_step_e step; // 当前整定步骤
minor_adjust_step_e next_step; // 下个整定步骤
minor_adjust_step_e execute_step; // 执行整定步骤
} minor_adjust_t;
// 控制任务
typedef struct
{
__IO uint32_t enter_count; // 用于100ms蓝牙输出计时器
float32 ctrl_target; // 目标值
float32 ctrl_feedback; // 反馈值
float32 real_error; // 实际误差
uint16_t current_adc; // 当前ADC值
} minor_control_t;
// 小回路模式句柄
typedef struct
{
uint8_t process_state; // 当前任务
uint8_t adjust_state; // 整定状态
minor_filter_t target_lpf; // 目标滤波器
minor_filter_t actual_lpf; // 实际滤波器
execute_rsp_t execute; // 执行器
minor_test_t test; // 测试任务
minor_adjust_t adjust; // 整定任务
minor_control_t control; // 控制任务
mode_pwmp_hd_params_u *save; // 存储数据
void (*params_save_cb)(void); // 存储函数
} mode_minor_t;
/*********************************** 外部声明 ***********************************/
extern mode_minor_t *mode_minor;
void mode_minor_init(uint16_t positioner_model, mode_pwmp_hd_params_u *params, void (*params_save_cb)(void));
void mode_minor_dinit(void);
void mode_minor_process(void);
void minor_process_state_set(mode_minor_process_state_e state);
#endif // __MODE_PWMP_HD_H__