程序:

#include <stdio.h>
/*-----------------------------------------------定义结构体*/
typedef struct                   
{
    float Kp;          //比例常数
    float Ki;          //积分常数
    float Kd;          //微分常数
    float KiSec_Inner; //积分区间内边界
    float KiSec_Width; //积分区间宽度
    float err;         //本次误差
    float err_last;    //上次误差
    float PIDI;        //累积误差
    float PID_Out;     //输出量
} MyPID;
/*-----------------------------------------------初始化结构体*/
MyPID nowPID = { 0.5,//P 比例
                  10,//I 积分
                   0,//D 微分
                   0,0,0,0,0,0 };//初始化PID结构体
/*-----------------------------------------------在PID函数里调用结构体*/
float PID_Controller(MyPID* PID, float set_Aim, float now_Aim)
{
    if (set_Aim != 0)//如果目标为0,则不计算
    {
        PID->err = set_Aim - now_Aim;//计算误差

PID->PID_Out = PID->Kp * PID->err                  //比例
            + PID->Kd * (PID->err - PID->err_last) //微分
            + PID->Ki * PID->PIDI;                //积分

PID->err_last = PID->err;

if ((PID->err < -PID->KiSec_Inner && PID->err >= -PID->KiSec_Inner - PID->KiSec_Width)
            || (PID->err > PID->KiSec_Inner && PID->err <= PID->KiSec_Inner + PID->KiSec_Width)) //在积分带内才进行积分
        {
            PID->PIDI += PID->err;//积分环节
        }
        else
        {
            PID->PIDI = 0;
        }
    }
    else
    {
        PID->PIDI = 0;
        PID->err = 0;
        PID->err_last = 0;
        PID->PID_Out = 0;
    }

return PID->PID_Out;
}
/*-----------------------------------------------在主函数里调用PID函数*/
int main(void)
{
    int output=0;
    output=PID_Controller(&nowPID,  100, 80);
    printf("Output is %.2d\n",output);
    return 0;
}

学习C语言第七天——结构体相关推荐

  1. 零基础入门学习C语言011讲:结构体与共用体(4)链表

    链 表 什么是链表? 链表是一种常见的重要的数据结构,是动态地进行存储分配的一种结构. 链表的组成: 头指针:存放一个地址,该地址指向第一个元素 结点:用户需要的实际数据和链接节点的指针 我们尝试根据 ...

  2. OpenGL ES着色器语言之语句和结构体(官方文档第六章)内建变量(官方文档第七、八章)...

    OpenGL ES着色器语言之语句和结构体(官方文档第六章) OpenGL ES着色器语言的程序块基本构成如下: 语句和声明 函数定义 选择(if-else) 迭代(for, while, do-wh ...

  3. Nwafu-Oj-1444 Problem l C语言实习题七——2.结构体数组的定义与引用

    问题 : C语言实习题七--2.结构体数组的定义与引用 时间限制: 1 Sec  内存限制: 128 MB 提交: 4459  解决: 2011 [提交][状态][讨论版] 题目描述 定义一个职工结构 ...

  4. go var type 互转_Go语言学习笔记(第九章) 结构体

    Go语言基础之结构体 Go语言中没有"类"的概念,也不支持"类"的继承等面向对象的概念.Go 通过类型别名(alias types)和结构体的形式支持用户自定义 ...

  5. C++入门基础教程(一):C语言的指针与结构体到底怎么用?

    目录 一.前言 二.指针 2.1 指针与地址 2.2 指针与函数参数 2.3 指针与数组 2.3.1 指针与一维数组 2.3.2 指针与二维数组 2.4 字符指针与函数 2.5 指针数组以及指向指针的 ...

  6. C语言自定义变量类型——结构体详解

    文章目录 前言 为什么要学习结构体 什么是结构体 一.结构体:struct 1.结构体类型的声明 (1)结构体的基础知识 (2)结构体的声明 (3)特殊的声明 2.结构体的自引用 3.结构体变量的定义 ...

  7. Go 语言编程 — 高级数据类型 — 结构体

    目录 文章目录 目录 结构体 访问结构体成员 向函数传递结构体 结构体指针 结构体标签(Struct Tag) 结构体 Golang 中,结构体是由一系列具有相同类型或不同类型的数据构成的数据集合.与 ...

  8. C语言定义了一个结构体怎么分配内存?C\C++中结构体变量与结构体指针内存分配问题?

    C语言定义了一个结构体怎么分配内存?C\C++中结构体变量与结构体指针内存分配问题? 问题1:结构体指针最开始怎么分配内存?用sizeof()是不能确定大小的. 问题2:给结构体变量分配之后,是否还要 ...

  9. Windows进程与线程学习笔记(一)—— 进程结构体

    Windows进程与线程学习笔记(一)-- 进程结构体 进程结构体 EPROCESS +0x000 Pcb : _KPROCESS +0x1b0 Peb : Ptr32 _PEB 练习 解题步骤 第一 ...

  10. c语言程序设计实验8,C语言程序设计实验八结构体.doc

    C语言程序设计实验八结构体 C语言程序设计实验八:结构体 请求用户输入若干个学生的基本情况,其中包括每位学生的学号.姓名和两门课(C语言.数学)的成绩.然后用下面的格式输出学生的成绩列表. 格式描述如 ...

最新文章

  1. memcache nginx
  2. python bottle框架 重定向_Python的web框架bottle静态文件的路径
  3. python内存池机制_看过来啦!教你用Python进行内存管理
  4. Highcharts 宽度溢出容器
  5. 文档在线编辑组件的发展回顾与开发集成选择问题
  6. 根据XPATH去查看修改xml文件节点的内容
  7. HTTP协议请求类型响应简介
  8. mysql重点知识提取
  9. android读取xml文件来实现省份,城市,区的选择
  10. sap abap开发从入门到精通_给你的ABAP对象打上标签(Tag)
  11. PS将红底证件照改为白底
  12. 解决Perhaps JAVA_HOME does not point to the JDK.
  13. python的os库——批量修改文件名称
  14. 积分上限函数的导数例题 笔记
  15. app开发大致流程介绍(给非专业人士通俗易懂的明白):
  16. Word文档中批量修改英文、中文或数字等的字体和格式的方法2
  17. 基于Python的冬奥会领域问答机器人设计
  18. 什么是真正的架构设计?某厂十年Java经验让我总结出了这些,不愧是我
  19. 分布式存储系统 Ceph 介绍与环境部署
  20. wetool个人版_wetoo群发wetool与企业-购买

热门文章

  1. 心知天气html,esp8266初级入门实用教程一之访问心知天气读取实时天气数据
  2. day01语法、变量、标识符、强制转换笔记
  3. java stream流处理
  4. Python3 sorted自定义排序
  5. sql查询表名、列名、列属性
  6. 【Python学习】sklearn层次聚类
  7. 苹果cookie是打开还是关闭_关闭手机广告的几个操作
  8. 基于 WebGL 3D 的 HTML5档案馆可视化管理系统
  9. 微信开发errcode:40125
  10. 一元三次方程重根判别式_一元三次方程的求根公式