PID控制示例C编程
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编程的更多相关文章
- PID控制最通俗的解释与PID参数的整定方法
转自->这里 PID是比例.积分.微分的简称,PID控制的难点不是编程,而是控制器的参数整定.参数整定的关键是正确地理解各参数的物理意义,PID控制的原理可以用人对炉温的手动控制来理解.阅读本文 ...
- 转 C#实现PID控制的模拟测试和曲线绘图
C#实现PID控制的模拟测试和曲线绘图 本文分两部分,一部分是讲PID算法的实现,另一部分是讲如何用动态的曲线绘制出PID运算的结果. 首先,PID算法的理论模型请参考自动控制理论,最早出现的是模 ...
- PID控制及整定算法
一.PID控制算法 PID是比例.积分.微分的简称,PID控制的难点不是编程,而是控制器的参数整定.参数整定的关键是正确地理解各参数的物理意义,PID 控制的原理可以用人对炉温的手动控制来理解.阅读本 ...
- 一文读懂PID控制算法(抛弃公式,从原理上真正理解PID控制)
PID控制应该算是应用非常广泛的控制算法了.小到控制一个元件的温度,大到控制无人机的飞行姿态和飞行速度等等,都可以使用PID控制.这里我们从原理上来理解PID控制. PID(proportion ...
- 【iCore3应用开发平台】发布 iCore3 应用开发平台PID控制代码
说明:1.本代码包包含FPGA和STM32F407两部分内容2.FPGA工程为出厂代码FPGA工程,版本为REV43.STM32F407为只含PID控制的ARM工程4.在使用风扇过程中,请勿将手伸入扇 ...
- 两轮自平衡小车双闭环PID控制设计
两轮自平衡小车的研究意义 ...
- 数字式PID控制的应用总结
PID控制是一个二阶线性闭环控制器,通过调整比例.积分和微分三项参数,使得大多数的工业控制系统获得良好的闭环控制性能.PID控制优点:a. 技术成熟,b. 易被人们熟悉和掌握,c. 不需要建立数学模型 ...
- Struts2使用拦截器完成权限控制示例
http://aumy2008.iteye.com/blog/146952 Struts2使用拦截器完成权限控制示例 示例需求: 要求用户登录,且必须为指定用户名才可以查看系统中某个视图资源:否 ...
- PID控制学习笔记(二)
不管是基本的PID控制还是变形的PID控制算法,其核心都是对输入信号(设定值信号.测量信号或者偏差信号等)做基本的比例.积分.微分运算,最终提供给被控过程良好的调节信号. 在过程控制仪表,特别是在数字 ...
随机推荐
- 【BZOJ1499】瑰丽华尔兹(动态规划)
[BZOJ1499]瑰丽华尔兹(动态规划) 题面 BZOJ 题解 先写部分分 设\(f[t][i][j]\)表示当前在\(t\)时刻,位置在\(i,j\)时走的最多的步数 这样子每一步要么停要么走 时 ...
- Luogu P1860 新魔法药水
题目大意 具体题面及输入格式戳我! 商店里有\(N\)种药水,每种药水都有一个售价和回收价. 小\(S\) 攒了\(V\)元钱,还会\(M\)种魔法,可以把一些药水合成另一种药水. 他在第一天可以购买 ...
- js监听input输入框值的实时变化实例
情景:监听input输入框值的实时变化实例 解决方法:1.在元素上同时绑定oninput和onporpertychanger事件 实例:<script type="text/JavaS ...
- javaScript数组操作整理
一.js数组 1.创建数组: var arr = new Array();//创建没有元素空数组 var arr1 = new Array("value1","valeu ...
- java中阻止类的继承
1.使用final来修饰类 final表示这个类是继承树的末端,不能被继承. 2.将类的构造方法声明为private的,再提供一个static的方法来返回一个类的对象. JAVA语言要求继承时必须在构 ...
- MarkDown 的使用学习
以下都是MarkDown常用的语法以及效果图: ### 生成目录 [TOC] ### 标题 标题的标签采用#加文本的形式,几个星就代表几级标题 在#后加空格 # 一级标题 ## 二级标题 ... # ...
- emacs在windows下打开报错原因
最开始实在是想不通,最开始我明明就能正常使用,后来发现不能用了,过了几天才回过神来,我路径中有中文,换了一个没有中文的路径后打开正常了.太低级的错误了嘛,却那么难发现. 这些数字就是识别不出来我的中文 ...
- WordPress添加个性化的博客宠物的方法
在很多的网站上都看见过这种效果,于是自己也想试试.看见我网站上的小宠物了吗,就是这种效果. 不多说,方法如下: 工具: 下载地址:http://yunpan.cn/cFUmZB8WWthty 访问密码 ...
- 谁能用通俗的语言解释一下什么是 RPC 框架?
转载自知乎:https://www.zhihu.com/question/25536695 知乎上很多问题的答案还是很好的,R大就经常在上面回答问题 关于RPC你的题目是RPC框架,首先了解什么叫RP ...
- Asp.Net Core 2.0 项目实战(10) 基于cookie登录授权认证并实现前台会员、后台管理员同时登录
1.登录的实现 登录功能实现起来有哪些常用的方式,大家首先想到的肯定是cookie或session或cookie+session,当然还有其他模式,今天主要探讨一下在Asp.net core 2.0下 ...