typedef struct PID_zhs
{
double P,I,D;//P、I、D系数
float curError;//当前误差
float lastError;//上次误差
float preError;//上上次误差
double sumError;//积分项
float dError;//微分项
}PID_zhs;

//初始化结构体数据

void pid_zhs_init()
{
pid_v_zhs.P=0.0;//比例系数
pid_v_zhs.I=0.0;//积分系数
pid_v_zhs.D=0.0;//微分系数
pid_v_zhs.curError=0.0;//当前误差
pid_v_zhs.lastError=0.0;//上次误差
pid_v_zhs.preError=0.0;//上上次误差
pid_v_zhs.sumError=0.0;//积分项
pid_v_zhs.dError=0.0;//微分项
} void SpeedTitl_init()//云台动态值清空
{
int i; for(i=2;i<7;i++)
{
SpeedTitl[i]=0x00;
}
}
long Speed=0; void SpeedOut(void)
{
SpeedTitl_init();
float angle = Q_ANGLE.X;//Q_ANGLE.X为全局变量角度 由互补滤波函数求得 可在我相关博客中查阅 //位置式
pid_v_zhs.curError = angle;//比例项
pid_v_zhs.sumError+=pid_v_zhs.curError;//积分项
pid_v_zhs.dError = pid_v_zhs.curError - pid_v_zhs.lastError;//微分项
Speed = pid_v_zhs.curError * pid_v_zhs.P + pid_v_zhs.sumError * pid_v_zhs.I + pid_v_zhs.dError * pid_v_zhs.D;
pid_v_zhs.preError=pid_v_zhs.lastError;
pid_v_zhs.lastError=pid_v_zhs.curError; if(Speed < 0)
{
Speed=-Speed;
//俯仰向下控制:FF address 00 10 00 Vspeed checksum
SpeedTitl[3]=0x10;
}
//如果云台前倾 摄像头则应该向上运动
//向前倾时Q_ANGLE.X为正值
else if(Speed > 0)
{
//俯仰向上控制:FF address 00 08 00 Vspeed checksum
SpeedTitl[3]=0x08;
}
//云台水平 摄像头不需运动
else ; SpeedTitl[5]=Speed;
SpeedTitl[6]=SpeedTitl[3]+SpeedTitl[4]+SpeedTitl[5]+1; if(Speed>0)
{
Uart1_Send_Buf(SpeedTitl,7);//将云台转动方向速度发送至云台
} }

// 增量式未实践成功 不建议使用

    //增量式
pid_v_zhs.curError=angle;
Speed+=(pid_v_zhs.P * pid_v_zhs.curError - pid_v_zhs.I * pid_v_zhs.lastError + pid_v_zhs.D * pid_v_zhs.preError); pid_v_zhs.preError=pid_v_zhs.lastError;
pid_v_zhs.lastError=pid_v_zhs.curError;

PID控制示例C编程的更多相关文章

  1. PID控制最通俗的解释与PID参数的整定方法

    转自->这里 PID是比例.积分.微分的简称,PID控制的难点不是编程,而是控制器的参数整定.参数整定的关键是正确地理解各参数的物理意义,PID控制的原理可以用人对炉温的手动控制来理解.阅读本文 ...

  2. 转 C#实现PID控制的模拟测试和曲线绘图

    C#实现PID控制的模拟测试和曲线绘图   本文分两部分,一部分是讲PID算法的实现,另一部分是讲如何用动态的曲线绘制出PID运算的结果. 首先,PID算法的理论模型请参考自动控制理论,最早出现的是模 ...

  3. PID控制及整定算法

    一.PID控制算法 PID是比例.积分.微分的简称,PID控制的难点不是编程,而是控制器的参数整定.参数整定的关键是正确地理解各参数的物理意义,PID 控制的原理可以用人对炉温的手动控制来理解.阅读本 ...

  4. 一文读懂PID控制算法(抛弃公式,从原理上真正理解PID控制)

      PID控制应该算是应用非常广泛的控制算法了.小到控制一个元件的温度,大到控制无人机的飞行姿态和飞行速度等等,都可以使用PID控制.这里我们从原理上来理解PID控制. PID(proportion ...

  5. 【iCore3应用开发平台】发布 iCore3 应用开发平台PID控制代码

    说明:1.本代码包包含FPGA和STM32F407两部分内容2.FPGA工程为出厂代码FPGA工程,版本为REV43.STM32F407为只含PID控制的ARM工程4.在使用风扇过程中,请勿将手伸入扇 ...

  6. 两轮自平衡小车双闭环PID控制设计

                                                                                            两轮自平衡小车的研究意义 ...

  7. 数字式PID控制的应用总结

    PID控制是一个二阶线性闭环控制器,通过调整比例.积分和微分三项参数,使得大多数的工业控制系统获得良好的闭环控制性能.PID控制优点:a. 技术成熟,b. 易被人们熟悉和掌握,c. 不需要建立数学模型 ...

  8. Struts2使用拦截器完成权限控制示例

    http://aumy2008.iteye.com/blog/146952 Struts2使用拦截器完成权限控制示例 示例需求:    要求用户登录,且必须为指定用户名才可以查看系统中某个视图资源:否 ...

  9. PID控制学习笔记(二)

    不管是基本的PID控制还是变形的PID控制算法,其核心都是对输入信号(设定值信号.测量信号或者偏差信号等)做基本的比例.积分.微分运算,最终提供给被控过程良好的调节信号. 在过程控制仪表,特别是在数字 ...

随机推荐

  1. 四大组件之BroadcastReceiver基础

    1. 系统广播 1.1 动态注册   (1)创建自定义接收器类继承自BroadcaseReceiver,实现onReceive()方法,对接收到的广播的逻辑处理就是写在这个函数中的.   (2)实例化 ...

  2. SpringMVC 框架系列之组件概述与配置详解

    在上一篇文章 SpringMVC 框架系列之初识与入门实例 的实例中,我们已经知道,SpringMVC 框架是一个 web 层的框架,本篇文章就详细解释一下 SpringMVC 框架具体文件的配置以及 ...

  3. Xcode 9.0 新增功能大全

    Xcode是用于为Apple TV,Apple Watch,iPad,iPhone和Mac创建应用程序的完整开发人员工具集.Xcode开发环境采用tvOS SDK,watchOS SDK,iOS SD ...

  4. A brief introduction to weakly supervised learning(简要介绍弱监督学习)

    by 南大周志华 摘要 监督学习技术通过学习大量训练数据来构建预测模型,其中每个训练样本都有其对应的真值输出.尽管现有的技术已经取得了巨大的成功,但值得注意的是,由于数据标注过程的高成本,很多任务很难 ...

  5. java容器类2:Map及HashMap深入解读

    Java的编程过程中经常会和Map打交道,现在我们来一起了解一下Map的底层实现,其中的思想结构对我们平时接口设计和编程也有一定借鉴作用.(以下接口分析都是以jdk1.8源码为参考依据) 1. Map ...

  6. Linux shell 脚本(一)

    一.初识脚本 shell:一类介于系统内核与用户之间的解释程序.脚本:一类使用特定语言,按预设顺序执行的文件批处理.宏.解释型程序创建shell脚本:理清任务过程--整理执行语句--完善文件结构1.任 ...

  7. Pazera Free Audio Extractor 中文版 - 轻松将视频背景音乐/对话音频提取出来的免费软件

    这个软件是用来提取视频中的音频的,方便快捷.但是有一个问题,就是如果我提取的视频的名字中有不支持的字符(比如泰文)的时候,那么这个就提取不出来.所以如果名字中有不支持的字符的时候就要先改一个名字,然后 ...

  8. JDK1.8源码(三)——java.lang.String 类

    String 类也是java.lang 包下的一个类,算是日常编码中最常用的一个类了,那么本篇博客就来详细的介绍 String 类. 1.String 类的定义 public final class ...

  9. 写了个批量查询qs的软件

    因为需要,自己写了个批量查询qs的小软件.从网站中抓出需要的数据,格式化显示: 对字符串进行检测处理,先用Replace函数去掉字符串的空格,再用正则表达式匹配,返回匹配的字符串,如果没有匹配,则返回 ...

  10. 分享python分析wave, pcm音频文件

    最近研究的,我用的是python3.3, 用matplotlib画图, 下面代码演示分析pcm文件,如果是wave文件,把wave的文件头去掉就是pcm文件了. 代码如下 # -*- coding:u ...