找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2440|回复: 2
收起左侧

Arduino通用PID函数

[复制链接]
ID:891812 发表于 2021-9-11 17:51 | 显示全部楼层 |阅读模式
void setup() {




}


void loop() {




}
/********************************************************************
  函 数 名:void Init_PID_uint(PID_uint *p)
  功    能:初始化PID参数
  说    明:调用本函数之前,应该先对Kp,Ti,Td做设置        ,简化了公式
  入口参数:PID单元的参数结构体 地址
  返 回 值:无
***********************************************************************/
void Init_PID_uint(PID_Uint *p)
{
  p->k1 = (p->Kp) + (p->Kp) * 1024 / (p->Ti) + (p->Kp) * (p->Td) / 1024;
  p->k2 = (p->Kp) + 2 * (p->Kp) * (p->Td) / 1024;
  p->k3 = (p->Kp) * (p->Td) / 1024;
}
/********************************************************************
  函 数 名:void reset_Uk(PID_Uint *p)
  功    能:初始化U_kk,ekk,ekkk
  说    明:在初始化时调用,改变PID参数时有可能需要调用
  入口参数:PID单元的参数结构体 地址
  返 回 值:无
***********************************************************************/
void reset_Uk(PID_Uint *p)
{
  p->U_kk = 0;
  p->ekk = 0;
  p->ekkk = 0;
}
/********************************************************************
  函 数 名:int PID_commen(int set,int jiance,PID_Uint *p)
  功    能:通用PID函数
  说    明:求任意单个PID的控制量
  入口参数:期望值,实测值,PID单元结构体
  返 回 值:PID控制量
***********************************************************************/
int PID_common(int set, int jiance, PID_Uint *p)
{
  int ek, U_k = 0;
  ek = jiance - set;
  if ((ek > (p->Un)) || (ek < -(p->Un)))         //积分不灵敏区
    U_k = (p->U_kk) + (p->k1) * ek -
          (p->k2) * (p->ekk) + (p->k3) * (p->ekkk);
  p->U_kk = U_k;
  p->ekkk = p->ekk;
  p->ekk = ek;
  if (U_k > (p->Ur))                 //限制最大输出量,
    U_k = p->Ur;
  if (U_k < -(p->Ur))
    U_k = -(p->Ur);
  return U_k / 1024;
}

回复

使用道具 举报

ID:141072 发表于 2021-10-25 10:54 | 显示全部楼层
这个不错,可用于小车
回复

使用道具 举报

ID:979200 发表于 2021-11-8 17:35 | 显示全部楼层
有自整定函数吗?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表