180 lines
9.2 KiB
C
180 lines
9.2 KiB
C
|
||
#ifndef __TUNE_H__
|
||
#define __TUNE_H__
|
||
|
||
#include <stdint.h>
|
||
#include "data_type_def.h"
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
共享宏定义
|
||
-----------------------------------------------------------------------------*/
|
||
#define AUTO_TUNE_OBJ_NUM 1 /*定义同时需要自整定对象资源的最大个数*/
|
||
|
||
typedef int32_t TUNE_ID_t; /*自整定类型定义,正常Id为>=0,若小于零,则返回的Id错误*/
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
数据类型定义
|
||
-----------------------------------------------------------------------------*/
|
||
typedef enum /*PID控制器类型*/
|
||
{
|
||
CONTROLER_TYPE_PI, /*PI控制器*/
|
||
CONTROLER_TYPE_PID, /*PID控制器*/
|
||
} TUNE_CONTROLER_TYPE_t;
|
||
|
||
typedef enum /*PID状态*/
|
||
{
|
||
TUNE_INIT = 0, /*PID自整定初始化中*/
|
||
TUNE_START_POINT, /*寻找起始点*/
|
||
TUNE_RUNNING, /*PID自整定中*/
|
||
TUNE_FAIL, /*整定失败*/
|
||
TUNE_SUCESS, /*整定成功*/
|
||
|
||
} TUNE_STAT_t;
|
||
|
||
typedef enum /*驱动器作用*/
|
||
{
|
||
POSITIVE_ACTION, /*设定值大于测量值时,执行单元执行高输出*/
|
||
NEGATIVE_ACTION, /*设定值大于测量值时,执行单元执行低输出*/
|
||
} DRIVER_ACTION_TYPE_t;
|
||
|
||
typedef struct TUNE_CFG_PARAM_tag
|
||
{
|
||
TUNE_CONTROLER_TYPE_t cTrlType; /*控制器类型,默认PD控制器*/
|
||
DRIVER_ACTION_TYPE_t acterType; /*驱动器作用类型,默认正向作用*/
|
||
uint32_t hysteresisNum; /*反馈值在设定值处的迟滞相应个数,默认为5*/
|
||
float32 maxOutputStep; /*最大输出阶跃值,默认值为50*/
|
||
float32 minOutputStep; /*最小输出阶跃值,默认值为0*/
|
||
float32 setpoint; /*整定设定值,默认值为为50*/
|
||
float32 ampStdDeviation; /*幅值标准差预期值,用来计算自整定波形是否稳定*/
|
||
float32 cycleStdDeviation; /*周期标准差预期值,用来计算自整定波形是否稳定*/
|
||
} TUNE_CFG_PARAM_t, *pTUNE_CFG_PARAM_t; /*pid自整定对象配置参数*/
|
||
|
||
typedef struct TUNE_OGJ_tag *pTUNE_OBJ_t; /*PID自整定参数*/
|
||
/*-----------------------------------------------------------------------------------
|
||
函数原型: void TUNE_Init(void)
|
||
功 能: 初始化自整定相关参数,使用默认的TUNE_CFG_PARAM_t参数初始化自整定参数
|
||
default cTrlType = CONTROLER_TYPE_PI,
|
||
default outputStep = 50,
|
||
default hysteresisNum = 5
|
||
输入参数: NA
|
||
输出参数: NA
|
||
返 回 值: true:pram is protected can't be modifid; false: writable
|
||
-----------------------------------------------------------------------------------*/
|
||
extern void TUNE_Init(void);
|
||
|
||
/*-----------------------------------------------------------------------------------
|
||
函数原型: TUNE_ID_t TUNE_New(pTUNE_CFG_PARAM_t pParam)
|
||
功 能: 新建一个PID自整定对象
|
||
输入参数: pParam:自整定对象配置参数
|
||
输出参数: NA
|
||
返 回 值: <0,则新建自整定对象失败,可能对象资源已经用完,需要通过更改AUTO_TUNE_OBJ_NUM宏定义
|
||
增加自整定对象资源,>=0,则为分配的自整定id,后续函数调用均通过此Id
|
||
-----------------------------------------------------------------------------------*/
|
||
extern TUNE_ID_t TUNE_New(pTUNE_CFG_PARAM_t pParam);
|
||
/*-----------------------------------------------------------------------------------
|
||
函数原型: TUNE_ID_t TUNE_New(pTUNE_CFG_PARAM_t pParam)
|
||
功 能: 释放ID所示自整定对象资源
|
||
输入参数: id:自整定ID
|
||
输出参数: NA
|
||
返 回 值: false:资源释放失败,true:资源释放成功
|
||
注意事项: 只有在tuneStat为TUNE_FAIL或者TUNE_SUCESS状态下,才允许释放资源
|
||
-----------------------------------------------------------------------------------*/
|
||
extern BOOL TUNE_Release(TUNE_ID_t id);
|
||
/*-----------------------------------------------------------------------------------
|
||
函数原型: BOOL TUNE_Work(TUNE_ID_t id, float32 feedbackVal, float32*outputVal)
|
||
功 能: 自整定任务
|
||
输入参数: id:自整定ID
|
||
delayMsec:调用的时间间隔
|
||
输出参数: outputVal:输出值
|
||
返 回 值: true:自整定完成,false:正在自整定中
|
||
注意事项: 该函数需要以固定的时间间隔调用
|
||
-----------------------------------------------------------------------------------*/
|
||
extern TUNE_STAT_t TUNE_Work(TUNE_ID_t id, float32 feedbackVal, float32 *outputVal, uint32_t delayMsec);
|
||
/*-----------------------------------------------------------------------------------
|
||
函数原型: BOOL TUNE_SetActerType(TUNE_ID_t id, float32 maxStep,DRIVER_ACTION_TYPE_t type)
|
||
功 能: 设置驱动器类型
|
||
输入参数: id:自整定ID
|
||
type:驱动器类型
|
||
输出参数: NA
|
||
返 回 值: true:设置成功,false:设置失败
|
||
-----------------------------------------------------------------------------------*/
|
||
extern BOOL TUNE_SetActerType(TUNE_ID_t id, DRIVER_ACTION_TYPE_t type);
|
||
/*-----------------------------------------------------------------------------------
|
||
函数原型: BOOL TUNE_Setsetpoint(TUNE_ID_t id, float32 setpoint)
|
||
功 能: 设置自整定设定值
|
||
输入参数: id:自整定ID
|
||
setpoint:自整定设置值
|
||
|
||
输出参数: NA
|
||
返 回 值: true:设置成功,false:设置失败
|
||
-----------------------------------------------------------------------------------*/
|
||
extern BOOL TUNE_Setsetpoint(TUNE_ID_t id, float32 setpoint);
|
||
|
||
/*-----------------------------------------------------------------------------------
|
||
函数原型: BOOL TUNE_SetOutStep(TUNE_ID_t id, float32 maxStep,float32 minStep)
|
||
功 能: 设置输出阶跃值
|
||
输入参数: id:自整定ID
|
||
maxStep:最大输出阶跃值
|
||
minStep:最大输出阶跃值
|
||
输出参数: NA
|
||
返 回 值: true:设置成功,false:设置失败
|
||
------------------------------------------------------------------------------------*/
|
||
BOOL TUNE_SetOutStep(TUNE_ID_t id, float32 maxStep, float32 minStep);
|
||
|
||
/*-----------------------------------------------------------------------------------
|
||
函数原型: BOOL TUNE_SetCtrlType(TUNE_ID_t id, TUNE_CONTROLER_TYPE_t type)
|
||
功 能: 设置控制器类型
|
||
输入参数: id:自整定ID
|
||
type:
|
||
CONTROLER_TYPE_PI,PI控制器,积分项不使用
|
||
CONTROLER_TYPE_PID,PID控制器
|
||
输出参数: NA
|
||
返 回 值: true:设置成功,false:设置失败
|
||
-----------------------------------------------------------------------------------*/
|
||
extern BOOL TUNE_SetCtrlType(TUNE_ID_t id, TUNE_CONTROLER_TYPE_t type);
|
||
|
||
/*-----------------------------------------------------------------------------------
|
||
函数原型: float32 TUNE_GetKp(TUNE_ID_t id, float32 *pfactorP)
|
||
功 能: 获取整定后的P参数
|
||
输入参数: id:自整定ID
|
||
输出参数: pfactorP:整定后的P参数
|
||
返 回 值: true:获取成功,否则失败
|
||
-----------------------------------------------------------------------------------*/
|
||
extern float32 TUNE_GetKp(TUNE_ID_t id, float32 *pfactorP);
|
||
|
||
/*-----------------------------------------------------------------------------------
|
||
函数原型: float32 TUNE_GetKp(TUNE_ID_t id)
|
||
功 能: 获取整定后的I参数
|
||
输入参数: id:自整定ID
|
||
输出参数: pfactorI:整定后的I参数
|
||
返 回 值: true:获取成功,否则失败
|
||
-----------------------------------------------------------------------------------*/
|
||
extern float32 TUNE_GetKi(TUNE_ID_t id, float32 *pfactorI);
|
||
|
||
/*-----------------------------------------------------------------------------------
|
||
函数原型: float32 TUNE_GetKp(TUNE_ID_t id)
|
||
功 能: 获取整定后的D参数
|
||
输入参数: id:自整定ID
|
||
输出参数: pfactorD:整定后的D参数
|
||
返 回 值: true:获取成功,否则失败
|
||
---------------------------------------------------------------------------------------*/
|
||
extern float32 TUNE_GetKd(TUNE_ID_t id, float32 *pfactorD);
|
||
|
||
/*-----------------------------------------------------------------------------------
|
||
函数原型: float32 TUNE_GetKp(TUNE_ID_t id)
|
||
功 能: 获取整定后的PID参数
|
||
输入参数: id:自整定ID
|
||
输出参数: NA
|
||
返 回 值: true:获取成功,否则失败
|
||
-----------------------------------------------------------------------------------*/
|
||
extern BOOL TUNE_GetPID(TUNE_ID_t id, float32 *paramP, float32 *paramI, float32 *paramD);
|
||
/*-----------------------------------------------------------------------------------
|
||
函数原型: float32 TUNE_GetStat(TUNE_ID_t id, TUNE_STAT_t *pStat)
|
||
功 能: 获取PID自整定状态
|
||
输入参数: id:自整定ID
|
||
输出参数: stat,自整定状态
|
||
返 回 值: true:获取成功,否则失败
|
||
-----------------------------------------------------------------------------------*/
|
||
extern BOOL TUNE_GetStat(TUNE_ID_t id, TUNE_STAT_t *pStat);
|
||
#endif /* __TUNE__H*/
|